[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#536029: marked as done (Add support to download index files for multiple architectures)



Your message dated Sat, 03 Apr 2010 13:40:46 +0000
with message-id <E1Ny3ag-0007mm-5Y@ries.debian.org>
and subject line Bug#536029: fixed in apt 0.7.26~exp3
has caused the Debian Bug report #536029,
regarding Add support to download index files for multiple architectures
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
536029: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=536029
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: apt
Version: 0.7.21
Severity: wishlist
Tags: patch

Hi,

attached is a patch I would like to get included eventually in apt
that adds the ability to download and process index files for multiple
architectures. This patch has 2 purposes:

1) I believe this will be the first thing that needs to be added to
implement multiarch. So it will be needed at some point anyway.

2) This will remove the hacks ia32-apt-get needs to pull over apt-get.
Ia32-apt-get can then be implemented by setting APT::Architectures and
adding a Apt::Update::Post-Invoke script.


The patch is not yet 100% complete and you will see some FIXMEs in the
patch and in the details below. Things I haven't been able to test yet
like adding a i386 CDrom on amd64 or things I'm unsure about. Any help
there would be appreciated.

On that note: How do I mark the *.bin files as incompatible? The
change in policy breaks compatibility I believe.


What the patch does in detail:

- Add APT::Architectures:: config option and initialize with
  APT::Architecture if unset.

- Declare the unused [vendor] field in sources.list as option
  field, e.g.
    deb [arch=amd64,i386;keyring=blubber.key;have=fun]
  FIXME: Parsing of this field is still missing but I pass a
  map<string,string> for it around where needed.

- When fetching index files download them for all APT::Architectures
  FIXME: use Options["arch"] to override the default

- Enter packages of all APT::Architectures into the package cache.

- Add the architecture to status and progress informations:
  Get:1 http://chocos sid/main i386 Packages [7788kB]

- Add b= (Build architecture) to policy:
  499 http://chocos sid/main i386 Packages
      release v=4.3,o=Debian,a=unstable,l=Debian,c=main,b=i386

- Decrease the pin of the non native archs by 1 and increase default
  pin of experimental to 2 (so non-native experimental is 1).
  FIXME:   99 /var/lib/dpkg/status
  This is so that the native arch will always be prefered unless the
  user pins it differently.


As said above the patch is not 100% yet but I feel it is ready for
others to test and comment and maybe help.

MfG
	Goswin

-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (499, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.29.4-frosties-1
Locale: LANG=C, LC_CTYPE=de_DE (charmap=ISO-8859-1)
Shell: /bin/sh linked to /bin/bash

Versions of packages apt depends on:
ii  debian-archive-keyring        2009.01.31 GnuPG archive keys of the Debian a
ii  libc6                         2.9-18     GNU C Library: Shared libraries
ii  libgcc1                       1:4.4.0-10 GCC support library
ii  libstdc++6                    4.4.0-10   The GNU Standard C++ Library v3

apt recommends no packages.

Versions of packages apt suggests:
ii  apt-doc                   0.7.21         Documentation for APT
ii  aptitude                  0.4.11.11-1+b1 terminal-based package manager
ii  bzip2                     1.0.5-3        high-quality block-sorting file co
ii  dpkg-dev                  1.15.3         Debian package development tools
ii  lzma                      4.43-14        Compression method of 7z format in
ii  python-apt                0.7.10.4       Python interface to libapt-pkg
ii  synaptic                  0.62.7         Graphical package manager

-- no debconf information
diff -Nru apt-0.7.21/apt-pkg/cdrom.cc apt-0.7.21a0.mrvn.1/apt-pkg/cdrom.cc
--- apt-0.7.21/apt-pkg/cdrom.cc	2009-04-14 14:20:29.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/cdrom.cc	2009-07-06 22:44:07.000000000 +0200
@@ -217,33 +217,41 @@
 /* Here we drop everything that is not this machines arch */
 bool pkgCdrom::DropBinaryArch(vector<string> &List)
 {
-   char S[300];
-   snprintf(S,sizeof(S),"/binary-%s/",
-	    _config->Find("Apt::Architecture").c_str());
-   
+   string Arch = _config->Find("Apt::Architecture");
+   vector<string> Archs = _config->FindList("Apt::Architectures");
+
    for (unsigned int I = 0; I < List.size(); I++)
    {
       const char *Str = List[I].c_str();
       
-      const char *Res;
-      if ((Res = strstr(Str,"/binary-")) == 0)
+      const char *Start, *End;
+      char Tmp[300];
+      if ((Start = strstr(Str,"/binary-")) == 0)
 	 continue;
+      Start += 8;
+      if ((End = strstr(Start,"/")) == 0 || Start == End)
+	 continue;
+      --End;
+
+      // Create temp string
+      strncpy(Tmp,Start,End-Start);
+      Tmp[End-Start] = 0;
+
+      // Check if arch matches
+      bool matching = false;
+      if (Arch == Tmp) matching = true;
+      for(vector<string>::const_iterator J = Archs.begin();
+	  !matching && J != Archs.end(); ++J) {
+	  if (*J == Tmp) matching = true;
+      }
 
       // Weird, remove it.
-      if (strlen(Res) < strlen(S))
+      if (!matching)
       {
 	 List.erase(List.begin() + I);
 	 I--;
 	 continue;
       }
-	  
-      // See if it is our arch
-      if (stringcmp(Res,Res + strlen(S),S) == 0)
-	 continue;
-      
-      // Erase it
-      List.erase(List.begin() + I);
-      I--;
    }
    
    return true;
diff -Nru apt-0.7.21/apt-pkg/clean.cc apt-0.7.21a0.mrvn.1/apt-pkg/clean.cc
--- apt-0.7.21/apt-pkg/clean.cc	2008-06-09 23:10:08.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/clean.cc	2009-07-06 22:38:05.000000000 +0200
@@ -77,8 +77,9 @@
       if (*I != '.')
 	 continue;
       string Arch = DeQuoteString(string(Start,I-Start));
-      
-      if (Arch != "all" && Arch != MyArch)
+
+      if (Arch != "all" && Arch != MyArch
+	  && !_config->Member("APT::architectures", Arch))
 	 continue;
       
       // Lookup the package
diff -Nru apt-0.7.21/apt-pkg/contrib/configuration.cc apt-0.7.21a0.mrvn.1/apt-pkg/contrib/configuration.cc
--- apt-0.7.21/apt-pkg/contrib/configuration.cc	2009-04-08 22:58:28.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/contrib/configuration.cc	2009-07-06 16:45:30.000000000 +0200
@@ -223,6 +223,27 @@
    return Res;
 }
 									/*}}}*/
+// Configuration::FindList - Find a list of values		        /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+vector<string> Configuration::FindList(const string Name) const
+{
+   vector<string> Vec;
+   const Item *Top = Lookup(Name.c_str());
+   if (Top == 0 || Top->Child == 0)
+      return Vec;
+
+   Item *I;
+   I = Top->Child;
+
+   while(I != NULL)
+   {
+      Vec.push_back(I->Value);
+      I = I->Next;
+   }
+   return Vec;
+}
+									/*}}}*/
 // Configuration::FindI - Find an integer value				/*{{{*/
 // ---------------------------------------------------------------------
 /* */
@@ -370,6 +391,30 @@
      
 }
 									/*}}}*/
