]> git.saurik.com Git - apt.git/commitdiff
* merged the apt--install-recommends branch
authorMichael Vogt <michael.vogt@ubuntu.com>
Fri, 11 Aug 2006 10:45:33 +0000 (12:45 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Fri, 11 Aug 2006 10:45:33 +0000 (12:45 +0200)
* ABI break, bumped the version number

apt-pkg/depcache.cc
apt-pkg/depcache.h
apt-pkg/init.h
apt-pkg/makefile
cmdline/apt-get.cc
configure.in
debian/changelog
methods/makefile

index 27b6134b4dfc22c9c8b1a65ed84807be0bcf5485..abe2842ccef375868c4604ff7acf5bb1141ba0a7 100644 (file)
@@ -399,9 +399,11 @@ void pkgDepCache::AddStates(const PkgIterator &Pkg,int Add)
 {
    StateCache &State = PkgState[Pkg->ID];
    
-   // The Package is broken
+   // The Package is broken (either minimal dep or policy dep)
    if ((State.DepState & DepInstMin) != DepInstMin)
       iBrokenCount += Add;
+   if ((State.DepState & DepInstPolicy) != DepInstPolicy)
+      iPolicyBrokenCount += Add;
    
    // Bad state
    if (Pkg.State() != PkgIterator::NeedsNothing)
@@ -763,7 +765,8 @@ void pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge)
 // ---------------------------------------------------------------------
 /* */
 void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
-                             unsigned long Depth, bool FromUser)
+                             unsigned long Depth, bool FromUser,
+                             bool ForceImportantDeps)
 {
    if (Depth > 100)
       return;
@@ -846,24 +849,26 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
 
       /* Check if this dep should be consider for install. If it is a user
          defined important dep and we are installed a new package then 
-        it will be installed. Otherwise we only worry about critical deps */
+        it will be installed. Otherwise we only check for important
+         deps that have changed from the installed version
+      */
       if (IsImportantDep(Start) == false)
         continue;
-
+      
       /* check if any ImportantDep() (but not Critial) where added
-       * since we installed the thing
+       * since we installed the package
        */
       bool isNewImportantDep = false;
-      if(IsImportantDep(Start) && !Start.IsCritical())
+      if(!ForceImportantDeps && !Start.IsCritical())
       {
         bool found=false;
         VerIterator instVer = Pkg.CurrentVer();
-        for (DepIterator D = instVer.DependsList(); !D.end(); D++)
+        for (DepIterator D = instVer.DependsList(); D.end() != true; D++)
         {
            //FIXME: deal better with or-groups(?)
            DepIterator LocalStart = D;
            
-           if(IsImportantDep(Dep) && Start.TargetPkg() == D.TargetPkg())
+           if(IsImportantDep(D) && Start.TargetPkg() == D.TargetPkg())
               found=true;
         }
         // this is a new dep if it was not found to be already
@@ -875,7 +880,9 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
            std::clog << "new important dependency: " 
                      << Start.TargetPkg().Name() << std::endl;
 
-      if (Pkg->CurrentVer != 0 && Start.IsCritical() == false && !isNewImportantDep)
+      // skip important deps if the package is already installed
+      if (Pkg->CurrentVer != 0 && Start.IsCritical() == false 
+         && !isNewImportantDep && !ForceImportantDeps)
         continue;
       
       /* If we are in an or group locate the first or that can 
@@ -923,7 +930,11 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
               std::clog << "Installing " << InstPkg.Name() 
                         << " as dep of " << Pkg.Name() 
                         << std::endl;
-          MarkInstall(InstPkg, true, Depth + 1, false);
+           MarkInstall(InstPkg,true,Depth + 1, false, ForceImportantDeps);
+
+           // Set the autoflag, after MarkInstall because MarkInstall unsets it
+           if (P->CurrentVer == 0)
+              PkgState[InstPkg->ID].Flags |= Flag::Auto;
         }
         continue;
       }
index d16b56bbc941d99e1b386fe7a0603376e0331769..5cd5ea354fa353bf33fb4f7e9738d283f7bb35eb 100644 (file)
@@ -248,6 +248,7 @@ class pkgDepCache : protected pkgCache::Namespace
       inline bool Downgrade() const {return Status < 0 && Mode == ModeInstall;};
       inline bool Held() const {return Status != 0 && Keep();};
       inline bool NowBroken() const {return (DepState & DepNowMin) != DepNowMin;};
+      inline bool NowPolicyBroken() const {return (DepState & DepNowPolicy) != DepNowPolicy;};
       inline bool InstBroken() const {return (DepState & DepInstMin) != DepInstMin;};
       inline bool InstPolicyBroken() const {return (DepState & DepInstPolicy) != DepInstPolicy;};
       inline bool Install() const {return Mode == ModeInstall;};
@@ -293,6 +294,7 @@ class pkgDepCache : protected pkgCache::Namespace
    unsigned long iDelCount;
    unsigned long iKeepCount;
    unsigned long iBrokenCount;
+   unsigned long iPolicyBrokenCount;
    unsigned long iBadCount;
    
    Policy *delLocalPolicy;           // For memory clean up..
@@ -390,7 +392,8 @@ class pkgDepCache : protected pkgCache::Namespace
                 bool FromUser = true);
    void MarkDelete(PkgIterator const &Pkg,bool Purge = false);
    void MarkInstall(PkgIterator const &Pkg,bool AutoInst = true,
-                   unsigned long Depth = 0, bool FromUser = true);
+                   unsigned long Depth = 0, bool FromUser = true,
+                   bool ForceImportantDeps = false);
    void SetReInstall(PkgIterator const &Pkg,bool To);
    void SetCandidateVersion(VerIterator TargetVer);
 
@@ -412,6 +415,7 @@ class pkgDepCache : protected pkgCache::Namespace
    inline unsigned long KeepCount() {return iKeepCount;};
    inline unsigned long InstCount() {return iInstCount;};
    inline unsigned long BrokenCount() {return iBrokenCount;};
+   inline unsigned long PolicyBrokenCount() {return iPolicyBrokenCount;};
    inline unsigned long BadCount() {return iBadCount;};
 
    bool Init(OpProgress *Prog);
index 0c6260c2fbad7bec25cfe10600bf4aa8464959c5..b036b86098ae88eaa2db3a2b6378f4211d803fb0 100644 (file)
@@ -18,7 +18,7 @@
 
 // See the makefile
 #define APT_PKG_MAJOR 3
-#define APT_PKG_MINOR 50
+#define APT_PKG_MINOR 51
 #define APT_PKG_RELEASE 0
     
 extern const char *pkgVersion;
index d03a19182fc0d8e81ae35bc3b08051130606ddc3..6cc1414b222ffe7c7dbeaa1ec3a6b96c09ba82a0 100644 (file)
@@ -13,7 +13,7 @@ include ../buildlib/defaults.mak
 # methods/makefile - FIXME
 LIBRARY=apt-pkg
 LIBEXT=$(GLIBC_VER)$(LIBSTDCPP_VER)
-MAJOR=3.50
+MAJOR=3.51
 MINOR=0
 SLIBS=$(PTHREADLIB) $(INTLLIBS)
 APT_DOMAIN:=libapt-pkg$(MAJOR)
index d0330b08e2b308f55a86226b498e671daded907f..96e974acb2736e1983bd7c7cb11784744cb92acc 100644 (file)
@@ -629,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;
 
@@ -640,12 +642,24 @@ bool CacheFile::CheckDeps(bool AllowBroken)
    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,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)
@@ -2618,6 +2632,7 @@ int main(int argc,const char *argv[])
       {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}};
index 5c573e72b0d7d6008769595ab0eb313bd3687638..aa9abc1e6c2ccbb94c97f8b0bfc2a8d7b5a4253a 100644 (file)
@@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 
 dnl -- SET THIS TO THE RELEASE VERSION --
-AC_DEFINE_UNQUOTED(VERSION,"0.6.45ubuntu1")
+AC_DEFINE_UNQUOTED(VERSION,"0.6.45ubuntu2")
 PACKAGE="apt"
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_SUBST(PACKAGE)
index b26aad6c026693b39a7cb51ae513d3db3b825c4f..9469719066f792cdbe01fdbcb4963d63d58871ec 100644 (file)
@@ -1,3 +1,13 @@
+apt (0.6.45ubuntu3) edgy; urgency=low
+
+  * ABI break
+  * merged latest apt--install-recommends
+  * added "--fix-policy" option to can be used as "--fix-broken" and
+    will install missing weak depends (recommends, and/or suggests 
+    depending on the settings)
+
+ --
+
 apt (0.6.45ubuntu2) edgy; urgency=low
 
   * debian/control:
index 03a424411deb0877df7d50bd22b14bfdb7092c94..2e3abe55cce5ec56a6d905ccfe5b3b8944821ab4 100644 (file)
@@ -7,7 +7,7 @@ include ../buildlib/defaults.mak
 BIN := $(BIN)/methods
 
 # FIXME..
-LIB_APT_PKG_MAJOR = 3.50
+LIB_APT_PKG_MAJOR = 3.51
 APT_DOMAIN := libapt-pkg$(LIB_APT_PKG_MAJOR)
 
 # The file method