X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/3e68f7e41022790619c698a32390a5256fadba7c..77e274f5ad23d79294f28ecc9868fc6f534214a4:/apt-pkg/update.cc?ds=sidebyside diff --git a/apt-pkg/update.cc b/apt-pkg/update.cc index 2908a4820..f7075c446 100644 --- a/apt-pkg/update.cc +++ b/apt-pkg/update.cc @@ -11,7 +11,6 @@ #include #include -#include #include /*}}}*/ @@ -57,35 +56,47 @@ bool AcquireUpdate(pkgAcquire &Fetcher, int const PulseInterval, else res = Fetcher.Run(); - if (res == pkgAcquire::Failed) - return false; - - bool Failed = false; + bool const errorsWereReported = (res == pkgAcquire::Failed); + bool Failed = errorsWereReported; bool TransientNetworkFailure = false; + bool AllFailed = true; for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); I != Fetcher.ItemsEnd(); ++I) { - if ((*I)->Status == pkgAcquire::Item::StatDone) - continue; + switch ((*I)->Status) + { + case pkgAcquire::Item::StatDone: + AllFailed = false; + continue; + case pkgAcquire::Item::StatTransientNetworkError: + TransientNetworkFailure = true; + break; + case pkgAcquire::Item::StatIdle: + case pkgAcquire::Item::StatFetching: + case pkgAcquire::Item::StatError: + case pkgAcquire::Item::StatAuthError: + Failed = true; + break; + } (*I)->Finished(); + if (errorsWereReported) + continue; + ::URI uri((*I)->DescURI()); uri.User.clear(); uri.Password.clear(); - string descUri = string(uri); - _error->Warning(_("Failed to fetch %s %s\n"), descUri.c_str(), - (*I)->ErrorText.c_str()); - - if ((*I)->Status == pkgAcquire::Item::StatTransientNetworkError) - { - TransientNetworkFailure = true; - continue; - } - - Failed = true; + std::string const descUri = std::string(uri); + // Show an error for non-transient failures, otherwise only warn + if ((*I)->Status == pkgAcquire::Item::StatTransientNetworkError) + _error->Warning(_("Failed to fetch %s %s"), descUri.c_str(), + (*I)->ErrorText.c_str()); + else + _error->Error(_("Failed to fetch %s %s"), descUri.c_str(), + (*I)->ErrorText.c_str()); } - + // Clean out any old list files // Keep "APT::Get::List-Cleanup" name for compatibility, but // this is really a global option for the APT library now @@ -98,22 +109,25 @@ bool AcquireUpdate(pkgAcquire &Fetcher, int const PulseInterval, // something went wrong with the clean return false; } - - if (TransientNetworkFailure == true) - _error->Warning(_("Some index files failed to download. They have been ignored, or old ones used instead.")); - else if (Failed == true) - return _error->Error(_("Some index files failed to download. They have been ignored, or old ones used instead.")); + bool Res = true; + + if (errorsWereReported == true) + Res = false; + else if (TransientNetworkFailure == true) + Res = _error->Warning(_("Some index files failed to download. They have been ignored, or old ones used instead.")); + else if (Failed == true) + Res = _error->Error(_("Some index files failed to download. They have been ignored, or old ones used instead.")); // Run the success scripts if all was fine if (RunUpdateScripts == true) { - if(!TransientNetworkFailure && !Failed) + if(AllFailed == false) RunScripts("APT::Update::Post-Invoke-Success"); // Run the other scripts RunScripts("APT::Update::Post-Invoke"); } - return true; + return Res; } /*}}}*/