From f3c52f0bc6869e92ff888387fed3c95048f77eda Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 12 Feb 2009 03:53:07 +0000 Subject: Inside portage.fetch(), check for the case where FETCOMMAND creates a directory where a file is expected. This can happen if FETCHCOMMAND erroneously contains wget's -P option where it should instead have -O, as reported in bug #258433, comment #16. svn path=/main/trunk/; revision=12601 --- pym/portage/__init__.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'pym') diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 3c4ceb819..de36e060b 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -3816,6 +3816,14 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks", pass if mystat is not None: + if stat.S_ISDIR(mystat.st_mode): + portage.util.writemsg_level( + ("!!! Unable to fetch file since " + \ + "a directory is in the way: \n" + \ + "!!! %s\n") % myfile_path, + level=logging.ERROR, noiselevel=-1) + return 0 + if mystat.st_size == 0: if distdir_writable: try: @@ -4065,9 +4073,11 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks", #resume mode: writemsg(">>> Resuming download...\n") locfetch=resumecommand + command_var = resumecommand_var else: #normal mode: locfetch=fetchcommand + command_var = fetchcommand_var writemsg_stdout(">>> Downloading '%s'\n" % \ re.sub(r'//(.+):.+@(.+)/',r'//\1:*password*@\2/', loc)) variables = { @@ -4115,6 +4125,25 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks", del e fetched = 0 else: + + if stat.S_ISDIR(mystat.st_mode): + # This can happen if FETCHCOMMAND erroneously + # contains wget's -P option where it should + # instead have -O. + portage.util.writemsg_level( + ("!!! The command specified in the " + \ + "%s variable appears to have\n!!! " + \ + "created a directory instead of a " + \ + "normal file.\n") % command_var, + level=logging.ERROR, noiselevel=-1) + portage.util.writemsg_level( + "!!! Refer to the make.conf(5) " + \ + "man page for information about how " + \ + "to\n!!! correctly specify " + \ + "FETCHCOMMAND and RESUMECOMMAND.\n", + level=logging.ERROR, noiselevel=-1) + return 0 + # no exception? file exists. let digestcheck() report # an appropriately for size or checksum errors -- cgit v1.2.3-1-g7c22