diff --git a/mock/py/mockbuild/buildroot.py b/mock/py/mockbuild/buildroot.py index 8c34bb711..2cb3eaf5a 100644 --- a/mock/py/mockbuild/buildroot.py +++ b/mock/py/mockbuild/buildroot.py @@ -52,6 +52,7 @@ def wrapper(*args, **kwargs): class Buildroot(object): + # pylint: disable=too-many-public-methods,too-many-instance-attributes @traceLog() def __init__(self, config, uid_manager, state, plugins, bootstrap_buildroot=None, is_bootstrap=False): self.config = config @@ -213,13 +214,18 @@ def _setup_basedir(self): os.chmod(self.basedir, 0o775) @traceLog() - def _setup_result_dir(self): + def create_resultdir(self): + """ + (re)create self.resultdir directory with appropriate permissions + """ self._setup_basedir() with self.uid_manager: try: file_util.mkdirIfAbsent(self.resultdir) - except Error: - raise ResultDirNotAccessible(ResultDirNotAccessible.__doc__ % self.resultdir) + except Error as err: + raise ResultDirNotAccessible( + ResultDirNotAccessible.__doc__ % self.resultdir + ) from err @traceLog() @@ -300,7 +306,7 @@ def _init(self, prebuild): # intentionally we do not call bootstrap hook here - it does not have sense self._setup_nosync() self.chroot_was_initialized = self.chroot_is_initialized() - self._setup_result_dir() + self.create_resultdir() getLog().info("calling preinit hooks") self.plugins.call_hooks('preinit') # intentionally we do not call bootstrap hook here - it does not have sense @@ -629,7 +635,7 @@ def resetLogging(self, force=False): return self.logging_initialized = True - self._setup_result_dir() + self.create_resultdir() with self.uid_manager: # attach logs to log files. diff --git a/mock/py/mockbuild/plugins/chroot_scan.py b/mock/py/mockbuild/plugins/chroot_scan.py index 539c7d34d..56f729367 100644 --- a/mock/py/mockbuild/plugins/chroot_scan.py +++ b/mock/py/mockbuild/plugins/chroot_scan.py @@ -13,7 +13,7 @@ # our imports from mockbuild.trace_decorator import getLog, traceLog -from mockbuild import file_util, util +from mockbuild import util requires_api_version = "1.1" @@ -56,7 +56,7 @@ def __scanChroot(self): regexstr = "|".join(self.scan_opts['regexes']) regex = re.compile(regexstr) chroot = self.buildroot.make_chroot_path() - file_util.mkdirIfAbsent(self.resultdir) + self.buildroot.create_resultdir() count = 0 logger = getLog() logger.debug("chroot_scan: Starting scan of %s", chroot) diff --git a/releng/release-notes-next/unified-resultdir-preparation.bugfix b/releng/release-notes-next/unified-resultdir-preparation.bugfix new file mode 100644 index 000000000..0211f08b2 --- /dev/null +++ b/releng/release-notes-next/unified-resultdir-preparation.bugfix @@ -0,0 +1,5 @@ +Several internal code locations attempt to ensure that the result directory +exists, creating it if necessary. However, these locations handled it +inconsistently, sometimes neglecting to [change the ownership][issue#1467] of +the result directory. Now, all locations use a single method dedicated to +result directory preparation.