Преглед на файлове

* remove the MarkKeep calls if Is{Delete,Install}Ok false, because
they have no effect anyway (thanks Daniel Burrows for noticing)
* improve documentation of the Is{Delete,Install}Ok methods a bit
* add the FromUser boolean to the debug output of the markers

David Kalnischkies преди 17 години
родител
ревизия
c3a85f49fd
променени са 2 файла, в които са добавени 21 реда и са изтрити 11 реда
  1. 5 11
      apt-pkg/depcache.cc
  2. 16 0
      apt-pkg/depcache.h

+ 5 - 11
apt-pkg/depcache.cc

@@ -747,7 +747,7 @@ void pkgDepCache::MarkKeep(PkgIterator const &Pkg, bool Soft, bool FromUser,
 #endif
 #endif
 
 
    if (DebugMarker == true)
    if (DebugMarker == true)
-      std::clog << OutputInDepth(Depth) << "MarkKeep " << Pkg << std::endl;
+      std::clog << OutputInDepth(Depth) << "MarkKeep " << Pkg << " FU=" << FromUser << std::endl;
 
 
    RemoveSizes(Pkg);
    RemoveSizes(Pkg);
    RemoveStates(Pkg);
    RemoveStates(Pkg);
@@ -793,13 +793,10 @@ void pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge,
 
 
    // check if we are allowed to install the package
    // check if we are allowed to install the package
    if (IsDeleteOk(Pkg,rPurge,Depth,FromUser) == false)
    if (IsDeleteOk(Pkg,rPurge,Depth,FromUser) == false)
-   {
-      MarkKeep(Pkg,false,FromUser,Depth+1);
       return;
       return;
-   }
 
 
    if (DebugMarker == true)
    if (DebugMarker == true)
-      std::clog << OutputInDepth(Depth) << "MarkDelete " << Pkg << std::endl;
+      std::clog << OutputInDepth(Depth) << "MarkDelete " << Pkg << " FU=" << FromUser << std::endl;
 
 
    RemoveSizes(Pkg);
    RemoveSizes(Pkg);
    RemoveStates(Pkg);
    RemoveStates(Pkg);
@@ -826,7 +823,7 @@ bool pkgDepCache::IsDeleteOk(PkgIterator const &Pkg,bool rPurge,
    if (FromUser == false && Pkg->SelectedState == pkgCache::State::Hold)
    if (FromUser == false && Pkg->SelectedState == pkgCache::State::Hold)
    {
    {
       if (DebugMarker == true)
       if (DebugMarker == true)
-	 std::clog << OutputInDepth(Depth) << "Hold prevents MarkDelete of " << Pkg << std::endl;
+	 std::clog << OutputInDepth(Depth) << "Hold prevents MarkDelete of " << Pkg << " FU=" << FromUser << std::endl;
       return false;
       return false;
    }
    }
    return true;
    return true;
@@ -870,10 +867,7 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
 
 
    // check if we are allowed to install the package
    // check if we are allowed to install the package
    if (IsInstallOk(Pkg,AutoInst,Depth,FromUser) == false)
    if (IsInstallOk(Pkg,AutoInst,Depth,FromUser) == false)
-   {
-      MarkKeep(Pkg,false,FromUser,Depth+1);
       return;
       return;
-   }
 
 
    /* Target the candidate version and remove the autoflag. We reset the
    /* Target the candidate version and remove the autoflag. We reset the
       autoflag below if this was called recursively. Otherwise the user
       autoflag below if this was called recursively. Otherwise the user
@@ -908,7 +902,7 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
       return;
       return;
 
 
    if (DebugMarker == true)
    if (DebugMarker == true)
-      std::clog << OutputInDepth(Depth) << "MarkInstall " << Pkg << std::endl;
+      std::clog << OutputInDepth(Depth) << "MarkInstall " << Pkg << " FU=" << FromUser << std::endl;
 
 
    DepIterator Dep = P.InstVerIter(*this).DependsList();
    DepIterator Dep = P.InstVerIter(*this).DependsList();
    for (; Dep.end() != true;)
    for (; Dep.end() != true;)
@@ -1091,7 +1085,7 @@ bool pkgDepCache::IsInstallOk(PkgIterator const &Pkg,bool AutoInst,
    if (FromUser == false && Pkg->SelectedState == pkgCache::State::Hold)
    if (FromUser == false && Pkg->SelectedState == pkgCache::State::Hold)
    {
    {
       if (DebugMarker == true)
       if (DebugMarker == true)
-	 std::clog << OutputInDepth(Depth) << "Hold prevents MarkInstall of " << Pkg << std::endl;
+	 std::clog << OutputInDepth(Depth) << "Hold prevents MarkInstall of " << Pkg << " FU=" << FromUser << std::endl;
       return false;
       return false;
    }
    }
    return true;
    return true;

+ 16 - 0
apt-pkg/depcache.h

@@ -407,6 +407,14 @@ class pkgDepCache : protected pkgCache::Namespace
    /** \return \b true if it's OK for MarkInstall to install
    /** \return \b true if it's OK for MarkInstall to install
     *  the given package.
     *  the given package.
     *
     *
+    *  See the default implementation for a simple example how this
+    *  method can be used.
+    *  Overriding implementations should use the hold-state-flag to cache
+    *  results from previous checks of this package - also it should
+    *  be used if the default resolver implementation is also used to
+    *  ensure that these packages are handled like "normal" dpkg holds.
+    *
+    *  The parameters are the same as in the calling MarkInstall:
     *  \param Pkg       the package that MarkInstall wants to install.
     *  \param Pkg       the package that MarkInstall wants to install.
     *  \param AutoInst  needs a previous MarkInstall this package?
     *  \param AutoInst  needs a previous MarkInstall this package?
     *  \param Depth     recursive deep of this Marker call
     *  \param Depth     recursive deep of this Marker call
@@ -418,6 +426,14 @@ class pkgDepCache : protected pkgCache::Namespace
    /** \return \b true if it's OK for MarkDelete to remove
    /** \return \b true if it's OK for MarkDelete to remove
     *  the given package.
     *  the given package.
     *
     *
+    *  See the default implementation for a simple example how this
+    *  method can be used.
+    *  Overriding implementations should use the hold-state-flag to cache
+    *  results from previous checks of this package - also it should
+    *  be used if the default resolver implementation is also used to
+    *  ensure that these packages are handled like "normal" dpkg holds.
+    *
+    *  The parameters are the same as in the calling MarkDelete:
     *  \param Pkg       the package that MarkDelete wants to remove.
     *  \param Pkg       the package that MarkDelete wants to remove.
     *  \param Purge     should we purge instead of "only" remove?
     *  \param Purge     should we purge instead of "only" remove?
     *  \param Depth     recursive deep of this Marker call
     *  \param Depth     recursive deep of this Marker call