]> git.saurik.com Git - apt.git/commitdiff
By gosh, I think it works
authorArch Librarian <arch@canonical.com>
Mon, 20 Sep 2004 16:51:32 +0000 (16:51 +0000)
committerArch Librarian <arch@canonical.com>
Mon, 20 Sep 2004 16:51:32 +0000 (16:51 +0000)
Author: jgg
Date: 1998-11-22 03:20:30 GMT
By gosh, I think it works

apt-pkg/acquire-item.cc
apt-pkg/acquire-item.h
apt-pkg/deb/dpkgpm.cc
apt-pkg/init.cc
apt-pkg/packagemanager.cc
apt-pkg/packagemanager.h
cmdline/apt-get.cc
doc/Bugs
doc/examples/apt.conf

index 532d4e6f2f1c4eb4c62d790b4ccb090cbfc4fc2e..cfd0e5d028659ea997b62e5915de034cd25bc27a 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: acquire-item.cc,v 1.12 1998/11/13 07:08:48 jgg Exp $
+// $Id: acquire-item.cc,v 1.13 1998/11/22 03:20:30 jgg Exp $
 /* ######################################################################
 
    Acquire Item - Item to acquire
@@ -224,6 +224,14 @@ 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                           /*{{{*/
 // ---------------------------------------------------------------------
@@ -302,13 +310,23 @@ void pkgAcqIndexRel::Done(string Message,unsigned long Size,string MD5)
    Rename(DestFile,FinalFile);
 }
                                                                        /*}}}*/
+// AcqIndexRel::Describe - Describe the Item                           /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string pkgAcqIndexRel::Describe()
+{
+   return Location->ReleaseURI();
+}
+                                                                       /*}}}*/
 
 // AcqArchive::AcqArchive - Constructor                                        /*{{{*/
 // ---------------------------------------------------------------------
 /* */
 pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
-                            pkgRecords *Recs,pkgCache::VerIterator const &Version) :
-               Item(Owner), Version(Version), Sources(Sources), Recs(Recs)
+                            pkgRecords *Recs,pkgCache::VerIterator const &Version,
+                            string &StoreFilename) :
+               Item(Owner), Version(Version), Sources(Sources), Recs(Recs), 
+               StoreFilename(StoreFilename)
 {
    // Select a source
    pkgCache::VerFileIterator Vf = Version.FileList();
@@ -355,7 +373,7 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
            Complete = true;
            Local = true;
            Status = StatDone;
-           DestFile = FinalFile;
+           StoreFilename = DestFile = FinalFile;
            return;
         }
         
@@ -415,11 +433,11 @@ void pkgAcqArchive::Done(string Message,unsigned long Size,string Md5Hash)
    }
 
    Complete = true;
-   
-   // We have to copy it into place
+
+   // Reference filename
    if (FileName != DestFile)
    {
-      DestFile = FileName;
+      StoreFilename = DestFile = FileName;
       Local = true;
       return;
    }
@@ -429,7 +447,16 @@ void pkgAcqArchive::Done(string Message,unsigned long Size,string Md5Hash)
    FinalFile += flNotDir(DestFile);
    Rename(DestFile,FinalFile);
    
-   DestFile = FinalFile;
+   StoreFilename = DestFile = FinalFile;
    Complete = true;
 }
                                                                        /*}}}*/
