commit: c446394e5b0e71a611ed5cfa0fb923e05802ef5f Author: Zac Medico <zmedico <AT> gentoo <DOT> org> AuthorDate: Tue Oct 6 01:21:58 2020 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Tue Oct 6 01:35:09 2020 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=c446394e
movefile: remove dest_tmp_bytes on failure Reported-by: Boleyn Su <boleyn.su <AT> gmail.com> Bug: https://bugs.gentoo.org/745588 Signed-off-by: Zac Medico <zmedico <AT> gentoo.org> lib/portage/util/movefile.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/portage/util/movefile.py b/lib/portage/util/movefile.py index a251d369d..9c6054209 100644 --- a/lib/portage/util/movefile.py +++ b/lib/portage/util/movefile.py @@ -262,6 +262,7 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None, dest_tmp = dest + "#new" dest_tmp_bytes = _unicode_encode(dest_tmp, encoding=encoding, errors='strict') + success = False try: # For safety copy then move it over. _copyfile(src_bytes, dest_tmp_bytes) _apply_stat(sstat, dest_tmp_bytes) @@ -281,13 +282,18 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None, raise _rename(dest_tmp_bytes, dest_bytes) _os.unlink(src_bytes) - except SystemExit as e: - raise + success = True except Exception as e: writemsg("!!! %s\n" % _('copy %(src)s -> %(dest)s failed.') % {"src": src, "dest": dest}, noiselevel=-1) writemsg("!!! %s\n" % (e,), noiselevel=-1) return None + finally: + if not success: + try: + _os.unlink(dest_tmp_bytes) + except OSError: + pass else: #we don't yet handle special, so we need to fall back to /bin/mv a = spawn([MOVE_BINARY, '-f', src, dest], env=os.environ)
