Merge #125 [image-build] Stop creating wrong arch dirs

This commit is contained in:
Dennis Gilmore 2016-01-20 15:37:27 +00:00
commit 09aebd3db9
3 changed files with 19 additions and 16 deletions

View File

@ -515,7 +515,7 @@ class ComposePaths(object):
return os.path.join(path, filename) return os.path.join(path, filename)
def image_dir(self, variant, symlink_to=None, create_dir=True, relative=False): def image_dir(self, variant, symlink_to=None, relative=False):
""" """
The arch is listed as literal '%(arch)s' The arch is listed as literal '%(arch)s'
Examples: Examples:
@ -523,21 +523,18 @@ class ComposePaths(object):
None None
@param variant @param variant
@param symlink_to=None @param symlink_to=None
@param create_dir=True
@param relative=False @param relative=False
""" """
# skip optional and addons # skip optional and addons
if variant.type != "variant": if variant.type != "variant":
return None return None
path = os.path.join(self.topdir('%(arch)s', variant, create_dir=create_dir, relative=relative), path = os.path.join(self.topdir('%(arch)s', variant, create_dir=False, relative=relative),
"images") "images")
if symlink_to: if symlink_to:
topdir = self.compose.topdir.rstrip("/") + "/" topdir = self.compose.topdir.rstrip("/") + "/"
relative_dir = path[len(topdir):] relative_dir = path[len(topdir):]
target_dir = os.path.join(symlink_to, self.compose.compose_id, relative_dir) target_dir = os.path.join(symlink_to, self.compose.compose_id, relative_dir)
if create_dir and not relative:
makedirs(target_dir)
try: try:
os.symlink(target_dir, path) os.symlink(target_dir, path)
except OSError as ex: except OSError as ex:
@ -548,9 +545,6 @@ class ComposePaths(object):
raise RuntimeError(msg) raise RuntimeError(msg)
if os.path.abspath(os.readlink(path)) != target_dir: if os.path.abspath(os.readlink(path)) != target_dir:
raise RuntimeError(msg) raise RuntimeError(msg)
else:
if create_dir and not relative:
makedirs(path)
return path return path
def jigdo_dir(self, arch, variant, create_dir=True, relative=False): def jigdo_dir(self, arch, variant, create_dir=True, relative=False):

View File

@ -5,7 +5,7 @@ import os
import time import time
from kobo import shortcuts from kobo import shortcuts
from pungi.util import get_variant_data, resolve_git_url from pungi.util import get_variant_data, resolve_git_url, makedirs
from pungi.phases.base import PhaseBase from pungi.phases.base import PhaseBase
from pungi.linker import Linker from pungi.linker import Linker
from pungi.paths import translate_path from pungi.paths import translate_path
@ -44,7 +44,7 @@ class ImageBuildPhase(PhaseBase):
% (install_tree_from, variant.uid)) % (install_tree_from, variant.uid))
return translate_path( return translate_path(
self.compose, self.compose,
self.compose.paths.compose.os_tree('$arch', install_tree_source) self.compose.paths.compose.os_tree('$arch', install_tree_source, create_dir=False)
) )
def _get_repo(self, image_conf, variant): def _get_repo(self, image_conf, variant):
@ -66,8 +66,9 @@ class ImageBuildPhase(PhaseBase):
raise RuntimeError( raise RuntimeError(
'There is no variant %s to get repo from when building image for %s.' 'There is no variant %s to get repo from when building image for %s.'
% (extra, variant.uid)) % (extra, variant.uid))
repo.append(translate_path(self.compose, repo.append(translate_path(
self.compose.paths.compose.os_tree('$arch', v))) self.compose,
self.compose.paths.compose.os_tree('$arch', v, create_dir=False)))
return ",".join(repo) return ",".join(repo)
@ -117,7 +118,7 @@ class ImageBuildPhase(PhaseBase):
), ),
"image_dir": self.compose.paths.compose.image_dir(variant), "image_dir": self.compose.paths.compose.image_dir(variant),
"relative_image_dir": self.compose.paths.compose.image_dir( "relative_image_dir": self.compose.paths.compose.image_dir(
variant, create_dir=False, relative=True variant, relative=True
), ),
"link_type": self.compose.conf.get("link_type", "hardlink-or-copy") "link_type": self.compose.conf.get("link_type", "hardlink-or-copy")
} }
@ -204,6 +205,7 @@ class CreateImageBuildThread(WorkerThread):
linker = Linker(logger=compose._logger) linker = Linker(logger=compose._logger)
for image_info in image_infos: for image_info in image_infos:
image_dir = cmd["image_dir"] % {"arch": image_info['arch']} image_dir = cmd["image_dir"] % {"arch": image_info['arch']}
makedirs(image_dir)
relative_image_dir = cmd["relative_image_dir"] % {"arch": image_info['arch']} relative_image_dir = cmd["relative_image_dir"] % {"arch": image_info['arch']}
# let's not change filename of koji outputs # let's not change filename of koji outputs

View File

@ -31,10 +31,10 @@ class _DummyCompose(object):
compose=mock.Mock( compose=mock.Mock(
topdir=mock.Mock(return_value='/a/b'), topdir=mock.Mock(return_value='/a/b'),
os_tree=mock.Mock( os_tree=mock.Mock(
side_effect=lambda arch, variant: os.path.join('/ostree', arch, variant.uid) side_effect=lambda arch, variant, create_dir=False: os.path.join('/ostree', arch, variant.uid)
), ),
image_dir=mock.Mock( image_dir=mock.Mock(
side_effect=lambda variant, create_dir=False, relative=False: os.path.join( side_effect=lambda variant, relative=False: os.path.join(
'' if relative else '/', 'image_dir', variant.uid, '%(arch)s' '' if relative else '/', 'image_dir', variant.uid, '%(arch)s'
) )
) )
@ -287,7 +287,8 @@ class TestCreateImageBuildThread(unittest.TestCase):
@mock.patch('pungi.phases.image_build.KojiWrapper') @mock.patch('pungi.phases.image_build.KojiWrapper')
@mock.patch('pungi.phases.image_build.Linker') @mock.patch('pungi.phases.image_build.Linker')
def test_process(self, Linker, KojiWrapper): @mock.patch('pungi.phases.image_build.makedirs')
def test_process(self, makedirs, Linker, KojiWrapper):
compose = _DummyCompose({ compose = _DummyCompose({
'koji_profile': 'koji' 'koji_profile': 'koji'
}) })
@ -393,6 +394,12 @@ class TestCreateImageBuildThread(unittest.TestCase):
self.assertEqual(data['format'], image.format) self.assertEqual(data['format'], image.format)
self.assertEqual(data['type'], image.type) self.assertEqual(data['type'], image.type)
self.assertItemsEqual(makedirs.mock_calls,
[mock.call('/image_dir/Client/amd64'),
mock.call('/image_dir/Client/amd64'),
mock.call('/image_dir/Client/x86_64'),
mock.call('/image_dir/Client/x86_64')])
@mock.patch('pungi.phases.image_build.KojiWrapper') @mock.patch('pungi.phases.image_build.KojiWrapper')
@mock.patch('pungi.phases.image_build.Linker') @mock.patch('pungi.phases.image_build.Linker')
def test_process_handle_fail(self, Linker, KojiWrapper): def test_process_handle_fail(self, Linker, KojiWrapper):