]> git.saurik.com Git - apt.git/commitdiff
ParseDepends: Support passing the desired architecture
authorNiels Thykier <niels@thykier.net>
Sun, 27 Nov 2016 10:54:33 +0000 (10:54 +0000)
committerJulian Andres Klode <jak@debian.org>
Mon, 2 Jan 2017 13:27:52 +0000 (14:27 +0100)
This is useful for e.g. Britney, where the Build-Depends would have to
be parsed for multiple architectures.  With this change, the call can
choose the architecture without having to mess with the config.

Signed-off-by: Niels Thykier <niels@thykier.net>
Closes: #845969
(jak@d.o: made the code compile)

apt-pkg/deb/deblistparser.cc
apt-pkg/deb/deblistparser.h

index 0fc08d8fb3bb595f21927f0c493dbde391b97e07..cf0a9a402553f3f61df0593a8d8adfc8759466b4 100644 (file)
@@ -546,12 +546,24 @@ const char *debListParser::ParseDepends(const char *Start,const char *Stop,
                                        unsigned int &Op, bool const &ParseArchFlags,
                                        bool const &StripMultiArch,
                                        bool const &ParseRestrictionsList)
+{
+   return debListParser::ParseDepends(Start, Stop, Package, Ver, Op, ParseArchFlags,
+                                      StripMultiArch, ParseRestrictionsList,
+                                      _config->Find("APT::Architecture"));
+}
+
+const char *debListParser::ParseDepends(const char *Start,const char *Stop,
+                                       string &Package,string &Ver,
+                                       unsigned int &Op, bool const &ParseArchFlags,
+                                       bool const &StripMultiArch,
+                                       bool const &ParseRestrictionsList,
+                                       string const &Arch)
 {
    StringView PackageView;
    StringView VerView;
 
    auto res = ParseDepends(Start, Stop, PackageView, VerView, Op, (bool)ParseArchFlags,
-   (bool) StripMultiArch, (bool) ParseRestrictionsList);
+   (bool) StripMultiArch, (bool) ParseRestrictionsList, Arch);
    Package = PackageView.to_string();
    Ver = VerView.to_string();
 
@@ -562,6 +574,17 @@ const char *debListParser::ParseDepends(const char *Start,const char *Stop,
                                        unsigned int &Op, bool ParseArchFlags,
                                        bool StripMultiArch,
                                        bool ParseRestrictionsList)
+{
+   return debListParser::ParseDepends(Start, Stop, Package, Ver, Op, ParseArchFlags,
+                                      StripMultiArch, ParseRestrictionsList,
+                                      _config->Find("APT::Architecture"));
+}
+
+const char *debListParser::ParseDepends(const char *Start,const char *Stop,
+                                       StringView &Package,StringView &Ver,
+                                       unsigned int &Op, bool ParseArchFlags,
+                                       bool StripMultiArch,
+                                       bool ParseRestrictionsList, string const &Arch)
 {
    // Strip off leading space
    for (;Start != Stop && isspace_ascii(*Start) != 0; ++Start);
@@ -630,8 +653,7 @@ const char *debListParser::ParseDepends(const char *Start,const char *Stop,
 
    if (unlikely(ParseArchFlags == true))
    {
-      string const arch = _config->Find("APT::Architecture");
-      APT::CacheFilter::PackageArchitectureMatchesSpecification matchesArch(arch, false);
+      APT::CacheFilter::PackageArchitectureMatchesSpecification matchesArch(Arch, false);
 
       // Parse an architecture
       if (I != Stop && *I == '[')
index 3d50659533ad507664b27d6f1680be11576690fa..39f42915cbc7d1f39ffbfe8c677728cdac6b1945 100644 (file)
@@ -102,6 +102,11 @@ class APT_HIDDEN debListParser : public pkgCacheListParser
         std::string &Package,std::string &Ver,unsigned int &Op,
         bool const &ParseArchFlags, bool const &StripMultiArch,
         bool const &ParseRestrictionsList);
+   APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop,
+        std::string &Package,std::string &Ver,unsigned int &Op,
+        bool const &ParseArchFlags, bool const &StripMultiArch,
+        bool const &ParseRestrictionsList,
+        std::string const &Arch);
 
 #ifdef APT_PKG_EXPOSE_STRING_VIEW
    APT_HIDDEN static const char *ParseDepends(const char *Start,const char *Stop,
@@ -109,6 +114,12 @@ class APT_HIDDEN debListParser : public pkgCacheListParser
     APT::StringView &Ver,unsigned int &Op,
         bool const ParseArchFlags = false, bool StripMultiArch = true,
         bool const ParseRestrictionsList = false);
+   APT_HIDDEN static const char *ParseDepends(const char *Start,const char *Stop,
+        APT::StringView &Package,
+        APT::StringView &Ver,unsigned int &Op,
+        bool const ParseArchFlags, bool StripMultiArch,
+        bool const ParseRestrictionsList,
+        std::string const &Arch);
 #endif
 
    APT_PUBLIC static const char *ConvertRelation(const char *I,unsigned int &Op);