2017-07-17 3 views
0

J'ai le code suivant où je veux pousser les changements dans ma branche à gerrit en utilisant GitpYthon.Poussez refs/for/master et change-id en utilisant Gitpython

repo_path_new = repo_path+repo_name 
repo_obj = Repo(repo_path_new) 
os.chdir(repo_path_new) 
repo_obj.git.add(A=True) 
if commit_command_line(commit_message, repo_obj, repo_name): 
    repo_obj.git.push("origin", "HEAD:refs/for/master") 

Il ajoute et engage le fichier (s), mais quand je veux pousser refs/pour/maître je reçois un problème:

remote: Processing changes: refs: 1, done 
remote: ERROR: [0f7c907] missing Change-Id in commit message footer 
remote: 
remote: Hint: To automatically insert Change-Id, install the hook: 
remote: gitdir=$(git rev-parse --git-dir); scp -p -P port 
[email protected]:hooks/commit-msg ${gitdir}/hooks/ 
remote: And then amend the commit: 
remote: git commit --amend 
remote: 
To ssh://url:port/repo-name 
! [remote rejected] HEAD -> refs/for/master ([0f7c907] missing Change-Id in commit message footer) 
error: failed to push some refs to 'ssh://url:port/repo-name'' 

Prenez note que je suis dans le clonée repo. Bien sûr, je peux installer le git hook change-id manuellement dans git bash. Mais comme cela est supposé être fait automatiquement, je veux savoir s'il existe un moyen de le faire via gitpython.

Répondre

0

Avez-vous cloné manuellement le référentiel ou l'a-t-il été via gitpython? Notez que vous n'avez besoin d'installer le hook commit-msg qu'une seule fois (la première fois que vous clonez le référentiel), après quoi toutes les validations auront automatiquement le Change-Id.

Si vous accédez Gerrit via SSH run:

$ gitdir=$(git rev-parse --git-dir); scp -p -P 29418 GERRIT-SERVER:hooks/commit-msg ${gitdir}/hooks 

Si vous accédez Gerrit throught HTTPS Run:

$ gitdir=$(git rev-parse --git-dir); curl --create-dirs -Lo ${gitdir}/hooks/commit-msg https://GERRIT-SERVER/tools/hooks/commit-msg 

Vous pouvez l'exécuter après que vous cloner manuellement le référentiel ou vous pouvez ajouter à le gitpython.

+0

J'ai manuellement cloné le référentiel. Quand j'installe comme vous l'avez dit, cela fonctionne, mais comme ce script sera exécuté dans Go cd (tout comme Jenkins), il n'y a aucun moyen de dire que le hook commit-msg existe. Dans mon code j'appelle là la première option que vous m'avez donnée et elle échoue sur gitdir (ne peut pas le trouver). – user535081

+0

Pouvez-vous configurer go-cd pour qu'il exécute un script bash (avec les commandes d'installation du commit-msg) juste après le clonage du dépôt et avant l'exécution du script gitpython? –