Просмотр исходного кода

By gosh, I think it works
Author: jgg
Date: 1998-11-22 03:20:30 GMT
By gosh, I think it works

Arch Librarian лет назад: 22
Родитель
Сommit
30e1eab533
9 измененных файлов с 147 добавлено и 56 удалено
  1. 35 8
      apt-pkg/acquire-item.cc
  2. 10 4
      apt-pkg/acquire-item.h
  3. 32 10
      apt-pkg/deb/dpkgpm.cc
  4. 2 1
      apt-pkg/init.cc
  5. 16 14
      apt-pkg/packagemanager.cc
  6. 2 1
      apt-pkg/packagemanager.h
  7. 41 13
      cmdline/apt-get.cc
  8. 5 4
      doc/Bugs
  9. 4 1
      doc/examples/apt.conf

+ 35 - 8
apt-pkg/acquire-item.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
 // 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
    Acquire Item - Item to acquire
@@ -224,6 +224,14 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string MD5)
    Mode = "gzip";
    Mode = "gzip";
 }
 }
 									/*}}}*/
 									/*}}}*/
+// AcqIndex::Describe - Describe the Item				/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string pkgAcqIndex::Describe()
+{
+   return Location->PackagesURI();
+}
+									/*}}}*/
 
 
 // AcqIndexRel::pkgAcqIndexRel - Constructor				/*{{{*/
 // AcqIndexRel::pkgAcqIndexRel - Constructor				/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
@@ -302,13 +310,23 @@ void pkgAcqIndexRel::Done(string Message,unsigned long Size,string MD5)
    Rename(DestFile,FinalFile);
    Rename(DestFile,FinalFile);
 }
 }
 									/*}}}*/
 									/*}}}*/
+// AcqIndexRel::Describe - Describe the Item				/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string pkgAcqIndexRel::Describe()
+{
+   return Location->ReleaseURI();
+}
+									/*}}}*/
 
 
 // AcqArchive::AcqArchive - Constructor					/*{{{*/
 // AcqArchive::AcqArchive - Constructor					/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
 pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
 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
    // Select a source
    pkgCache::VerFileIterator Vf = Version.FileList();
    pkgCache::VerFileIterator Vf = Version.FileList();
@@ -355,7 +373,7 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
 	    Complete = true;
 	    Complete = true;
 	    Local = true;
 	    Local = true;
 	    Status = StatDone;
 	    Status = StatDone;
-	    DestFile = FinalFile;
+	    StoreFilename = DestFile = FinalFile;
 	    return;
 	    return;
 	 }
 	 }
 	 
 	 
@@ -415,11 +433,11 @@ void pkgAcqArchive::Done(string Message,unsigned long Size,string Md5Hash)
    }
    }
 
 
    Complete = true;
    Complete = true;
-   
-   // We have to copy it into place
+
+   // Reference filename
    if (FileName != DestFile)
    if (FileName != DestFile)
    {
    {
-      DestFile = FileName;
+      StoreFilename = DestFile = FileName;
       Local = true;
       Local = true;
       return;
       return;
    }
    }
@@ -429,7 +447,16 @@ void pkgAcqArchive::Done(string Message,unsigned long Size,string Md5Hash)
    FinalFile += flNotDir(DestFile);
    FinalFile += flNotDir(DestFile);
    Rename(DestFile,FinalFile);
    Rename(DestFile,FinalFile);
    
    
-   DestFile = FinalFile;
+   StoreFilename = DestFile = FinalFile;
    Complete = true;
    Complete = true;
 }
 }
 									/*}}}*/
 									/*}}}*/
+// AcqArchive::Describe - Describe the Item				/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string pkgAcqArchive::Describe()
+{
+   return Desc.URI;
+}
+									/*}}}*/
+

+ 10 - 4
apt-pkg/acquire-item.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
 // 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
    Acquire Item - Item to acquire
@@ -46,7 +46,7 @@ class pkgAcquire::Item
    unsigned long ID;
    unsigned long ID;
    bool Complete;
    bool Complete;
    bool Local;
    bool Local;
-   
+
    // Number of queues we are inserted into
    // Number of queues we are inserted into
    unsigned int QueueCounter;
    unsigned int QueueCounter;
    
    
@@ -56,7 +56,8 @@ class pkgAcquire::Item
    virtual void Failed(string Message);
    virtual void Failed(string Message);
    virtual void Done(string Message,unsigned long Size,string Md5Hash);
    virtual void Done(string Message,unsigned long Size,string Md5Hash);
    virtual void Start(string Message,unsigned long Size);
    virtual void Start(string Message,unsigned long Size);
-
+   virtual string Describe() = 0;
+   
    virtual string Custom600Headers() {return string();};
    virtual string Custom600Headers() {return string();};
       
       
    Item(pkgAcquire *Owner);
    Item(pkgAcquire *Owner);