+// Configuration::Member - Check if Value is member of a list	        /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool Configuration::Member(const string Name, string Value)
+{
+   Item *Top = Lookup(Name.c_str(),false);
+   if (Top == 0 || Top->Child == 0)
+      return false;
+
+   Item *I;
+   I = Top->Child;
+
+   while(I != NULL)
+   {
+      if(I->Value == Value)
+      {
+	 return true;
+      } else {
+	 I = I->Next;
+      }
+   }
+   return false;
+}
+									/*}}}*/
 // Configuration::Clear - Clear an entire tree				/*{{{*/
 // ---------------------------------------------------------------------
 /* */
diff -Nru apt-0.7.21/apt-pkg/contrib/configuration.h apt-0.7.21a0.mrvn.1/apt-pkg/contrib/configuration.h
--- apt-0.7.21/apt-pkg/contrib/configuration.h	2008-06-09 23:10:08.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/contrib/configuration.h	2009-07-06 16:43:14.000000000 +0200
@@ -32,8 +32,10 @@
 
 #include <string>
 #include <iostream>
+#include <vector>
 
 using std::string;
+using std::vector;
 
 class Configuration
 {
@@ -70,6 +72,7 @@
    string Find(const string Name,const char *Default = 0) const {return Find(Name.c_str(),Default);};
    string FindFile(const char *Name,const char *Default = 0) const;
    string FindDir(const char *Name,const char *Default = 0) const;
+   vector<string> FindList(const string Name) const;
    int FindI(const char *Name,int Default = 0) const;
    int FindI(const string Name,int Default = 0) const {return FindI(Name.c_str(),Default);};
    bool FindB(const char *Name,bool Default = false) const;
@@ -92,6 +95,9 @@
    void Clear(const string List, string Value);
    void Clear(const string List, int Value);
 
+   // check if Value is member of a list
+   bool Member(const string Name, const string Value);
+
    inline const Item *Tree(const char *Name) const {return Lookup(Name);};
 
    inline void Dump() { Dump(std::clog); };
diff -Nru apt-0.7.21/apt-pkg/deb/debindexfile.cc apt-0.7.21a0.mrvn.1/apt-pkg/deb/debindexfile.cc
--- apt-0.7.21/apt-pkg/deb/debindexfile.cc	2008-06-09 23:10:08.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/deb/debindexfile.cc	2009-07-06 22:41:51.000000000 +0200
@@ -28,7 +28,7 @@
 // ---------------------------------------------------------------------
 /* */
 debSourcesIndex::debSourcesIndex(string URI,string Dist,string Section,bool Trusted) :
-     pkgIndexFile(Trusted), URI(URI), Dist(Dist), Section(Section)
+   pkgIndexFile(Trusted, "source"), URI(URI), Dist(Dist), Section(Section)
 {
 }
 									/*}}}*/
@@ -149,8 +149,8 @@
 // PackagesIndex::debPackagesIndex - Contructor				/*{{{*/
 // ---------------------------------------------------------------------
 /* */
-debPackagesIndex::debPackagesIndex(string URI,string Dist,string Section,bool Trusted) : 
-                  pkgIndexFile(Trusted), URI(URI), Dist(Dist), Section(Section)
+debPackagesIndex::debPackagesIndex(string URI,string Dist,string Section,bool Trusted,string Architecture) : 
+    pkgIndexFile(Trusted,Architecture), URI(URI), Dist(Dist), Section(Section)
 {
 }
 									/*}}}*/
@@ -171,6 +171,8 @@
    Res += " ";
    Res += Ver.ParentPkg().Name();
    Res += " ";
+   Res += Ver.Arch();
+   Res += " ";
    Res += Ver.VerStr();
    return Res;
 }
@@ -204,6 +206,8 @@
    else
       Info += Dist + '/' + Section;   
    Info += " ";
+   Info += Arch;
+   Info += " ";
    Info += Type;
    return Info;
 }
@@ -227,7 +231,7 @@
    }
    else
       Res = URI + "dists/" + Dist + '/' + Section +
-      "/binary-" + _config->Find("APT::Architecture") + '/';
+      "/binary-" + Arch + '/';
    
    Res += Type;
    return Res;
@@ -280,13 +284,13 @@
       return _error->Error("Problem with MergeList %s",PackageFile.c_str());
 
    // Check the release file
-   string ReleaseFile = debReleaseIndex(URI,Dist).MetaIndexFile("Release");
+   string ReleaseFile = debReleaseIndex(URI,Dist,Arch).MetaIndexFile("Release");
    if (FileExists(ReleaseFile) == true)
    {
       FileFd Rel(ReleaseFile,FileFd::ReadOnly);
       if (_error->PendingError() == true)
 	 return false;
-      Parser.LoadReleaseInfo(File,Rel,Section);
+      Parser.LoadReleaseInfo(File,Rel,Section,Arch);
    }
    
    return true;
@@ -320,7 +324,7 @@
 // ---------------------------------------------------------------------
 /* */
 debTranslationsIndex::debTranslationsIndex(string URI,string Dist,string Section) : 
-                  pkgIndexFile(true), URI(URI), Dist(Dist), Section(Section)
+    pkgIndexFile(true,"translation"), URI(URI), Dist(Dist), Section(Section)
 {
 }
 									/*}}}*/
@@ -483,7 +487,7 @@
 // StatusIndex::debStatusIndex - Constructor				/*{{{*/
 // ---------------------------------------------------------------------
 /* */
-debStatusIndex::debStatusIndex(string File) : pkgIndexFile(true), File(File)
+debStatusIndex::debStatusIndex(string File) : pkgIndexFile(true,"status"), File(File)
 {
 }
 									/*}}}*/
