diff options
-rw-r--r-- | bitbake/lib/bb/fetch2/__init__.py | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index e8cea7feb4..dc074d5340 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/lib/bb/fetch2/__init__.py @@ -677,7 +677,8 @@ def verify_donestamp(ud, d, origud=None): # incorrect stamp file. logger.warn("Checksum mismatch for local file %s\n" "Cleaning and trying again." % ud.localpath) - rename_bad_checksum(ud, e.checksum) + if os.path.exists(ud.localpath): + rename_bad_checksum(ud, e.checksum) bb.utils.remove(ud.donestamp) return False @@ -698,11 +699,21 @@ def update_stamp(ud, d): # Errors aren't fatal here pass else: - checksums = verify_checksum(ud, d) - # Store the checksums for later re-verification against the recipe - with open(ud.donestamp, "wb") as cachefile: - p = pickle.Pickler(cachefile, pickle.HIGHEST_PROTOCOL) - p.dump(checksums) + try: + checksums = verify_checksum(ud, d) + # Store the checksums for later re-verification against the recipe + with open(ud.donestamp, "wb") as cachefile: + p = pickle.Pickler(cachefile, pickle.HIGHEST_PROTOCOL) + p.dump(checksums) + except ChecksumError as e: + # Checksums failed to verify, trigger re-download and remove the + # incorrect stamp file. + logger.warn("Checksum mismatch for local file %s\n" + "Cleaning and trying again." % ud.localpath) + if os.path.exists(ud.localpath): + rename_bad_checksum(ud, e.checksum) + bb.utils.remove(ud.donestamp) + raise def subprocess_setup(): # Python installs a SIGPIPE handler by default. This is usually not what @@ -973,7 +984,8 @@ def try_mirror_url(fetch, origud, ud, ld, check = False): if isinstance(e, ChecksumError): logger.warn("Mirror checksum failure for url %s (original url: %s)\nCleaning and trying again." % (ud.url, origud.url)) logger.warn(str(e)) - rename_bad_checksum(ud, e.checksum) + if os.path.exists(ud.localpath): + rename_bad_checksum(ud, e.checksum) elif isinstance(e, NoChecksumError): raise else: @@ -1583,7 +1595,8 @@ class Fetch(object): if isinstance(e, ChecksumError): logger.warn("Checksum failure encountered with download of %s - will attempt other sources if available" % u) logger.debug(1, str(e)) - rename_bad_checksum(ud, e.checksum) + if os.path.exists(ud.localpath): + rename_bad_checksum(ud, e.checksum) elif isinstance(e, NoChecksumError): raise else: |