Merge pull request #125 from domcleal/git-annex-el6

Support pre-5.20131213 versions of git-annex for EL6
This commit is contained in:
Devan Goodwin 2014-05-12 08:50:42 -03:00
commit b4c103ea4f
5 changed files with 55 additions and 7 deletions

View file

@ -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 <jumanjiman@gmail.com>

View file

@ -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

View file

@ -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))

View file

@ -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'))

View file

@ -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"))