diff -Nru apt-0.7.21/apt-pkg/deb/debindexfile.h apt-0.7.21a0.mrvn.1/apt-pkg/deb/debindexfile.h
--- apt-0.7.21/apt-pkg/deb/debindexfile.h	2008-06-09 23:10:08.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/deb/debindexfile.h	2009-07-06 17:07:58.000000000 +0200
@@ -60,7 +60,7 @@
    virtual string ArchiveURI(string File) const {return URI + File;};
    
    // Interface for acquire
-   virtual string Describe(bool Short) const;   
+   virtual string Describe(bool Short) const;
    
    // Interface for the Cache Generator
    virtual bool Exists() const;
@@ -69,7 +69,7 @@
    virtual bool Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const;
    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
 
-   debPackagesIndex(string URI,string Dist,string Section,bool Trusted);
+   debPackagesIndex(string URI,string Dist,string Section,bool Trusted,string Architecture);
 };
 
 class debTranslationsIndex : public pkgIndexFile
@@ -89,7 +89,7 @@
    virtual const Type *GetType() const;
 
    // Interface for acquire
-   virtual string Describe(bool Short) const;   
+   virtual string Describe(bool Short) const;
    virtual bool GetIndexes(pkgAcquire *Owner) const;
    
    // Interface for the Cache Generator
@@ -122,7 +122,7 @@
    virtual string ArchiveURI(string File) const {return URI + File;};
    
    // Interface for acquire
-   virtual string Describe(bool Short) const;   
+   virtual string Describe(bool Short) const;
 
    // Interface for the record parsers
    virtual pkgSrcRecords::Parser *CreateSrcParser() const;
diff -Nru apt-0.7.21/apt-pkg/deb/deblistparser.cc apt-0.7.21a0.mrvn.1/apt-pkg/deb/deblistparser.cc
--- apt-0.7.21/apt-pkg/deb/deblistparser.cc	2008-06-09 23:10:09.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/deb/deblistparser.cc	2009-07-06 22:12:15.000000000 +0200
@@ -34,7 +34,9 @@
 /* */
 debListParser::debListParser(FileFd *File) : Tags(File)
 {
+   // FIXME: get arch from options field?
    Arch = _config->Find("APT::architecture");
+   Archs = _config->FindList("APT::architectures");
 }
 									/*}}}*/
 // ListParser::UniqFindTagWrite - Find the tag and write a unq string	/*{{{*/
@@ -439,6 +441,7 @@
 
    if (ParseArchFlags == true)
    {
+      // FIXME: needs investigating
       string arch = _config->Find("APT::Architecture");
 
       // Parse an architecture
@@ -604,6 +607,12 @@
       if (stringcmp(Start,Stop,"all") == 0)
 	 return true;
 
+      for (vector<string>::const_iterator I = Archs.begin();
+	   I != Archs.end(); ++I) {
+	 if (stringcmp(*I,Start,Stop) == 0)
+	    return true;
+      }
+
       iOffset = Tags.Offset();
    }   
    return false;
@@ -613,15 +622,15 @@
 // ---------------------------------------------------------------------
 /* */
 bool debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator FileI,
-				    FileFd &File, string component)
+				    FileFd &File, string component,
+				    string Arch)
 {
    pkgTagFile Tags(&File, File.Size() + 256); // XXX
    pkgTagSection Section;
    if (Tags.Step(Section) == false)
       return false;
 
-   //mvo: I don't think we need to fill that in (it's unused since apt-0.6)
-   //FileI->Architecture = WriteUniqString(Arch);
+   FileI->Architecture = WriteUniqString(Arch);
    
    // apt-secure does no longer download individual (per-section) Release
    // file. to provide Component pinning we use the section name now
diff -Nru apt-0.7.21/apt-pkg/deb/deblistparser.h apt-0.7.21a0.mrvn.1/apt-pkg/deb/deblistparser.h
--- apt-0.7.21/apt-pkg/deb/deblistparser.h	2008-06-09 23:10:09.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/deb/deblistparser.h	2009-07-06 22:02:03.000000000 +0200
@@ -11,10 +11,14 @@
 #ifndef PKGLIB_DEBLISTPARSER_H
 #define PKGLIB_DEBLISTPARSER_H
 
+#include <vector>
+
 #include <apt-pkg/pkgcachegen.h>
 #include <apt-pkg/indexfile.h>
 #include <apt-pkg/tagfile.h>
 
+using std::vector;
+
 class debListParser : public pkgCacheGenerator::ListParser
 {
    public:
@@ -32,7 +36,8 @@
    pkgTagSection Section;
    unsigned long iOffset;
    string Arch;
-   
+   vector<string> Archs;
+
    unsigned long UniqFindTagWrite(const char *Tag);
    bool ParseStatus(pkgCache::PkgIterator Pkg,pkgCache::VerIterator Ver);
    bool ParseDepends(pkgCache::VerIterator Ver,const char *Tag,
@@ -60,7 +65,7 @@
    virtual bool Step();
    
    bool LoadReleaseInfo(pkgCache::PkgFileIterator FileI,FileFd &File,
-			string section);
+			string section,string Arch);
    
    static const char *ParseDepends(const char *Start,const char *Stop,
 			    string &Package,string &Ver,unsigned int &Op,
diff -Nru apt-0.7.21/apt-pkg/deb/debmetaindex.cc apt-0.7.21a0.mrvn.1/apt-pkg/deb/debmetaindex.cc
--- apt-0.7.21/apt-pkg/deb/debmetaindex.cc	2008-06-09 23:10:09.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/deb/debmetaindex.cc	2009-07-06 20:06:07.000000000 +0200
@@ -5,11 +5,10 @@
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/acquire-item.h>
 #include <apt-pkg/configuration.h>
-#include <apt-pkg/error.h>
 
 using namespace std;
 
-string debReleaseIndex::Info(const char *Type, const string Section) const
+string debReleaseIndex::Info(const char *Type, const string Section, const string Arch) const
 {
    string Info = ::URI::SiteOnly(URI) + ' ';
    if (Dist[Dist.size() - 1] == '/')
@@ -20,6 +19,8 @@
    else
       Info += Dist + '/' + Section;   
    Info += " ";
+   Info += Arch;
+   Info += " ";
    Info += Type;
    return Info;
 }
@@ -60,16 +61,16 @@
    return Res;
 }
 
-string debReleaseIndex::IndexURISuffix(const char *Type, const string Section) const
+string debReleaseIndex::IndexURISuffix(const char *Type, const string Section, const string Arch) const
 {
    string Res ="";
    if (Dist[Dist.size() - 1] != '/')
-      Res += Section + "/binary-" + _config->Find("APT::Architecture") + '/';
+      Res += Section + "/binary-" + Arch + '/';
    return Res + Type;
 }
    
 
-string debReleaseIndex::IndexURI(const char *Type, const string Section) const
+string debReleaseIndex::IndexURI(const char *Type, const string Section, const string Architecture) const
 {
    if (Dist[Dist.size() - 1] == '/')
    {
@@ -81,7 +82,7 @@
       return Res + Type;
    }
    else
-      return URI + "dists/" + Dist + '/' + IndexURISuffix(Type, Section);
+      return URI + "dists/" + Dist + '/' + IndexURISuffix(Type, Section, Architecture);
  }
 
 string debReleaseIndex::SourceIndexURISuffix(const char *Type, const string Section) const
@@ -107,7 +108,15 @@
       return URI + "dists/" + Dist + "/" + SourceIndexURISuffix(Type, Section);
 }
 
-debReleaseIndex::debReleaseIndex(string URI,string Dist)
+debReleaseIndex::debReleaseIndex(string URI,string Dist,vector<string> Archs) : metaIndex(Archs)
+{
+   this->URI = URI;
+   this->Dist = Dist;
+   this->Indexes = NULL;
+   this->Type = "deb";
+}
+
+debReleaseIndex::debReleaseIndex(string URI,string Dist,string Arch) : metaIndex(Arch)
 {
    this->URI = URI;
    this->Dist = Dist;
@@ -122,17 +131,30 @@
 	I != SectionEntries.end();
 	I++)
    {
-      IndexTarget * Target = new IndexTarget();
-      Target->ShortDesc = (*I)->IsSrc ? "Sources" : "Packages";
-      Target->MetaKey
-	= (*I)->IsSrc ? SourceIndexURISuffix(Target->ShortDesc.c_str(), (*I)->Section)
-	              : IndexURISuffix(Target->ShortDesc.c_str(), (*I)->Section);
-      Target->URI 
-	= (*I)->IsSrc ? SourceIndexURI(Target->ShortDesc.c_str(), (*I)->Section)
-	              : IndexURI(Target->ShortDesc.c_str(), (*I)->Section);
+       if ((*I)->IsSrc) {
+	  IndexTarget * Target = new IndexTarget();
+	  Target->ShortDesc = "Sources";
+	  Target->MetaKey
+	      = SourceIndexURISuffix(Target->ShortDesc.c_str(), (*I)->Section);
+	  Target->URI 
+	      = SourceIndexURI(Target->ShortDesc.c_str(), (*I)->Section);
+	  Target->Description
+	      = Info (Target->ShortDesc.c_str(), (*I)->Section, "source");
+	  IndexTargets->push_back (Target);
+       } else {
+	  for (vector<string>::const_iterator J = Archs.begin();
+	       J != Archs.end(); ++J) {
+	     IndexTarget * Target = new IndexTarget();
+	     Target->ShortDesc = "Packages";
+	     Target->MetaKey
+		 = IndexURISuffix(Target->ShortDesc.c_str(), (*I)->Section, *J);
+	     Target->URI
+		 = IndexURI(Target->ShortDesc.c_str(), (*I)->Section, *J);
       
-      Target->Description = Info (Target->ShortDesc.c_str(), (*I)->Section);
-      IndexTargets->push_back (Target);
+	     Target->Description = Info (Target->ShortDesc.c_str(), (*I)->Section, *J);
+	     IndexTargets->push_back (Target);
+	  }
+       }
    }
    return IndexTargets;
 }
@@ -201,7 +223,10 @@
          Indexes->push_back(new debSourcesIndex (URI, Dist, (*I)->Section, IsTrusted()));
       else 
       {
-         Indexes->push_back(new debPackagesIndex (URI, Dist, (*I)->Section, IsTrusted()));
+	  for (vector<string>::const_iterator J = Archs.begin();
+	      J != Archs.end(); ++J) {
+	    Indexes->push_back(new debPackagesIndex (URI, Dist, (*I)->Section, IsTrusted(),*J));
+	 }
 	 Indexes->push_back(new debTranslationsIndex(URI, Dist, (*I)->Section));
       }
    }
@@ -223,8 +248,9 @@
 {
    protected:
 
-   bool CreateItemInternal(vector<metaIndex *> &List,string URI,
-			   string Dist,string Section,
+   bool CreateItemInternal(vector<metaIndex *> &List,
+			   map<string, string> Options,
+			   string URI,string Dist,string Section,
 			   bool IsSrc) const
    {
       for (vector<metaIndex *>::const_iterator I = List.begin(); 
@@ -242,13 +268,16 @@
 	    if (Deb->GetURI() == URI && Deb->GetDist() == Dist)
 	    {
 	       Deb->PushSectionEntry(new debReleaseIndex::debSectionEntry(Section, IsSrc));
+	       // FIXME: push archs
 	       return true;
 	    }
 	 }
       }
       // No currently created Release file indexes this entry, so we create a new one.
       // XXX determine whether this release is trusted or not
-      debReleaseIndex *Deb = new debReleaseIndex(URI,Dist);
+      // FIXME: get archs from options
+      vector<string> Archs = _config->FindList("APT::architectures");
+      debReleaseIndex *Deb = new debReleaseIndex(URI,Dist,Archs);
       Deb->PushSectionEntry (new debReleaseIndex::debSectionEntry(Section, IsSrc));
       List.push_back(Deb);
       return true;
@@ -259,10 +288,10 @@
 {
    public:
 
-   bool CreateItem(vector<metaIndex *> &List,string URI,
-		   string Dist,string Section) const
+   bool CreateItem(vector<metaIndex *> &List,map<string,string> Options,
+		   string URI,string Dist,string Section) const
    {
-      return CreateItemInternal(List, URI, Dist, Section, false);
+      return CreateItemInternal(List, Options, URI, Dist, Section, false);
    }
 
    debSLTypeDeb()
@@ -276,10 +305,10 @@
 {
    public:
 
-   bool CreateItem(vector<metaIndex *> &List,string URI,
-		   string Dist,string Section) const 
+   bool CreateItem(vector<metaIndex *> &List,map<string,string> Options,
+		   string URI,string Dist,string Section) const 
    {
-      return CreateItemInternal(List, URI, Dist, Section, true);
+      return CreateItemInternal(List, Options, URI, Dist, Section, true);
    }
    
    debSLTypeDebSrc()
diff -Nru apt-0.7.21/apt-pkg/deb/debmetaindex.h apt-0.7.21a0.mrvn.1/apt-pkg/deb/debmetaindex.h
--- apt-0.7.21/apt-pkg/deb/debmetaindex.h	2008-06-09 23:10:09.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/deb/debmetaindex.h	2009-07-06 20:05:49.000000000 +0200
@@ -21,17 +21,18 @@
 
    public:
 
-   debReleaseIndex(string URI, string Dist);
+   debReleaseIndex(string URI,string Dist,vector<string> Archs);
+   debReleaseIndex(string URI,string Dist,string Arch);
 
    virtual string ArchiveURI(string File) const {return URI + File;};
    virtual bool GetIndexes(pkgAcquire *Owner, bool GetAll=false) const;
    vector <struct IndexTarget *>* ComputeIndexTargets() const;
-   string Info(const char *Type, const string Section) const;
+   string Info(const char *Type, const string Section, const string Arch) const;
    string MetaIndexInfo(const char *Type) const;
    string MetaIndexFile(const char *Types) const;
    string MetaIndexURI(const char *Type) const;
-   string IndexURI(const char *Type, const string Section) const;
-   string IndexURISuffix(const char *Type, const string Section) const;
+   string IndexURI(const char *Type, const string Section, const string Architecture) const;
+   string IndexURISuffix(const char *Type, const string Section, const string Architecture) const;
    string SourceIndexURI(const char *Type, const string Section) const;
    string SourceIndexURISuffix(const char *Type, const string Section) const;
    virtual vector <pkgIndexFile *> *GetIndexFiles();
diff -Nru apt-0.7.21/apt-pkg/indexcopy.cc apt-0.7.21a0.mrvn.1/apt-pkg/indexcopy.cc
--- apt-0.7.21/apt-pkg/indexcopy.cc	2009-04-14 14:20:29.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/indexcopy.cc	2009-07-06 22:53:42.000000000 +0200
@@ -378,6 +378,7 @@
 void IndexCopy::ConvertToSourceList(string CD,string &Path)
 {
    char S[300];
+   // FIXME: allow for APT::Architectures
    snprintf(S,sizeof(S),"binary-%s",_config->Find("Apt::Architecture").c_str());
    
    // Strip the cdrom base path
diff -Nru apt-0.7.21/apt-pkg/indexfile.h apt-0.7.21a0.mrvn.1/apt-pkg/indexfile.h
--- apt-0.7.21/apt-pkg/indexfile.h	2008-06-09 23:10:08.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/indexfile.h	2009-07-06 17:40:08.000000000 +0200
@@ -37,7 +37,8 @@
 {
    protected:
    bool Trusted;
-     
+   string Arch;
+
    public:
 
    class Type
@@ -83,8 +84,9 @@
    static string LanguageCode();
 
    bool IsTrusted() const { return Trusted; };
-   
-   pkgIndexFile(bool Trusted): Trusted(Trusted) {};
+   string GetArch() const { return Arch; };
+
+   pkgIndexFile(bool Trusted,string Arch): Trusted(Trusted), Arch(Arch) {};
    virtual ~pkgIndexFile() {};
 };
 
diff -Nru apt-0.7.21/apt-pkg/init.cc apt-0.7.21a0.mrvn.1/apt-pkg/init.cc
--- apt-0.7.21/apt-pkg/init.cc	2008-06-09 23:10:08.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/init.cc	2009-07-06 18:30:19.000000000 +0200
@@ -95,7 +95,12 @@
    
    if (Res == false)
       return false;
-   
+
+   // If APT::Architectures is unset initialize with APT::Architecture
+   if (Cnf.Tree("APT::Architectures::") == NULL) {
+      Cnf.Set("APT::Architectures::", Cnf.Find("APT::Architecture"));
+   }
+
    if (Cnf.FindB("Debug::pkgInitConfig",false) == true)
       Cnf.Dump();
    
diff -Nru apt-0.7.21/apt-pkg/metaindex.h apt-0.7.21a0.mrvn.1/apt-pkg/metaindex.h
--- apt-0.7.21/apt-pkg/metaindex.h	2008-06-09 23:10:08.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/metaindex.h	2009-07-06 22:54:29.000000000 +0200
@@ -3,6 +3,7 @@
 
 
 #include <string>
+#include <vector>
 #include <apt-pkg/pkgcache.h>
 #include <apt-pkg/srcrecords.h>
 #include <apt-pkg/pkgrecords.h>
@@ -10,6 +11,7 @@
 #include <apt-pkg/vendor.h>
     
 using std::string;
+using std::vector;
 
 class pkgAcquire;
 class pkgCacheGenerator;
@@ -23,6 +25,7 @@
    string URI;
    string Dist;
    bool Trusted;
+   vector<string> Archs;
 
    public:
 
@@ -39,6 +42,8 @@
    virtual vector<pkgIndexFile *> *GetIndexFiles() = 0; 
    virtual bool IsTrusted() const = 0;
 
+   metaIndex(vector<string> Archs) : Archs(Archs) { };
+   metaIndex(string Arch) { Archs.push_back(Arch); };
    virtual ~metaIndex() {};
 };
 
diff -Nru apt-0.7.21/apt-pkg/pkgcache.cc apt-0.7.21a0.mrvn.1/apt-pkg/pkgcache.cc
--- apt-0.7.21/apt-pkg/pkgcache.cc	2009-04-09 04:31:56.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/pkgcache.cc	2009-07-06 22:03:25.000000000 +0200
@@ -147,7 +147,8 @@
        (VS = pkgVersioningSystem::GetVS(StrP + HeaderP->VerSysName)) == 0)
       return _error->Error(_("This APT does not support the versioning system '%s'"),StrP + HeaderP->VerSysName);
 
-   // Chcek the arhcitecture
+   // Check the architecture
+   // FIXME: Should this check architectures?
    if (HeaderP->Architecture == 0 ||
        _config->Find("APT::Architecture") != StrP + HeaderP->Architecture)
       return _error->Error(_("The package cache was built for a different architecture"));
@@ -611,6 +612,8 @@
       Res = Res + (Res.empty() == true?"l=":",l=")  + Label();
    if (Component() != 0)
       Res = Res + (Res.empty() == true?"c=":",c=")  + Component();
+   if (Architecture() != 0)
+      Res = Res + (Res.empty() == true?"b=":",b=")  + Architecture();
    return Res;
 }
 									/*}}}*/
diff -Nru apt-0.7.21/apt-pkg/policy.cc apt-0.7.21a0.mrvn.1/apt-pkg/policy.cc
--- apt-0.7.21/apt-pkg/policy.cc	2008-06-09 23:10:08.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/policy.cc	2009-07-06 22:10:05.000000000 +0200
@@ -71,7 +71,10 @@
 	 PFPriority[I->ID] = 100;
       else
 	 if ((I->Flags & pkgCache::Flag::NotAutomatic) == pkgCache::Flag::NotAutomatic)
-	    PFPriority[I->ID] = 1;
+	    PFPriority[I->ID] = 2;
+      // FIXME: reduce priority if not native arch
+      if (I.Architecture() == 0 || (I.Architecture() != string("all") && I.Architecture() != string("amd64")))
+         --PFPriority[I->ID];
    }
 
    // Apply the defaults..
diff -Nru apt-0.7.21/apt-pkg/sourcelist.cc apt-0.7.21a0.mrvn.1/apt-pkg/sourcelist.cc
--- apt-0.7.21/apt-pkg/sourcelist.cc	2008-06-09 23:10:08.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/sourcelist.cc	2009-07-06 16:37:14.000000000 +0200
@@ -79,6 +79,7 @@
    Weird types may override this. */
 bool pkgSourceList::Type::ParseLine(vector<metaIndex *> &List,
 				    const char *Buffer,
+				    map<string, string> Options,
 				    unsigned long CurLine,
 				    string File) const
 {
@@ -100,7 +101,7 @@
       if (ParseQuoteWord(Buffer,Section) == true)
 	 return _error->Error(_("Malformed line %lu in source list %s (absolute dist)"),CurLine,File.c_str());
       Dist = SubstVar(Dist,"$(ARCH)",_config->Find("APT::Architecture"));
-      return CreateItem(List,URI,Dist,Section);
+      return CreateItem(List,Options,URI,Dist,Section);
    }
    
    // Grab the rest of the dists
@@ -109,7 +110,7 @@
    
    do
    {
-      if (CreateItem(List,URI,Dist,Section) == false)
+      if (CreateItem(List,Options,URI,Dist,Section) == false)
 	 return false;
    }
    while (ParseQuoteWord(Buffer,Section) == true);
@@ -239,7 +240,8 @@
       if (Parse == 0)
 	 return _error->Error(_("Type '%s' is not known on line %u in source list %s"),LineType.c_str(),CurLine,File.c_str());
       
-      // Vendor name specified
+      // FIXME: Parse options
+      map<string,string> Options;
       if (C[0] == '[')
       {
 	 string VendorID;
@@ -268,7 +270,7 @@
 // 				 VendorID.c_str(),CurLine,File.c_str());
       }
 
-      if (Parse->ParseLine(SrcList,C,CurLine,File) == false)
+      if (Parse->ParseLine(SrcList,C,Options,CurLine,File) == false)
 	 return false;
    }
    return true;