+// AcqArchive::Describe - Describe the Item                            /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string pkgAcqArchive::Describe()
+{
+   return Desc.URI;
+}
+                                                                       /*}}}*/
+
index 67e202355300a6f04c3ab13fe7d709b5a31f6e05..d550b33dba26538dc6fe1a27a7495cb2692b2f93 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: acquire-item.h,v 1.9 1998/11/13 07:08:50 jgg Exp $
+// $Id: acquire-item.h,v 1.10 1998/11/22 03:20:31 jgg Exp $
 /* ######################################################################
 
    Acquire Item - Item to acquire
@@ -46,7 +46,7 @@ class pkgAcquire::Item
    unsigned long ID;
    bool Complete;
    bool Local;
-   
+
    // Number of queues we are inserted into
    unsigned int QueueCounter;
    
@@ -56,7 +56,8 @@ class pkgAcquire::Item
    virtual void Failed(string Message);
    virtual void Done(string Message,unsigned long Size,string Md5Hash);
    virtual void Start(string Message,unsigned long Size);
-
+   virtual string Describe() = 0;
+   
    virtual string Custom600Headers() {return string();};
       
    Item(pkgAcquire *Owner);
@@ -77,6 +78,7 @@ class pkgAcqIndex : public pkgAcquire::Item
    
    virtual void Done(string Message,unsigned long Size,string Md5Hash);   
    virtual string Custom600Headers();
+   virtual string Describe();
 
    pkgAcqIndex(pkgAcquire *Owner,const pkgSourceList::Item *Location);
 };
@@ -93,6 +95,7 @@ class pkgAcqIndexRel : public pkgAcquire::Item
    
    virtual void Done(string Message,unsigned long Size,string Md5Hash);   
    virtual string Custom600Headers();
+   virtual string Describe();
    
    pkgAcqIndexRel(pkgAcquire *Owner,const pkgSourceList::Item *Location);
 };
@@ -107,13 +110,16 @@ class pkgAcqArchive : public pkgAcquire::Item
    pkgSourceList *Sources;
    pkgRecords *Recs;
    string MD5;
+   string &StoreFilename;
    
    public:
    
    virtual void Done(string Message,unsigned long Size,string Md5Hash);
+   virtual string Describe();
    
    pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
-                pkgRecords *Recs,pkgCache::VerIterator const &Version);
+                pkgRecords *Recs,pkgCache::VerIterator const &Version,
+                string &StoreFilename);
 };
 
 #endif
index 75a5c77beedd291a37de035b96db4f97e13c0e4d..dfdc0c4b527617b7b2c1e1799e38f1c6f7fa7ebb 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: dpkgpm.cc,v 1.1 1998/11/13 04:23:39 jgg Exp $
+// $Id: dpkgpm.cc,v 1.2 1998/11/22 03:20:35 jgg Exp $
 /* ######################################################################
 
    DPKG Package Manager - Provide an interface to dpkg
@@ -83,45 +83,67 @@ bool pkgDPkgPM::Go()
    {
       vector<Item>::iterator J = I;
       for (; J != List.end() && J->Op == I->Op; J++);
-      
+
       // Generate the argument list
       const char *Args[400];
       if (J - I > 350)
         J = I + 350;
       
-      int n= 0;
-      Args[n++] = "dpkg";
+      unsigned int n = 0;
+      unsigned long Size = 0;
+      Args[n++] = _config->Find("Dir::Bin::dpkg","dpkg").c_str();
+      Size += strlen(Args[n-1]);
       
       switch (I->Op)
       {
         case Item::Remove:
         Args[n++] = "--force-depends";
+        Size += strlen(Args[n-1]);
         Args[n++] = "--force-remove-essential";
+        Size += strlen(Args[n-1]);
         Args[n++] = "--remove";
+        Size += strlen(Args[n-1]);
         break;
         
         case Item::Configure:
         Args[n++] = "--configure";
+        Size += strlen(Args[n-1]);
         break;
         
         case Item::Install:
         Args[n++] = "--unpack";
+        Size += strlen(Args[n-1]);
         break;
       }
       
       // Write in the file or package names
       if (I->Op == Item::Install)
-        for (;I != J; I++)
+      {
+        for (;I != J && Size < 1024; I++)
+        {
            Args[n++] = I->File.c_str();
+           Size += strlen(Args[n-1]);
+        }
+      }      
       else
-        for (;I != J; I++)
+      {
+        for (;I != J && Size < 1024; I++)
+        {
            Args[n++] = I->Pkg.Name();
+           Size += strlen(Args[n-1]);
+        }       
+      }      
       Args[n] = 0;
+      J = I;
+      
+      if (_config->FindB("Debug::pkgDPkgPM",false) == true)
+      {
+        for (unsigned int k = 0; k != n; k++)
+           clog << Args[k] << ' ';
+        clog << endl;
+        continue;
+      }
       
-/*      for (int k = 0; k != n; k++)
-        cout << Args[k] << ' ';
-      cout << endl;*/
-
       cout << flush;
       clog << flush;
       cerr << flush;
