If the fetcher reported success and the file is too small, don't attempt to resume...
authorZac Medico <zmedico@gentoo.org>
Fri, 20 Jul 2007 05:40:42 +0000 (05:40 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 20 Jul 2007 05:40:42 +0000 (05:40 -0000)
svn path=/main/trunk/; revision=7321

pym/portage/__init__.py

index 9b7553cb38113d3a43cff1f34871d373c9c20369..7764dcbe168e56915aad2b278182965d1734bf92 100644 (file)
@@ -2840,7 +2840,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
                                                        "gid"    : portage_gid,
                                                        "groups" : userpriv_groups,
                                                        "umask"  : 002})
-
+                                       myret = -1
                                        try:
 
                                                if mysettings.selinux_enabled():
@@ -2889,7 +2889,15 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
                                                else:
                                                        # no exception?  file exists. let digestcheck() report
                                                        # an appropriately for size or checksum errors
-                                                       if (mystat[stat.ST_SIZE]<mydigests[myfile]["size"]):
+
+                                                       # If the fetcher reported success and the file is
+                                                       # too small, it's probably because the digest is
+                                                       # bad (upstream changed the distfile).  In this
+                                                       # case we don't want to attempt to resume. Show a
+                                                       # digest verification failure to that the user gets
+                                                       # a clue about what just happened.
+                                                       if myret != os.EX_OK and \
+                                                               mystat.st_size < mydigests[myfile]["size"]:
                                                                # Fetch failed... Try the next one... Kill 404 files though.
                                                                if (mystat[stat.ST_SIZE]<100000) and (len(myfile)>4) and not ((myfile[-5:]==".html") or (myfile[-4:]==".htm")):
                                                                        html404=re.compile("<title>.*(not found|404).*</title>",re.I|re.M)