ソースを参照

- add --arch option for apt-ftparchive packages and contents commands
- if an arch is given accept only *_all.deb and *_arch.deb instead
of *.deb. Thanks Stephan Bosch for the patch! (Closes: #319710)

David Kalnischkies 16 年 前
コミット
584fb39271
共有5 個のファイルを変更した34 個の追加24 個の削除を含む
  1. 3 0
      debian/changelog
  2. 10 2
      doc/apt-ftparchive.1.xml
  3. 4 3
      ftparchive/apt-ftparchive.cc
  4. 14 16
      ftparchive/writer.cc
  5. 3 3
      ftparchive/writer.h

+ 3 - 0
debian/changelog

@@ -18,6 +18,9 @@ apt (0.7.26) UNRELEASED; urgency=low
     - allow also to skip the last patch if target is reached,
     - allow also to skip the last patch if target is reached,
       thanks Bernhard R. Link! (Closes: #545699)
       thanks Bernhard R. Link! (Closes: #545699)
   * ftparchive/writer.{cc,h}:
   * ftparchive/writer.{cc,h}:
+    - add --arch option for packages and contents commands
+    - if an arch is given accept only *_all.deb and *_arch.deb instead
+      of *.deb. Thanks Stephan Bosch for the patch! (Closes: #319710)
     - add APT::FTPArchive::AlwaysStat to disable the too aggressive
     - add APT::FTPArchive::AlwaysStat to disable the too aggressive
       caching if versions are build multiply times (not recommend)
       caching if versions are build multiply times (not recommend)
       Patch by Christoph Goehre, thanks! (Closes: #463260)
       Patch by Christoph Goehre, thanks! (Closes: #463260)

+ 10 - 2
doc/apt-ftparchive.1.xml

@@ -39,6 +39,7 @@
       <arg><option>--delink</option></arg>
       <arg><option>--delink</option></arg>
       <arg><option>--readonly</option></arg>
       <arg><option>--readonly</option></arg>
       <arg><option>--contents</option></arg>
       <arg><option>--contents</option></arg>
+      <arg><option>--arch <replaceable>architecture</replaceable></option></arg>
       <arg><option>-o <replaceable>config</replaceable>=<replaceable>string</replaceable></option></arg>
       <arg><option>-o <replaceable>config</replaceable>=<replaceable>string</replaceable></option></arg>
       <arg><option>-c=<replaceable>file</replaceable></option></arg>      
       <arg><option>-c=<replaceable>file</replaceable></option></arg>      
       <group choice="req">
       <group choice="req">
@@ -542,11 +543,18 @@ for i in Sections do
      <listitem><para>
      <listitem><para>
      Make the caching databases read only. 
      Make the caching databases read only. 
      Configuration Item: <literal>APT::FTPArchive::ReadOnlyDB</literal>.</para></listitem>
      Configuration Item: <literal>APT::FTPArchive::ReadOnlyDB</literal>.</para></listitem>
-     </varlistentry>   
+     </varlistentry>
+
+     <varlistentry><term><option>-a</option></term><term><option>--arch</option></term>
+     <listitem><para>Accept in the <literal>packages</literal> and <literal>contents</literal>
+     commands only package files matching <literal>*_arch.deb</literal> or
+     <literal>*_all.deb</literal> instead of all package files in the given path.
+     Configuration Item: <literal>APT::FTPArchive::Architecture</literal>.</para></listitem>
+     </varlistentry>
 
 
      <varlistentry><term><option>APT::FTPArchive::AlwaysStat</option></term>
      <varlistentry><term><option>APT::FTPArchive::AlwaysStat</option></term>
      <listitem><para>
      <listitem><para>
-     &apt-ftparchive; caches as much as possible of metadata in it is cachedb. If packages
+     &apt-ftparchive; caches as much as possible of metadata in a cachedb. If packages
      are recompiled and/or republished with the same version again, this will lead to problems
      are recompiled and/or republished with the same version again, this will lead to problems
      as the now outdated cached metadata like size and checksums will be used. With this option
      as the now outdated cached metadata like size and checksums will be used. With this option
      enabled this will no longer happen as it will be checked if the file was changed.
      enabled this will no longer happen as it will be checked if the file was changed.

+ 4 - 3
ftparchive/apt-ftparchive.cc

@@ -333,7 +333,7 @@ bool PackageMap::GenContents(Configuration &Setup,
    gettimeofday(&StartTime,0);   
    gettimeofday(&StartTime,0);   
    
    
    // Create a package writer object.
    // Create a package writer object.
-   ContentsWriter Contents("");
+   ContentsWriter Contents("", Arch);
    if (PkgExt.empty() == false && Contents.SetExts(PkgExt) == false)
    if (PkgExt.empty() == false && Contents.SetExts(PkgExt) == false)
       return _error->Error(_("Package extension list is too long"));
       return _error->Error(_("Package extension list is too long"));
    if (_error->PendingError() == true)
    if (_error->PendingError() == true)
@@ -606,7 +606,7 @@ bool SimpleGenPackages(CommandLine &CmdL)
    
    
    // Create a package writer object.
    // Create a package writer object.
    PackagesWriter Packages(_config->Find("APT::FTPArchive::DB"),
    PackagesWriter Packages(_config->Find("APT::FTPArchive::DB"),
-			   Override, "");   
+			   Override, "", _config->Find("APT::FTPArchive::Architecture"));
    if (_error->PendingError() == true)
    if (_error->PendingError() == true)
       return false;
       return false;
    
    
@@ -629,7 +629,7 @@ bool SimpleGenContents(CommandLine &CmdL)
       return ShowHelp(CmdL);
       return ShowHelp(CmdL);
    
    
    // Create a package writer object.
    // Create a package writer object.
-   ContentsWriter Contents(_config->Find("APT::FTPArchive::DB"));
+   ContentsWriter Contents(_config->Find("APT::FTPArchive::DB"), _config->Find("APT::FTPArchive::Architecture"));
    if (_error->PendingError() == true)
    if (_error->PendingError() == true)
       return false;
       return false;
    
    
@@ -910,6 +910,7 @@ int main(int argc, const char *argv[])
       {0,"delink","APT::FTPArchive::DeLinkAct",0},
       {0,"delink","APT::FTPArchive::DeLinkAct",0},
       {0,"readonly","APT::FTPArchive::ReadOnlyDB",0},
       {0,"readonly","APT::FTPArchive::ReadOnlyDB",0},
       {0,"contents","APT::FTPArchive::Contents",0},
       {0,"contents","APT::FTPArchive::Contents",0},
+      {'a',"arch","APT::FTPArchive::Architecture",CommandLine::HasArg},
       {'c',"config-file",0,CommandLine::ConfigFile},
       {'c',"config-file",0,CommandLine::ConfigFile},
       {'o',"option",0,CommandLine::ArbItem},
       {'o',"option",0,CommandLine::ArbItem},
       {0,0,0,0}};
       {0,0,0,0}};

+ 14 - 16
ftparchive/writer.cc

@@ -54,7 +54,7 @@ inline void SetTFRewriteData(struct TFRewriteData &tfrd,
 // FTWScanner::FTWScanner - Constructor					/*{{{*/
 // FTWScanner::FTWScanner - Constructor					/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
-FTWScanner::FTWScanner()
+FTWScanner::FTWScanner(string const &Arch): Arch(Arch)
 {
 {
    ErrorPrinted = false;
    ErrorPrinted = false;
    NoLinkAct = !_config->FindB("APT::FTPArchive::DeLinkAct",true);
    NoLinkAct = !_config->FindB("APT::FTPArchive::DeLinkAct",true);
@@ -299,12 +299,11 @@ bool FTWScanner::Delink(string &FileName,const char *OriginalPath,
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
 PackagesWriter::PackagesWriter(string const &DB,string const &Overrides,string const &ExtOverrides,
 PackagesWriter::PackagesWriter(string const &DB,string const &Overrides,string const &ExtOverrides,
-			       string const &aArch) :
-   Db(DB),Stats(Db.Stats), Arch(aArch)
+			       string const &Arch) :
+   FTWScanner(Arch), Db(DB), Stats(Db.Stats)
 {
 {
    Output = stdout;
    Output = stdout;
-   SetExts(".deb .udeb .foo .bar .baz");
-   AddPattern("*.deb");
+   SetExts(".deb .udeb");
    DeLinkLimit = 0;
    DeLinkLimit = 0;
    
    
    // Process the command line options
    // Process the command line options
@@ -340,17 +339,16 @@ bool FTWScanner::SetExts(string const &Vals)
    string::size_type Start = 0;
    string::size_type Start = 0;
    while (Start <= Vals.length()-1)
    while (Start <= Vals.length()-1)
    {
    {
-      string::size_type Space = Vals.find(' ',Start);
-      string::size_type Length;
-      if (Space == string::npos)
+      string::size_type const Space = Vals.find(' ',Start);
+      string::size_type const Length = ((Space == string::npos) ? Vals.length() : Space) - Start;
+      if ( Arch.empty() == false )
       {
       {
-         Length = Vals.length()-Start;
+	 AddPattern(string("*_") + Arch + Vals.substr(Start, Length));
+	 AddPattern(string("*_all") + Vals.substr(Start, Length));
       }
       }
       else
       else
-      {
-         Length = Space-Start;
-      }
-      AddPattern(string("*") + Vals.substr(Start, Length));
+	 AddPattern(string("*") + Vals.substr(Start, Length));
+
       Start += Length + 1;
       Start += Length + 1;
    }
    }
 
 
@@ -767,11 +765,11 @@ bool SourcesWriter::DoPackage(string FileName)
 // ContentsWriter::ContentsWriter - Constructor				/*{{{*/
 // ContentsWriter::ContentsWriter - Constructor				/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
-ContentsWriter::ContentsWriter(string const &DB) : 
-		    Db(DB), Stats(Db.Stats)
+ContentsWriter::ContentsWriter(string const &DB, string const &Arch) :
+		    FTWScanner(Arch), Db(DB), Stats(Db.Stats)
 
 
 {
 {
-   AddPattern("*.deb");
+   SetExts(".deb");
    Output = stdout;
    Output = stdout;
 }
 }
 									/*}}}*/
 									/*}}}*/

+ 3 - 3
ftparchive/writer.h

@@ -34,6 +34,7 @@ class FTWScanner
 {
 {
    protected:
    protected:
    vector<string> Patterns;
    vector<string> Patterns;
+   string Arch;
    const char *OriginalPath;
    const char *OriginalPath;
    bool ErrorPrinted;
    bool ErrorPrinted;
    
    
@@ -68,7 +69,7 @@ class FTWScanner
    void AddPattern(string const &Pattern) { Patterns.push_back(Pattern); };
    void AddPattern(string const &Pattern) { Patterns.push_back(Pattern); };
    bool SetExts(string const &Vals);
    bool SetExts(string const &Vals);
       
       
-   FTWScanner();
+   FTWScanner(string const &Arch = string());
 };
 };
 
 
 class PackagesWriter : public FTWScanner
 class PackagesWriter : public FTWScanner
@@ -92,7 +93,6 @@ class PackagesWriter : public FTWScanner
    string DirStrip;
    string DirStrip;
    FILE *Output;
    FILE *Output;
    struct CacheDB::Stats &Stats;
    struct CacheDB::Stats &Stats;
-   string Arch;
 
 
    inline bool ReadOverride(string const &File) {return Over.ReadOverride(File);};
    inline bool ReadOverride(string const &File) {return Over.ReadOverride(File);};
    inline bool ReadExtraOverride(string const &File) 
    inline bool ReadExtraOverride(string const &File) 
@@ -125,7 +125,7 @@ class ContentsWriter : public FTWScanner
    void Finish() {Gen.Print(Output);};
    void Finish() {Gen.Print(Output);};
    inline bool ReadyDB(string const &DB) {return Db.ReadyDB(DB);};
    inline bool ReadyDB(string const &DB) {return Db.ReadyDB(DB);};
    
    
-   ContentsWriter(string const &DB);
+   ContentsWriter(string const &DB, string const &Arch = string());
    virtual ~ContentsWriter() {};
    virtual ~ContentsWriter() {};
 };
 };