index e0ab46821dda2d2da5185fe6c83a26501b7dc99d..3343e197f8484ef6f979c7936019f8e6486b8f8d 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: init.cc,v 1.12 1998/11/06 02:52:21 jgg Exp $
+// $Id: init.cc,v 1.13 1998/11/22 03:20:32 jgg Exp $
 /* ######################################################################
 
    Init - Initialize the package library
@@ -45,6 +45,7 @@ bool pkgInitialize(Configuration &Cnf)
    Cnf.Set("Dir::Etc::sourcelist","sources.list");
    Cnf.Set("Dir::Etc::main","apt.conf");
    Cnf.Set("Dir::Bin::methods","/usr/lib/apt/methods");
+   Cnf.Set("Dir::Bin::dpkg","/usr/bin/dpkg");
    
    // Read the main config file
    string FName = Cnf.FindFile("Dir::Etc::main");
index 2b47d425b367fbdfa08202901a8b9b66a662bee2..e6222f003f18892681a98e3e924e75f0c4d328bd 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: packagemanager.cc,v 1.5 1998/11/13 04:23:30 jgg Exp $
+// $Id: packagemanager.cc,v 1.6 1998/11/22 03:20:33 jgg Exp $
 /* ######################################################################
 
    Package Manager - Abstacts the package manager
@@ -22,6 +22,8 @@
 #include <apt-pkg/error.h>
 #include <apt-pkg/version.h>
 #include <apt-pkg/acquire-item.h>
+#include <apt-pkg/algorithms.h>
+#include <apt-pkg/configuration.h>
                                                                        /*}}}*/
 
 // PM::PackageManager - Constructor                                    /*{{{*/
@@ -31,6 +33,7 @@ pkgPackageManager::pkgPackageManager(pkgDepCache &Cache) : Cache(Cache)
 {
    FileNames = new string[Cache.Head().PackageCount];
    List = 0;
+   Debug = _config->FindB("Debug::pkgPackageManager",false);
 }
                                                                        /*}}}*/
 // PM::PackageManager - Destructor                                     /*{{{*/
@@ -57,7 +60,8 @@ bool pkgPackageManager::GetArchives(pkgAcquire *Owner,pkgSourceList *Sources,
          Cache[I].Delete() == true)
         continue;
       
-      new pkgAcqArchive(Owner,Sources,Recs,Cache[I].InstVerIter(Cache));
+      new pkgAcqArchive(Owner,Sources,Recs,Cache[I].InstVerIter(Cache),
+                       FileNames[I->ID]);
    }
    return true;
 }