diff -Nru apt-0.7.21/apt-pkg/sourcelist.h apt-0.7.21a0.mrvn.1/apt-pkg/sourcelist.h
--- apt-0.7.21/apt-pkg/sourcelist.h	2008-06-09 23:10:08.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/sourcelist.h	2009-07-06 16:34:11.000000000 +0200
@@ -29,12 +29,13 @@
 
 #include <string>
 #include <vector>
+#include <map>
 #include <apt-pkg/pkgcache.h>
 #include <apt-pkg/metaindex.h>
 
 using std::string;
 using std::vector;
-    
+using std::map;
 
 class pkgAquire;
 class pkgSourceList
@@ -57,8 +58,10 @@
       bool FixupURI(string &URI) const;
       virtual bool ParseLine(vector<metaIndex *> &List,
 			     const char *Buffer,
+			     map<string, string> Options,
 			     unsigned long CurLine,string File) const;
-      virtual bool CreateItem(vector<metaIndex *> &List,string URI,
+      virtual bool CreateItem(vector<metaIndex *> &List,
+			      map<string, string> Options, string URI,
 			      string Dist,string Section) const = 0;
       Type();
       virtual ~Type() {};
diff -Nru apt-0.7.21/apt-pkg/versionmatch.cc apt-0.7.21a0.mrvn.1/apt-pkg/versionmatch.cc
--- apt-0.7.21/apt-pkg/versionmatch.cc	2008-11-24 10:32:23.000000000 +0100
+++ apt-0.7.21a0.mrvn.1/apt-pkg/versionmatch.cc	2009-07-06 21:41:34.000000000 +0200
@@ -98,6 +98,8 @@
 	    RelLabel = Fragments[J]+2;
 	 else if (stringcasecmp(Fragments[J],Fragments[J]+2,"c=") == 0)
 	    RelComponent = Fragments[J]+2;
+	 else if (stringcasecmp(Fragments[J],Fragments[J]+2,"b=") == 0)
+	    RelArch = Fragments[J]+2;
       }
       
       if (RelVerStr.end()[-1] == '*')
