Browse Source
This moves the ListUpdate/AquireUpdate out of the "catch-all" algorithm.{cc,h} file into its own update.{cc,h}debian/1.8.y

6 changed files with 151 additions and 106 deletions
@ -0,0 +1,126 @@ |
|||
|
|||
// Include Files /*{{{*/
|
|||
#include <config.h> |
|||
|
|||
#include <apt-pkg/algorithms.h> |
|||
#include <apt-pkg/update.h> |
|||
#include <apt-pkg/error.h> |
|||
#include <apt-pkg/configuration.h> |
|||
#include <apt-pkg/version.h> |
|||
#include <apt-pkg/sptr.h> |
|||
#include <apt-pkg/acquire-item.h> |
|||
#include <apt-pkg/edsp.h> |
|||
#include <apt-pkg/sourcelist.h> |
|||
#include <apt-pkg/fileutl.h> |
|||
#include <apt-pkg/progress.h> |
|||
|
|||
#include <sys/types.h> |
|||
#include <cstdlib> |
|||
#include <algorithm> |
|||
#include <iostream> |
|||
#include <stdio.h> |
|||
|
|||
#include <apti18n.h> |
|||
/*}}}*/ |
|||
|
|||
using namespace std; |
|||
|
|||
// ListUpdate - construct Fetcher and 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 ListUpdate(pkgAcquireStatus &Stat, |
|||
pkgSourceList &List, |
|||
int PulseInterval) |
|||
{ |
|||
pkgAcquire Fetcher; |
|||
if (Fetcher.Setup(&Stat, _config->FindDir("Dir::State::Lists")) == false) |
|||
return false; |
|||
|
|||
// Populate it with the source selection
|
|||
if (List.GetIndexes(&Fetcher) == false) |
|||
return false; |
|||
|
|||
return AcquireUpdate(Fetcher, PulseInterval, true); |
|||
} |
|||
/*}}}*/ |
|||
// AcquireUpdate - take Fetcher and update the cache files /*{{{*/
|
|||
// ---------------------------------------------------------------------
|
|||
/* This is a simple wrapper to update the cache with a provided acquire
|
|||
* If you only need control over Status and the used SourcesList use |
|||
* ListUpdate method instead. |
|||
*/ |
|||
bool AcquireUpdate(pkgAcquire &Fetcher, int const PulseInterval, |
|||
bool const RunUpdateScripts, bool const ListCleanup) |
|||
{ |
|||
// Run scripts
|
|||
if (RunUpdateScripts == true) |
|||
RunScripts("APT::Update::Pre-Invoke"); |
|||
|
|||
pkgAcquire::RunResult res; |
|||
if(PulseInterval > 0) |
|||
res = Fetcher.Run(PulseInterval); |
|||
else |
|||
res = Fetcher.Run(); |
|||
|
|||
if (res == 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(); |
|||
|
|||
::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; |
|||
} |
|||
|
|||
// 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 && ListCleanup == true && |
|||
(_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 success scripts if all was fine
|
|||
if (RunUpdateScripts == true) |
|||
{ |
|||
if(!TransientNetworkFailure && !Failed) |
|||
RunScripts("APT::Update::Post-Invoke-Success"); |
|||
|
|||
// Run the other scripts
|
|||
RunScripts("APT::Update::Post-Invoke"); |
|||
} |
|||
return true; |
|||
} |
|||
/*}}}*/ |
@ -0,0 +1,21 @@ |
|||
// -*- mode: cpp; mode: fold -*-
|
|||
// Description /*{{{*/
|
|||
/* ######################################################################
|
|||
|
|||
Update - ListUpdate releated code |
|||
|
|||
##################################################################### */ |
|||
/*}}}*/ |
|||
|
|||
#ifndef PKGLIB_UPDATE_H |
|||
#define PKGLIB_UPDATE_H |
|||
|
|||
class pkgAcquireStatus; |
|||
|
|||
|
|||
bool ListUpdate(pkgAcquireStatus &progress, pkgSourceList &List, int PulseInterval=0); |
|||
bool AcquireUpdate(pkgAcquire &Fetcher, int const PulseInterval = 0, |
|||
bool const RunUpdateScripts = true, bool const ListCleanup = true); |
|||
|
|||
|
|||
#endif |
Loading…
Reference in new issue