@@ -77,6 +78,7 @@ class pkgAcqIndex : public pkgAcquire::Item
    
    
    virtual void Done(string Message,unsigned long Size,string Md5Hash);   
    virtual void Done(string Message,unsigned long Size,string Md5Hash);   
    virtual string Custom600Headers();
    virtual string Custom600Headers();
+   virtual string Describe();
 
 
    pkgAcqIndex(pkgAcquire *Owner,const pkgSourceList::Item *Location);
    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 void Done(string Message,unsigned long Size,string Md5Hash);   
    virtual string Custom600Headers();
    virtual string Custom600Headers();
+   virtual string Describe();
    
    
    pkgAcqIndexRel(pkgAcquire *Owner,const pkgSourceList::Item *Location);
    pkgAcqIndexRel(pkgAcquire *Owner,const pkgSourceList::Item *Location);
 };
 };
@@ -107,13 +110,16 @@ class pkgAcqArchive : public pkgAcquire::Item
    pkgSourceList *Sources;
    pkgSourceList *Sources;
    pkgRecords *Recs;
    pkgRecords *Recs;
    string MD5;
    string MD5;
+   string &StoreFilename;
    
    
    public:
    public:
    
    
    virtual void Done(string Message,unsigned long Size,string Md5Hash);
    virtual void Done(string Message,unsigned long Size,string Md5Hash);
+   virtual string Describe();
    
    
    pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
    pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
-		 pkgRecords *Recs,pkgCache::VerIterator const &Version);
+		 pkgRecords *Recs,pkgCache::VerIterator const &Version,
+		 string &StoreFilename);
 };
 };
 
 
 #endif
 #endif

+ 32 - 10
apt-pkg/deb/dpkgpm.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
 // 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
    DPKG Package Manager - Provide an interface to dpkg
@@ -83,45 +83,67 @@ bool pkgDPkgPM::Go()
    {
    {
       vector<Item>::iterator J = I;
       vector<Item>::iterator J = I;
       for (; J != List.end() && J->Op == I->Op; J++);
       for (; J != List.end() && J->Op == I->Op; J++);
-      
+
       // Generate the argument list
       // Generate the argument list
       const char *Args[400];
       const char *Args[400];
       if (J - I > 350)
       if (J - I > 350)
 	 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)
       switch (I->Op)
       {
       {
 	 case Item::Remove:
 	 case Item::Remove:
 	 Args[n++] = "--force-depends";
 	 Args[n++] = "--force-depends";
+	 Size += strlen(Args[n-1]);
 	 Args[n++] = "--force-remove-essential";
 	 Args[n++] = "--force-remove-essential";
+	 Size += strlen(Args[n-1]);
 	 Args[n++] = "--remove";
 	 Args[n++] = "--remove";
+	 Size += strlen(Args[n-1]);
 	 break;
 	 break;
 	 
 	 
 	 case Item::Configure:
 	 case Item::Configure:
 	 Args[n++] = "--configure";
 	 Args[n++] = "--configure";
+	 Size += strlen(Args[n-1]);
 	 break;
 	 break;
 	 
 	 
 	 case Item::Install:
 	 case Item::Install:
 	 Args[n++] = "--unpack";
 	 Args[n++] = "--unpack";
+	 Size += strlen(Args[n-1]);
 	 break;
 	 break;
       }
       }
       
       
       // Write in the file or package names
       // Write in the file or package names
       if (I->Op == Item::Install)
       if (I->Op == Item::Install)
-	 for (;I != J; I++)
+      {
+	 for (;I != J && Size < 1024; I++)
+	 {
 	    Args[n++] = I->File.c_str();
 	    Args[n++] = I->File.c_str();
+	    Size += strlen(Args[n-1]);
+	 }
+      }      
       else
       else
-	 for (;I != J; I++)
+      {
+	 for (;I != J && Size < 1024; I++)
+	 {
 	    Args[n++] = I->Pkg.Name();
 	    Args[n++] = I->Pkg.Name();
+	    Size += strlen(Args[n-1]);
+	 }	 
+      }      
       Args[n] = 0;
       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;
       cout << flush;
       clog << flush;
       clog << flush;
       cerr << flush;
       cerr << flush;

+ 2 - 1
apt-pkg/init.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
 // 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
    Init - Initialize the package library
@@ -45,6 +45,7 @@ bool pkgInitialize(Configuration &Cnf)
    Cnf.Set("Dir::Etc::sourcelist","sources.list");
    Cnf.Set("Dir::Etc::sourcelist","sources.list");
    Cnf.Set("Dir::Etc::main","apt.conf");
    Cnf.Set("Dir::Etc::main","apt.conf");
    Cnf.Set("Dir::Bin::methods","/usr/lib/apt/methods");
    Cnf.Set("Dir::Bin::methods","/usr/lib/apt/methods");
+   Cnf.Set("Dir::Bin::dpkg","/usr/bin/dpkg");
    
    
    // Read the main config file
    // Read the main config file
    string FName = Cnf.FindFile("Dir::Etc::main");
    string FName = Cnf.FindFile("Dir::Etc::main");

+ 16 - 14
apt-pkg/packagemanager.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
 // 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
    Package Manager - Abstacts the package manager
@@ -22,6 +22,8 @@
 #include <apt-pkg/error.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/version.h>
 #include <apt-pkg/version.h>
 #include <apt-pkg/acquire-item.h>
 #include <apt-pkg/acquire-item.h>
+#include <apt-pkg/algorithms.h>
+#include <apt-pkg/configuration.h>
 									/*}}}*/
 									/*}}}*/
 
 
 // PM::PackageManager - Constructor					/*{{{*/
 // PM::PackageManager - Constructor					/*{{{*/
@@ -31,6 +33,7 @@ pkgPackageManager::pkgPackageManager(pkgDepCache &Cache) : Cache(Cache)
 {
 {
    FileNames = new string[Cache.Head().PackageCount];
    FileNames = new string[Cache.Head().PackageCount];
    List = 0;
    List = 0;
+   Debug = _config->FindB("Debug::pkgPackageManager",false);
 }
 }
 									/*}}}*/
 									/*}}}*/
 // PM::PackageManager - Destructor					/*{{{*/
 // PM::PackageManager - Destructor					/*{{{*/
@@ -57,7 +60,8 @@ bool pkgPackageManager::GetArchives(pkgAcquire *Owner,pkgSourceList *Sources,
 	  Cache[I].Delete() == true)
 	  Cache[I].Delete() == true)
 	 continue;
 	 continue;
       
       
