For bug #162923, when digest verification of a distfile fails, rename instead of...
authorZac Medico <zmedico@gentoo.org>
Mon, 30 Jul 2007 06:54:20 +0000 (06:54 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 30 Jul 2007 06:54:20 +0000 (06:54 -0000)
svn path=/main/branches/2.1.2.9/; revision=7502

pym/portage.py

index 3f21c75323f014881091c0f2400683f57a1c4e15..8f1a16957a2795c3c8ef02959d447f4c6bba1766 100644 (file)
@@ -2570,9 +2570,15 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
                                                                if reason[0] == "Insufficient data for checksum verification":
                                                                        return 0
                                                                if can_fetch and not restrict_fetch:
-                                                                       writemsg("Refetching...\n\n",
-                                                                               noiselevel=-1)
-                                                                       os.unlink(myfile_path)
+                                                                       from tempfile import mkstemp
+                                                                       fd, temp_filename = mkstemp("",
+                                                                               myfile + "._checksum_failure_.",
+                                                                               mysettings["DISTDIR"])
+                                                                       os.close(fd)
+                                                                       os.rename(myfile_path, temp_filename)
+                                                                       writemsg_stdout("Refetching... " + \
+                                                                               "File renamed to '%s'\n\n" % \
+                                                                               temp_filename, noiselevel=-1)
                                                        else:
                                                                eout = output.EOutput()
                                                                eout.quiet = \
@@ -2735,8 +2741,15 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
                                                                                (reason[1], reason[2]), noiselevel=-1)
                                                                        if reason[0] == "Insufficient data for checksum verification":
                                                                                return 0
-                                                                       writemsg("Removing corrupt distfile...\n", noiselevel=-1)
-                                                                       os.unlink(mysettings["DISTDIR"]+"/"+myfile)
+                                                                       from tempfile import mkstemp
+                                                                       fd, temp_filename = mkstemp("",
+                                                                               myfile + "._checksum_failure_.",
+                                                                               mysettings["DISTDIR"])
+                                                                       os.close(fd)
+                                                                       os.rename(myfile_path, temp_filename)
+                                                                       writemsg_stdout("Refetching... " + \
+                                                                               "File renamed to '%s'\n\n" % \
+                                                                               temp_filename, noiselevel=-1)
                                                                        fetched=0
                                                                else:
                                                                        eout = output.EOutput()