]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/acquire-item.cc
Hide hit for local uris
[apt.git] / apt-pkg / acquire-item.cc
index db334de98fd38f8ebc570301d879ea0269ab9ee4..59301784e04b3ce79f0a56a1c1926bef8a0b42c8 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: acquire-item.cc,v 1.14 1998/11/29 01:24:14 jgg Exp $
+// $Id: acquire-item.cc,v 1.17 1998/12/11 06:32:33 jgg Exp $
 /* ######################################################################
 
    Acquire Item - Item to acquire
@@ -9,7 +9,7 @@
    cannot create an item that fetches two uri's to two files at the same 
    time. The pkgAcqIndex class creates a second class upon instantiation
    to fetch the other index files because of this.
-   
+
    ##################################################################### */
                                                                        /*}}}*/
 // Include Files                                                       /*{{{*/
@@ -54,6 +54,7 @@ pkgAcquire::Item::~Item()
 void pkgAcquire::Item::Failed(string Message)
 {
    Status = StatIdle;
+   ErrorText = LookupTag(Message,"Message");
    if (QueueCounter <= 1)
    {
       /* This indicates that the file is not available right now but might
@@ -66,7 +67,6 @@ void pkgAcquire::Item::Failed(string Message)
         return;
       }
       
-      ErrorText = LookupTag(Message,"Message");
       Status = StatError;
       Owner->Dequeue(this);
    }   
@@ -336,10 +336,20 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
                             pkgRecords *Recs,pkgCache::VerIterator const &Version,
                             string &StoreFilename) :
                Item(Owner), Version(Version), Sources(Sources), Recs(Recs), 
-               StoreFilename(StoreFilename)
+               StoreFilename(StoreFilename), Vf(Version.FileList())
 {
    // Select a source
-   pkgCache::VerFileIterator Vf = Version.FileList();
+   if (QueueNext() == false && _error->PendingError() == false)
+      _error->Error("I wasn't able to locate file for the %s package. "
+                   "This might mean you need to manually fix this package.",
+                   Version.ParentPkg().Name());
+}
+                                                                       /*}}}*/
+// AcqArchive::QueueNext - Queue the next file source                  /*{{{*/
+// ---------------------------------------------------------------------
+/* This queues the next available file version for download. */
+bool pkgAcqArchive::QueueNext()
+{
    for (; Vf.end() == false; Vf++)
    {
       // Ignore not source sources
@@ -359,17 +369,14 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
       // Grab the text package record
       pkgRecords::Parser &Parse = Recs->Lookup(Vf);
       if (_error->PendingError() == true)
-        return;
+        return false;
       
       PkgFile = Parse.FileName();
       MD5 = Parse.MD5Hash();
       if (PkgFile.empty() == true)
-      {
-        _error->Error("Unable to locate a file name for package %s, "
-                      "perhaps the package files are corrupted.",
-                      Version.ParentPkg().Name());
-        return;
-      }
+        return _error->Error("The package index files are corrupted. No Filename: "
+                             "field for package %s."
+                             ,Version.ParentPkg().Name());
 
       // See if we already have the file.
       FileSize = Version->Size;
@@ -384,7 +391,7 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
            Local = true;
            Status = StatDone;
            StoreFilename = DestFile = FinalFile;
-           return;
+           return true;
         }
         
         /* Hmm, we have a file and its size does not match, this shouldnt
@@ -400,14 +407,12 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
       Desc.Owner = this;
       Desc.ShortDesc = Version.ParentPkg().Name();
       QueueURI(Desc);
-      
-      return;
+
+      Vf++;
+      return true;
    }
-   
-  _error->Error("I wasn't able to locate file for the %s package. "
-               "This probably means you need to rerun update.",
-               Version.ParentPkg().Name());
-}
+   return false;
+}   
                                                                        /*}}}*/
 // AcqArchive::Done - Finished fetching                                        /*{{{*/
 // ---------------------------------------------------------------------
@@ -469,4 +474,13 @@ string pkgAcqArchive::Describe()
    return Desc.URI;
 }
                                                                        /*}}}*/
-
+// AcqArchive::Failed - Failure handler                                        /*{{{*/
+// ---------------------------------------------------------------------
+/* Here we try other sources */
+void pkgAcqArchive::Failed(string Message)
+{
+   ErrorText = LookupTag(Message,"Message");
+   if (QueueNext() == false)
+      Item::Failed(Message);
+}
+                                                                       /*}}}*/