-      new pkgAcqArchive(Owner,Sources,Recs,Cache[I].InstVerIter(Cache));
+      new pkgAcqArchive(Owner,Sources,Recs,Cache[I].InstVerIter(Cache),
+			FileNames[I->ID]);
    }
    }
    return true;
    return true;
 }
 }
@@ -68,16 +72,11 @@ bool pkgPackageManager::GetArchives(pkgAcquire *Owner,pkgSourceList *Sources,
    be downloaded. */
    be downloaded. */
 bool pkgPackageManager::FixMissing()
 bool pkgPackageManager::FixMissing()
 {
 {
-   unsigned char *Touch = new unsigned char[Cache.Head().PackageCount];
+   pkgProblemResolver Resolve(Cache);
+   
    for (PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
    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;
 	 continue;
       if (FileNames[I->ID].empty() == false || Cache[I].Delete() == true)
       if (FileNames[I->ID].empty() == false || Cache[I].Delete() == true)
 	 continue;
 	 continue;
@@ -85,10 +84,7 @@ bool pkgPackageManager::FixMissing()
    }
    }
    
    
    // Now downgrade everything that is broken
    // 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)
       if ((I->Flags & pkgCache::Flag::ImmediateConf) == pkgCache::Flag::ImmediateConf)
 	 List->Flag(I,pkgOrderList::Immediate);
 	 List->Flag(I,pkgOrderList::Immediate);
    }
    }
+
+   if (Debug == true)
+      clog << "Begining to order" << endl;
    
    
    if (List->OrderUnpack() == false)
    if (List->OrderUnpack() == false)
       return _error->Error("Internal ordering error");
       return _error->Error("Internal ordering error");
 
 
