From 7e64327d988011c202cf199ae0b8edf36c45030d Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Wed, 11 Mar 2009 06:32:27 +0000 Subject: [PATCH] When fetch() is called and there is an existing file with the wrong size that is smaller than PORTAGE_FETCH_RESUME_MIN_SIZE, rename the file instead of deleting it. This is more friendly for cases in which the user is attempting to regenerate the digest but has not used `ebuild --force foo.ebuild manifest` like they're supposed to. Thanks to Patrick Lauer for reporting. (trunk r12739) svn path=/main/branches/2.1.6/; revision=12988 --- pym/portage/__init__.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 4de1d0ad0..5b661ce24 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -3891,15 +3891,23 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks", elif distdir_writable: if mystat.st_size < fetch_resume_size and \ mystat.st_size < size: - writemsg((">>> Deleting distfile with size " + \ + # If the file already exists and the size does not + # match the existing digests, it may be that the + # user is attempting to update the digest. In this + # case, the digestgen() function will advise the + # user to use `ebuild --force foo.ebuild manifest` + # in order to force the old digests to be replaced. + # Since the user may want to keep this file, rename + # it instead of deleting it. + writemsg((">>> Renaming distfile with size " + \ "%d (smaller than " "PORTAGE_FETCH_RESU" + \ "ME_MIN_SIZE)\n") % mystat.st_size) - try: - os.unlink(myfile_path) - except OSError, e: - if e.errno != errno.ENOENT: - raise - del e + temp_filename = \ + _checksum_failure_temp_file( + mysettings["DISTDIR"], myfile) + writemsg_stdout("Refetching... " + \ + "File renamed to '%s'\n\n" % \ + temp_filename, noiselevel=-1) elif mystat.st_size >= size: temp_filename = \ _checksum_failure_temp_file( -- 2.26.2