2011-06-09 5 views
1

Je fais un crochet git post-commit pour poster mes messages de commit sur Twitter. J'ai mis en place le crochet sur le serveur, ce qui signifie qu'il ne fonctionne que lorsque j'appelle git push.Obtenir tous les commits en poussant vers le serveur

Pour interfacer avec git à partir de python, j'utilise GitPython. Dans mon code, j'utilise repo.head.commit.message pour obtenir le dernier message de validation. Ce qui signifie que si j'appuie sur plusieurs validations, la dernière sera la dernière.

C'est ce que j'ai jusqu'à présent.

class GITHelper: 
    "This class interacts with GIT for us" 
    def __init__(self, path): 
     repo = git.Repo(path) 
     headcommit = repo.head.commit 
     self.message = headcommit.message 
     self.author = headcommit.author.name 

Comment puis-je obtenir tous les validations à partir d'un push? Ou, comment puis-je obtenir le nombre de commits qui ont été poussés?

repo.iter_commits('master', max_count=5) peut obtenir autant de validations que je le souhaite, donc si je savais combien de validations il y avait, je pourrais l'utiliser.

EDIT: Je testais, et quand je lance git push, il semble que ce crochet obtient la tête de la dernière commit, pas celui que je viens poussais. Comment est-ce que je fais un crochet post-commit qui obtient les messages des commits que j'ai juste poussés au serveur?

EDIT 2: J'utilise actuellement le hook de mise à jour, pas le hook post-commit, est-ce le bon hook à utiliser sur le serveur?

+1

http://twitter.com/isnotrss –

Répondre

3

Les githooks docs disent:

The hook executes once for each ref to be updated, and takes three parameters: 
    - the name of the ref being updated, 
    - the old object name stored in the ref, 
    - and the new objectname to be stored in the ref. 

Donc, vérifiez les arguments obtient votre script, vous devez également obtenir la nouvelle référence, et vous pouvez comprendre les commits entre les anciens et les nouveaux refs. Si c'était un script shell, vous pouvez faire:

git log --oneline $oldRef..$newRef 
+0

Merci. Je suis encore un peu nouveau à git, donc je n'étais pas à 100% comment fonctionnent les hooks. Maintenant, pour voir si GitPython a un moyen d'obtenir les commits entre les 2 refs. –

Questions connexes