+   if (Debug == true)
+      clog << "Done ordering" << endl;
+
    for (pkgOrderList::iterator I = List->begin(); I != List->end(); I++)
    for (pkgOrderList::iterator I = List->begin(); I != List->end(); I++)
    {
    {
       PkgIterator Pkg(Cache,*I);
       PkgIterator Pkg(Cache,*I);

+ 2 - 1
apt-pkg/packagemanager.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
 // 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
    Package Manager - Abstacts the package manager
@@ -42,6 +42,7 @@ class pkgPackageManager
    string *FileNames;
    string *FileNames;
    pkgDepCache &Cache;
    pkgDepCache &Cache;
    pkgOrderList *List;
    pkgOrderList *List;
+   bool Debug;
    
    
    // Bring some usefull types into the local scope
    // Bring some usefull types into the local scope
    typedef pkgCache::PkgIterator PkgIterator;
    typedef pkgCache::PkgIterator PkgIterator;

+ 41 - 13
cmdline/apt-get.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
 // 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
    apt-get - Cover for dpkg
@@ -110,8 +110,7 @@ void ShowList(ostream &out,string Title,string List)
    description. */
    description. */
 void ShowBroken(ostream &out,pkgDepCache &Cache)
 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();
    pkgCache::PkgIterator I = Cache.PkgBegin();
    for (;I.end() != true; I++)
    for (;I.end() != true; I++)
    {
    {
@@ -128,10 +127,15 @@ void ShowBroken(ostream &out,pkgDepCache &Cache)
 	 continue;
 	 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;
 	    continue;
 	 
 	 
 	 if (First == false)
 	 if (First == false)
@@ -139,17 +143,17 @@ void ShowBroken(ostream &out,pkgDepCache &Cache)
 	       out << ' ';
 	       out << ' ';
 	 First = false;
 	 First = false;
 
 
-	 cout << ' ' << D.DepType() << ": ";
+	 cout << ' ' << End.DepType() << ": " << End.TargetPkg().Name();
 	 
 	 
 	 // Show a quick summary of the version requirements
 	 // 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
 	 /* Show a summary of the target package if possible. In the case
 	  of virtual packages we show nothing */
 	  of virtual packages we show nothing */
 	 
 	 
-	 pkgCache::PkgIterator Targ = D.TargetPkg();
+	 pkgCache::PkgIterator Targ = End.TargetPkg();
 	 if (Targ->ProvidesList == 0)
 	 if (Targ->ProvidesList == 0)
 	 {
 	 {
 	    out << " but ";
 	    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.");
       return _error->Error("The list of sources could not be read.");
    
    
    // Create the package manager and prepare to download
    // Create the package manager and prepare to download
-   pkgPackageManager PM(Cache);
+   pkgDPkgPM PM(Cache);
    if (PM.GetArchives(&Fetcher,&List,&Recs) == false)
    if (PM.GetArchives(&Fetcher,&List,&Recs) == false)
       return false;
       return false;
 
 
@@ -531,8 +535,31 @@ bool InstallPackages(pkgDepCache &Cache,bool ShwKept,bool Ask = true)
    // Run it
    // Run it
    if (Fetcher.Run() == false)
    if (Fetcher.Run() == false)
       return 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},      
       {'y',"assume-yes","APT::Get::Assume-Yes",0},      
       {'f',"fix-broken","APT::Get::Fix-Broken",0},
       {'f',"fix-broken","APT::Get::Fix-Broken",0},
       {'u',"show-upgraded","APT::Get::Show-Upgraded",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,"ignore-hold","APT::Ingore-Hold",0},      
       {0,"no-upgrade","APT::Get::no-upgrade",0},      
       {0,"no-upgrade","APT::Get::no-upgrade",0},      
       {'c',"config-file",0,CommandLine::ConfigFile},
       {'c',"config-file",0,CommandLine::ConfigFile},

+ 5 - 4
doc/Bugs

@@ -34,10 +34,6 @@
  Summary: The man pages have references to several non-existent items,
  Summary: The man pages have references to several non-existent items,
           ftp.conf is only one of them.
           ftp.conf is only one of them.
  Status: Fix the man pages. This certainly will be done in 0.3.0
  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
 -- Fixed but unclosed things
 #25026: apt: Why do you list the packages you're _not_ doing anything to instead of the ones you are?
 #25026: apt: Why do you list the packages you're _not_ doing anything to instead of the ones you are?
@@ -96,6 +92,11 @@
          though it failed. I'm paying very close attention to this in
          though it failed. I'm paying very close attention to this in
 	 0.3.x. Not to mention that the clean behavior will be 
 	 0.3.x. Not to mention that the clean behavior will be 
 	 configurable..
 	 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
 -- Silly things
 #26592: apt: Problems with ftpd in SunOS 5.6
 #26592: apt: Problems with ftpd in SunOS 5.6

+ 4 - 1
doc/examples/apt.conf

@@ -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
 /* 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
    NOT actually be used as a real config file, though it is a completely
    valid file.
    valid file.
@@ -25,6 +25,7 @@ APT {
      Simulate "false";
      Simulate "false";
      Assume-Yes "false";
      Assume-Yes "false";
      Fix-Broken "false";  
      Fix-Broken "false";  
+     Fix-Missing "false";     
      Show-Upgraded "false";
      Show-Upgraded "false";
   };
   };
   
   
@@ -73,6 +74,7 @@ Dir
   Bin {
   Bin {
      methods "/home/jgg/work/apt/build/bin/methods/";
      methods "/home/jgg/work/apt/build/bin/methods/";
      gzip "/bin/gzip";
      gzip "/bin/gzip";
+     dpkg "/usr/bin/dpkg";
   };
   };
 };
 };
 
 
@@ -86,6 +88,7 @@ Debug {
   pkgProblemResolver "false";
   pkgProblemResolver "false";
   pkgAcquire "false";
   pkgAcquire "false";
   pkgAcquire::Worker "false";
   pkgAcquire::Worker "false";
+  pkgDPkgPM "false";
   
   
   pkgInitialize "false";   // This one will dump the configuration space
   pkgInitialize "false";   // This one will dump the configuration space
 }
 }