summaryrefslogtreecommitdiff
path: root/apt-pkg/update.cc
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-06-16 23:13:26 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2016-06-22 14:05:01 +0200
commit57f7fb6511fcc7c55ee7a88475d15385093c048e (patch)
treed9dc1fc96f1f4caeae9d61365eb2e1094ad2a8c4 /apt-pkg/update.cc
parentacd3891560a1a5c343ddbed184aad54049d36f16 (diff)
run update post-invokes even on (partial) failures
Unsecure repositories result in error messages by default which causes the acquire run to fail hard, but non-failing repositories are still updated just like in the slightly less hard-failures which got this behaviour in 35664152e47a1d4d712fd52e0f0a2dc8ed359d32.
Diffstat (limited to 'apt-pkg/update.cc')
-rw-r--r--apt-pkg/update.cc44
1 files changed, 25 insertions, 19 deletions
diff --git a/apt-pkg/update.cc b/apt-pkg/update.cc
index 0d901eab1..f7075c446 100644
--- a/apt-pkg/update.cc
+++ b/apt-pkg/update.cc
@@ -56,26 +56,38 @@ 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) {
- AllFailed = false;
- 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);
+ 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(),
@@ -83,15 +95,8 @@ bool AcquireUpdate(pkgAcquire &Fetcher, int const PulseInterval,
else
_error->Error(_("Failed to fetch %s %s"), descUri.c_str(),
(*I)->ErrorText.c_str());
- if ((*I)->Status == pkgAcquire::Item::StatTransientNetworkError)
- {
- TransientNetworkFailure = true;
- continue;
- }
-
- Failed = true;
}
-
+
// 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
@@ -106,13 +111,14 @@ bool AcquireUpdate(pkgAcquire &Fetcher, int const PulseInterval,
}
bool Res = true;
-
- if (TransientNetworkFailure == 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)
{