Selaa lähdekoodia

Wow
Author: jgg
Date: 1998-11-13 07:08:48 GMT
Wow

Arch Librarian 22 vuotta sitten
vanhempi
commit
a656821931
7 muutettua tiedostoa jossa 159 lisäystä ja 35 poistoa
  1. 47 9
      apt-pkg/acquire-item.cc
  2. 2 1
      apt-pkg/acquire-item.h
  3. 30 3
      apt-pkg/acquire.cc
  4. 6 2
      apt-pkg/acquire.h
  5. 2 2
      apt-pkg/algorithms.cc
  6. 15 15
      apt-pkg/depcache.h
  7. 57 3
      cmdline/apt-get.cc

+ 47 - 9
apt-pkg/acquire-item.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: acquire-item.cc,v 1.11 1998/11/13 04:23:26 jgg Exp $
+// $Id: acquire-item.cc,v 1.12 1998/11/13 07:08:48 jgg Exp $
 /* ######################################################################
 
    Acquire Item - Item to acquire
@@ -32,7 +32,8 @@
 // ---------------------------------------------------------------------
 /* */
 pkgAcquire::Item::Item(pkgAcquire *Owner) : Owner(Owner), FileSize(0),
-                       Mode(0), ID(0), Complete(false), QueueCounter(0)
+                       Mode(0), ID(0), Complete(false), Local(false), 
+                       QueueCounter(0)
 {
    Owner->Add(this);
    Status = StatIdle;
@@ -192,7 +193,7 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string MD5)
 	 return;
       
       Decompression = true;
-      FileSize = 0;
+      Local = true;
       DestFile += ".decomp";
       Desc.URI = "copy:" + FileName;
       QueueURI(Desc);
@@ -214,7 +215,7 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string MD5)
    if (FileName == DestFile)
       Erase = true;
    else
-      FileSize = 0;
+      Local = true;
    
    Decompression = true;
    DestFile += ".decomp";
@@ -289,7 +290,7 @@ void pkgAcqIndexRel::Done(string Message,unsigned long Size,string MD5)
    // We have to copy it into place
    if (FileName != DestFile)
    {
-      FileSize = 0;
+      Local = true;
       Desc.URI = "copy:" + FileName;
       QueueURI(Desc);
       return;
@@ -341,6 +342,29 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
 		       Version.ParentPkg().Name());
 	 return;
       }
+
+      // See if we already have the file.
+      FileSize = Version->Size;
+      string FinalFile = _config->FindDir("Dir::Cache::Archives") + flNotDir(PkgFile);
+      struct stat Buf;
+      if (stat(FinalFile.c_str(),&Buf) == 0)
+      {
+	 // Make sure the size matches
+	 if ((unsigned)Buf.st_size == Version->Size)
+	 {
+	    Complete = true;
+	    Local = true;
+	    Status = StatDone;
+	    DestFile = FinalFile;
+	    return;
+	 }
+	 
+	 /* Hmm, we have a file and its size does not match, this shouldnt
+	    happen.. */
+	 unlink(FinalFile.c_str());
+      }
+      
+      DestFile = _config->FindDir("Dir::Cache::Archives") + "partial/" + flNotDir(PkgFile);
       
       // Create the item
       Desc.URI = Location->ArchiveURI(PkgFile);
@@ -349,7 +373,6 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
       Desc.ShortDesc = Version.ParentPkg().Name();
       QueueURI(Desc);
       
-      DestFile = _config->FindDir("Dir::Cache::Archives") + "partial/" + flNotDir(PkgFile);
       return;
    }
    
@@ -381,8 +404,8 @@ void pkgAcqArchive::Done(string Message,unsigned long Size,string Md5Hash)
 	 return;
       }
    }
-   
-   // Store the destination filename
+
+   // Grab the output filename
    string FileName = LookupTag(Message,"Filename");
    if (FileName.empty() == true)
    {
@@ -390,8 +413,23 @@ void pkgAcqArchive::Done(string Message,unsigned long Size,string Md5Hash)
       ErrorText = "Method gave a blank filename";
       return;
    }
