[ostree] Initialize empty repo
Make sure the directory exists before calling Koji (because otherwise the mounting will fail). Update the runroot script to initialize the repo when there are no files in the target destination. Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
This commit is contained in:
parent
4e3d87e658
commit
12652ad1fa
@ -31,7 +31,7 @@ def make_log_file(log_dir, filename):
|
||||
def init_ostree_repo(repo, log_dir=None):
|
||||
"""If the ostree repo does not exist, initialize it."""
|
||||
log_file = make_log_file(log_dir, 'init-ostree-repo')
|
||||
if not os.path.isdir(repo):
|
||||
if not os.path.isdir(repo) or not os.listdir(repo):
|
||||
ensure_dir(repo)
|
||||
shortcuts.run(['ostree', 'init', '--repo={}'.format(repo), '--mode=archive-z2'],
|
||||
show_cmd=True, stdout=True, logfile=log_file)
|
||||
|
@ -55,6 +55,10 @@ class OSTreeThread(WorkerThread):
|
||||
self._clone_repo(repodir, config['config_url'], config.get('config_branch', 'master'))
|
||||
self._tweak_mirrorlist(repodir, source_repo)
|
||||
|
||||
# Ensure target directory exists, otherwise Koji task will fail to
|
||||
# mount it.
|
||||
util.makedirs(config['ostree_repo'])
|
||||
|
||||
self._run_ostree_cmd(compose, variant, arch, config, repodir)
|
||||
|
||||
self.pool.log_info('[DONE ] %s' % msg)
|
||||
|
@ -74,6 +74,10 @@ class OSTreePhaseTest(helpers.PungiTestCase):
|
||||
|
||||
class OSTreeThreadTest(helpers.PungiTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(OSTreeThreadTest, self).setUp()
|
||||
self.repo = os.path.join(self.topdir, 'place/for/atomic')
|
||||
|
||||
def _dummy_config_repo(self, scm_dict, target, logger=None):
|
||||
helpers.touch(os.path.join(target, 'fedora-atomic-docker-host.json'))
|
||||
helpers.touch(os.path.join(target, 'fedora-rawhide.repo'),
|
||||
@ -101,7 +105,7 @@ class OSTreeThreadTest(helpers.PungiTestCase):
|
||||
'config_url': 'https://git.fedorahosted.org/git/fedora-atomic.git',
|
||||
'config_branch': 'f24',
|
||||
'treefile': 'fedora-atomic-docker-host.json',
|
||||
'ostree_repo': '/other/place/for/atomic'
|
||||
'ostree_repo': self.repo
|
||||
}
|
||||
koji = KojiWrapper.return_value
|
||||
koji.run_runroot_cmd.return_value = {
|
||||
@ -124,8 +128,8 @@ class OSTreeThreadTest(helpers.PungiTestCase):
|
||||
'--log-dir={}/logs/x86_64/ostree'.format(self.topdir),
|
||||
'--treefile={}/fedora-atomic-docker-host.json'.format(
|
||||
self.topdir + '/work/ostree/config_repo'),
|
||||
'/other/place/for/atomic'],
|
||||
channel=None, mounts=[self.topdir, '/other/place/for/atomic'],
|
||||
self.repo],
|
||||
channel=None, mounts=[self.topdir, self.repo],
|
||||
packages=['pungi', 'ostree', 'rpm-ostree'],
|
||||
task_id=True, use_shell=True)])
|
||||
self.assertEqual(koji.run_runroot_cmd.call_args_list,
|
||||
@ -141,6 +145,7 @@ class OSTreeThreadTest(helpers.PungiTestCase):
|
||||
with open(self.topdir + '/work/ostree/config_repo/fedora-23.repo') as f:
|
||||
self.assertIn('baseurl=http://example.com/Everything/x86_64/os'.format(self.topdir),
|
||||
f.read())
|
||||
self.assertTrue(os.path.isdir(self.repo))
|
||||
|
||||
@mock.patch('pungi.wrappers.scm.get_dir_from_scm')
|
||||
@mock.patch('pungi.wrappers.kojiwrapper.KojiWrapper')
|
||||
@ -160,7 +165,7 @@ class OSTreeThreadTest(helpers.PungiTestCase):
|
||||
'config_url': 'https://git.fedorahosted.org/git/fedora-atomic.git',
|
||||
'config_branch': 'f24',
|
||||
'treefile': 'fedora-atomic-docker-host.json',
|
||||
'ostree_repo': '/other/place/for/atomic'
|
||||
'ostree_repo': self.repo,
|
||||
}
|
||||
koji = KojiWrapper.return_value
|
||||
koji.run_runroot_cmd.return_value = {
|
||||
@ -197,7 +202,7 @@ class OSTreeThreadTest(helpers.PungiTestCase):
|
||||
'config_url': 'https://git.fedorahosted.org/git/fedora-atomic.git',
|
||||
'config_branch': 'f24',
|
||||
'treefile': 'fedora-atomic-docker-host.json',
|
||||
'ostree_repo': '/other/place/for/atomic'
|
||||
'ostree_repo': self.repo,
|
||||
}
|
||||
koji = KojiWrapper.return_value
|
||||
koji.run_runroot_cmd.side_effect = helpers.boom
|
||||
|
@ -36,6 +36,46 @@ class OstreeScriptTest(helpers.PungiTestCase):
|
||||
self.topdir + '/fedora-atomic-docker-host.json'],
|
||||
logfile=self.topdir + '/logs/Atomic/create-ostree-repo.log', show_cmd=True, stdout=True)])
|
||||
|
||||
@mock.patch('kobo.shortcuts.run')
|
||||
def test_run_on_existing_empty_dir(self, run):
|
||||
repo = os.path.join(self.topdir, 'atomic')
|
||||
|
||||
os.mkdir(repo)
|
||||
|
||||
ostree.main([
|
||||
'--log-dir={}'.format(os.path.join(self.topdir, 'logs', 'Atomic')),
|
||||
'--treefile={}/fedora-atomic-docker-host.json'.format(self.topdir),
|
||||
repo,
|
||||
])
|
||||
|
||||
self.maxDiff = None
|
||||
self.assertItemsEqual(
|
||||
run.call_args_list,
|
||||
[mock.call(['ostree', 'init', '--repo={}'.format(repo), '--mode=archive-z2'],
|
||||
logfile=self.topdir + '/logs/Atomic/init-ostree-repo.log', show_cmd=True, stdout=True),
|
||||
mock.call(['rpm-ostree', 'compose', 'tree', '--repo={}'.format(repo),
|
||||
self.topdir + '/fedora-atomic-docker-host.json'],
|
||||
logfile=self.topdir + '/logs/Atomic/create-ostree-repo.log', show_cmd=True, stdout=True)])
|
||||
|
||||
@mock.patch('kobo.shortcuts.run')
|
||||
def test_run_on_initialized_repo(self, run):
|
||||
repo = os.path.join(self.topdir, 'atomic')
|
||||
|
||||
helpers.touch(os.path.join(repo, 'initialized'))
|
||||
|
||||
ostree.main([
|
||||
'--log-dir={}'.format(os.path.join(self.topdir, 'logs', 'Atomic')),
|
||||
'--treefile={}/fedora-atomic-docker-host.json'.format(self.topdir),
|
||||
repo,
|
||||
])
|
||||
|
||||
self.maxDiff = None
|
||||
self.assertItemsEqual(
|
||||
run.call_args_list,
|
||||
[mock.call(['rpm-ostree', 'compose', 'tree', '--repo={}'.format(repo),
|
||||
self.topdir + '/fedora-atomic-docker-host.json'],
|
||||
logfile=self.topdir + '/logs/Atomic/create-ostree-repo.log', show_cmd=True, stdout=True)])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
Loading…
Reference in New Issue
Block a user