]> git.saurik.com Git - apt.git/commitdiff
sanify API to get 'the' candidate version
authorDavid Kalnischkies <david@kalnischkies.de>
Fri, 30 Oct 2015 15:34:25 +0000 (16:34 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Wed, 4 Nov 2015 17:04:05 +0000 (18:04 +0100)
This was discussed a while ago on #debian-apt and now that I see myself
making this mistake lets bite the bullet and fix it in the easy way out
version: Using a new name which fits with a similar named setter and
deprecate the old method instead of 'hostily' changing API.

Closes: #803471
apt-pkg/algorithms.cc
apt-pkg/deb/dpkgpm.cc
apt-pkg/depcache.cc
apt-pkg/depcache.h
apt-pkg/edsp.cc
apt-pkg/edsp/edsplistparser.cc
apt-private/private-source.cc
test/integration/test-external-dependency-solver-protocol

index 7ddbb9d44bf6f775da456d804e218ffa21478fdb..d25cbd63aab3ba305a5c9f4af8844c10d3431563 100644 (file)
@@ -933,7 +933,7 @@ bool pkgProblemResolver::ResolveInternal(bool const BrokenFix)
                                 Start.TargetPkg()->CurrentVer == 0 &&
                                 Cache[Start.TargetPkg()].Delete() == false &&
                                 (Flags[Start.TargetPkg()->ID] & ToRemove) != ToRemove &&
-                                Cache.GetCandidateVer(Start.TargetPkg()).end() == false)
+                                Cache.GetCandidateVersion(Start.TargetPkg()).end() == false)
                        {
                           /* Before removing or keeping the package with the broken dependency
                              try instead to install the first not previously installed package
index 3ec8b2d60e3fc66c32821b2eb7a323b91ab6d73f..ccc4b5a6c07fac2cfda180f887790638ec0e0384 100644 (file)
@@ -1718,11 +1718,11 @@ void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg)
    if(pos != string::npos)
       pkgname = pkgname.substr(0, pos);
 
-   // find the package versin and source package name
+   // find the package version and source package name
    pkgCache::PkgIterator Pkg = Cache.FindPkg(pkgname);
    if (Pkg.end() == true)
       return;
-   pkgCache::VerIterator Ver = Cache.GetCandidateVer(Pkg);
+   pkgCache::VerIterator Ver = Cache.GetCandidateVersion(Pkg);
    if (Ver.end() == true)
       return;
    pkgver = Ver.VerStr() == NULL ? "unknown" : Ver.VerStr();
index 39bbe484f9510a89c44e1ac1b43d3f3086c8372a..a3d2f644956c6473e4640c7a054c23998ad5a5f1 100644 (file)
@@ -153,7 +153,7 @@ bool pkgDepCache::Init(OpProgress * const Prog)
       State.iFlags = 0;
 
       // Figure out the install version
-      State.CandidateVer = GetCandidateVer(I);
+      State.CandidateVer = LocalPolicy->GetCandidateVer(I);
       State.InstallVer = I.CurrentVer();
       State.Mode = ModeKeep;
 
@@ -1467,6 +1467,11 @@ void pkgDepCache::SetReInstall(PkgIterator const &Pkg,bool To)
    }
 }
                                                                        /*}}}*/
+pkgCache::VerIterator pkgDepCache::GetCandidateVersion(PkgIterator const &Pkg)/*{{{*/
+{
+   return PkgState[Pkg->ID].CandidateVerIter(*this);
+}
+                                                                       /*}}}*/
 // DepCache::SetCandidateVersion - Change the candidate version                /*{{{*/
 // ---------------------------------------------------------------------
 /* */
index ba997c8a67de9c12777bf10b53f53151b4ee50a2..a1be56bb24fcddec13807a468c69b3a84253d635 100644 (file)
@@ -360,9 +360,10 @@ class pkgDepCache : protected pkgCache::Namespace
 
    inline pkgCache &GetCache() {return *Cache;};
    inline pkgVersioningSystem &VS() {return *Cache->VS;};
-   
+
    // Policy implementation
-   inline VerIterator GetCandidateVer(PkgIterator const &Pkg) {return LocalPolicy->GetCandidateVer(Pkg);};
+   APT_DEPRECATED inline VerIterator GetCandidateVer(PkgIterator const &Pkg) {return /* GetCandidateVersion(Pkg); but for API compat: */ LocalPolicy->GetCandidateVer(Pkg);};
+
    inline bool IsImportantDep(DepIterator Dep) const {return LocalPolicy->IsImportantDep(Dep);};
    inline Policy &GetPolicy() {return *LocalPolicy;};
    
@@ -413,6 +414,16 @@ class pkgDepCache : protected pkgCache::Namespace
    void MarkProtected(PkgIterator const &Pkg) { PkgState[Pkg->ID].iFlags |= Protected; };
 
    void SetReInstall(PkgIterator const &Pkg,bool To);
+
+   /** @return 'the' candidate version of a package
+    *
+    * The version returned is the version previously set explicitly via
+    * SetCandidate* methods like #SetCandidateVersion or if there wasn't one
+    * set the version as choosen via #Policy.
+    *
+    * @param Pkg is the package to return the candidate for
+    */
+   pkgCache::VerIterator GetCandidateVersion(pkgCache::PkgIterator const &Pkg);
    void SetCandidateVersion(VerIterator TargetVer);
    bool SetCandidateRelease(pkgCache::VerIterator TargetVer,
                                std::string const &TargetRel);
index 90f20472e255100caf2063ed77010fb076da4983..bf625cc977923c43fe15e7b795400fcdcb7c1341 100644 (file)
@@ -84,7 +84,7 @@ static void WriteScenarioVersion(pkgDepCache &Cache, FILE* output, pkgCache::Pkg
           fprintf(output, " %s\n", R->c_str());
    }
    fprintf(output, "APT-Pin: %d\n", Pin);
-   if (Cache.GetCandidateVer(Pkg) == Ver)
+   if (Cache.GetCandidateVersion(Pkg) == Ver)
       fprintf(output, "APT-Candidate: yes\n");
    if ((Cache[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto)
       fprintf(output, "APT-Automatic: yes\n");
@@ -510,9 +510,10 @@ bool EDSP::WriteSolution(pkgDepCache &Cache, FILE* output)
       }
       else if (Cache[Pkg].NewInstall() == true || Cache[Pkg].Upgrade() == true)
       {
-        fprintf(output, "Install: %d\n", Cache.GetCandidateVer(Pkg)->ID);
+        pkgCache::VerIterator const CandVer = Cache.GetCandidateVersion(Pkg);
+        fprintf(output, "Install: %d\n", CandVer->ID);
         if (Debug == true)
-           fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), Cache.GetCandidateVer(Pkg).VerStr());
+           fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), CandVer.VerStr());
       }
       else if (Cache[Pkg].Garbage == true)
       {
index 5c90cf1fcf1439dd27ab34d2e153d0d56e2d03b5..77a0edc22c8ef13d8e4112b68a2e90b969ef7f42 100644 (file)
@@ -111,6 +111,15 @@ bool edspListParser::ParseStatus(pkgCache::PkgIterator &Pkg,
         return false;
    }
 
+   // FIXME: Using an overriding pin is wrong.
+   if (Section.FindB("APT-Candidate", false))
+   {
+      std::string out;
+      strprintf(out, "Package: %s\nPin: version %s\nPin-Priority: 9999\n\n", Pkg.FullName().c_str(), Ver.VerStr());
+      if (d->preferences.Write(out.c_str(), out.length()) == false)
+        return false;
+   }
+
    signed short const pinvalue = Section.FindI("APT-Pin", 500);
    if (pinvalue != 500)
    {
index c7e5e425720512cf3985b27d884d10f7bac3af6d..da733097047c30f3e5d4f2513f70278330de3e40 100644 (file)
@@ -245,8 +245,8 @@ static pkgSrcRecords::Parser *FindSrc(const char *Name,
         // choose a good candidate and proceed with that.
         // Maybe we will find a source later on with the right VerTag
         // or RelTag
-        pkgCache::VerIterator Ver = Cache->GetCandidateVer(Pkg);
-        if (Ver.end() == false) 
+        pkgCache::VerIterator const Ver = Cache->GetCandidateVersion(Pkg);
+        if (Ver.end() == false)
         {
            if (strcmp(Ver.SourcePkgName(),Ver.ParentPkg().Name()) != 0)
               Src = Ver.SourcePkgName();
index e22d0c5e064a8b229d057864459043a227fdccb8..cc8b5f1c4fcae5d5ad027c78831b1f0dd460f361 100755 (executable)
@@ -62,6 +62,25 @@ The following NEW packages will be installed:
 Inst coolstuff (3 experimental [amd64])
 Conf coolstuff (3 experimental [amd64])' aptget install --solver apt coolstuff -s -t experimental
 
+testsuccessequal "Reading package lists...
+Building dependency tree...
+Selected version '3' (experimental [amd64]) for 'coolstuff'
+Execute external solver...
+The following NEW packages will be installed:
+  coolstuff
+0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
+Inst coolstuff (3 experimental [amd64])
+Conf coolstuff (3 experimental [amd64])" aptget install --solver apt coolstuff/experimental -sq=0
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Execute external solver...
+The following NEW packages will be installed:
+  coolstuff
+0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
+Inst coolstuff (3 experimental [amd64])
+Conf coolstuff (3 experimental [amd64])' aptget install --solver apt coolstuff=3 -sq=0
+
 testsuccessequal 'Reading package lists...
 Building dependency tree...
 Execute external solver...