[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

apt-0.3.4 improvements



hello!

Last time i look at new version apt-0.3.4 from potato distribution, and
found new usefull function:
$ apt-get remove package_names
It cool indeed, when I remove package, what have a reverse dependencies,
then apt-get suggest to remove
such packages also. But if I want to remove package, what have a
dependencies, i can remove only this package
without all depends packages. Please look to this patch, what add such
function to apt-get.


p.s. how i can subscribe to deity mailing list. At site www.debian.org i
found only apt-developers 
can write to list?

p.p.s. just now i found, what last version is 0.3.6. May be you already
implement this feature ;-)

--
 wbr, Sergey Golod.     email: rover@ttknet.ru
diff -u -r apt-0.3.4/cmdline/apt-get.cc apt-0.3.4-1/cmdline/apt-get.cc
--- apt-0.3.4/cmdline/apt-get.cc	Mon Apr  5 04:25:05 1999
+++ apt-0.3.4-1/cmdline/apt-get.cc	Sun May  9 23:27:19 1999
@@ -766,6 +766,10 @@
    bool DefRemove = false;
    if (strcasecmp(CmdL.FileList[0],"remove") == 0)
       DefRemove = true;
+
+   bool DefUnInstall = false;
+   if (strcasecmp(CmdL.FileList[0],"uninstall") == 0)
+      DefUnInstall = true;
    
    for (const char **I = CmdL.FileList + 1; *I != 0; I++)
    {
@@ -858,7 +862,49 @@
 	 Cache->MarkDelete(Pkg);
 	 continue;
       }
-      
+
+      // Select all packages and it's dependencies
+      if (DefUnInstall == true)
+      {
+	 unsigned int MaxDepCount = _config->FindI("APT::Get::Depends-depth",1);
+	 string List;
+	 
+	 if (Pkg->CurrentVer == 0)
+	    return _error->Error("Package %s is not installed",S);
+
+	 for (pkgCache::DepIterator Dep = Pkg.CurrentVer().DependsList(); Dep.end() == false; Dep++)
+	 // check only 'Depends' and 'Pre-depends' dependency
+	    if (Dep->Type == pkgCache::Dep::Depends || Dep->Type == pkgCache::Dep::PreDepends)
+	    {
+	       // check Dep.TargetPkg() for reverse dependes , then count installed packages
+	       unsigned int DepCount = 0;
+	       
+	       for (pkgCache::DepIterator RevDep = Dep.TargetPkg().RevDependsList(); RevDep.end() == false; RevDep++)
+	       {
+	          if (RevDep.ParentPkg()->CurrentVer == 0)
+		     continue;
+
+		  if (RevDep->Type == pkgCache::Dep::Depends || RevDep->Type == pkgCache::Dep::PreDepends)
+		     DepCount++;
+	       }
+
+	       // only one dependency allowed by default
+	       if (DepCount <= MaxDepCount)
+	       {
+		  List += string(Dep.TargetPkg().Name()) + " ";	       
+
+		  Fix.Remove(Dep.TargetPkg());
+		  Cache->MarkDelete(Dep.TargetPkg());
+	       }
+	    }
+
+	 ShowList(c1out, string("The following packages probally also will be UNINSTALLED with '") + Pkg.Name() + "':", List);
+	 
+	 Fix.Remove(Pkg);
+	 Cache->MarkDelete(Pkg);
+	 continue;
+      }
+
       // Install it
       Cache->MarkInstall(Pkg,false);
       if (State.Install() == false)
@@ -1105,6 +1151,7 @@
    cout << "   upgrade - Perform an upgrade" << endl;
    cout << "   install - Install new packages (pkg is libc6 not libc6.deb)" << endl;
    cout << "   remove - Remove packages" << endl;
+   cout << "   uninstall - Uninstall packages" << endl;
    cout << "   dist-upgrade - Distribution upgrade, see apt-get(8)" << endl;
    cout << "   dselect-upgrade - Follow dselect selections" << endl;
    cout << "   clean - Erase downloaded archive files" << endl;
@@ -1123,6 +1170,7 @@
    cout << "  -u  Show a list of upgraded packages as well" << endl;
    cout << "  -c=? Read this configuration file" << endl;
    cout << "  -o=? Set an arbitary configuration option, eg -o dir::cache=/tmp" << endl;
+   cout << "  --depth=? Set maximal depends depth when uninstall packages" << endl;
    cout << "See the apt-get(8), sources.list(5) and apt.conf(5) manual" << endl;
    cout << "pages for more information." << endl;
    return 100;
@@ -1181,11 +1229,13 @@
       {0,"print-uris","APT::Get::Print-URIs",0},
       {'c',"config-file",0,CommandLine::ConfigFile},
       {'o',"option",0,CommandLine::ArbItem},
+      {0,"depth","APT::Get::Depends-depth",CommandLine::IntLevel},
       {0,0,0,0}};
    CommandLine::Dispatch Cmds[] = {{"update",&DoUpdate},
                                    {"upgrade",&DoUpgrade},
                                    {"install",&DoInstall},
                                    {"remove",&DoInstall},
+                                   {"uninstall",&DoInstall},
                                    {"dist-upgrade",&DoDistUpgrade},
                                    {"dselect-upgrade",&DoDSelectUpgrade},
                                    {"clean",&DoClean},
diff -u -r apt-0.3.4/debian/changelog apt-0.3.4-1/debian/changelog
--- apt-0.3.4/debian/changelog	Mon Apr  5 04:44:43 1999
+++ apt-0.3.4-1/debian/changelog	Sun May  9 23:40:41 1999
@@ -1,3 +1,9 @@
+apt (0.3.4-1) unstable; urgency=low
+
+  * Add uninstall command
+
+ -- Sergey Golod <rover@ttknet.ru>  Sun,  9 May 1999 18:26:44 +0500
+
 apt (0.3.4) unstable; urgency=low
 
   * Release for Ben while he is out of town.

Reply to: