]> git.saurik.com Git - apt.git/commitdiff
* merged the "apt--install-task" branch
authorMichael Vogt <egon@bottom>
Sun, 1 Oct 2006 23:03:40 +0000 (01:03 +0200)
committerMichael Vogt <egon@bottom>
Sun, 1 Oct 2006 23:03:40 +0000 (01:03 +0200)
1  2 
cmdline/apt-get.cc
debian/changelog

diff --combined cmdline/apt-get.cc
index 4dfb3325c07009141bec0989bf6782946874a730,09bf572a5d6a2a9a88c01469e82172298052d3ce..cb0690bdfa2eda35f2fa5f6dfbf58dacbb64249e
@@@ -60,7 -60,6 +60,7 @@@
  #include <errno.h>
  #include <regex.h>
  #include <sys/wait.h>
 +#include <sstream>
                                                                        /*}}}*/
  
  using namespace std;
@@@ -629,8 -628,6 +629,8 @@@ void CacheFile::Sort(
     and verifies that the system is OK. */
  bool CacheFile::CheckDeps(bool AllowBroken)
  {
 +   bool FixBroken = _config->FindB("APT::Get::Fix-Broken",false);
 +
     if (_error->PendingError() == true)
        return false;
  
     if (pkgApplyStatus(*DCache) == false)
        return false;
     
 +   if (_config->FindB("APT::Get::Fix-Policy-Broken",false) == true)
 +   {
 +      FixBroken = true;
 +      if ((DCache->PolicyBrokenCount() > 0))
 +      {
 +       // upgrade all policy-broken packages with ForceImportantDeps=True
 +       for (pkgCache::PkgIterator I = Cache->PkgBegin(); !I.end(); I++)
 +          if ((*DCache)[I].NowPolicyBroken() == true) 
 +             DCache->MarkInstall(I,true,0, false, true);
 +      }
 +   }
 +
     // Nothing is broken
     if (DCache->BrokenCount() == 0 || AllowBroken == true)
        return true;
  
     // Attempt to fix broken things
 -   if (_config->FindB("APT::Get::Fix-Broken",false) == true)
 +   if (FixBroken == true)
     {
        c1out << _("Correcting dependencies...") << flush;
        if (pkgFixBroken(*DCache) == false || DCache->BrokenCount() != 0)
@@@ -1010,7 -995,7 +1010,7 @@@ bool InstallPackages(CacheFile &Cache,b
         cerr << _("Unable to correct missing packages.") << endl;
         return _error->Error(_("Aborting install."));
        }
 -               
 +
        _system->UnLock();
        int status_fd = _config->FindI("APT::Status-Fd",-1);
        pkgPackageManager::OrderResult Res = PM->DoInstall(status_fd);
@@@ -1160,11 -1145,9 +1160,11 @@@ bool TryToInstall(pkgCache::PkgIterato
     else
        ExpectedInst++;
     
 -   // Install it with autoinstalling enabled.
 -   if (State.InstBroken() == true && BrokenFix == false)
 +   // Install it with autoinstalling enabled (if we not respect the minial
 +   // required deps or the policy)
 +   if ((State.InstBroken() == true || State.InstPolicyBroken() == true) && BrokenFix == false)
        Cache.MarkInstall(Pkg,true);
 +
     return true;
  }
                                                                        /*}}}*/
@@@ -1403,52 -1386,6 +1403,52 @@@ bool DoUpdate(CommandLine &CmdL
     return true;
  }
                                                                        /*}}}*/
 +// DoAutomaticRemove - Remove all automatic unused packages           /*{{{*/
 +// ---------------------------------------------------------------------
 +/* Remove unused automatic packages */
 +bool DoAutomaticRemove(CacheFile &Cache)
 +{
 +   if(_config->FindI("Debug::pkgAutoRemove",false))
 +      std::cout << "DoAutomaticRemove()" << std::endl;
 +
 +   if (_config->FindB("APT::Get::Remove",true) == false)
 +      return _error->Error(_("We are not supposed to delete stuff, can't "
 +                           "start AutoRemover"));
 +
 +   {
 +     pkgDepCache::ActionGroup group(*Cache);
 +
 +     // look over the cache to see what can be removed
 +     for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg)
 +       {
 +       if (Cache[Pkg].Garbage)
 +         {
 +           if(Pkg.CurrentVer() != 0 || Cache[Pkg].Install())
 +             fprintf(stdout,"We could delete %s\n", Pkg.Name());
 +
 +           if(Pkg.CurrentVer() != 0 && Pkg->CurrentState != pkgCache::State::ConfigFiles)
 +             Cache->MarkDelete(Pkg, _config->FindB("APT::Get::Purge", false));
 +           else
 +             Cache->MarkKeep(Pkg, false, false);
 +         }
 +       }
 +   }
 +
 +   // Now see if we destroyed anything
 +   if (Cache->BrokenCount() != 0)
 +   {
 +      c1out << _("Hmm, seems like the AutoRemover destroyed something which really\n"
 +               "shouldn't happen. Please file a bug report against apt.") << endl;
 +      c1out << endl;
 +      c1out << _("The following information may help to resolve the situation:") << endl;
 +      c1out << endl;
 +      ShowBroken(c1out,Cache,false);
 +
 +      return _error->Error(_("Internal Error, AutoRemover broke stuff"));
 +   }
 +   return true;
 +}
 +
  // DoUpgrade - Upgrade all packages                                   /*{{{*/
  // ---------------------------------------------------------------------
  /* Upgrade all packages without installing new packages or erasing old
@@@ -1469,6 -1406,51 +1469,51 @@@ bool DoUpgrade(CommandLine &CmdL
     return InstallPackages(Cache,true);
  }
                                                                        /*}}}*/
+ // DoInstallTask - Install task from the command line                 /*{{{*/
+ // ---------------------------------------------------------------------
+ /* Install named task */
+ bool TryInstallTask(pkgDepCache &Cache, pkgProblemResolver &Fix, 
+                   bool BrokenFix,
+                   unsigned int& ExpectedInst, 
+                   const char *taskname)
+ {
+    const char *start, *end;
+    pkgCache::PkgIterator Pkg;
+    char buf[64*1024];
+    regex_t Pattern;
+    // get the records
+    pkgRecords Recs(Cache);
+    // build regexp for the task
+    char S[300];
+    snprintf(S, sizeof(S), "^Task:.*[^a-z]%s[^a-z].*\n", taskname);
+    regcomp(&Pattern,S, REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
+    
+    bool found = false;
+    bool res = true;
+    for (Pkg = Cache.PkgBegin(); Pkg.end() == false; Pkg++)
+    {
+       pkgCache::VerIterator ver = Cache[Pkg].CandidateVerIter(Cache);
+       if(ver.end())
+        continue;
+       pkgRecords::Parser &parser = Recs.Lookup(ver.FileList());
+       parser.GetRec(start,end);
+       strncpy(buf, start, end-start);
+       buf[end-start] = 0x0;
+       if (regexec(&Pattern,buf,0,0,0) != 0)
+        continue;
+       res &= TryToInstall(Pkg,Cache,Fix,false,BrokenFix,ExpectedInst);
+       found = true;
+    }
+    
+    if(!found)
+       _error->Error(_("Couldn't find task %s"),taskname);
+    regfree(&Pattern);
+    return res;
+ }
  // DoInstall - Install packages from the command line                 /*{{{*/
  // ---------------------------------------------------------------------
  /* Install named packages */
@@@ -1491,11 -1473,6 +1536,11 @@@ bool DoInstall(CommandLine &CmdL
     bool DefRemove = false;
     if (strcasecmp(CmdL.FileList[0],"remove") == 0)
        DefRemove = true;
 +   else if (strcasecmp(CmdL.FileList[0], "autoremove") == 0)
 +     {
 +       _config->Set("APT::Get::AutomaticRemove", "true");
 +       DefRemove = true;
 +     }
  
     for (const char **I = CmdL.FileList + 1; *I != 0; I++)
     {
        bool Remove = DefRemove;
        char *VerTag = 0;
        bool VerIsRel = false;
+       // this is a task!
+       if (Length >= 1 && S[Length - 1] == '^')
+       {
+        S[--Length] = 0;
+        // tasks must always be confirmed
+        ExpectedInst += 1000;
+        // see if we can install it
+        TryInstallTask(Cache, Fix, BrokenFix, ExpectedInst, S);
+        continue;
+       }
        while (Cache->FindPkg(S).end() == true)
        {
         // Handle an optional end tag indicating what to do
            S[--Length] = 0;
            continue;
         }
-        
         char *Slash = strchr(S,'=');
         if (Slash != 0)
         {
        return _error->Error(_("Broken packages"));
     }   
     
 +   if (_config->FindB("APT::Get::AutomaticRemove")) {
 +      if (!DoAutomaticRemove(Cache)) 
 +       return false;
 +   }
 +
     /* Print out a list of packages that are going to be installed extra
        to what the user asked */
     if (Cache->InstCount() != ExpectedInst)
         
         if (*J == 0) {
            List += string(I.Name()) + " ";
 -        VersionsList += string(Cache[I].CandVersion) + "\n";
 -     }
 +          VersionsList += string(Cache[I].CandVersion) + "\n";
 +       }
        }
        
        ShowList(c1out,_("The following extra packages will be installed:"),List,VersionsList);
@@@ -1805,8 -1789,6 +1862,8 @@@ bool DoDSelectUpgrade(CommandLine &CmdL
     if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
        return false;
     
 +   pkgDepCache::ActionGroup group(Cache);
 +
     // Install everything with the install flag set
     pkgCache::PkgIterator I = Cache->PkgBegin();
     for (;I.end() != true; I++)
@@@ -2559,7 -2541,6 +2616,7 @@@ void GetInitialize(
     _config->Set("APT::Get::Fix-Broken",false);
     _config->Set("APT::Get::Force-Yes",false);
     _config->Set("APT::Get::List-Cleanup",true);
 +   _config->Set("APT::Get::AutomaticRemove",false);
  }
                                                                        /*}}}*/
  // SigWinch - Window size change signal handler                               /*{{{*/
@@@ -2615,10 -2596,7 +2672,10 @@@ int main(int argc,const char *argv[]
        {0,"remove","APT::Get::Remove",0},
        {0,"only-source","APT::Get::Only-Source",0},
        {0,"arch-only","APT::Get::Arch-Only",0},
 +      {0,"auto-remove","APT::Get::AutomaticRemove",0},
        {0,"allow-unauthenticated","APT::Get::AllowUnauthenticated",0},
 +      {0,"install-recommends","APT::Install-Recommends",CommandLine::Boolean},
 +      {0,"fix-policy","APT::Get::Fix-Policy-Broken",0},
        {'c',"config-file",0,CommandLine::ConfigFile},
        {'o',"option",0,CommandLine::ArbItem},
        {0,0,0,0}};
                                     {"upgrade",&DoUpgrade},
                                     {"install",&DoInstall},
                                     {"remove",&DoInstall},
 +                                 {"autoremove",&DoInstall},
                                     {"dist-upgrade",&DoDistUpgrade},
                                     {"dselect-upgrade",&DoDSelectUpgrade},
                                   {"build-dep",&DoBuildDep},
diff --combined debian/changelog
index 94dba2813450dd8f7b267b2de2f220911f05a9b8,4c5841057ef254ee048af1fe08ca0ef1ab48a94f..7768234f54b07811b22f602f9c4e268dffa94b3a
@@@ -1,31 -1,4 +1,32 @@@
 -apt (0.6.45.1) unstable; urgency=low
 +apt (0.6.46.1exp1) experimental; urgency=low
 +
 +  * merged "install-recommends" branch (ABI break): 
 +    - new "--install-recommends"
 +    - install new recommends on "upgrade" if --install-recommends is 
 +      given
 +    - new "--fix-policy" option to install all packages with unmet
 +      important dependencies (usefull with --install-recommends to
 +      see what not-installed recommends are on the system)
 +    - fix of recommended packages display (only show CandidateVersion
 +      fix or-group handling)
++  * merged "install-task" branch (use with "apt-get install taskname^")
 +  * methods/gzip.cc:
 +    - deal with empty files 
 +  * Applied patch from Daniel Schepler to make apt bin-NMU able.  
 +  * rebuild against current g++ because of:
 +    http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29289
 +  * fix broken i18n in the dpkg progress reporting, thanks to 
 +    Frans Pop and Steinar Gunderson. (closes: #389261)
 +  * Merged from Christian Perrier bzr branch:
 +    * fi.po: Updated to 514t. Closes: #390149
 +    * eu.po: Updated to 514t. Closes: #389725
 +    * vi.po: Updated to 514t. Closes: #388555
 +  * make the internal buffer in pkgTagFile grow dynamically
 +    (closes: #388708)
 +  
 + --
 +
 +apt (0.6.46) unstable; urgency=low
  
    * debian/control:
      - switched to libdb4.4 for building (closes: #381019)
    * doc/examples/sources.list:
      - removed non-us.debian.org from the example (closes: #380030,#316196)
    * Merged from Christian Perrier bzr branch:
 +    * ro.po: Updated to 514t. Closes: #388402
 +    * dz.po: Updated to 514t. Closes: #388184
 +    * it.po: Fixed typos. Closes: #387812
 +    * ku.po: New kurdish translation. Closes: #387766
      * sk.po: Updated to 514t. Closes: #386851
      * ja.po: Updated to 514t. Closes: #386537
      * gl.po: Updated to 514t. Closes: #386397
      - reverted MMap use in the tagfile because it does not work 
        across pipes (closes: #383487) 
    
 - --
 + -- Michael Vogt <mvo@debian.org>  Thu, 21 Sep 2006 10:25:03 +0200
  
  apt (0.6.45) unstable; urgency=low
  
    * apt-pkg/contrib/sha256.cc:
      - fixed the sha256 generation (closes: #378183)
    * ftparchive/cachedb.cc:
 -    - applied patch from Anthony Towns to fix Clean() function
 +    - applied patch from ajt to fix Clean() function
        (closes: #379576)
    * doc/apt-get.8.xml:
      - fix path to the apt user build (Closes: #375640)
@@@ -84,6 -53,9 +85,6 @@@
      - fix for string mangling, closes: #373864
    * apt-pkg/acquire-item.cc:
      - check for bzip2 in /bin (closes: #377391)
 -  * apt-pkg/tagfile.cc:
 -    - make it work on non-mapable files again, thanks 
 -      to James Troup for confirming the fix (closes: #376777)
    * Merged from Christian Perrier bzr branch:
      * ko.po: Updated to 512t. Closes: #378901
      * hu.po: Updated to 512t. Closes: #376330
      * dz.po: New Dzongkha translation: 512t
      * ro.po: Updated to 512t
      * eu.po: Updated
 +    * eu.po: Updated
 +  * fix apt-get dist-upgrade
 +  * fix warning if no /var/lib/apt/extended_states is present
 +  * don't download Translations for deb-src sources.list lines
 +  * apt-pkg/tagfile.cc:
 +    - support not-mmapable files again
  
 - -- Michael Vogt <mvo@debian.org>  Thu, 27 Jul 2006 00:52:05 +0200
 + -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 25 Jul 2006 11:55:22 +0200
  
 -apt  (0.6.44.2) unstable; urgency=low 
 -  
 -   * apt-pkg/depcache.cc:
 -     - added Debug::pkgDepCache::AutoInstall (thanks to infinity)
 -   * apt-pkg/acquire-item.cc:
 -     - fix missing chmod() in the new aquire code
 -       (thanks to Bastian Blank, Closes: #367425)
 -   * merged from
 -     http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main:
 -     * sk.po: Completed to 512t
 -     * eu.po: Completed to 512t
 -     * fr.po: Completed to 512t
 -     * sv.po: Completed to 512t
 -     * Update all PO and the POT. Gives 506t6f for formerly
 -       complete translations
 -
 - -- Michael Vogt <mvo@debian.org>  Wed, 14 Jun 2006 12:00:57 +0200 
 +apt (0.6.44.2exp1) experimental; urgency=low
 +
 +  * added support for i18n of the package descriptions
 +  * added support for aptitude like auto-install tracking (a HUGE
 +    HUGE thanks to Daniel Burrows who made this possible) 
 +  * synced with the http://people.debian.org/~mvo/bzr/apt/debian-sid branch
 +  * build from http://people.debian.org/~mvo/bzr/apt/debian-experimental
 +
 + -- Michael Vogt <mvo@debian.org>  Mon,  3 Jul 2006 21:50:31 +0200
 +
 +apt (0.6.44.2) unstable; urgency=low
 +
 +  * apt-pkg/depcache.cc:
 +    - added Debug::pkgDepCache::AutoInstall (thanks to infinity)
 +  * apt-pkg/acquire-item.cc:
 +    - fix missing chmod() in the new aquire code 
 +      (thanks to Bastian Blank, Closes: #367425)
 +  * merged from 
 +    http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main:
 +    * sk.po: Completed to 512t
 +    * eu.po: Completed to 512t
 +    * fr.po: Completed to 512t
 +    * sv.po: Completed to 512t
 +    * Update all PO and the POT. Gives 506t6f for formerly
 +      complete translations
 +
 + -- Michael Vogt <mvo@debian.org>  Wed, 14 Jun 2006 12:00:57 +0200
  
  apt (0.6.44.1-0.1) unstable; urgency=low
  
  
  apt (0.6.44.1) unstable; urgency=low
  
 +  * apt-pkg/acquire-item.cc:
 +    - fix reversed logic of the "Acquire::PDiffs" option
    * merged from 
      http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main:
      - po/LINGUAS: added "bg" Closes: #360262
      - po/gl.po: Galician translation update. Closes: #366849
      - po/hu.po: Hungarian translation update. Closes: #365448
      - po/cs.po: Czech translation updated. Closes: #367244
 +  * apt-pkg/contrib/sha256.cc:
 +    - applied patch to fix unaligned access problem. Closes: #367417
 +      (thanks to David Mosberger)
  
   -- Michael Vogt <mvo@debian.org>  Tue, 16 May 2006 21:51:16 +0200
  
  apt (0.6.44) unstable; urgency=low
  
    * apt-pkg/acquire.cc: don't show ETA if it is 0 or absurdely large
 +  * apt-pkg/contrib/sha256.{cc,h},hashes.{cc,h}: support for sha256 
 +    (thanks to Anthony Towns)
 +  * ftparchive/cachedb.{cc,h},writer.{cc,h}: optimizations 
 +    (thanks to Anthony Towns)
 +  * apt pdiff support from experimental merged
 +  * apt-pkg/deb/dpkgpm.cc: wording fixes (thanks to Matt Zimmerman)
    * apt-pkg/deb/dpkgpm.cc: 
      - wording fixes (thanks to Matt Zimmerman)
 -    - fix error in dpkg interaction (closes: #364513, 
 -      thanks to Martin Dickopp)
 +    - fix error in dpkg interaction (closes: #364513, thanks to Martin Dickopp)
    * apt-pkg/tagfile.{cc,h}:
      - use MMap to read the entries (thanks to Zephaniah E. Hull for the
        patch) Closes: #350025
@@@ -361,7 -307,7 +362,7 @@@ apt (0.6.42) unstable; urgency=lo
    * cmdline/apt-cdrom.cc: 
      - fix some missing gettext() calls (closes: #334539)
    * doc/apt-cache.8.xml: fix typo (closes: #334714)
 -  
 +
   -- Michael Vogt <mvo@debian.org>  Wed, 19 Oct 2005 22:02:09 +0200
  
  apt (0.6.41) unstable; urgency=low
@@@ -461,7 -407,6 +462,7 @@@ apt (0.6.37) breezy; urgency=lo
    * Add Welsh translation from Dafydd Harries
      (daf@muse.19inch.net--2005/apt--main--0--patch-1)
    * Change debian/bugscript to use #!/bin/bash (Closes: #313402)
 +  * Fix a incorrect example in the man-page (closes: #282918)
  
   -- Matt Zimmerman <mdz@ubuntu.com>  Tue, 24 May 2005 14:38:25 -0700