When digest verification of a distfile fails, rename instead of unlinking it in case...
authorZac Medico <zmedico@gentoo.org>
Sat, 21 Jul 2007 00:21:24 +0000 (00:21 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 21 Jul 2007 00:21:24 +0000 (00:21 -0000)
svn path=/main/trunk/; revision=7325

pym/portage/__init__.py

index 7764dcbe168e56915aad2b278182965d1734bf92..4494caeb2319182be08ecda16a732cfa0e5b8e96 100644 (file)
@@ -2765,9 +2765,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 = portage.output.EOutput()
                                                                eout.quiet = \
@@ -2930,8 +2936,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 = portage.output.EOutput()