저는 푸시에 포함 된 커밋에 대한 정보를 수집하는 Python과 Git-Python을 사용하여 git post-receive 후크를 작성한 다음 버그 추적기와 IM에 요약 정보를 업데이트합니다. 푸시가 지점을 만드는 경우 (즉, 수신 후 fromrev
매개 변수가 모두 0 임) 문제가 발생하며 해당 분기에 대한 여러 커밋에 걸쳐 있습니다. 나는 부모 목록을 torev
커밋에서 뒤로 걷고 있는데, 어떤 커밋이 브랜치의 첫 번째인지, 즉 언제 멈출지를 어떻게 알 수 있는지 파악할 수 없습니다.GitPython을 사용하여 지점에서 첫 번째 커밋 찾기.
나는 나에게 정확히 this-branch
에서 커밋의 목록없이 다른 사람을 줄 것이다
git rev-list this-branch ^not-that-branch ^master
을 할 수 있습니다. 나는 Commit.iter_parents
메쏘드를 사용하여 이것을 복제하려고 시도했다.이 메쏘드는 git-rev-list와 같은 매개 변수를 취하는 것으로 문서화되어 있지만, 나는 볼 수있는 한 위치 매개 변수를 좋아하지 않는다. 그리고 키워드 집합을 찾을 수 없다. params는 작동합니다.
덜 리치 (Dulwich)의 문서를 읽었지만 Git-Python과 다른 점이 있는지 여부는 분명하지 않았습니다.
내 (단순화 된) 코드는 다음과 같습니다. 푸시 다음은 현재 첫 번째 커밋에 보이는 새로운 지점을 시작하면 중지 :
난 그냥 dulwich와 함께 놀았import git
repo = git.Repo('.')
for line in input:
(fromrev, torev, refname) = line.rstrip().split(' ')
commit = repo.commit(torev)
maxdepth = 25 # just so we don't go too far back in the tree
if fromrev == ('0' * 40):
maxdepth = 1
depth = 0
while depth < maxdepth:
if commit.hexsha == fromrev:
# Reached the start of the push
break
print '{sha} by {name}: {msg}'.format(
sha = commit.hexsha[:7], user = commit.author.name, commit.summary)
commit = commit.parents[0]
depth += 1
감사합니다 (이 큰 저장소에 대한 O (n)의 메모리를 사용하는 해결하기 위해 반복자를 사용합니다) - 덜 리치 (Dulwich)에서 워커 객체를 보지 못했고 그 중 하나를 사용하여 멋지게 할 수있는 것 같습니다. 곧 일부 코드를 게시합니다. – julianz