]> git.saurik.com Git - apt.git/commitdiff
remove 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>
Wed, 18 Jun 2014 10:41:11 +0000 (12:41 +0200)
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.

We therefore directly remove this struct member to free some space and
mark the access method as deprecated, which is told to return the
section of the 'newest' known version, which is at least predictable,
but possible not what it returned before – but nobody knows.

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 …).

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

index 2fdf8404ddea9667fb78acedce6370b399c38f23..f2aae7272f4f1b9677951654041c996bcfa2fbb2 100644 (file)
@@ -160,7 +160,11 @@ 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. It used to return the section of the "first parsed
+       // package stanza", but as this can potentially be anything it now returns the section of the
+       // newest version instead (if any). aka: Run as fast as you can to Version.Section().
+       APT_DEPRECATED const char *Section() const;
        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 dde4e221e219e09e9a208ffce1e455fbca17d0c0..36f41c34dc60eab35630fceedb9c03856be34788 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 4447b54ddcd52d15842c10decc1c88d043626036..192a281db9d46f5d75e9fd0e70d22ad4b3783751 100644 (file)
@@ -255,9 +255,6 @@ MD5SumValue debListParser::Description_md5()
 bool debListParser::UsePackage(pkgCache::PkgIterator &Pkg,
                               pkgCache::VerIterator &Ver)
 {
 bool debListParser::UsePackage(pkgCache::PkgIterator &Pkg,
                               pkgCache::VerIterator &Ver)
 {
-   if (Pkg->Section == 0)
-      Pkg->Section = UniqFindTagWrite("Section");
-
    string const static myArch = _config->Find("APT::Architecture");
    // Possible values are: "all", "native", "installed" and "none"
    // The "installed" mode is handled by ParseStatus(), See #544481 and friends.
    string const static myArch = _config->Find("APT::Architecture");
    // Possible values are: "all", "native", "installed" and "none"
    // The "installed" mode is handled by ParseStatus(), See #544481 and friends.
index c25672d1cee6a1a651b823d3d7662bbe6075dbed..492d160297a3db2ee50fe4dd95f0c73e4391e9d4 100644 (file)
@@ -1225,7 +1225,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 8326741edff6f77dbaaefbae58ec9e4f62b6bdae..b1ed0129d6f27bb1053ec745239dc16de8181e6e 100644 (file)
@@ -527,7 +527,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;
 }
                                                                        /*}}}*/
@@ -1039,3 +1042,9 @@ bool pkgCache::PrvIterator::IsMultiArchImplicit() const
    return false;
 }
                                                                        /*}}}*/
    return false;
 }
                                                                        /*}}}*/
+APT_DEPRECATED APT_PURE const char * pkgCache::PkgIterator::Section() const {/*{{{*/
+   if (S->VersionList == 0)
+      return 0;
+   return VersionList().Section();
+}
+                                                                       /*}}}*/
index f57c31b98bdb1bd55a570f0e283bb3b9bbcb99fd..0ce2a2878c56ab51ed483c08d8f9dd2cf76a110b 100644 (file)
@@ -392,11 +392,6 @@ struct pkgCache::Package
    map_pointer_t VersionList;       // Version
    /** \brief index to the installed version */
    map_pointer_t CurrentVer;        // Version
    map_pointer_t VersionList;       // Version
    /** \brief index to the installed version */
    map_pointer_t CurrentVer;        // Version
-   /** \brief indicates the deduced section
-
-       Should be the index to the string "Unknown" or to the section
-       of the last parsed item. */
-   map_stringitem_t Section;
    /** \brief index of the group this package belongs to */
    map_pointer_t Group;             // Group the Package belongs to
 
    /** \brief index of the group this package belongs to */
    map_pointer_t Group;             // Group the Package belongs to