summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Walker (Daviey) <email@daviey.com>2014-12-16 16:07:58 +0000
committerRobert Collins <rbtcollins@hp.com>2015-04-17 10:06:51 +1200
commit1b4a8bd554a65384638f06d556d8d0063800c080 (patch)
treea5461376e47191525ed5b3a86900b07fc092dbe3
parentda0f226cc461bb6555f459e3fd7b4af51ca7a63a (diff)
downloadpbr-1b4a8bd554a65384638f06d556d8d0063800c080.tar.gz
Ignore non-release related tags
Previously we were accepting many string tags to be release tags for versions. This change enforces tags that are considered to start with a digit, and ignore if not. Change-Id: Ib1ca0eda62e375cdee70d35ed7c82a544082ef0a Closes-bug: 1403124 Signed-off-by: Dave Walker (Daviey) <email@daviey.com>
-rw-r--r--pbr/tests/test_packaging.py7
-rw-r--r--pbr/tests/test_version.py4
-rw-r--r--pbr/version.py3
3 files changed, 14 insertions, 0 deletions
diff --git a/pbr/tests/test_packaging.py b/pbr/tests/test_packaging.py
index eac76b2..7924fa9 100644
--- a/pbr/tests/test_packaging.py
+++ b/pbr/tests/test_packaging.py
@@ -427,6 +427,13 @@ class TestVersions(base.BaseTestCase):
self.repo.tag('badver4')
version = packaging._get_version_from_git()
self.assertThat(version, matchers.StartsWith('1.2.4.0a2.dev1'))
+ # Non-release related tags are ignored.
+ self.repo.commit()
+ self.repo.tag('2')
+ self.repo.commit()
+ self.repo.tag('non-release-tag/2014.12.16-1')
+ version = packaging._get_version_from_git()
+ self.assertThat(version, matchers.StartsWith('2.0.1.dev1'))
def test_valid_tag_honoured(self):
# Fix for bug 1370608 - we converted any target into a 'dev version'
diff --git a/pbr/tests/test_version.py b/pbr/tests/test_version.py
index e2824bb..cd092a0 100644
--- a/pbr/tests/test_version.py
+++ b/pbr/tests/test_version.py
@@ -115,6 +115,10 @@ class TestSemanticVersion(base.BaseTestCase):
parsed = from_pip_string('2014.2.b2')
self.assertEqual(expected, parsed)
+ def test_from_pip_string_non_digit_start(self):
+ self.assertRaises(ValueError, from_pip_string,
+ 'non-release-tag/2014.12.16-1')
+
def test_final_version(self):
semver = version.SemanticVersion(1, 2, 3)
self.assertEqual((1, 2, 3, 'final', 0), semver.version_tuple())
diff --git a/pbr/version.py b/pbr/version.py
index e297da7..d3fe401 100644
--- a/pbr/version.py
+++ b/pbr/version.py
@@ -142,6 +142,9 @@ class SemanticVersion(object):
ever released - we're treating that as a critical bug that we ever
made them and have stopped doing that.
"""
+ # Versions need to start numerically, ignore if not
+ if not version_string[:1].isdigit():
+ raise ValueError("Invalid version %r" % version_string)
input_components = version_string.split('.')
# decimals first (keep pre-release and dev/hashes to the right)
components = [c for c in input_components if c.isdigit()]