Browse Source

implement Fail-Ignore bool in FetchItem that tells the method that a failure of this item is ok and does not need to be tried on all mirrors

tags/debian/0.8.0
Michael Vogt 11 years ago
parent
commit
963b16dceb
5 changed files with 21 additions and 12 deletions
  1. +7
    -0
      apt-pkg/acquire-item.cc
  2. +1
    -0
      apt-pkg/acquire-item.h
  3. +1
    -0
      apt-pkg/acquire-method.cc
  4. +1
    -0
      apt-pkg/acquire-method.h
  5. +11
    -12
      methods/mirror.cc

+ 7
- 0
apt-pkg/acquire-item.cc View File

@@ -820,6 +820,13 @@ pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire *Owner,
string URI,string URIDesc,string ShortDesc)
: pkgAcqIndex(Owner, URI, URIDesc, ShortDesc, HashString(), "")
{
}
/*}}}*/
// AcqIndexTrans::Custom600Headers - Insert custom request headers /*{{{*/
// ---------------------------------------------------------------------
string pkgAcqIndexTrans::Custom600Headers()
{
return "\nFail-Ignore: true";
}
/*}}}*/
// AcqIndexTrans::Failed - Silence failure messages for missing files /*{{{*/


+ 1
- 0
apt-pkg/acquire-item.h View File

@@ -573,6 +573,7 @@ class pkgAcqIndexTrans : public pkgAcqIndex
public:
virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
virtual string Custom600Headers();

/** \brief Create a pkgAcqIndexTrans.
*


+ 1
- 0
apt-pkg/acquire-method.cc View File

@@ -381,6 +381,7 @@ int pkgAcqMethod::Run(bool Single)
if (StrToTime(LookupTag(Message,"Last-Modified"),Tmp->LastModified) == false)
Tmp->LastModified = 0;
Tmp->IndexFile = StringToBool(LookupTag(Message,"Index-File"),false);
Tmp->FailIgnore = StringToBool(LookupTag(Message,"Fail-Ignore"),false);
Tmp->Next = 0;
// Append it to the list


+ 1
- 0
apt-pkg/acquire-method.h View File

@@ -37,6 +37,7 @@ class pkgAcqMethod
string DestFile;
time_t LastModified;
bool IndexFile;
bool FailIgnore;
};
struct FetchResult


+ 11
- 12
methods/mirror.cc View File

@@ -162,24 +162,26 @@ void MirrorMethod::CurrentQueueUriToMirror()
}
}
_error->Error("Internal error: Failed to convert %s back to %s",
Queue->Uri, BaseUri);
Queue->Uri.c_str(), BaseUri.c_str());
}

bool MirrorMethod::TryNextMirror()
{
if(Debug)
cerr << "using mirror: " << Mirror << endl;

// find current mirror and select next one
for (int i=0; i < AllMirrors.size()-1; i++)
{
if (Queue->Uri.find(AllMirrors[i]) == 0)
{
Queue->Uri.replace(0, AllMirrors[i].size(), AllMirrors[i+1]);
if (Debug)
clog << "TryNextMirror: " << Queue->Uri << endl;
return true;
}
}

if (Debug)
clog << "TryNextMirror could not find another mirror to try" << endl;

return false;
}

@@ -307,15 +309,12 @@ bool MirrorMethod::Fetch(FetchItem *Itm)
return false;
}
}
if(Debug)
clog << "selected mirror: " << Mirror << endl;

if(Itm->Uri.find("mirror://") != string::npos)
Itm->Uri.replace(0,BaseUri.size(), Mirror);

for (FetchItem *I = Queue; I != 0; I = I->Next)
{
if(I->Uri.find("mirror://") != string::npos)
I->Uri.replace(0,BaseUri.size(), Mirror);
}
if(Debug)
clog << "Fetch: " << Itm->Uri << endl << endl;
// now run the real fetcher
return HttpMethod::Fetch(Itm);
@@ -324,7 +323,7 @@ bool MirrorMethod::Fetch(FetchItem *Itm)
void MirrorMethod::Fail(string Err,bool Transient)
{
// try the next mirror on fail
if (TryNextMirror())
if (!Queue->FailIgnore && TryNextMirror())
return;

// all mirrors failed, so bail out


Loading…
Cancel
Save