commit:     f371f1804c5d2d263ca78aa79c3feed1bc5831ae
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sun Oct  3 17:48:48 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Oct  3 19:30:33 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=f371f180

prepare_build_dirs: handle copytree FileExistsError

Bug: https://bugs.gentoo.org/815871
Reviewed-by: Michał Górny <mgorny <AT> gentoo.org>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/package/ebuild/prepare_build_dirs.py | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/lib/portage/package/ebuild/prepare_build_dirs.py 
b/lib/portage/package/ebuild/prepare_build_dirs.py
index 41de1a3a9..410c7e4ae 100644
--- a/lib/portage/package/ebuild/prepare_build_dirs.py
+++ b/lib/portage/package/ebuild/prepare_build_dirs.py
@@ -477,13 +477,21 @@ def _ensure_log_subdirs(logdir, subdir):
         ensure_dirs(current, uid=uid, gid=gid, mode=grp_mode, mask=0)
 
 
+def _copytree(src, dst, **kwargs):
+    try:
+        shutil.copytree(src, dst, **kwargs)
+    except FileExistsError:
+        shutil.rmtree(dst)
+        shutil.copytree(src, dst, **kwargs)
+
+
 def _prepare_fake_filesdir(settings):
     real_filesdir = settings["O"] + "/files"
     filesdir = settings["FILESDIR"]
 
     # Copy files from real directory to ebuild directory (without metadata).
     if os.path.isdir(real_filesdir):
-        shutil.copytree(real_filesdir, filesdir, copy_function=copyfile)
+        _copytree(real_filesdir, filesdir, copy_function=copyfile)
         apply_recursive_permissions(
             filesdir,
             uid=portage_uid,

Reply via email to