+
+   Complete = true;
+   
+   // We have to copy it into place
+   if (FileName != DestFile)
+   {
+      DestFile = FileName;
+      Local = true;
+      return;
+   }
+   
+   // Done, move it into position
+   string FinalFile = _config->FindDir("Dir::Cache::Archives");
+   FinalFile += flNotDir(DestFile);
+   Rename(DestFile,FinalFile);
    
-   DestFile = FileName;
+   DestFile = FinalFile;
    Complete = true;
 }
 									/*}}}*/

+ 2 - 1
apt-pkg/acquire-item.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: acquire-item.h,v 1.8 1998/11/13 04:23:28 jgg Exp $
+// $Id: acquire-item.h,v 1.9 1998/11/13 07:08:50 jgg Exp $
 /* ######################################################################
 
    Acquire Item - Item to acquire
@@ -45,6 +45,7 @@ class pkgAcquire::Item
    char *Mode;
    unsigned long ID;
    bool Complete;
+   bool Local;
    
    // Number of queues we are inserted into
    unsigned int QueueCounter;

+ 30 - 3
apt-pkg/acquire.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: acquire.cc,v 1.14 1998/11/12 04:10:54 jgg Exp $
+// $Id: acquire.cc,v 1.15 1998/11/13 07:08:54 jgg Exp $
 /* ######################################################################
 
    Acquire - File Acquiration
@@ -344,7 +344,7 @@ pkgAcquire::Worker *pkgAcquire::WorkerStep(Worker *I)
    return I->NextAcquire;
 };
 									/*}}}*/
-// pkgAcquire::Clean - Cleans a directory				/*{{{*/
+// Acquire::Clean - Cleans a directory					/*{{{*/
 // ---------------------------------------------------------------------
 /* This is a bit simplistic, it looks at every file in the dir and sees
    if it is part of the download set. */
@@ -398,6 +398,29 @@ pkgAcquire::MethodConfig::MethodConfig()
    Next = 0;
 }
 									/*}}}*/
+// Acquire::TotalNeeded - Number of bytes to fetch			/*{{{*/
+// ---------------------------------------------------------------------
+/* This is the total number of bytes needed */
+unsigned long pkgAcquire::TotalNeeded()
+{
+   unsigned long Total = 0;
+   for (pkgAcquire::Item **I = ItemsBegin(); I != ItemsEnd(); I++)
+      Total += (*I)->FileSize;
+   return Total;
+}
+									/*}}}*/
+// Acquire::FetchNeeded - Number of bytes needed to get			/*{{{*/
+// ---------------------------------------------------------------------
+/* This is the number of bytes that is not local */
+unsigned long pkgAcquire::FetchNeeded()
+{
+   unsigned long Total = 0;
+   for (pkgAcquire::Item **I = ItemsBegin(); I != ItemsEnd(); I++)
+      if ((*I)->Local == false)
+	 Total += (*I)->FileSize;
+   return Total;
+}
+									/*}}}*/
 
 // Queue::Queue - Constructor						/*{{{*/
 // ---------------------------------------------------------------------
@@ -587,6 +610,10 @@ void pkgAcquireStatus::Pulse(pkgAcquire *Owner)
    for (pkgAcquire::Item **I = Owner->ItemsBegin(); I != Owner->ItemsEnd(); 
 	I++, Count++)
    {
+      // Totally ignore local items
+      if ((*I)->Local == true)
+	 continue;
+      
       TotalBytes += (*I)->FileSize;
       if ((*I)->Complete == true)
 	 CurrentBytes += (*I)->FileSize;
@@ -648,7 +675,7 @@ void pkgAcquireStatus::Start()
    ElapsedTime = 0;
 }
 									/*}}}*/
