From 0e2a60dc182c15159110e996b370fe1640af0fa4 Mon Sep 17 00:00:00 2001 From: "lpsolit%gmail.com" <> Date: Wed, 18 Apr 2007 05:13:22 +0000 Subject: Bug 350112: Error about "data/bugzilla-update.xml" being unreadable - Patch by Frédéric Buclin r=kevin.benton r=mkanat a=LpSolit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bugzilla/Update.pm | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'Bugzilla/Update.pm') diff --git a/Bugzilla/Update.pm b/Bugzilla/Update.pm index e5d4f86f9..596290ab9 100644 --- a/Bugzilla/Update.pm +++ b/Bugzilla/Update.pm @@ -46,7 +46,9 @@ sub get_notifications { $can_alter = utime(undef, undef, $local_file); } if ($can_alter) { - _synchronize_data(); + my $error = _synchronize_data(); + # If an error is returned, leave now. + return $error if $error; } else { return {'error' => 'no_update', 'xml_file' => $local_file}; @@ -130,14 +132,22 @@ sub get_notifications { sub _synchronize_data { eval("require LWP::UserAgent"); - return if $@; + return {'error' => 'missing_package', 'package' => 'LWP::UserAgent'} if $@; my $local_file = bz_locations()->{'datadir'} . LOCAL_FILE; my $ua = LWP::UserAgent->new(); $ua->timeout(TIMEOUT); $ua->protocols_allowed(['http', 'https']); - $ua->env_proxy; + # If the URL of the proxy is given, use it, else get this information + # from the environment variable. + my $proxy_url = Bugzilla->params->{'proxy_url'}; + if ($proxy_url) { + $ua->proxy(['http', 'https'], $proxy_url); + } + else { + $ua->env_proxy; + } $ua->mirror(REMOTE_FILE, $local_file); # $ua->mirror() forces the modification time of the local XML file @@ -145,7 +155,19 @@ sub _synchronize_data { # So we have to update it manually to reflect that a newer version # of the file has effectively been requested. This will avoid # any new download for the next TIME_INTERVAL. - utime(undef, undef, $local_file); + if (-e $local_file) { + # Try to alter its last modification time. + my $can_alter = utime(undef, undef, $local_file); + # This error should never happen. + $can_alter || return {'error' => 'no_update', 'xml_file' => $local_file}; + } + else { + # We have been unable to download the file. + return {'error' => 'cannot_download', 'xml_file' => $local_file}; + } + + # Everything went well. + return 0; } sub _compare_versions { -- cgit v1.2.3-24-g4f1b