@@ -175,7 +177,7 @@
       
       if (RelVerStr.empty() == true && RelOrigin.empty() == true &&
 	  RelArchive.empty() == true && RelLabel.empty() == true &&
-	  RelComponent.empty() == true)
+	  RelComponent.empty() == true && RelArch.empty() == true)
 	 return false;
       
       if (RelVerStr.empty() == false)
@@ -200,6 +202,9 @@
 	 if (File->Component == 0 ||
 	     stringcasecmp(RelComponent,File.Component()) != 0)
 	    return false;
+      // FIXME:
+      // if (RelArch.empty() == false)
+      // compare arch
       return true;
    }
    
diff -Nru apt-0.7.21/apt-pkg/versionmatch.h apt-0.7.21a0.mrvn.1/apt-pkg/versionmatch.h
--- apt-0.7.21/apt-pkg/versionmatch.h	2008-06-09 23:10:08.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/apt-pkg/versionmatch.h	2009-07-06 21:39:32.000000000 +0200
@@ -20,6 +20,7 @@
       Archive (a=)
       Label (l=)
       Component (c=)
+      Build architecture (b=)
    If there are no equals signs in the string then it is scanned in short
    form - if it starts with a number it is Version otherwise it is an 
    Archive.
@@ -50,6 +51,7 @@
    string RelArchive;
    string RelLabel;
    string RelComponent;
+   string RelArch;
    bool MatchAll;
    
    // Origin Matching
diff -Nru apt-0.7.21/cmdline/apt-get.cc apt-0.7.21a0.mrvn.1/cmdline/apt-get.cc
--- apt-0.7.21/cmdline/apt-get.cc	2009-04-14 14:20:29.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/cmdline/apt-get.cc	2009-07-06 22:57:22.000000000 +0200
@@ -1360,7 +1360,7 @@
    
    // Create the progress
    AcqTextStatus Stat(ScreenWidth,_config->FindI("quiet",0));
