]> git.saurik.com Git - apt.git/commitdiff
deprecate the Section member from package struct
authorDavid Kalnischkies <david@kalnischkies.de>
Fri, 13 Jun 2014 06:35:32 +0000 (08:35 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Mon, 10 Nov 2014 16:23:29 +0000 (17:23 +0100)
A version belongs to a section and has hence a section member of its
own. A package on the other hand can have multiple versions from
different sections. This was "solved" by using the section which was
parsed first as order of sources.list defines, but that is obviously a
horribly unpredictable thing.

Users are way better of with the Section() as returned by the version
they are dealing with. It is likely the same for all versions of a
package, but in the few cases it isn't, it is important (like packages
moving from main/* to contrib/* or into oldlibs …).

Backport of 7a66977 which actually instantly removes the member.

apt-pkg/cacheiterators.h
apt-pkg/cacheset.h
apt-pkg/depcache.cc
apt-pkg/pkgcache.cc

index 2fdf8404ddea9667fb78acedce6370b399c38f23..513f40f17c68fcac9d53473e31741acd84b4797b 100644 (file)
@@ -160,7 +160,9 @@ class pkgCache::PkgIterator: public Iterator<Package, PkgIterator> {
 
        // Accessors
        inline const char *Name() const {return S->Name == 0?0:Owner->StrP + S->Name;}
 
        // Accessors
        inline const char *Name() const {return S->Name == 0?0:Owner->StrP + S->Name;}
-       inline const char *Section() const {return S->Section == 0?0:Owner->StrP + S->Section;}
+       // Versions have sections - and packages can have different versions with different sections
+       // so this interface is broken by design. Run as fast as you can to Version.Section().
+       APT_DEPRECATED inline const char *Section() const {return S->Section == 0?0:Owner->StrP + S->Section;}
        inline bool Purge() const {return S->CurrentState == pkgCache::State::Purge ||
                (S->CurrentVer == 0 && S->CurrentState == pkgCache::State::NotInstalled);}
        inline const char *Arch() const {return S->Arch == 0?0:Owner->StrP + S->Arch;}
        inline bool Purge() const {return S->CurrentState == pkgCache::State::Purge ||
                (S->CurrentVer == 0 && S->CurrentState == pkgCache::State::NotInstalled);}
        inline const char *Arch() const {return S->Arch == 0?0:Owner->StrP + S->Arch;}
index 16a3daa423cfcb8101c85c4712aee14d302da44c..b7229bc046c7a1f433d14984e7bc7e4a538d3627 100644 (file)
@@ -118,7 +118,16 @@ public:
                inline const char *Name() const {return getPkg().Name(); }
                inline std::string FullName(bool const Pretty) const { return getPkg().FullName(Pretty); }
                inline std::string FullName() const { return getPkg().FullName(); }
                inline const char *Name() const {return getPkg().Name(); }
                inline std::string FullName(bool const Pretty) const { return getPkg().FullName(Pretty); }
                inline std::string FullName() const { return getPkg().FullName(); }
-               inline const char *Section() const {return getPkg().Section(); }
+               APT_DEPRECATED inline const char *Section() const {
+#if __GNUC__ >= 4
+       #pragma GCC diagnostic push
+       #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+          return getPkg().Section();
+#if __GNUC__ >= 4
+       #pragma GCC diagnostic pop
+#endif
+               }
                inline bool Purge() const {return getPkg().Purge(); }
                inline const char *Arch() const {return getPkg().Arch(); }
                inline pkgCache::GrpIterator Group() const { return getPkg().Group(); }
                inline bool Purge() const {return getPkg().Purge(); }
                inline const char *Arch() const {return getPkg().Arch(); }
                inline pkgCache::GrpIterator Group() const { return getPkg().Group(); }
index 42e31396bc64a58b4ff1afbc697384b356402e7a..16282df2135e358c9917139737527cffdd4f30d4 100644 (file)
@@ -1226,7 +1226,7 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
               continue;
            }
            // now check if we should consider it a automatic dependency or not
               continue;
            }
            // now check if we should consider it a automatic dependency or not
-           if(InstPkg->CurrentVer == 0 && Pkg->Section != 0 && ConfigValueInSubTree("APT::Never-MarkAuto-Sections", Pkg.Section()))
+           if(InstPkg->CurrentVer == 0 && InstVer->Section != 0 && ConfigValueInSubTree("APT::Never-MarkAuto-Sections", InstVer.Section()))
            {
               if(DebugAutoInstall == true)
                  std::clog << OutputInDepth(Depth) << "Setting NOT as auto-installed (direct "
            {
               if(DebugAutoInstall == true)
                  std::clog << OutputInDepth(Depth) << "Setting NOT as auto-installed (direct "
index 58a63459fa1e9abdbdef70bb7d584f16ab42c0c7..d7c9656b951ecb6e77543e0f1460259d37dcd831 100644 (file)
@@ -524,7 +524,10 @@ operator<<(std::ostream& out, pkgCache::PkgIterator Pkg)
       out << " -> " << candidate;
    if ( newest != "none" && candidate != newest)
       out << " | " << newest;
       out << " -> " << candidate;
    if ( newest != "none" && candidate != newest)
       out << " | " << newest;
-   out << " > ( " << string(Pkg.Section()==0?"none":Pkg.Section()) << " )";
+   if (Pkg->VersionList == 0)
+      out << " > ( none )";
+   else
+      out << " > ( " << string(Pkg.VersionList().Section()==0?"unknown":Pkg.VersionList().Section()) << " )";
    return out;
 }
                                                                        /*}}}*/
    return out;
 }
                                                                        /*}}}*/