]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/acquire-item.cc
Fixed update and bad conf file
[apt.git] / apt-pkg / acquire-item.cc
index 7e4ea5043a514fc63a66dd2758a868686aca38cd..7e178c3b47d6b4430bcee4419c81881fa25fba3a 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: acquire-item.cc,v 1.25 1999/02/27 22:29:11 jgg Exp $
+// $Id: acquire-item.cc,v 1.27 1999/04/07 05:30:17 jgg Exp $
 /* ######################################################################
 
    Acquire Item - Item to acquire
@@ -20,6 +20,7 @@
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/strutl.h>
+#include <apt-pkg/fileutl.h>
 
 #include <sys/stat.h>
 #include <unistd.h>
@@ -32,8 +33,8 @@
 // ---------------------------------------------------------------------
 /* */
 pkgAcquire::Item::Item(pkgAcquire *Owner) : Owner(Owner), FileSize(0),
-                       Mode(0), ID(0), Complete(false), Local(false), 
-                       QueueCounter(0)
+                       PartialSize(0), Mode(0), ID(0), Complete(false), 
+                       Local(false), QueueCounter(0)
 {
    Owner->Add(this);
    Status = StatIdle;
@@ -236,14 +237,6 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string MD5)
    Mode = "gzip";
 }
                                                                        /*}}}*/
-// AcqIndex::Describe - Describe the Item                              /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-string pkgAcqIndex::Describe()
-{
-   return Location->PackagesURI();
-}
-                                                                       /*}}}*/
 
 // AcqIndexRel::pkgAcqIndexRel - Constructor                           /*{{{*/
 // ---------------------------------------------------------------------
@@ -322,14 +315,6 @@ void pkgAcqIndexRel::Done(string Message,unsigned long Size,string MD5)
    Rename(DestFile,FinalFile);
 }
                                                                        /*}}}*/
-// AcqIndexRel::Describe - Describe the Item                           /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-string pkgAcqIndexRel::Describe()
-{
-   return Location->ReleaseURI();
-}
-                                                                       /*}}}*/
 // AcqIndexRel::Failed - Silence failure messages for missing rel files        /*{{{*/
 // ---------------------------------------------------------------------
 /* */
@@ -425,8 +410,8 @@ bool pkgAcqArchive::QueueNext()
            return true;
         }
         
-        /* Hmm, we have a file and its size does not match, this shouldnt
-           happen.. */
+        /* Hmm, we have a file and its size does not match, this means it is
+           an old style mismatched arch */
         unlink(FinalFile.c_str());
       }
 
@@ -450,7 +435,17 @@ bool pkgAcqArchive::QueueNext()
       }
 
       DestFile = _config->FindDir("Dir::Cache::Archives") + "partial/" + flNotDir(StoreFilename);
-
+      
+      // Check the destination file
+      if (stat(DestFile.c_str(),&Buf) == 0)
+      {
+        // Hmm, the partial file is too big, erase it
+        if ((unsigned)Buf.st_size > Version->Size)
+           unlink(DestFile.c_str());
+        else
+           PartialSize = Buf.st_size;
+      }
+      
       // Create the item
       Desc.URI = Location->ArchiveURI(PkgFile);
       Desc.Description = Location->ArchiveInfo(Version);
@@ -516,14 +511,6 @@ void pkgAcqArchive::Done(string Message,unsigned long Size,string Md5Hash)
    Complete = true;
 }
                                                                        /*}}}*/
-// AcqArchive::Describe - Describe the Item                            /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-string pkgAcqArchive::Describe()
-{
-   return Desc.URI;
-}
-                                                                       /*}}}*/
 // AcqArchive::Failed - Failure handler                                        /*{{{*/
 // ---------------------------------------------------------------------
 /* Here we try other sources */
@@ -548,3 +535,67 @@ void pkgAcqArchive::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
    }
 }
                                                                        /*}}}*/
+
+// AcqFile::pkgAcqFile - Constructor                                   /*{{{*/
+// ---------------------------------------------------------------------
+/* The file is added to the queue */
+pkgAcqFile::pkgAcqFile(pkgAcquire *Owner,string URI,string MD5,
+                      unsigned long Size,string Dsc,string ShortDesc) :
+                       Item(Owner), MD5(MD5)
+{
+   DestFile = flNotDir(URI);
+   
+   // Create the item
+   Desc.URI = URI;
+   Desc.Description = Dsc;
+   Desc.Owner = this;
+
+   // Set the short description to the archive component
+   Desc.ShortDesc = ShortDesc;
+      
+   // Get the transfer sizes
+   FileSize = Size;
+   struct stat Buf;
+   if (stat(DestFile.c_str(),&Buf) == 0)
+   {
+      // Hmm, the partial file is too big, erase it
+      if ((unsigned)Buf.st_size > Size)
+        unlink(DestFile.c_str());
+      else
+        PartialSize = Buf.st_size;
+   }
+   
+   QueueURI(Desc);
+}
+                                                                       /*}}}*/
+// AcqFile::Done - Item downloaded OK                                  /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgAcqFile::Done(string Message,unsigned long Size,string MD5)
+{
+   Item::Done(Message,Size,MD5);
+
+   string FileName = LookupTag(Message,"Filename");
+   if (FileName.empty() == true)
+   {
+      Status = StatError;
+      ErrorText = "Method gave a blank filename";
+      return;
+   }
+
+   Complete = true;
+   
+   // The files timestamp matches
+   if (StringToBool(LookupTag(Message,"IMS-Hit"),false) == true)
+      return;
+   
+   // We have to copy it into place
+   if (FileName != DestFile)
+   {
+      Local = true;
+      Desc.URI = "copy:" + FileName;
+      QueueURI(Desc);
+      return;
+   }
+}
+                                                                       /*}}}*/