-      
+   
    // Just print out the uris an exit if the --print-uris flag was used
    if (_config->FindB("APT::Get::Print-URIs") == true)
    {
diff -Nru apt-0.7.21/configure apt-0.7.21a0.mrvn.1/configure
--- apt-0.7.21/configure	2009-04-14 14:21:45.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/configure	2009-07-06 18:11:14.000000000 +0200
@@ -1901,7 +1901,7 @@
 
 
 cat >>confdefs.h <<_ACEOF
-#define VERSION "0.7.21"
+#define VERSION "0.7.21a0.mrvn.1"
 _ACEOF
 
 PACKAGE="apt"
diff -Nru apt-0.7.21/configure.in apt-0.7.21a0.mrvn.1/configure.in
--- apt-0.7.21/configure.in	2009-04-14 14:21:18.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/configure.in	2009-07-06 18:11:13.000000000 +0200
@@ -18,7 +18,7 @@
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 
 dnl -- SET THIS TO THE RELEASE VERSION --
-AC_DEFINE_UNQUOTED(VERSION,"0.7.21")
+AC_DEFINE_UNQUOTED(VERSION,"0.7.21a0.mrvn.1")
 PACKAGE="apt"
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_SUBST(PACKAGE)
diff -Nru apt-0.7.21/debian/changelog apt-0.7.21a0.mrvn.1/debian/changelog
--- apt-0.7.21/debian/changelog	2009-04-14 14:20:29.000000000 +0200
+++ apt-0.7.21a0.mrvn.1/debian/changelog	2009-07-06 15:44:09.000000000 +0200
@@ -1,3 +1,10 @@
+apt (0.7.21a0.mrvn.1) unstable; urgency=low
+
+  [ Goswin von Brederlow ]
+  * Add architectures config option
+
+ -- Goswin von Brederlow <goswin-v-b@web.de>  Mon, 06 Jul 2009 15:39:48 +0200
+
 apt (0.7.21) unstable; urgency=low
 
   [ Christian Perrier ]

--- End Message ---
--- Begin Message ---
Source: apt
Source-Version: 0.7.26~exp3

We believe that the bug you reported is fixed in the latest version of
apt, which is due to be installed in the Debian FTP archive:

apt-doc_0.7.26~exp3_all.deb
  to main/a/apt/apt-doc_0.7.26~exp3_all.deb
apt-transport-https_0.7.26~exp3_i386.deb
  to main/a/apt/apt-transport-https_0.7.26~exp3_i386.deb
apt-utils_0.7.26~exp3_i386.deb
  to main/a/apt/apt-utils_0.7.26~exp3_i386.deb
apt_0.7.26~exp3.dsc
  to main/a/apt/apt_0.7.26~exp3.dsc
apt_0.7.26~exp3.tar.gz
  to main/a/apt/apt_0.7.26~exp3.tar.gz
apt_0.7.26~exp3_i386.deb
  to main/a/apt/apt_0.7.26~exp3_i386.deb
libapt-pkg-dev_0.7.26~exp3_i386.deb
  to main/a/apt/libapt-pkg-dev_0.7.26~exp3_i386.deb
libapt-pkg-doc_0.7.26~exp3_all.deb
  to main/a/apt/libapt-pkg-doc_0.7.26~exp3_all.deb



A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 536029@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Michael Vogt <mvo@debian.org> (supplier of updated apt package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Format: 1.8
Date: Thu, 01 Apr 2010 17:30:43 +0200
Source: apt
Binary: apt apt-doc libapt-pkg-dev libapt-pkg-doc apt-utils apt-transport-https
Architecture: source all i386
Version: 0.7.26~exp3
Distribution: experimental
Urgency: low
Maintainer: APT Development Team <deity@lists.debian.org>
Changed-By: Michael Vogt <mvo@debian.org>
Description: 
 apt        - Advanced front-end for dpkg
 apt-doc    - Documentation for APT
 apt-transport-https - APT https transport
 apt-utils  - APT utility programs
 libapt-pkg-dev - Development files for APT's libapt-pkg and libapt-inst
 libapt-pkg-doc - Documentation for APT development
Closes: 314334 316390 351056 352667 383257 486222 500560 512046 512318 536029 558103 567669 570962 571037 572259 572364 572615 573293 573592 573946 574558 574944 574962
Changes: 
 apt (0.7.26~exp3) experimental; urgency=low
 .
   [ Christian Perrier ]
   * German translation update. Closes: #571037
   * Spanish manpages translation update. Closes: #573293
   * Dutch translation update. Closes: #573946
   * Polish manpages translation update. Closes: #574558
   * Add "manpages-pl (<< 20060617-3~)" to avoid file conflicts with
     that package that was providing some manpages for APT utilities.
 .
   [ David Kalnischkies ]
   * [BREAK] merge MultiArch-ABI. We don't support MultiArch,
     but we support the usage of the new ABI so libapt users
     can start to prepare for MultiArch (Closes: #536029)
   * Ignore :qualifiers after package name in build dependencies
     in the library by default, but try to honour them in apt-get
     as we have some sort of MultiArch support ready (Closes: #558103)
   * add translation of the manpages to PT (portuguese)
     Thanks to Américo Monteiro!
   * Switch to dpkg-source 3.0 (native) format
   * apt-pkg/depcache.cc:
     - remove Auto-Installed information from extended_states
       together with the package itself (Closes: #572364)
   * cmdline/apt-mark:
     - don't crash if no arguments are given (Closes: #570962)
   * debian/control:
     - remove some years old and obsolete Replaces
     - add automake/conf build-depends/conflicts as recommend by
       the autotools-dev README (Closes: #572615)
   * apt-pkg/contrib/mmap.{h,cc}:
     - add char[] fallback for filesystems without shared writable
       mmap() like JFFS2. Thanks to Marius Vollmer for writing
       and to Loïc Minier for pointing to the patch! (Closes: #314334)
   * doc/apt_preferences.5.xml:
     - fix two typos and be more verbose in the novice warning.
       Thanks to Osamu Aoki for pointing it out! (Closes: #567669)
     - fix a=sid vs. n=sid typo, thanks Ansgar Burchardt!
     - origin can be used to match a hostname (Closes: #352667)
     - remove wrong pin-priority is optional remark (Closes: #574944)
   * apt-pkg/deb/dpkgpm.cc:
     - fix error message construction in OpenLog()
     - if available store the Commandline in the history
   * cmdline/apt-get.cc:
     - add a --only-upgrade flag to install command (Closes: #572259)
     - fix memory leaks in error conditions in DoSource()
     - try version match in FindSrc first exact than fuzzy (LP: #551178)
   * apt-pkg/contrib/cmndline.cc:
     - save Commandline in Commandline::AsString for logging
   * apt-pkg/deb/debversion.cc:
     - consider absent of debian revision equivalent to 0 (Closes: #573592)
   * doc/makefile, doc/*:
     - generate subdirectories for building the manpages in on the fly
       depending on the po files we have.
   * apt-pkg/pkgcachegen.cc:
     - merge versions correctly even if multiple different versions
       with the same version number are available.
       Thanks to Magnus Holmgren for the patch! (Closes: #351056)
   * ftparchive/writer.cc:
     - write LongDescriptions if they shouldn't be included in Packages
       file into i18n/Translation-en by default.
   * doc/po/de.po:
     - correct a few typos in the german manpage translation.
       Thanks to Chris Leick and Georg Koppen! (Closes: #574962)
   * apt-pkg/contrib/strutl.cc:
     - convert all toupper calls to tolower_ascii for a little speedup
 .
   [ Jean-Baptiste Lallement ]
   * apt-pkg/contrib/strutl.cc:
     - always escape '%' (LP: #130289) (Closes: #500560)
     - unescape '%' sequence only if followed by 2 hex digit
     - username/password are urlencoded in proxy string (RFC 3986)
 .
   [ Julian Andres Klode ]
   * cmdline/apt-cache.cc:
     - Change behavior of showsrc to match the one of show (Closes: #512046).
   * cmdline/apt-key:
     - Honor Apt::GPGV::TrustedKeyring (Closes: #316390)
   * cmdline/apt-mark:
     - Use the new python-apt API (and conflict with python-apt << 0.7.93.2).
   * apt-inst/contrib/arfile.h:
     - Add public ARArchive::Members() which returns the list of members.
   * apt-pkg/policy.cc:
     - Always return a candidate if there is at least one version pinned > 0
       (Closes: #512318)
   * ftparchive/apt-ftparchive.cc:
     - Read default configuration (Closes: #383257)
   * debian/rules:
     - Fix the libraries name to be e.g. libapt-pkg4.9 instead of
       libapt-pkg-4.9.
 .
   [ Michael Vogt ]
   * apt-pkg/deb/dpkgpm.cc:
     - fix backgrounding when dpkg runs (closes: #486222)
   * cmdline/apt-mark:
     - show error on incorrect aguments (LP: #517917), thanks to
       Torsten Spindler
   * cmdline/apt-get.cc:
     - if apt-get source foo=version or foo/distro can not be found,
       error out (LP: #502641)
   * apt-pkg/packagemanager.cc:
     - better debug output
   * doc/examples/configure-index:
     - add missing Debug::pkgPackageManager option
Checksums-Sha1: 
 e7c360358322b886317869d8e030eb42935b6088 1296 apt_0.7.26~exp3.dsc
 6dc73a06690e4e7d9489c03434c2d712cc202f46 2797544 apt_0.7.26~exp3.tar.gz
 eeda8472a6f0a1448f6d2ea598d12a5cbed07a78 224746 apt-doc_0.7.26~exp3_all.deb
 4ce0cd85664685b49055714988434f0c436d5b62 136328 libapt-pkg-doc_0.7.26~exp3_all.deb
 bec8e4527083d53a1c7dbebcf49ff2ae0402f5c6 1958384 apt_0.7.26~exp3_i386.deb
 30abc1070ba1b9a6e4c4b25c702f5b8a9d010c5c 127168 libapt-pkg-dev_0.7.26~exp3_i386.deb
 1184ac795005a143bb53e531e657427150e62a9c 256662 apt-utils_0.7.26~exp3_i386.deb
 83a38f7c40ce1e5d56b06bddfee1ffc28011433a 72390 apt-transport-https_0.7.26~exp3_i386.deb
Checksums-Sha256: 
 74eafab3c250e7880e13c84cce5979e752ab3724a040272df1e22ed7341a1f0c 1296 apt_0.7.26~exp3.dsc
 4d6d202a11fe19fd3adf1796cc5a7ca5272422fa59f3bc42fa856adb36c53f17 2797544 apt_0.7.26~exp3.tar.gz
 8f7099fef8a1fade01e59d58c9a2fa8d5089951d3c967654d91779fda41081aa 224746 apt-doc_0.7.26~exp3_all.deb
 d365f216c36731928b8c9dd215a746d0b4e3618e7d4cf9df5cd6309beac18709 136328 libapt-pkg-doc_0.7.26~exp3_all.deb
 fe0565c7142c56880c7cdd4e01a0507f98ed49311883e4f812b0c4b58309f737 1958384 apt_0.7.26~exp3_i386.deb
 9ad110fdca7bb756688eba867eca70aee035161f45d00cf89c3cfc4e07383120 127168 libapt-pkg-dev_0.7.26~exp3_i386.deb
 9a73543c7929be398c58cf31ec68afee128d6474894675c92dd60a489aabe211 256662 apt-utils_0.7.26~exp3_i386.deb
 93ab85d709d3c9fa16d780f4aafdb72f18fd62c3c053043896954434f67a73b9 72390 apt-transport-https_0.7.26~exp3_i386.deb
Files: 
 c415727401d80f152aaeb5daecbb8289 1296 admin important apt_0.7.26~exp3.dsc
 60435d361e1290399cab52351d249427 2797544 admin important apt_0.7.26~exp3.tar.gz
 e81fffc8223066b10fc783ecfd8c6c8a 224746 doc optional apt-doc_0.7.26~exp3_all.deb
 5cfab1c47b528eeefe199474c0eac0c9 136328 doc optional libapt-pkg-doc_0.7.26~exp3_all.deb
 43dc64a1652cf39bc76b9417f2b625f6 1958384 admin important apt_0.7.26~exp3_i386.deb
 f02a3c41eeb1d7ed37f9f2f6d5c1b21f 127168 libdevel optional libapt-pkg-dev_0.7.26~exp3_i386.deb
 d4a5c686ce77e840ec38d1524ec96ab7 256662 admin important apt-utils_0.7.26~exp3_i386.deb
 83a40028a4a41ae2ecdc3fb668abcd05 72390 admin optional apt-transport-https_0.7.26~exp3_i386.deb

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iEYEARECAAYFAku0xOEACgkQliSD4VZixzSJywCgh+y8pcjt/Aj6fnTLJbLaM/QC
tWgAnA/t4+t8N/eNz2M6rg790S3NJdiU
=QUUE
-----END PGP SIGNATURE-----



--- End Message ---

Reply to: