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:43:07 +0000 (05:43 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 20 Jul 2007 05:43:07 +0000 (05:43 -0000)
svn path=/main/branches/2.1.2/; revision=7322

pym/portage.py

index 16607087eacfa1b8a74ccb17a8376b6e04538953..cde08aa7e26a695765ebbc0ffb81ea01b0a13d8e 100644 (file)
@@ -2729,7 +2729,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():
@@ -2778,7 +2778,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)