|
|
@ -19,6 +19,8 @@ |
|
|
|
#include <apt-pkg/configuration.h> |
|
|
|
#include <apt-pkg/policy.h> |
|
|
|
#include <apt-pkg/pkgsystem.h> |
|
|
|
#include <apt-pkg/acquire-item.h> |
|
|
|
#include <apt-pkg/fileutl.h> |
|
|
|
|
|
|
|
#include <apti18n.h> |
|
|
|
/*}}}*/ |
|
|
@ -107,6 +109,73 @@ bool pkgCacheFile::Open(OpProgress &Progress,bool WithLock) |
|
|
|
} |
|
|
|
/*}}}*/ |
|
|
|
|
|
|
|
// CacheFile::ListUpdate - update the cache files /*{{{*/
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
/* This is a simple wrapper to update the cache. it will fetch stuff
|
|
|
|
* from the network (or any other sources defined in sources.list) |
|
|
|
*/ |
|
|
|
bool pkgCacheFile::ListUpdate(pkgAcquireStatus &Stat, pkgSourceList &List) |
|
|
|
{ |
|
|
|
pkgAcquire Fetcher(&Stat); |
|
|
|
|
|
|
|
// Populate it with the source selection
|
|
|
|
if (List.GetIndexes(&Fetcher) == false) |
|
|
|
return false; |
|
|
|
|
|
|
|
// Run scripts
|
|
|
|
RunScripts("APT::Update::Pre-Invoke"); |
|
|
|
|
|
|
|
// Run it
|
|
|
|
if (Fetcher.Run() == pkgAcquire::Failed) |
|
|
|
return false; |
|
|
|
|
|
|
|
bool Failed = false; |
|
|
|
bool TransientNetworkFailure = false; |
|
|
|
for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); |
|
|
|
I != Fetcher.ItemsEnd(); I++) |
|
|
|
{ |
|
|
|
if ((*I)->Status == pkgAcquire::Item::StatDone) |
|
|
|
continue; |
|
|
|
|
|
|
|
(*I)->Finished(); |
|
|
|
|
|
|
|
fprintf(stderr,_("Failed to fetch %s %s\n"),(*I)->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
|
|
|
|
if (!TransientNetworkFailure && !Failed && |
|
|
|
(_config->FindB("APT::Get::List-Cleanup",true) == true || |
|
|
|
_config->FindB("APT::List-Cleanup",true) == true)) |
|
|
|
{ |
|
|
|
if (Fetcher.Clean(_config->FindDir("Dir::State::lists")) == false || |
|
|
|
Fetcher.Clean(_config->FindDir("Dir::State::lists") + "partial/") == false) |
|
|
|
// 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.")); |
|
|
|
|
|
|
|
|
|
|
|
// Run the scripts if all was fine
|
|
|
|
RunScripts("APT::Update::Post-Invoke"); |
|
|
|
return true; |
|
|
|
} |
|
|
|
/*}}}*/ |
|
|
|
|
|
|
|
// CacheFile::Close - close the cache files /*{{{*/
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
|
/* */ |
|
|
|