From a52b59a080c17e03e0e42da1e6e60ce5a39a10b5 Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Sep 22 2023 07:25:31 +0000 Subject: [PATCH 1/2] Raise an error on missing build directory Related: https://pagure.io/koji/issue/3908 --- diff --git a/kojihub/kojihub.py b/kojihub/kojihub.py index 20e72fb..867a307 100644 --- a/kojihub/kojihub.py +++ b/kojihub/kojihub.py @@ -5899,6 +5899,9 @@ def _set_build_volume(binfo, volinfo, strict=True): if os.path.exists(olddir): newdir = koji.pathinfo.build(binfo) dir_moves.append([olddir, newdir]) + elif strict: + # Shouldn't ever happen + raise koji.GenericError(f"Build directory missing: {olddir}") for olddir, newdir in dir_moves: # Remove old symlink if copying to base volume if volinfo['name'] == 'DEFAULT' or volinfo['name'] is None: From ba073dea3982508d9292d3864630ae3b88f7ba0e Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Sep 22 2023 07:25:51 +0000 Subject: [PATCH 2/2] drop dir_moves var --- diff --git a/kojihub/kojihub.py b/kojihub/kojihub.py index 867a307..dc74adf 100644 --- a/kojihub/kojihub.py +++ b/kojihub/kojihub.py @@ -5891,24 +5891,21 @@ def _set_build_volume(binfo, volinfo, strict=True): raise koji.GenericError("Unexpected cross-volume content: %s" % checkdir) # First copy the build dir(s) - dir_moves = [] old_binfo = binfo.copy() binfo['volume_id'] = volinfo['id'] binfo['volume_name'] = volinfo['name'] olddir = koji.pathinfo.build(old_binfo) - if os.path.exists(olddir): - newdir = koji.pathinfo.build(binfo) - dir_moves.append([olddir, newdir]) - elif strict: - # Shouldn't ever happen + newdir = koji.pathinfo.build(binfo) + if not os.path.exists(olddir): raise koji.GenericError(f"Build directory missing: {olddir}") - for olddir, newdir in dir_moves: - # Remove old symlink if copying to base volume - if volinfo['name'] == 'DEFAULT' or volinfo['name'] is None: - if os.path.islink(newdir): - os.unlink(newdir) - koji.ensuredir(os.path.dirname(newdir)) - shutil.copytree(olddir, newdir, symlinks=True) + if not os.path.isdir(olddir): + raise koji.GenericError(f"Not a directory: {olddir}") + # Remove old symlink if copying to base volume + if volinfo['name'] == 'DEFAULT' or volinfo['name'] is None: + if os.path.islink(newdir): + os.unlink(newdir) + koji.ensuredir(os.path.dirname(newdir)) + shutil.copytree(olddir, newdir, symlinks=True) # Second, update the db koji.plugin.run_callbacks('preBuildStateChange', attribute='volume_id', @@ -5920,8 +5917,7 @@ def _set_build_volume(binfo, volinfo, strict=True): set_tag_update(tag['id'], 'VOLUME_CHANGE') # Third, delete the old content - for olddir, newdir in dir_moves: - koji.util.rmtree(olddir) + koji.util.rmtree(olddir) # Fourth, maintain a symlink if appropriate if volinfo['name'] and volinfo['name'] != 'DEFAULT':