Adrian Schröter
6e55d7df19
- add new 'versionformat' option to determine how version is extracted via git show --pretty=... (and similar for svn / hg / bzr) - support caching of cloned repositories to speed up fetch from upstream - use mktemp -u because git/hg refuse to clone into an empty directory on SLES11 OBS-URL: https://build.opensuse.org/request/show/105386 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Tools/obs-service-tar_scm?expand=0&rev=33
186 lines
6.4 KiB
Python
186 lines
6.4 KiB
Python
#!/usr/bin/python
|
|
|
|
from pprint import pprint, pformat
|
|
|
|
from testassertions import TestAssertions
|
|
from testenv import TestEnvironment
|
|
from utils import mkfreshdir
|
|
|
|
class CommonTests(TestEnvironment, TestAssertions):
|
|
def basename(self, name='repo', version=None):
|
|
if version is None:
|
|
version = self.default_version()
|
|
return '%s-%s' % (name, version)
|
|
|
|
def test_plain(self):
|
|
self.tar_scm_std()
|
|
self.assertTarOnly(self.basename())
|
|
|
|
def test_exclude(self):
|
|
self.tar_scm_std('--exclude', '.' + self.scm)
|
|
self.assertTarOnly(self.basename())
|
|
|
|
def test_subdir(self):
|
|
self.tar_scm_std('--subdir', self.fixtures.subdir)
|
|
self.assertTarOnly(self.basename(), tarchecker=self.assertSubdirTar)
|
|
|
|
def test_history_depth_obsolete(self):
|
|
(stdout, stderr, ret) = self.tar_scm_std('--history-depth', '1')
|
|
self.assertRegexpMatches(stdout, 'obsolete')
|
|
# self.assertTarOnly(self.basename())
|
|
# self.assertRegexpMatches(self.scmlogs.read()[0], '^%s clone --depth=1')
|
|
|
|
# def test_history_depth_full(self):
|
|
# self.tar_scm_std('--history-depth', 'full')
|
|
# self.assertTarOnly(self.basename())
|
|
# self.assertRegexpMatches(self.scmlogs.read()[0], '^git clone --depth=999999+')
|
|
|
|
def test_filename(self):
|
|
name = 'myfilename'
|
|
self.tar_scm_std('--filename', name)
|
|
self.assertTarOnly(self.basename(name=name))
|
|
|
|
def test_version(self):
|
|
version = '0.5'
|
|
self.tar_scm_std('--version', version)
|
|
self.assertTarOnly(self.basename(version=version))
|
|
|
|
def test_filename_version(self):
|
|
filename = 'myfilename'
|
|
version = '0.6'
|
|
self.tar_scm_std('--filename', filename, '--version', version)
|
|
self.assertTarOnly(self.basename(filename, version))
|
|
|
|
def test_revision_nop(self):
|
|
self.tar_scm_std('--revision', self.rev(2))
|
|
th = self.assertTarOnly(self.basename())
|
|
self.assertTarMemberContains(th, self.basename() + '/a', '2')
|
|
|
|
def test_revision(self):
|
|
self._revision()
|
|
|
|
def test_revision_no_cache(self):
|
|
self._revision(use_cache=False)
|
|
|
|
def test_revision_subdir(self):
|
|
self._revision(use_subdir=True)
|
|
|
|
def test_revision_subdir_no_cache(self):
|
|
self._revision(use_cache=False, use_subdir=True)
|
|
|
|
def _revision(self, use_cache=True, use_subdir=False):
|
|
version = '3.0'
|
|
args_tag2 = [
|
|
'--version', version,
|
|
'--revision', self.rev(2),
|
|
]
|
|
if use_subdir:
|
|
args_tag2 += [ '--subdir', self.fixtures.subdir ]
|
|
self._sequential_calls_with_revision(
|
|
version,
|
|
[
|
|
(0, args_tag2, '2', False),
|
|
(0, args_tag2, '2', use_cache),
|
|
(2, args_tag2, '2', use_cache),
|
|
(0, args_tag2, '2', use_cache),
|
|
(2, args_tag2, '2', use_cache),
|
|
(0, args_tag2, '2', use_cache),
|
|
],
|
|
use_cache
|
|
)
|
|
|
|
def test_revision_master_alternating(self):
|
|
self._revision_master_alternating()
|
|
|
|
def test_revision_master_alternating_no_cache(self):
|
|
self._revision_master_alternating(use_cache=False)
|
|
|
|
def test_revision_master_alternating_subdir(self):
|
|
self._revision_master_alternating(use_subdir=True)
|
|
|
|
def test_revision_master_alternating_subdir_no_cache(self):
|
|
self._revision_master_alternating(use_cache=False, use_subdir=True)
|
|
|
|
def _revision_master_alternating(self, use_cache=True, use_subdir=False):
|
|
version = '4.0'
|
|
args_head = [
|
|
'--version', version,
|
|
]
|
|
if use_subdir:
|
|
args_head += [ '--subdir', self.fixtures.subdir ]
|
|
|
|
args_tag2 = args_head + [ '--revision', self.rev(2) ]
|
|
self._sequential_calls_with_revision(
|
|
version,
|
|
[
|
|
(0, args_tag2, '2', False),
|
|
(0, args_head, '2', use_cache),
|
|
(2, args_tag2, '2', use_cache),
|
|
(0, args_head, '4', use_cache),
|
|
(2, args_tag2, '2', use_cache),
|
|
(0, args_head, '6', use_cache),
|
|
(0, args_tag2, '2', use_cache),
|
|
],
|
|
use_cache
|
|
)
|
|
|
|
def _sequential_calls_with_revision(self, version, calls, use_cache=True):
|
|
mkfreshdir(self.pkgdir)
|
|
basename = self.basename(version = version)
|
|
|
|
if not use_cache:
|
|
self.disableCache()
|
|
|
|
while calls:
|
|
new_commits, args, expected, expect_cache_hit = calls.pop(0)
|
|
if new_commits > 0:
|
|
self.fixtures.create_commits(new_commits)
|
|
self.scmlogs.annotate("about to run: " + pformat(args))
|
|
self.scmlogs.annotate("expecting tar to contain: " + expected)
|
|
self.tar_scm_std(*args)
|
|
logpath = self.scmlogs.current_log_path
|
|
loglines = self.scmlogs.read()
|
|
if expect_cache_hit:
|
|
self.assertRanUpdate(logpath, loglines)
|
|
else:
|
|
self.assertRanInitialClone(logpath, loglines)
|
|
|
|
if self.fixtures.subdir in args:
|
|
th = self.assertTarOnly(basename, tarchecker=self.assertSubdirTar)
|
|
tarent = 'b'
|
|
else:
|
|
th = self.assertTarOnly(basename)
|
|
tarent = 'a'
|
|
self.assertTarMemberContains(th, basename + '/' + tarent, expected)
|
|
|
|
self.scmlogs.next()
|
|
self.postRun()
|
|
|
|
def test_switch_revision_and_subdir(self):
|
|
self._switch_revision_and_subdir()
|
|
|
|
def test_switch_revision_and_subdir_no_cache(self):
|
|
self._switch_revision_and_subdir(use_cache=False)
|
|
|
|
def _switch_revision_and_subdir(self, use_cache=True):
|
|
version = '5.0'
|
|
args = [
|
|
'--version', version,
|
|
]
|
|
args_subdir = args+ [ '--subdir', self.fixtures.subdir ]
|
|
|
|
args_tag2 = args + [ '--revision', self.rev(2) ]
|
|
self._sequential_calls_with_revision(
|
|
version,
|
|
[
|
|
(0, args_tag2, '2', False),
|
|
(0, args_subdir, '2', use_cache and self.scm != 'svn'),
|
|
(2, args_tag2, '2', use_cache),
|
|
(0, args_subdir, '4', use_cache),
|
|
(2, args_tag2, '2', use_cache),
|
|
(0, args_subdir, '6', use_cache),
|
|
(0, args_tag2, '2', use_cache),
|
|
],
|
|
use_cache
|
|
)
|