From 05a6f850a9db30bf1bb4d92c866d615dc389e15a Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Tue, 22 May 2018 12:36:59 -0700 Subject: [PATCH] movefile: hardlink before rename (bug 626092) Since rename to a different parent directory confuses the kernels /proc/*/exe links, hardlink to the new directory before rename. Bug: https://bugs.gentoo.org/626092 --- pym/portage/util/movefile.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pym/portage/util/movefile.py b/pym/portage/util/movefile.py index 5477a669f3..8711707a19 100644 --- a/pym/portage/util/movefile.py +++ b/pym/portage/util/movefile.py @@ -255,7 +255,12 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None, if selinux_enabled: selinux.rename(src, dest) else: - os.rename(src, dest) + head, tail = os.path.split(dest) + hardlink_tmp = os.path.join(head, ".%s._portage_merge_.%s" % \ + (tail, os.getpid())) + os.link(src, hardlink_tmp) + os.rename(hardlink_tmp, dest) + os.unlink(src) renamefailed = 0 except OSError as e: if e.errno != errno.EXDEV: -- 2.13.6