From 9c1a530af1edfd787ff8ade710f688d7a9d89167 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Mon, 2 Mar 2009 21:50:22 +0000 Subject: 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. svn path=/main/trunk/; revision=12739 --- 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 7fc3160d9..68f2dbbbd 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -3901,15 +3901,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( -- cgit v1.2.3-1-g7c22