work around bug in TagReference.commit() if many tags target the same commit (fixes #9116)

This commit is contained in:
Benjamin Dauvergne 2015-11-26 14:31:48 +01:00
parent d95acfd61e
commit 8f491a8e34
1 changed files with 10 additions and 3 deletions

View File

@ -9,6 +9,13 @@ import git
from git.exc import GitCommandError
from git.objects.commit import Commit
def get_commit_from_tag(repo, tag_ref):
ref = repo.tags[tag_ref]
while ref.object.type == 'tag':
ref = ref.object
assert ref.object.type == 'commit'
return ref.object
def changelog_from_git(project, version_suffix, path,
repository='eobuilder',
maintainer_name='eobuilder',
@ -23,16 +30,16 @@ def changelog_from_git(project, version_suffix, path,
# no tag version is 0.0.<number of commits>
versions.append(('0.0.%d' % len(repo.head.log()), repo.head.commit))
else:
if repo.tags[last_tag].commit != repo.head.commit:
if get_commit_from_tag(repo, last_tag) != repo.head.commit:
versions.append((repo.git.describe(), repo.head.commit))
versions.append((last_tag, repo.tags[last_tag].commit))
versions.append((last_tag, get_commit_from_tag(repo, last_tag)))
while True:
try:
last_tag = repo.git.describe(last_tag+'~', abbrev=0)
except GitCommandError:
break
else:
versions.append((last_tag, repo.tags[last_tag].commit))
versions.append((last_tag, get_commit_from_tag(repo, last_tag)))
n = len(versions)
for i in range(n):
name, commit = versions[i]