try to be more forgiving if unlinking fails, because we end up in an unknown
authorZac Medico <zmedico@gentoo.org>
Tue, 2 Mar 2010 20:12:24 +0000 (20:12 -0000)
committerZac Medico <zmedico@gentoo.org>
Tue, 2 Mar 2010 20:12:24 +0000 (20:12 -0000)
state if we die right away, as demonstrated by darkside
(branches/prefix r15337) (trunk r15338)

svn path=/main/branches/2.1.7/; revision=15566

pym/portage/dbapi/vartree.py

index 990c6e020ceba0b4131a048816a0cbaef55093fd..cd16a4bca19f062ebef3f0556dbe9d62b6934ee4 100644 (file)
@@ -1692,6 +1692,18 @@ class dblink(object):
                                                # suid/sgid files are rendered harmless.
                                                os.chmod(file_name, 0)
                                        os.unlink(file_name)
+                               except OSError as ose:
+                                       # If the chmod or unlink fails, you are in trouble.
+                                       # With Prefix this can be because the file is owned
+                                       # by someone else (a screwup by root?), on a normal
+                                       # system maybe filesystem corruption.  In any case,
+                                       # if we backtrace and die here, we leave the system
+                                       # in a totally undefined state, hence we just bleed
+                                       # like hell and continue to hopefully finish all our
+                                       # administrative and pkg_postinst stuff.
+                                       showMessage(colorize("WARN", _("WARNING:"))
+                                                       + " Could not chmod or unlink %s: %s\n" % (file_name, ose),
+                                                       level=logging.WARN, noiselevel=-1)
                                finally:
                                        if bsd_chflags and pflags != 0:
                                                # Restore the parent flags we saved before unlinking