Получить все коммиты при нажатии на сервер - PullRequest
1 голос
/ 09 июня 2011

Я делаю git post-commit, чтобы публиковать свои коммит-сообщения в Twitter. Я настроил перехват на сервере, что означает, что он запускается только тогда, когда я звоню git push.

Для взаимодействия с git из python я использую GitPython . В моем коде я использую repo.head.commit.message, чтобы получить последнее сообщение о коммите. Это означает, что если я нажму несколько коммитов, он получит только последний.

Это то, что я имею до сих пор.

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

Как я могу получить все коммиты одним нажатием? Или, как я могу получить количество совершенных коммитов?

repo.iter_commits('master', max_count=5) может получить столько коммитов, сколько захочу, поэтому, если бы я знал, сколько было коммитов, я мог бы использовать это.

EDIT : я тестировал, и когда я запускаю git push, кажется, что этот хук получает голову от последнего коммита, а не от того, который я только что нажал. Как сделать хук после фиксации, который получает сообщения от коммитов, которые я только что отправил на сервер?

РЕДАКТИРОВАТЬ 2 : Я на самом деле использую ловушку обновления, а не ловушку после фиксации, это правильная ловушка для использования на сервере?

1 Ответ

3 голосов
/ 09 июня 2011

Документы githooks говорят:

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.

Итак, проверьте аргументы, которые получает ваш скрипт, вы также должны получить новый ref, и затем вы сможете выяснить коммиты между старым и новым ref. Если бы это был сценарий оболочки, вы могли бы сделать:

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