summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gbp/scripts/dch.py15
-rw-r--r--tests/03_test_dch_guess_version.py50
2 files changed, 58 insertions, 7 deletions
diff --git a/gbp/scripts/dch.py b/gbp/scripts/dch.py
index 2d4a8ed4..2ee988d8 100644
--- a/gbp/scripts/dch.py
+++ b/gbp/scripts/dch.py
@@ -106,15 +106,16 @@ def guess_version_from_upstream(repo, upstream_tag_format, cp):
"""
Guess the version based on the latest version on the upstream branch
"""
- pattern = upstream_tag_format.replace('%(version)s', '*')
+ pattern = upstream_tag_format % dict(version='*')
try:
tag = repo.find_tag('HEAD', pattern=pattern)
- upstream = repo.tag_to_version(tag, upstream_tag_format)
- if upstream:
- gbp.log.debug("Found upstream version %s." % upstream)
- new_version = "%s-1" % upstream
- if compare_versions(upstream, cp.version) > 0:
- return new_version
+ version = repo.tag_to_version(tag, upstream_tag_format)
+ if version:
+ gbp.log.debug("Found upstream version %s." % version)
+ if cp.has_epoch():
+ version = "%s:%s" % (cp.epoch, version)
+ if compare_versions(version, cp.version) > 0:
+ return "%s-1" % version
except GitRepositoryError:
gbp.log.debug("No tag found matching pattern %s." % pattern)
return None
diff --git a/tests/03_test_dch_guess_version.py b/tests/03_test_dch_guess_version.py
new file mode 100644
index 00000000..10343074
--- /dev/null
+++ b/tests/03_test_dch_guess_version.py
@@ -0,0 +1,50 @@
+import unittest
+
+from gbp.scripts import dch
+from gbp.errors import GbpError
+from gbp.deb.changelog import ChangeLog
+from gbp.deb.git import DebianGitRepository
+
+class MockGitRepository(object):
+ def __init__(self, upstream_tag):
+ self.upstream_tag = upstream_tag
+
+ def find_tag(self, branch, pattern):
+ return self.upstream_tag
+
+ def tag_to_version(self, tag, format):
+ return DebianGitRepository.tag_to_version(tag, format)
+
+
+class MockedChangeLog(ChangeLog):
+ contents = """foo (%s) experimental; urgency=low
+
+ * a important change
+
+ -- Debian Maintainer <maint@debian.org> Sat, 01 Jan 2012 00:00:00 +0100"""
+
+ def __init__(self, version):
+ ChangeLog.__init__(self, contents=self.contents % version)
+
+
+class TestGuessVersionFromUpstream(unittest.TestCase):
+ """Dest guess_version_from_upstream"""
+ def test_guess_no_epoch(self):
+ """Guess the new version from the upstream tag"""
+ repo = MockGitRepository(upstream_tag='upstream/1.1')
+ cp = MockedChangeLog('1.0-1')
+ guessed = dch.guess_version_from_upstream(repo,
+ 'upstream/%(version)s',
+ cp)
+ self.assertEqual('1.1-1', guessed)
+
+ def test_guess_epoch(self):
+ """Check if we picked up the epoch correctly (#652366)"""
+ repo = MockGitRepository(upstream_tag='upstream/1.1')
+ cp = MockedChangeLog('1:1.0-1')
+ guessed = dch.guess_version_from_upstream(repo,
+ 'upstream/%(version)s',
+ cp)
+ self.assertEqual('1:1.1-1', guessed)
+
+