Merge #125 [image-build] Stop creating wrong arch dirs
This commit is contained in:
commit
09aebd3db9
@ -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):
|
||||||
|
@ -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
|
||||||
|
@ -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):
|
||||||
|
Loading…
Reference in New Issue
Block a user