-// pkgAcquireStatus::Stop - Finished downloading			/*{{{*/
+// AcquireStatus::Stop - Finished downloading				/*{{{*/
 // ---------------------------------------------------------------------
 /* This accurately computes the elapsed time and the total overall CPS. */
 void pkgAcquireStatus::Stop()

+ 6 - 2
apt-pkg/acquire.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: acquire.h,v 1.11 1998/11/12 04:10:55 jgg Exp $
+// $Id: acquire.h,v 1.12 1998/11/13 07:08:55 jgg Exp $
 /* ######################################################################
 
    Acquire - File Acquiration
@@ -101,6 +101,10 @@ class pkgAcquire
 
    // Cleans out the download dir
    bool Clean(string Dir);
+
+   // Returns the size of the total download set
+   unsigned long TotalNeeded();
+   unsigned long FetchNeeded();
    
    pkgAcquire(pkgAcquireStatus *Log = 0);
    ~pkgAcquire();
@@ -210,7 +214,7 @@ class pkgAcquireStatus
    virtual void Pulse(pkgAcquire *Owner);
    virtual void Start();
    virtual void Stop();
-
+   
    pkgAcquireStatus();
    virtual ~pkgAcquireStatus() {};
 };

+ 2 - 2
apt-pkg/algorithms.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: algorithms.cc,v 1.8 1998/10/24 04:58:04 jgg Exp $
+// $Id: algorithms.cc,v 1.9 1998/11/13 07:08:57 jgg Exp $
 /* ######################################################################
 
    Algorithms - A set of misc algorithms
@@ -644,7 +644,7 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
 	 {
 	    if (Debug == true)
 	       clog << " Try to Re-Instate " << I.Name() << endl;
-	    int OldBreaks = Cache.BrokenCount();
+	    unsigned long OldBreaks = Cache.BrokenCount();
 	    pkgCache::Version *OldVer = Cache[I].InstallVer;
 	    Flags[I->ID] &= ReInstateTried;
 	    

+ 15 - 15
apt-pkg/depcache.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: depcache.h,v 1.5 1998/10/02 04:39:45 jgg Exp $
+// $Id: depcache.h,v 1.6 1998/11/13 07:08:58 jgg Exp $
 /* ######################################################################
 
    DepCache - Dependency Extension data for the cache
@@ -118,13 +118,13 @@ class pkgDepCache : public pkgCache
    StateCache *PkgState;
    unsigned char *DepState;
    
-   long iUsrSize;
-   long iDownloadSize;
-   long iInstCount;
-   long iDelCount;
-   long iKeepCount;
-   long iBrokenCount;
-   long iBadCount;
+   signed long iUsrSize;
+   unsigned long iDownloadSize;
+   unsigned long iInstCount;
+   unsigned long iDelCount;
+   unsigned long iKeepCount;
+   unsigned long iBrokenCount;
+   unsigned long iBadCount;
       
    // Check for a matching provides
    bool CheckDep(DepIterator Dep,int Type,PkgIterator &Res);
@@ -169,13 +169,13 @@ class pkgDepCache : public pkgCache
    void Update(OpProgress *Prog = 0);
 
    // Size queries
-   inline long UsrSize() {return iUsrSize;};
-   inline long DebSize() {return iDownloadSize;};
-   inline long DelCount() {return iDelCount;};
-   inline long KeepCount() {return iKeepCount;};
-   inline long InstCount() {return iInstCount;};
-   inline long BrokenCount() {return iBrokenCount;};
-   inline long BadCount() {return iBadCount;};
+   inline signed long UsrSize() {return iUsrSize;};
+   inline unsigned long DebSize() {return iDownloadSize;};
+   inline unsigned long DelCount() {return iDelCount;};
+   inline unsigned long KeepCount() {return iKeepCount;};
+   inline unsigned long InstCount() {return iInstCount;};
+   inline unsigned long BrokenCount() {return iBrokenCount;};
+   inline unsigned long BadCount() {return iBadCount;};
    
    pkgDepCache(MMap &Map,OpProgress &Prog);
    virtual ~pkgDepCache();

+ 57 - 3
cmdline/apt-get.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: apt-get.cc,v 1.9 1998/11/13 04:24:03 jgg Exp $
+// $Id: apt-get.cc,v 1.10 1998/11/13 07:09:02 jgg Exp $
 /* ######################################################################
    
    apt-get - Cover for dpkg
@@ -34,6 +34,7 @@
 #include <apt-pkg/algorithms.h>
 #include <apt-pkg/acquire-item.h>
 #include <apt-pkg/dpkgpm.h>
+#include <strutl.h>
 
 #include <config.h>
 
@@ -51,6 +52,27 @@ ostream c2out;
 ofstream devnull("/dev/null");
 unsigned int ScreenWidth = 80;
 
+// YnPrompt - Yes No Prompt.						/*{{{*/
+// ---------------------------------------------------------------------
+/* Returns true on a Yes.*/
+bool YnPrompt()
+{
+   if (_config->FindB("APT::Get::Assume-Yes",false) == true)
+   {
+      c2out << 'Y' << endl;
+      return true;
+   }
+   
+   char C = 0;
+   char Jnk = 0;
+   read(STDIN_FILENO,&C,1);
+   while (C != '\n' && Jnk != '\n') read(STDIN_FILENO,&Jnk,1);
+   
+   if (!(C == 'Y' || C == 'y' || C == '\n' || C == '\r'))
+      return false;
+   return true;
+}
+									/*}}}*/
 // ShowList - Show a list						/*{{{*/
 // ---------------------------------------------------------------------
 /* This prints out a string of space seperated words with a title and 
@@ -424,6 +446,7 @@ bool CacheFile::Open()
    happen and then calls the download routines */
 bool InstallPackages(pkgDepCache &Cache,bool ShwKept,bool Ask = true)
 {
+   // Show all the various warning indicators
    ShowDel(c1out,Cache);
    ShowNew(c1out,Cache);
    if (ShwKept == true)
@@ -469,6 +492,37 @@ bool InstallPackages(pkgDepCache &Cache,bool ShwKept,bool Ask = true)
    if (PM.GetArchives(&Fetcher,&List,&Recs) == false)
       return false;
 
+   unsigned long FetchBytes = Fetcher.FetchNeeded();
+   unsigned long DebBytes = Fetcher.TotalNeeded();
+   if (DebBytes != Cache.DebSize())
+      c0out << "How odd.. The sizes didn't match, email apt@packages.debian.org" << endl;
+   
+   c1out << "Need to get ";
+   if (DebBytes != FetchBytes)
+      c1out << SizeToStr(FetchBytes) << '/' << SizeToStr(DebBytes);
+   else
+      c1out << SizeToStr(DebBytes);
+      
+   c1out << " of archives. After unpacking ";
+   
+   if (Cache.UsrSize() >= 0)
+      c1out << SizeToStr(Cache.UsrSize()) << " will be used." << endl;
+   else
+      c1out << SizeToStr(-1*Cache.UsrSize()) << " will be freed." << endl;
+
+   if (_error->PendingError() == true)
+      return false;
+
+   if (Ask == true)
+   {
+      
+      if (_config->FindI("quiet",0) < 2 || 
+	  _config->FindB("APT::Get::Assume-Yes",false) == false)
+      c2out << "Do you want to continue? [Y/n] " << flush;
+      if (YnPrompt() == false)
+	 exit(1);
+   }      
+
    // Run it
    if (Fetcher.Run() == false)
       return false;
@@ -546,8 +600,8 @@ bool DoInstall(CommandLine &CmdL)
    if (Cache.Open() == false)
       return false;
    
-   int ExpectedInst = 0;
-   int Packages = 0;
+   unsigned int ExpectedInst = 0;
+   unsigned int Packages = 0;
    pkgProblemResolver Fix(Cache);
    
    bool DefRemove = false;