tell the resolver a package is set on hold if it was set by the user
authorDavid Kalnischkies <kalnischkies@gmail.com>
Tue, 3 May 2011 08:51:55 +0000 (10:51 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Tue, 3 May 2011 08:51:55 +0000 (10:51 +0200)
to Keep which happens for example if a user decides to "remove" a not
installed package to forbid that it's part of the solution

apt-pkg/depcache.h
apt-pkg/edsp.cc

index b15cd527d6ef7a934ff15f84a4d3ad5b683d811a..f95ad9a14ed0c562c46ee9fb96dd8d8903dbebe3 100644 (file)
@@ -232,6 +232,7 @@ class pkgDepCache : protected pkgCache::Namespace
       inline bool NewInstall() const {return Status == 2 && Mode == ModeInstall;};
       inline bool Delete() const {return Mode == ModeDelete;};
       inline bool Keep() const {return Mode == ModeKeep;};
+      inline bool Protect() const {return (iFlags & Protected) == Protected;};
       inline bool Upgrade() const {return Status > 0 && Mode == ModeInstall;};
       inline bool Upgradable() const {return Status >= 1;};
       inline bool Downgrade() const {return Status < 0 && Mode == ModeInstall;};
index d72370358a5d858676839e4dc6abbae1ac291360..8bd0c14bb84afba8259dfb34c4f5b5a9394c4d35 100644 (file)
@@ -61,7 +61,8 @@ void EDSP::WriteScenarioVersion(pkgDepCache &Cache, FILE* output, pkgCache::PkgI
    fprintf(output, "Version: %s\n", Ver.VerStr());
    if (Pkg.CurrentVer() == Ver)
       fprintf(output, "Installed: yes\n");
-   if (Pkg->SelectedState == pkgCache::State::Hold)
+   if (Pkg->SelectedState == pkgCache::State::Hold ||
+       (Cache[Pkg].Keep() == true && Cache[Pkg].Protect() == true))
       fprintf(output, "Hold: yes\n");
    fprintf(output, "APT-ID: %d\n", Ver->ID);
    fprintf(output, "Priority: %s\n", PrioMap[Ver->Priority]);