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)

Reply via email to