@@ -68,16 +72,11 @@ bool pkgPackageManager::GetArchives(pkgAcquire *Owner,pkgSourceList *Sources,
    be downloaded. */
 bool pkgPackageManager::FixMissing()
 {
-   unsigned char *Touch = new unsigned char[Cache.Head().PackageCount];
+   pkgProblemResolver Resolve(Cache);
+   
    for (PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
    {
-      // Create the status list that ResolveConflicts needs
-      if ((Cache[I].DepState & pkgDepCache::DepNowMin) == pkgDepCache::DepNowMin)
-        Touch[I->ID] = (1 << 0) | (1 << 1);
-      else
-        Touch[I->ID] = 1 << 1;
-      
-      if (Cache[I].Keep() == true)
+     if (Cache[I].Keep() == true)
         continue;
       if (FileNames[I->ID].empty() == false || Cache[I].Delete() == true)
         continue;
@@ -85,10 +84,7 @@ bool pkgPackageManager::FixMissing()
    }
    
    // Now downgrade everything that is broken
-//   Cache.ResolveConflicts(Touch);
-   delete [] Touch;
-
-   return Cache.BrokenCount() == 0;
+   return Resolve.ResolveByKeep() == true && Cache.BrokenCount() == 0;   
 }
                                                                        /*}}}*/
 
@@ -450,10 +446,16 @@ bool pkgPackageManager::OrderInstall()
       if ((I->Flags & pkgCache::Flag::ImmediateConf) == pkgCache::Flag::ImmediateConf)
         List->Flag(I,pkgOrderList::Immediate);
    }
+
+   if (Debug == true)
+      clog << "Begining to order" << endl;
    
    if (List->OrderUnpack() == false)
       return _error->Error("Internal ordering error");
 
+   if (Debug == true)
+      clog << "Done ordering" << endl;
+
    for (pkgOrderList::iterator I = List->begin(); I != List->end(); I++)
    {
       PkgIterator Pkg(Cache,*I);
index c6ab82de6dcdf983610b7690351e1356b526d2f2..e0e9dc108d8987a37ac0cabae4674b2d901e255f 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: packagemanager.h,v 1.5 1998/11/13 04:23:31 jgg Exp $
+// $Id: packagemanager.h,v 1.6 1998/11/22 03:20:34 jgg Exp $
 /* ######################################################################
 
    Package Manager - Abstacts the package manager
@@ -42,6 +42,7 @@ class pkgPackageManager
    string *FileNames;
    pkgDepCache &Cache;
    pkgOrderList *List;
+   bool Debug;
    
    // Bring some usefull types into the local scope
    typedef pkgCache::PkgIterator PkgIterator;
index 215a431f6ab36dc6685a3822469f473c770eed66..e00cf53c376f82c915c280e321458d23a83f1869 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: apt-get.cc,v 1.14 1998/11/14 08:11:55 jgg Exp $
+// $Id: apt-get.cc,v 1.15 1998/11/22 03:20:36 jgg Exp $
 /* ######################################################################
    
    apt-get - Cover for dpkg
@@ -110,8 +110,7 @@ void ShowList(ostream &out,string Title,string List)
    description. */
 void ShowBroken(ostream &out,pkgDepCache &Cache)
 {
-   out << "Sorry, but the following packages are broken - this means they have unmet" << endl;
-   out << "dependencies:" << endl;
+   out << "Sorry, but the following packages have unmet dependencies:" << endl;
    pkgCache::PkgIterator I = Cache.PkgBegin();
    for (;I.end() != true; I++)
    {
@@ -128,10 +127,15 @@ void ShowBroken(ostream &out,pkgDepCache &Cache)
         continue;
       }
       
-      for (pkgCache::DepIterator D = Cache[I].InstVerIter(Cache).DependsList(); D.end() == false; D++)
+      for (pkgCache::DepIterator D = Cache[I].InstVerIter(Cache).DependsList(); D.end() == false;)
       {
-        if (Cache.IsImportantDep(D) == false || (Cache[D] &
-                                                 pkgDepCache::DepInstall) != 0)
+        // Compute a single dependency element (glob or)
+        pkgCache::DepIterator Start;
+        pkgCache::DepIterator End;
+        D.GlobOr(Start,End);
+        
+        if (Cache.IsImportantDep(End) == false || 
+            (Cache[End] & pkgDepCache::DepGInstall) == pkgDepCache::DepGInstall)
            continue;
         
         if (First == false)
@@ -139,17 +143,17 @@ void ShowBroken(ostream &out,pkgDepCache &Cache)
               out << ' ';
         First = false;
 
-        cout << ' ' << D.DepType() << ": ";
+        cout << ' ' << End.DepType() << ": " << End.TargetPkg().Name();
         
         // Show a quick summary of the version requirements
-        if (D.TargetVer() != 0)
-           out << " (" << D.CompType() << " " << D.TargetVer() << 
+        if (End.TargetVer() != 0)
+           out << " (" << End.CompType() << " " << End.TargetVer() << 
            ")";
         
         /* Show a summary of the target package if possible. In the case
          of virtual packages we show nothing */
         
-        pkgCache::PkgIterator Targ = D.TargetPkg();
+        pkgCache::PkgIterator Targ = End.TargetPkg();
         if (Targ->ProvidesList == 0)
         {
            out << " but ";
@@ -494,7 +498,7 @@ bool InstallPackages(pkgDepCache &Cache,bool ShwKept,bool Ask = true)
       return _error->Error("The list of sources could not be read.");
    
    // Create the package manager and prepare to download
-   pkgPackageManager PM(Cache);
+   pkgDPkgPM PM(Cache);
    if (PM.GetArchives(&Fetcher,&List,&Recs) == false)
       return false;
 
@@ -531,8 +535,31 @@ bool InstallPackages(pkgDepCache &Cache,bool ShwKept,bool Ask = true)
    // Run it
    if (Fetcher.Run() == false)
       return false;
+
+   // Print out errors
+   bool Failed = false;
+   for (pkgAcquire::Item **I = Fetcher.ItemsBegin(); I != Fetcher.ItemsEnd(); I++)
+   {
+      if ((*I)->Status == pkgAcquire::Item::StatDone &&
+         (*I)->Complete == true)
+        continue;
+      
+      cerr << "Failed to fetch " << (*I)->Describe() << endl;
+      cerr << "  " << (*I)->ErrorText << endl;
+      Failed = true;
+   }
    
-   return true;
+   if (Failed == true && _config->FindB("APT::Fix-Missing",false) == false)
+      return _error->Error("Unable to fetch some archives, maybe try with --fix-missing?");
+
+   // Try to deal with missing package files
+/*   if (PM.FixMissing() == false)
+   {
+      cerr << "Unable to correct missing packages." << endl;
+      return _error->Error("Aborting Install.");
+   }*/
+   
+   return PM.DoInstall();
 }
                                                                        /*}}}*/
 
@@ -941,7 +968,8 @@ int main(int argc,const char *argv[])
       {'y',"assume-yes","APT::Get::Assume-Yes",0},      
       {'f',"fix-broken","APT::Get::Fix-Broken",0},
       {'u',"show-upgraded","APT::Get::Show-Upgraded",0},
-      {'m',"ignore-missing","APT::Get::Fix-Broken",0},
+      {'m',"ignore-missing","APT::Get::Fix-Missing",0},
+      {0,"fix-missing","APT::Get::Fix-Missing",0},
       {0,"ignore-hold","APT::Ingore-Hold",0},      
       {0,"no-upgrade","APT::Get::no-upgrade",0},      
       {'c',"config-file",0,CommandLine::ConfigFile},
index 1c7aac890aaeee7bfa9e1e5920f6043766fca853..52202629a3d74d28b05ae93eb84e972e0f0a883a 100644 (file)
--- a/doc/Bugs
+++ b/doc/Bugs
  Summary: The man pages have references to several non-existent items,
           ftp.conf is only one of them.
  Status: Fix the man pages. This certainly will be done in 0.3.0
-#28391: apt-get install without upgrading
- Summary: Make install leave the package in the keep state if it is already
-          installed
- Status: Will be implemented in 0.3.0
 
 -- Fixed but unclosed things
 #25026: apt: Why do you list the packages you're _not_ doing anything to instead of the ones you are?
          though it failed. I'm paying very close attention to this in
         0.3.x. Not to mention that the clean behavior will be 
         configurable..
+#28391: apt-get install without upgrading
+ Summary: Make install leave the package in the keep state if it is already
+          installed
+ Status: Will be implemented in 0.3.0
+        Try the --no-upgrade options
         
 -- Silly things
 #26592: apt: Problems with ftpd in SunOS 5.6
index 2519fa2ae8e579a7b1a22df4f62830394d9a85ee..ddd7d512d7fdc025e5c431e9a18d1147044d45d4 100644 (file)
@@ -1,4 +1,4 @@
-// $Id: apt.conf,v 1.11 1998/11/11 06:54:18 jgg Exp $
+// $Id: apt.conf,v 1.12 1998/11/22 03:20:38 jgg Exp $
 /* This file is an index of all APT configuration directives. It should
    NOT actually be used as a real config file, though it is a completely
    valid file.
@@ -25,6 +25,7 @@ APT {
      Simulate "false";
      Assume-Yes "false";
      Fix-Broken "false";  
+     Fix-Missing "false";     
      Show-Upgraded "false";
   };
   
@@ -73,6 +74,7 @@ Dir
   Bin {
      methods "/home/jgg/work/apt/build/bin/methods/";
      gzip "/bin/gzip";
+     dpkg "/usr/bin/dpkg";
   };
 };
 
@@ -86,6 +88,7 @@ Debug {
   pkgProblemResolver "false";
   pkgAcquire "false";
   pkgAcquire::Worker "false";
+  pkgDPkgPM "false";
   
   pkgInitialize "false";   // This one will dump the configuration space
 }