diff --git a/hacking/titotest-centos-6.4/Dockerfile b/hacking/titotest-centos-6.4/Dockerfile index 7048be4..74be4c2 100644 --- a/hacking/titotest-centos-6.4/Dockerfile +++ b/hacking/titotest-centos-6.4/Dockerfile @@ -1,5 +1,5 @@ # https://index.docker.io/_/centos/ -FROM tianon/centos:6.4 +FROM centos:6.4 # http://jumanjiman.github.io/ MAINTAINER Paul Morgan diff --git a/src/tito/builder/main.py b/src/tito/builder/main.py index 8859c69..875d777 100644 --- a/src/tito/builder/main.py +++ b/src/tito/builder/main.py @@ -1018,5 +1018,19 @@ class GitAnnexBuilder(NoTgzBuilder): os.chdir(old_cwd) def cleanup(self): - run_command("git-annex lock --force") + if _lock_force_supported(_get_annex_version()): + run_command("git-annex lock --force") + else: + run_command("git-annex lock") super(GitAnnexBuilder, self).cleanup() + + def _get_annex_version(self): + # git-annex needs to support --force when locking files. + ga_version = run_command('git-annex version').split('\n') + if ga_version[0].startswith('git-annex version'): + ga_version[0].split()[-1] + else: + return 0 + + def _lock_force_supported(self, version): + return compare_version(version, '5.20131213') >= 0 diff --git a/src/tito/common.py b/src/tito/common.py index 9c7dbd6..2862e36 100644 --- a/src/tito/common.py +++ b/src/tito/common.py @@ -677,3 +677,13 @@ def find_wrote_in_rpmbuild_output(output): if not paths: error_out("Unable to locate 'Wrote: ' lines in rpmbuild output: '%s'" % output) return paths + + +def compare_version(version1, version2): + """ + Compare two version strings, returning negative if version1 is < version2, + zero when equal and positive when version1 > version2. + """ + def normalize(v): + return [int(x) for x in re.sub(r'(\.0+)*$', '', v).split(".")] + return cmp(normalize(version1), normalize(version2)) diff --git a/test/functional/build_gitannex_tests.py b/test/functional/build_gitannex_tests.py index 1da04ad..fd8bb06 100644 --- a/test/functional/build_gitannex_tests.py +++ b/test/functional/build_gitannex_tests.py @@ -43,13 +43,9 @@ class GitAnnexBuilderTests(TitoGitTestFixture): if sys.version[0:3] == '2.4': raise SkipTest('git-annex is not available in epel-5') - # git-annex needs to support --force when locking files. - # rpm query is sub-optimal, but older versions do not support `git-annex version'. - status, ga_version = getstatusoutput('rpm -q --qf=%{version} git-annex') + status, ga_version = getstatusoutput('rpm -q git-annex') if status != 0: raise SkipTest("git-annex is missing") - if ga_version < GIT_ANNEX_MINIMUM_VERSION: - raise SkipTest("git-annex '%s' is too old" % ga_version) # Setup test config: self.config = RawConfigParser() @@ -91,3 +87,13 @@ class GitAnnexBuilderTests(TitoGitTestFixture): "extsrc-0.0.2-1.*src.rpm")))) self.assertEquals(1, len(glob.glob(join(self.output_dir, 'noarch', "extsrc-0.0.2-1.*.noarch.rpm")))) + + def test_lock_force_supported(self): + tito('tag --debug --accept-auto-changelog') + builder = GitAnnexBuilder(PKG_NAME, None, self.output_dir, + self.config, {}, {}, **{'offline': True}) + + self.assertTrue(builder._lock_force_supported('5.20140107')) + self.assertTrue(builder._lock_force_supported('5.20131213')) + self.assertFalse(builder._lock_force_supported('5.20131127.1')) + self.assertFalse(builder._lock_force_supported('3.20120522')) diff --git a/test/unit/common-tests.py b/test/unit/common-tests.py index 5281ead..29dae5c 100644 --- a/test/unit/common-tests.py +++ b/test/unit/common-tests.py @@ -219,3 +219,21 @@ class ExtractBugzillasTest(unittest.TestCase): find_wrote_in_rpmbuild_output(output) common.error_out.assert_called_once_with("Unable to locate 'Wrote: ' lines in rpmbuild output: '%s'" % output) + + def test_compare_version(self): + self.assertEquals(0, compare_version("1", "1")) + self.assertTrue(compare_version("2.1", "2.2") < 0) + self.assertTrue(compare_version("3.0.4.10", "3.0.4.2") > 0) + self.assertTrue(compare_version("4.08", "4.08.01") < 0) + self.assertTrue(compare_version("3.2.1.9.8144", "3.2") > 0) + self.assertTrue(compare_version("3.2", "3.2.1.9.8144") < 0) + self.assertTrue(compare_version("1.2", "2.1") < 0) + self.assertTrue(compare_version("2.1", "1.2") > 0) + self.assertTrue(compare_version("1.0", "1.0.1") < 0) + self.assertTrue(compare_version("1.0.1", "1.0") > 0) + self.assertEquals(0, compare_version("5.6.7", "5.6.7")) + self.assertEquals(0, compare_version("1.01.1", "1.1.1")) + self.assertEquals(0, compare_version("1.1.1", "1.01.1")) + self.assertEquals(0, compare_version("1", "1.0")) + self.assertEquals(0, compare_version("1.0", "1")) + self.assertEquals(0, compare_version("1.0.2.0", "1.0.2"))