diff options
author | Zac Medico <zmedico@gentoo.org> | 2009-03-11 06:32:27 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2009-03-11 06:32:27 +0000 |
commit | 7e64327d988011c202cf199ae0b8edf36c45030d (patch) | |
tree | 3b928dcb0f791d5936fff8be630005c6759f4856 | |
parent | 6d89add2d76e49b0e43543692db357c2e8e106a4 (diff) | |
download | portage-7e64327d988011c202cf199ae0b8edf36c45030d.tar.gz portage-7e64327d988011c202cf199ae0b8edf36c45030d.tar.bz2 portage-7e64327d988011c202cf199ae0b8edf36c45030d.zip |
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 <patrick@g.o> for reporting.
(trunk r12739)
svn path=/main/branches/2.1.6/; revision=12988
-rw-r--r-- | pym/portage/__init__.py | 22 |
1 files 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( |