]> git.saurik.com Git - apt.git/commitdiff
implement Fail-Ignore bool in FetchItem that tells the method that a failure of this...
authorMichael Vogt <michael.vogt@ubuntu.com>
Wed, 2 Jun 2010 21:30:01 +0000 (23:30 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Wed, 2 Jun 2010 21:30:01 +0000 (23:30 +0200)
apt-pkg/acquire-item.cc
apt-pkg/acquire-item.h
apt-pkg/acquire-method.cc
apt-pkg/acquire-method.h
methods/mirror.cc

index a959253bc2ca31c84105814d7262e14300af0d99..3cc2c87175bc24da0fd379df0bcca2fa68da4e6f 100644 (file)
@@ -820,6 +820,13 @@ pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire *Owner,
                            string URI,string URIDesc,string ShortDesc) 
   : pkgAcqIndex(Owner, URI, URIDesc, ShortDesc, HashString(), "")
 {
                            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  /*{{{*/
 }
                                                                        /*}}}*/
 // AcqIndexTrans::Failed - Silence failure messages for missing files  /*{{{*/
index 06fcffc73db66422abd655f9e26c6eb0456ed62e..3ac8a19e21884e9181183ffc81e770aecc89dc5e 100644 (file)
@@ -573,6 +573,7 @@ class pkgAcqIndexTrans : public pkgAcqIndex
    public:
   
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
    public:
   
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
+   virtual string Custom600Headers();
 
    /** \brief Create a pkgAcqIndexTrans.
     *
 
    /** \brief Create a pkgAcqIndexTrans.
     *
index 3008c8d1a2a18a776f7d9561ca5c02b4ea902873..6e021a445709233553c27450e0b869f454662729 100644 (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);
            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
            Tmp->Next = 0;
            
            // Append it to the list
index 99a4605b146ae3b03b7db8bc4e9e242de4b6deda..03851e8239657451abab188a9f883282395e2bab 100644 (file)
@@ -37,6 +37,7 @@ class pkgAcqMethod
       string DestFile;
       time_t LastModified;
       bool IndexFile;
       string DestFile;
       time_t LastModified;
       bool IndexFile;
+      bool FailIgnore;
    };
    
    struct FetchResult
    };
    
    struct FetchResult
index cfc155f58fcdf164a771b847a4cf78decb8ede8a..ea0fba438dfda33aafb887267fb89c2af8ca7b66 100644 (file)
@@ -162,24 +162,26 @@ void MirrorMethod::CurrentQueueUriToMirror()
       }
    }
    _error->Error("Internal error: Failed to convert %s back to %s",
       }
    }
    _error->Error("Internal error: Failed to convert %s back to %s",
-                Queue->Uri, BaseUri);
+                Queue->Uri.c_str(), BaseUri.c_str());
 }
 
 bool MirrorMethod::TryNextMirror()
 {
 }
 
 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]);
    // 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;
       }
    }
 
         return true;
       }
    }
 
+   if (Debug)
+      clog << "TryNextMirror could not find another mirror to try" << endl;
+
    return false;
 }
 
    return false;
 }
 
@@ -307,15 +309,12 @@ bool MirrorMethod::Fetch(FetchItem *Itm)
         return false;
       }
    }
         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);
    
    // 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
 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
       return;
 
    // all mirrors failed, so bail out