summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/algorithms.cc28
-rw-r--r--apt-pkg/depcache.cc2
-rw-r--r--debian/changelog4
3 files changed, 25 insertions, 9 deletions
diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc
index 4b1bb4430..db370a044 100644
--- a/apt-pkg/algorithms.cc
+++ b/apt-pkg/algorithms.cc
@@ -985,15 +985,27 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
// Consider other options
if (InOr == false)
{
- if (Debug == true)
- clog << " Removing " << I.Name() << " rather than change " << Start.TargetPkg().Name() << endl;
- Cache.MarkDelete(I);
- if (Counter > 1)
+ if (Cache.IsAutoInstallOk(I) == true)
{
- if (Scores[Pkg->ID] > Scores[I->ID])
- Scores[I->ID] = Scores[Pkg->ID];
- }
- }
+ if (Debug == true)
+ clog << " Removing " << I.Name() << " rather than change " << Start.TargetPkg().Name() << endl;
+ Cache.MarkDelete(I);
+ if (Counter > 1)
+ {
+ if (Scores[Pkg->ID] > Scores[I->ID])
+ Scores[I->ID] = Scores[Pkg->ID];
+ }
+ } else {
+ /* The dependency of the TargetPkg would be satisfiable with I but it is
+ forbidden to install I automatical, so anything we can do is hold
+ back the TargetPkg.
+ */
+ if (Debug == true)
+ clog << " Hold back " << Start.TargetPkg().Name() <<
+ " rather than change denied AutoInstall " << I.Name() << endl;
+ Cache.MarkKeep(Start.TargetPkg());
+ }
+ }
}
}
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index 9f734cca2..8af6941cf 100644
--- a/apt-pkg/depcache.cc
+++ b/apt-pkg/depcache.cc
@@ -1069,7 +1069,7 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
library can override this method to control the MarkInstall behaviour */
bool pkgDepCache::IsAutoInstallOk(const PkgIterator &Pkg, unsigned long Depth)
{
- return true;
+ return (Pkg->SelectedState != pkgCache::State::Hold);
}
/*}}}*/
// DepCache::SetReInstall - Set the reinstallation flag /*{{{*/
diff --git a/debian/changelog b/debian/changelog
index aadaa0856..8610b6376 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -30,7 +30,11 @@ apt (0.7.22) UNRELEASED; urgency=low
adjustable
* do not write state file in simulate mode (closes: #433007)
* add hook for auto-install (closes: #470035)
+ * support IsAutoInstallOk in the resolver too
+ [ Michael Vogt ]
+ * honor the dpkg hold state in IsAutoInstallOk (closes: #64141)
+
[ Julian Andres Klode ]
* apt-pkg/contrib/configuration.cc: Fix a small memory leak in
ReadConfigFile.