Explorar el Código

merged from the debian-experimental2 branch

Michael Vogt hace 15 años
padre
commit
216d0bd886
Se han modificado 100 ficheros con 4832 adiciones y 1751 borrados
  1. 1 1
      apt-inst/makefile
  2. 28 26
      apt-pkg/acquire-item.cc
  3. 41 16
      apt-pkg/acquire-item.h
  4. 6 1
      apt-pkg/acquire-method.cc
  5. 3 2
      apt-pkg/acquire-method.h
  6. 2 2
      apt-pkg/acquire-worker.cc
  7. 7 4
      apt-pkg/acquire-worker.h
  8. 9 10
      apt-pkg/acquire.cc
  9. 32 20
      apt-pkg/acquire.h
  10. 49 6
      apt-pkg/algorithms.cc
  11. 6 0
      apt-pkg/algorithms.h
  12. 3 0
      apt-pkg/cachefile.h
  13. 2 0
      apt-pkg/cachefilter.h
  14. 1 7
      apt-pkg/cacheiterators.h
  15. 0 2
      apt-pkg/cacheset.h
  16. 1 9
      apt-pkg/cdrom.cc
  17. 3 5
      apt-pkg/cdrom.h
  18. 3 0
      apt-pkg/clean.h
  19. 26 15
      apt-pkg/contrib/hashes.cc
  20. 7 3
      apt-pkg/contrib/hashes.h
  21. 27 0
      apt-pkg/contrib/hashsum.cc
  22. 107 0
      apt-pkg/contrib/hashsum_template.h
  23. 1 79
      apt-pkg/contrib/md5.cc
  24. 8 29
      apt-pkg/contrib/md5.h
  25. 9 18
      apt-pkg/contrib/progress.cc
  26. 1 2
      apt-pkg/contrib/progress.h
  27. 3 85
      apt-pkg/contrib/sha1.cc
  28. 5 27
      apt-pkg/contrib/sha1.h
  29. 103 0
      apt-pkg/contrib/sha2.h
  30. 0 424
      apt-pkg/contrib/sha256.cc
  31. 2 66
      apt-pkg/contrib/sha256.h
  32. 1065 0
      apt-pkg/contrib/sha2_internal.cc
  33. 188 0
      apt-pkg/contrib/sha2_internal.h
  34. 19 1
      apt-pkg/deb/debindexfile.h
  35. 3 8
      apt-pkg/deb/deblistparser.cc
  36. 7 3
      apt-pkg/deb/deblistparser.h
  37. 32 7
      apt-pkg/deb/debmetaindex.cc
  38. 6 1
      apt-pkg/deb/debmetaindex.h
  39. 18 1
      apt-pkg/deb/debrecords.cc
  40. 8 0
      apt-pkg/deb/debrecords.h
  41. 4 1
      apt-pkg/deb/debsrcrecords.h
  42. 36 26
      apt-pkg/deb/debsystem.cc
  43. 6 7
      apt-pkg/deb/debsystem.h
  44. 62 46
      apt-pkg/deb/dpkgpm.cc
  45. 2 9
      apt-pkg/deb/dpkgpm.h
  46. 42 80
      apt-pkg/depcache.cc
  47. 20 18
      apt-pkg/depcache.h
  48. 564 0
      apt-pkg/edsp.cc
  49. 222 0
      apt-pkg/edsp.h
  50. 78 0
      apt-pkg/edsp/edspindexfile.cc
  51. 28 0
      apt-pkg/edsp/edspindexfile.h
  52. 90 0
      apt-pkg/edsp/edsplistparser.cc
  53. 38 0
      apt-pkg/edsp/edsplistparser.h
  54. 124 0
      apt-pkg/edsp/edspsystem.cc
  55. 41 0
      apt-pkg/edsp/edspsystem.h
  56. 6 2
      apt-pkg/indexcopy.h
  57. 1 0
      apt-pkg/init.cc
  58. 2 2
      apt-pkg/init.h
  59. 13 5
      apt-pkg/makefile
  60. 4 0
      apt-pkg/metaindex.h
  61. 2 2
      apt-pkg/packagemanager.cc
  62. 5 3
      apt-pkg/pkgcache.cc
  63. 15 7
      apt-pkg/pkgcache.h
  64. 1 0
      apt-pkg/pkgcachegen.cc
  65. 8 3
      apt-pkg/pkgrecords.h
  66. 4 0
      apt-pkg/policy.cc
  67. 3 4
      apt-pkg/policy.h
  68. 6 2
      apt-pkg/sourcelist.cc
  69. 3 1
      apt-pkg/srcrecords.h
  70. 73 51
      apt-pkg/tagfile.cc
  71. 8 13
      apt-pkg/tagfile.h
  72. 1 1
      cmdline/acqprogress.cc
  73. 50 0
      cmdline/apt-dump-solver.cc
  74. 16 5
      cmdline/apt-get.cc
  75. 190 0
      cmdline/apt-internal-solver.cc
  76. 14 0
      cmdline/makefile
  77. 1 1
      configure.in
  78. 1 0
      debian/apt-doc.docs
  79. 1 1
      debian/apt-utils.dirs
  80. 1 1
      debian/apt-utils.install
  81. 1 0
      debian/apt-utils.links
  82. 1 0
      debian/apt.dirs
  83. 1 2
      debian/apt.install
  84. 290 0
      debian/changelog
  85. 63 22
      debian/control
  86. 2 0
      debian/libapt-inst1.3.install
  87. 2 3
      debian/apt-utils.symbols
  88. 2 0
      debian/libapt-pkg4.11.install
  89. 70 70
      debian/apt.symbols
  90. 57 14
      debian/rules
  91. 5 0
      doc/apt-get.8.xml
  92. 299 0
      doc/external-dependency-solver-protocol.txt
  93. 48 50
      doc/po/apt-doc.pot
  94. 60 91
      doc/po/de.po
  95. 68 58
      doc/po/es.po
  96. 68 89
      doc/po/fr.po
  97. 50 51
      doc/po/it.po
  98. 67 51
      doc/po/ja.po
  99. 50 79
      doc/po/pl.po
  100. 0 0
      doc/po/pt.po

+ 1 - 1
apt-inst/makefile

@@ -14,7 +14,7 @@ include ../buildlib/libversion.mak
 
 
 # The library name
 # The library name
 LIBRARY=apt-inst
 LIBRARY=apt-inst
-MAJOR=1.2
+MAJOR=1.3
 MINOR=0
 MINOR=0
 SLIBS=$(PTHREADLIB) -lapt-pkg
 SLIBS=$(PTHREADLIB) -lapt-pkg
 APT_DOMAIN:=libapt-inst$(MAJOR)
 APT_DOMAIN:=libapt-inst$(MAJOR)

+ 28 - 26
apt-pkg/acquire-item.cc

@@ -94,7 +94,7 @@ void pkgAcquire::Item::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* Stash status and the file size. Note that setting Complete means 
 /* Stash status and the file size. Note that setting Complete means 
    sub-phases of the acquire process such as decompresion are operating */
    sub-phases of the acquire process such as decompresion are operating */
-void pkgAcquire::Item::Start(string /*Message*/,unsigned long Size)
+void pkgAcquire::Item::Start(string /*Message*/,unsigned long long Size)
 {
 {
    Status = StatFetching;
    Status = StatFetching;
    if (FileSize == 0 && Complete == false)
    if (FileSize == 0 && Complete == false)
@@ -104,7 +104,7 @@ void pkgAcquire::Item::Start(string /*Message*/,unsigned long Size)
 // Acquire::Item::Done - Item downloaded OK				/*{{{*/
 // Acquire::Item::Done - Item downloaded OK				/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
-void pkgAcquire::Item::Done(string Message,unsigned long Size,string Hash,
+void pkgAcquire::Item::Done(string Message,unsigned long long Size,string Hash,
 			    pkgAcquire::MethodConfig *Cnf)
 			    pkgAcquire::MethodConfig *Cnf)
 {
 {
    // We just downloaded something..
    // We just downloaded something..
@@ -245,7 +245,7 @@ void pkgAcqSubIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)	/*{{{*
    }
    }
 }
 }
 									/*}}}*/
 									/*}}}*/
-void pkgAcqSubIndex::Done(string Message,unsigned long Size,string Md5Hash,	/*{{{*/
+void pkgAcqSubIndex::Done(string Message,unsigned long long Size,string Md5Hash,	/*{{{*/
 			   pkgAcquire::MethodConfig *Cnf)
 			   pkgAcquire::MethodConfig *Cnf)
 {
 {
    if(Debug)
    if(Debug)
@@ -544,7 +544,7 @@ void pkgAcqDiffIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)	/*{{{
    Dequeue();
    Dequeue();
 }
 }
 									/*}}}*/
 									/*}}}*/
-void pkgAcqDiffIndex::Done(string Message,unsigned long Size,string Md5Hash,	/*{{{*/
+void pkgAcqDiffIndex::Done(string Message,unsigned long long Size,string Md5Hash,	/*{{{*/
 			   pkgAcquire::MethodConfig *Cnf)
 			   pkgAcquire::MethodConfig *Cnf)
 {
 {
    if(Debug)
    if(Debug)
@@ -710,7 +710,7 @@ bool pkgAcqIndexDiffs::QueueNextDiff()					/*{{{*/
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
-void pkgAcqIndexDiffs::Done(string Message,unsigned long Size,string Md5Hash,	/*{{{*/
+void pkgAcqIndexDiffs::Done(string Message,unsigned long long Size,string Md5Hash,	/*{{{*/
 			    pkgAcquire::MethodConfig *Cnf)
 			    pkgAcquire::MethodConfig *Cnf)
 {
 {
    if(Debug)
    if(Debug)
@@ -808,6 +808,13 @@ pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner, IndexTarget const *Target,
    if (CompressionExtension.empty() == false)
    if (CompressionExtension.empty() == false)
       CompressionExtension.erase(CompressionExtension.end()-1);
       CompressionExtension.erase(CompressionExtension.end()-1);
 
 
+   // only verify non-optional targets, see acquire-item.h for a FIXME
+   // to make this more flexible
+   if (Target->IsOptional())
+     Verify = false;
+   else
+     Verify = true;
+
    Init(Target->URI, Target->Description, Target->ShortDesc);
    Init(Target->URI, Target->Description, Target->ShortDesc);
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -881,7 +888,7 @@ void pkgAcqIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)	/*{{{*/
    to the uncompressed version of the file. If this is so the file
    to the uncompressed version of the file. If this is so the file
    is copied into the partial directory. In all other cases the file
    is copied into the partial directory. In all other cases the file
    is decompressed with a gzip uri. */
    is decompressed with a gzip uri. */
-void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash,
+void pkgAcqIndex::Done(string Message,unsigned long long Size,string Hash,
 		       pkgAcquire::MethodConfig *Cfg)
 		       pkgAcquire::MethodConfig *Cfg)
 {
 {
    Item::Done(Message,Size,Hash,Cfg);
    Item::Done(Message,Size,Hash,Cfg);
@@ -905,6 +912,7 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash,
 
 
       /* Verify the index file for correctness (all indexes must
       /* Verify the index file for correctness (all indexes must
        * have a Package field) (LP: #346386) (Closes: #627642) */
        * have a Package field) (LP: #346386) (Closes: #627642) */
+      if (Verify == true)
       {
       {
 	 FileFd fd(DestFile, FileFd::ReadOnly);
 	 FileFd fd(DestFile, FileFd::ReadOnly);
 	 pkgTagSection sec;
 	 pkgTagSection sec;
@@ -1123,7 +1131,7 @@ string pkgAcqMetaSig::Custom600Headers()
    return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
    return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
 }
 }
 
 
-void pkgAcqMetaSig::Done(string Message,unsigned long Size,string MD5,
+void pkgAcqMetaSig::Done(string Message,unsigned long long Size,string MD5,
 			 pkgAcquire::MethodConfig *Cfg)
 			 pkgAcquire::MethodConfig *Cfg)
 {
 {
    Item::Done(Message,Size,MD5,Cfg);
    Item::Done(Message,Size,MD5,Cfg);
@@ -1232,7 +1240,7 @@ string pkgAcqMetaIndex::Custom600Headers()
    return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
    return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
 }
 }
 									/*}}}*/
 									/*}}}*/
-void pkgAcqMetaIndex::Done(string Message,unsigned long Size,string Hash,	/*{{{*/
+void pkgAcqMetaIndex::Done(string Message,unsigned long long Size,string Hash,	/*{{{*/
 			   pkgAcquire::MethodConfig *Cfg)
 			   pkgAcquire::MethodConfig *Cfg)
 {
 {
    Item::Done(Message,Size,Hash,Cfg);
    Item::Done(Message,Size,Hash,Cfg);
@@ -1734,6 +1742,8 @@ bool pkgAcqArchive::QueueNext()
       string PkgFile = Parse.FileName();
       string PkgFile = Parse.FileName();
       if (ForceHash.empty() == false)
       if (ForceHash.empty() == false)
       {
       {
+	 if(stringcasecmp(ForceHash, "sha512") == 0)
+	    ExpectedHash = HashString("SHA512", Parse.SHA512Hash());
 	 if(stringcasecmp(ForceHash, "sha256") == 0)
 	 if(stringcasecmp(ForceHash, "sha256") == 0)
 	    ExpectedHash = HashString("SHA256", Parse.SHA256Hash());
 	    ExpectedHash = HashString("SHA256", Parse.SHA256Hash());
 	 else if (stringcasecmp(ForceHash, "sha1") == 0)
 	 else if (stringcasecmp(ForceHash, "sha1") == 0)
@@ -1744,7 +1754,9 @@ bool pkgAcqArchive::QueueNext()
       else
       else
       {
       {
 	 string Hash;
 	 string Hash;
-	 if ((Hash = Parse.SHA256Hash()).empty() == false)
+	 if ((Hash = Parse.SHA512Hash()).empty() == false)
+	    ExpectedHash = HashString("SHA512", Hash);
+	 else if ((Hash = Parse.SHA256Hash()).empty() == false)
 	    ExpectedHash = HashString("SHA256", Hash);
 	    ExpectedHash = HashString("SHA256", Hash);
 	 else if ((Hash = Parse.SHA1Hash()).empty() == false)
 	 else if ((Hash = Parse.SHA1Hash()).empty() == false)
 	    ExpectedHash = HashString("SHA1", Hash);
 	    ExpectedHash = HashString("SHA1", Hash);
@@ -1768,7 +1780,7 @@ bool pkgAcqArchive::QueueNext()
       if (stat(FinalFile.c_str(),&Buf) == 0)
       if (stat(FinalFile.c_str(),&Buf) == 0)
       {
       {
 	 // Make sure the size matches
 	 // Make sure the size matches
-	 if ((unsigned)Buf.st_size == Version->Size)
+	 if ((unsigned long long)Buf.st_size == Version->Size)
 	 {
 	 {
 	    Complete = true;
 	    Complete = true;
 	    Local = true;
 	    Local = true;
@@ -1787,7 +1799,7 @@ bool pkgAcqArchive::QueueNext()
       if (stat(FinalFile.c_str(),&Buf) == 0)
       if (stat(FinalFile.c_str(),&Buf) == 0)
       {
       {
 	 // Make sure the size matches
 	 // Make sure the size matches
-	 if ((unsigned)Buf.st_size == Version->Size)
+	 if ((unsigned long long)Buf.st_size == Version->Size)
 	 {
 	 {
 	    Complete = true;
 	    Complete = true;
 	    Local = true;
 	    Local = true;
@@ -1807,7 +1819,7 @@ bool pkgAcqArchive::QueueNext()
       if (stat(DestFile.c_str(),&Buf) == 0)
       if (stat(DestFile.c_str(),&Buf) == 0)
       {
       {
 	 // Hmm, the partial file is too big, erase it
 	 // Hmm, the partial file is too big, erase it
-	 if ((unsigned)Buf.st_size > Version->Size)
+	 if ((unsigned long long)Buf.st_size > Version->Size)
 	    unlink(DestFile.c_str());
 	    unlink(DestFile.c_str());
 	 else
 	 else
 	    PartialSize = Buf.st_size;
 	    PartialSize = Buf.st_size;
@@ -1830,7 +1842,7 @@ bool pkgAcqArchive::QueueNext()
 // AcqArchive::Done - Finished fetching					/*{{{*/
 // AcqArchive::Done - Finished fetching					/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
-void pkgAcqArchive::Done(string Message,unsigned long Size,string CalcHash,
+void pkgAcqArchive::Done(string Message,unsigned long long Size,string CalcHash,
 			 pkgAcquire::MethodConfig *Cfg)
 			 pkgAcquire::MethodConfig *Cfg)
 {
 {
    Item::Done(Message,Size,CalcHash,Cfg);
    Item::Done(Message,Size,CalcHash,Cfg);
@@ -1941,7 +1953,7 @@ void pkgAcqArchive::Finished()
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* The file is added to the queue */
 /* The file is added to the queue */
 pkgAcqFile::pkgAcqFile(pkgAcquire *Owner,string URI,string Hash,
 pkgAcqFile::pkgAcqFile(pkgAcquire *Owner,string URI,string Hash,
-		       unsigned long Size,string Dsc,string ShortDesc,
+		       unsigned long long Size,string Dsc,string ShortDesc,
 		       const string &DestDir, const string &DestFilename,
 		       const string &DestDir, const string &DestFilename,
                        bool IsIndexFile) :
                        bool IsIndexFile) :
                        Item(Owner), ExpectedHash(Hash), IsIndexFile(IsIndexFile)
                        Item(Owner), ExpectedHash(Hash), IsIndexFile(IsIndexFile)
@@ -1969,7 +1981,7 @@ pkgAcqFile::pkgAcqFile(pkgAcquire *Owner,string URI,string Hash,
    if (stat(DestFile.c_str(),&Buf) == 0)
    if (stat(DestFile.c_str(),&Buf) == 0)
    {
    {
       // Hmm, the partial file is too big, erase it
       // Hmm, the partial file is too big, erase it
-      if ((unsigned)Buf.st_size > Size)
+      if ((unsigned long long)Buf.st_size > Size)
 	 unlink(DestFile.c_str());
 	 unlink(DestFile.c_str());
       else
       else
 	 PartialSize = Buf.st_size;
 	 PartialSize = Buf.st_size;
@@ -1981,7 +1993,7 @@ pkgAcqFile::pkgAcqFile(pkgAcquire *Owner,string URI,string Hash,
 // AcqFile::Done - Item downloaded OK					/*{{{*/
 // AcqFile::Done - Item downloaded OK					/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
-void pkgAcqFile::Done(string Message,unsigned long Size,string CalcHash,
+void pkgAcqFile::Done(string Message,unsigned long long Size,string CalcHash,
 		      pkgAcquire::MethodConfig *Cnf)
 		      pkgAcquire::MethodConfig *Cnf)
 {
 {
    Item::Done(Message,Size,CalcHash,Cnf);
    Item::Done(Message,Size,CalcHash,Cnf);
@@ -2069,13 +2081,3 @@ string pkgAcqFile::Custom600Headers()
    return "";
    return "";
 }
 }
 									/*}}}*/
 									/*}}}*/
-bool IndexTarget::IsOptional() const {
-   if (strncmp(ShortDesc.c_str(), "Translation", 11) != 0)
-      return false;
-   return true;
-}
-bool IndexTarget::IsSubIndex() const {
-   if (ShortDesc != "TranslationIndex")
-      return false;
-   return true;
-}

+ 41 - 16
apt-pkg/acquire-item.h

@@ -194,7 +194,7 @@ class pkgAcquire::Item : public WeakPointable
     *
     *
     *  \sa pkgAcqMethod
     *  \sa pkgAcqMethod
     */
     */
-   virtual void Done(string Message,unsigned long Size,string Hash,
+   virtual void Done(string Message,unsigned long long Size,string Hash,
 		     pkgAcquire::MethodConfig *Cnf);
 		     pkgAcquire::MethodConfig *Cnf);
 
 
    /** \brief Invoked when the worker starts to fetch this object.
    /** \brief Invoked when the worker starts to fetch this object.
@@ -206,7 +206,7 @@ class pkgAcquire::Item : public WeakPointable
     *
     *
     *  \sa pkgAcqMethod
     *  \sa pkgAcqMethod
     */
     */
-   virtual void Start(string Message,unsigned long Size);
+   virtual void Start(string Message,unsigned long long Size);
 
 
    /** \brief Custom headers to be sent to the fetch process.
    /** \brief Custom headers to be sent to the fetch process.
     *
     *
@@ -309,7 +309,7 @@ class pkgAcqSubIndex : public pkgAcquire::Item
  public:
  public:
    // Specialized action members
    // Specialized action members
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
-   virtual void Done(string Message,unsigned long Size,string Md5Hash,
+   virtual void Done(string Message,unsigned long long Size,string Md5Hash,
 		     pkgAcquire::MethodConfig *Cnf);
 		     pkgAcquire::MethodConfig *Cnf);
    virtual string DescURI() {return Desc.URI;};
    virtual string DescURI() {return Desc.URI;};
    virtual string Custom600Headers();
    virtual string Custom600Headers();
@@ -372,7 +372,7 @@ class pkgAcqDiffIndex : public pkgAcquire::Item
  public:
  public:
    // Specialized action members
    // Specialized action members
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
-   virtual void Done(string Message,unsigned long Size,string Md5Hash,
+   virtual void Done(string Message,unsigned long long Size,string Md5Hash,
 		     pkgAcquire::MethodConfig *Cnf);
 		     pkgAcquire::MethodConfig *Cnf);
    virtual string DescURI() {return RealURI + "Index";};
    virtual string DescURI() {return RealURI + "Index";};
    virtual string Custom600Headers();
    virtual string Custom600Headers();
@@ -508,7 +508,7 @@ class pkgAcqIndexDiffs : public pkgAcquire::Item
     */
     */
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
 
 
-   virtual void Done(string Message,unsigned long Size,string Md5Hash,
+   virtual void Done(string Message,unsigned long long Size,string Md5Hash,
 		     pkgAcquire::MethodConfig *Cnf);
 		     pkgAcquire::MethodConfig *Cnf);
    virtual string DescURI() {return RealURI + "Index";};
    virtual string DescURI() {return RealURI + "Index";};
 
 
@@ -559,6 +559,16 @@ class pkgAcqIndex : public pkgAcquire::Item
     */
     */
    bool Erase;
    bool Erase;
 
 
+   /** \brief Verify for correctness by checking if a "Package"
+    *         tag is found in the index. This can be set to
+    *         false for optional index targets
+    *       
+    */
+   // FIXME: instead of a bool it should use a verify string that will
+   //        then be used in the pkgAcqIndex::Done method to ensure that
+   //        the downloaded file contains the expected tag
+   bool Verify;
+
    /** \brief The download request that is currently being
    /** \brief The download request that is currently being
     *   processed.
     *   processed.
     */
     */
@@ -581,7 +591,7 @@ class pkgAcqIndex : public pkgAcquire::Item
    
    
    // Specialized action members
    // Specialized action members
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
-   virtual void Done(string Message,unsigned long Size,string Md5Hash,
+   virtual void Done(string Message,unsigned long long Size,string Md5Hash,
 		     pkgAcquire::MethodConfig *Cnf);
 		     pkgAcquire::MethodConfig *Cnf);
    virtual string Custom600Headers();
    virtual string Custom600Headers();
    virtual string DescURI() {return Desc.URI;};
    virtual string DescURI() {return Desc.URI;};
@@ -646,8 +656,9 @@ class pkgAcqIndexTrans : public pkgAcqIndex
 };
 };
 									/*}}}*/
 									/*}}}*/
 /** \brief Information about an index file. */				/*{{{*/
 /** \brief Information about an index file. */				/*{{{*/
-struct IndexTarget
+class IndexTarget
 {
 {
+ public:
    /** \brief A URI from which the index file can be downloaded. */
    /** \brief A URI from which the index file can be downloaded. */
    string URI;
    string URI;
 
 
@@ -662,14 +673,28 @@ struct IndexTarget
     */
     */
    string MetaKey;
    string MetaKey;
 
 
-   //FIXME: We should use virtual methods here instead…
-   bool IsOptional() const;
-   bool IsSubIndex() const;
+   virtual bool IsOptional() const {
+      return false;
+   }
+   virtual bool IsSubIndex() const {
+      return false;
+   }
 };
 };
 									/*}}}*/
 									/*}}}*/
 /** \brief Information about an optional index file. */			/*{{{*/
 /** \brief Information about an optional index file. */			/*{{{*/
-struct OptionalIndexTarget : public IndexTarget
+class OptionalIndexTarget : public IndexTarget
+{
+   virtual bool IsOptional() const {
+      return true;
+   }
+};
+									/*}}}*/
+/** \brief Information about an subindex index file. */			/*{{{*/
+class SubIndexTarget : public IndexTarget
 {
 {
+   virtual bool IsSubIndex() const {
+      return true;
+   }
 };
 };
 									/*}}}*/
 									/*}}}*/
 
 
@@ -723,7 +748,7 @@ class pkgAcqMetaSig : public pkgAcquire::Item
    
    
    // Specialized action members
    // Specialized action members
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
-   virtual void Done(string Message,unsigned long Size,string Md5Hash,
+   virtual void Done(string Message,unsigned long long Size,string Md5Hash,
 		     pkgAcquire::MethodConfig *Cnf);
 		     pkgAcquire::MethodConfig *Cnf);
    virtual string Custom600Headers();
    virtual string Custom600Headers();
    virtual string DescURI() {return RealURI; };
    virtual string DescURI() {return RealURI; };
@@ -818,7 +843,7 @@ class pkgAcqMetaIndex : public pkgAcquire::Item
    
    
    // Specialized action members
    // Specialized action members
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
-   virtual void Done(string Message,unsigned long Size, string Hash,
+   virtual void Done(string Message,unsigned long long Size, string Hash,
 		     pkgAcquire::MethodConfig *Cnf);
 		     pkgAcquire::MethodConfig *Cnf);
    virtual string Custom600Headers();
    virtual string Custom600Headers();
    virtual string DescURI() {return RealURI; };
    virtual string DescURI() {return RealURI; };
@@ -918,7 +943,7 @@ class pkgAcqArchive : public pkgAcquire::Item
    public:
    public:
    
    
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
-   virtual void Done(string Message,unsigned long Size,string Hash,
+   virtual void Done(string Message,unsigned long long Size,string Hash,
 		     pkgAcquire::MethodConfig *Cnf);
 		     pkgAcquire::MethodConfig *Cnf);
    virtual string DescURI() {return Desc.URI;};
    virtual string DescURI() {return Desc.URI;};
    virtual string ShortDesc() {return Desc.ShortDesc;};
    virtual string ShortDesc() {return Desc.ShortDesc;};
@@ -975,7 +1000,7 @@ class pkgAcqFile : public pkgAcquire::Item
    
    
    // Specialized action members
    // Specialized action members
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
-   virtual void Done(string Message,unsigned long Size,string CalcHash,
+   virtual void Done(string Message,unsigned long long Size,string CalcHash,
 		     pkgAcquire::MethodConfig *Cnf);
 		     pkgAcquire::MethodConfig *Cnf);
    virtual string DescURI() {return Desc.URI;};
    virtual string DescURI() {return Desc.URI;};
    virtual string HashSum() {return ExpectedHash.toStr(); };
    virtual string HashSum() {return ExpectedHash.toStr(); };
@@ -1012,7 +1037,7 @@ class pkgAcqFile : public pkgAcquire::Item
     * is the absolute name to which the file should be downloaded.
     * is the absolute name to which the file should be downloaded.
     */
     */
 
 
-   pkgAcqFile(pkgAcquire *Owner, string URI, string Hash, unsigned long Size,
+   pkgAcqFile(pkgAcquire *Owner, string URI, string Hash, unsigned long long Size,
 	      string Desc, string ShortDesc,
 	      string Desc, string ShortDesc,
 	      const string &DestDir="", const string &DestFilename="",
 	      const string &DestDir="", const string &DestFilename="",
 	      bool IsIndexFile=false);
 	      bool IsIndexFile=false);

+ 6 - 1
apt-pkg/acquire-method.cc

@@ -166,6 +166,8 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
       std::cout << "SHA1-Hash: " << Res.SHA1Sum << "\n";
       std::cout << "SHA1-Hash: " << Res.SHA1Sum << "\n";
    if (Res.SHA256Sum.empty() == false)
    if (Res.SHA256Sum.empty() == false)
       std::cout << "SHA256-Hash: " << Res.SHA256Sum << "\n";
       std::cout << "SHA256-Hash: " << Res.SHA256Sum << "\n";
+   if (Res.SHA512Sum.empty() == false)
+      std::cout << "SHA512-Hash: " << Res.SHA512Sum << "\n";
    if (UsedMirror.empty() == false)
    if (UsedMirror.empty() == false)
       std::cout << "UsedMirror: " << UsedMirror << "\n";
       std::cout << "UsedMirror: " << UsedMirror << "\n";
    if (Res.GPGVOutput.empty() == false)
    if (Res.GPGVOutput.empty() == false)
@@ -199,7 +201,9 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
 	 std::cout << "Alt-SHA1-Hash: " << Alt->SHA1Sum << "\n";
 	 std::cout << "Alt-SHA1-Hash: " << Alt->SHA1Sum << "\n";
       if (Alt->SHA256Sum.empty() == false)
       if (Alt->SHA256Sum.empty() == false)
 	 std::cout << "Alt-SHA256-Hash: " << Alt->SHA256Sum << "\n";
 	 std::cout << "Alt-SHA256-Hash: " << Alt->SHA256Sum << "\n";
-
+      if (Alt->SHA512Sum.empty() == false)
+         std::cout << "Alt-SHA512-Hash: " << Alt->SHA512Sum << "\n";
+     
       if (Alt->IMSHit == true)
       if (Alt->IMSHit == true)
 	 std::cout << "Alt-IMS-Hit: true\n";
 	 std::cout << "Alt-IMS-Hit: true\n";
    }
    }
@@ -460,5 +464,6 @@ void pkgAcqMethod::FetchResult::TakeHashes(Hashes &Hash)
    MD5Sum = Hash.MD5.Result();
    MD5Sum = Hash.MD5.Result();
    SHA1Sum = Hash.SHA1.Result();
    SHA1Sum = Hash.SHA1.Result();
    SHA256Sum = Hash.SHA256.Result();
    SHA256Sum = Hash.SHA256.Result();
+   SHA512Sum = Hash.SHA512.Result();
 }
 }
 									/*}}}*/
 									/*}}}*/

+ 3 - 2
apt-pkg/acquire-method.h

@@ -46,12 +46,13 @@ class pkgAcqMethod
       string MD5Sum;
       string MD5Sum;
       string SHA1Sum;
       string SHA1Sum;
       string SHA256Sum;
       string SHA256Sum;
+      string SHA512Sum;
       vector<string> GPGVOutput;
       vector<string> GPGVOutput;
       time_t LastModified;
       time_t LastModified;
       bool IMSHit;
       bool IMSHit;
       string Filename;
       string Filename;
-      unsigned long Size;
-      unsigned long ResumePoint;
+      unsigned long long Size;
+      unsigned long long ResumePoint;
       
       
       void TakeHashes(Hashes &Hash);
       void TakeHashes(Hashes &Hash);
       FetchResult();
       FetchResult();

+ 2 - 2
apt-pkg/acquire-worker.cc

@@ -287,9 +287,9 @@ bool pkgAcquire::Worker::RunMessages()
 	       Log->Pulse(Owner->GetOwner());
 	       Log->Pulse(Owner->GetOwner());
 	    
 	    
 	    OwnerQ->ItemDone(Itm);
 	    OwnerQ->ItemDone(Itm);
-	    unsigned long const ServerSize = atol(LookupTag(Message,"Size","0").c_str());
+	    unsigned long long const ServerSize = atoll(LookupTag(Message,"Size","0").c_str());
 	    if (TotalSize != 0 && ServerSize != TotalSize)
 	    if (TotalSize != 0 && ServerSize != TotalSize)
-	       _error->Warning("Size of file %s is not what the server reported %s %lu",
+	       _error->Warning("Size of file %s is not what the server reported %s %llu",
 			       Owner->DestFile.c_str(), LookupTag(Message,"Size","0").c_str(),TotalSize);
 			       Owner->DestFile.c_str(), LookupTag(Message,"Size","0").c_str(),TotalSize);
 
 
 	    // see if there is a hash to verify
 	    // see if there is a hash to verify

+ 7 - 4
apt-pkg/acquire-worker.h

@@ -44,6 +44,9 @@
  */
  */
 class pkgAcquire::Worker : public WeakPointable
 class pkgAcquire::Worker : public WeakPointable
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+  
    friend class pkgAcquire;
    friend class pkgAcquire;
    
    
    protected:
    protected:
@@ -244,17 +247,17 @@ class pkgAcquire::Worker : public WeakPointable
    /** \brief How many bytes of the file have been downloaded.  Zero
    /** \brief How many bytes of the file have been downloaded.  Zero
     *  if the current progress of the file cannot be determined.
     *  if the current progress of the file cannot be determined.
     */
     */
-   unsigned long CurrentSize;
+   unsigned long long CurrentSize;
 
 
    /** \brief The total number of bytes to be downloaded.  Zero if the
    /** \brief The total number of bytes to be downloaded.  Zero if the
     *  total size of the final is unknown.
     *  total size of the final is unknown.
     */
     */
-   unsigned long TotalSize;
+   unsigned long long TotalSize;
 
 
    /** \brief How much of the file was already downloaded prior to
    /** \brief How much of the file was already downloaded prior to
     *  starting this worker.
     *  starting this worker.
     */
     */
-   unsigned long ResumePoint;
+   unsigned long long ResumePoint;
    
    
    /** \brief Tell the subprocess to download the given item.
    /** \brief Tell the subprocess to download the given item.
     *
     *
@@ -314,7 +317,7 @@ class pkgAcquire::Worker : public WeakPointable
     *  Closes the file descriptors; if MethodConfig::NeedsCleanup is
     *  Closes the file descriptors; if MethodConfig::NeedsCleanup is
     *  \b false, also rudely interrupts the worker with a SIGINT.
     *  \b false, also rudely interrupts the worker with a SIGINT.
     */
     */
-   ~Worker();
+   virtual ~Worker();
 };
 };
 
 
 /** @} */
 /** @} */

+ 9 - 10
apt-pkg/acquire.cc

@@ -37,9 +37,9 @@ using namespace std;
 // Acquire::pkgAcquire - Constructor					/*{{{*/
 // Acquire::pkgAcquire - Constructor					/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* We grab some runtime state from the configuration space */
 /* We grab some runtime state from the configuration space */
-pkgAcquire::pkgAcquire() : Queues(0), Workers(0), Configs(0), Log(NULL), ToFetch(0),
+pkgAcquire::pkgAcquire() : LockFD(-1), Queues(0), Workers(0), Configs(0), Log(NULL), ToFetch(0),
 			   Debug(_config->FindB("Debug::pkgAcquire",false)),
 			   Debug(_config->FindB("Debug::pkgAcquire",false)),
-			   Running(false), LockFD(-1)
+			   Running(false)
 {
 {
    string const Mode = _config->Find("Acquire::Queue-Mode","host");
    string const Mode = _config->Find("Acquire::Queue-Mode","host");
    if (strcasecmp(Mode.c_str(),"host") == 0)
    if (strcasecmp(Mode.c_str(),"host") == 0)
@@ -47,10 +47,10 @@ pkgAcquire::pkgAcquire() : Queues(0), Workers(0), Configs(0), Log(NULL), ToFetch
    if (strcasecmp(Mode.c_str(),"access") == 0)
    if (strcasecmp(Mode.c_str(),"access") == 0)
       QueueMode = QueueAccess;
       QueueMode = QueueAccess;
 }
 }
-pkgAcquire::pkgAcquire(pkgAcquireStatus *Progress) : Queues(0), Workers(0),
+pkgAcquire::pkgAcquire(pkgAcquireStatus *Progress) :  LockFD(-1), Queues(0), Workers(0),
 			   Configs(0), Log(Progress), ToFetch(0),
 			   Configs(0), Log(Progress), ToFetch(0),
 			   Debug(_config->FindB("Debug::pkgAcquire",false)),
 			   Debug(_config->FindB("Debug::pkgAcquire",false)),
-			   Running(false), LockFD(-1)
+			   Running(false)
 {
 {
    string const Mode = _config->Find("Acquire::Queue-Mode","host");
    string const Mode = _config->Find("Acquire::Queue-Mode","host");
    if (strcasecmp(Mode.c_str(),"host") == 0)
    if (strcasecmp(Mode.c_str(),"host") == 0)
@@ -799,7 +799,7 @@ bool pkgAcquireStatus::Pulse(pkgAcquire *Owner)
    }
    }
    
    
    // Compute the current completion
    // Compute the current completion
-   unsigned long ResumeSize = 0;
+   unsigned long long ResumeSize = 0;
    for (pkgAcquire::Worker *I = Owner->WorkersBegin(); I != 0;
    for (pkgAcquire::Worker *I = Owner->WorkersBegin(); I != 0;
 	I = Owner->WorkerStep(I))
 	I = Owner->WorkerStep(I))
       if (I->CurrentItem != 0 && I->CurrentItem->Owner->Complete == false)
       if (I->CurrentItem != 0 && I->CurrentItem->Owner->Complete == false)
@@ -838,7 +838,7 @@ bool pkgAcquireStatus::Pulse(pkgAcquire *Owner)
       else
       else
 	 CurrentCPS = ((CurrentBytes - ResumeSize) - LastBytes)/Delta;
 	 CurrentCPS = ((CurrentBytes - ResumeSize) - LastBytes)/Delta;
       LastBytes = CurrentBytes - ResumeSize;
       LastBytes = CurrentBytes - ResumeSize;
-      ElapsedTime = (unsigned long)Delta;
+      ElapsedTime = (unsigned long long)Delta;
       Time = NewTime;
       Time = NewTime;
    }
    }
 
 
@@ -849,8 +849,7 @@ bool pkgAcquireStatus::Pulse(pkgAcquire *Owner)
 
 
       char msg[200];
       char msg[200];
       long i = CurrentItems < TotalItems ? CurrentItems + 1 : CurrentItems;
       long i = CurrentItems < TotalItems ? CurrentItems + 1 : CurrentItems;
-      unsigned long ETA =
-	 (unsigned long)((TotalBytes - CurrentBytes) / CurrentCPS);
+      unsigned long long const ETA = (TotalBytes - CurrentBytes) / CurrentCPS;
 
 
       // only show the ETA if it makes sense
       // only show the ETA if it makes sense
       if (ETA > 0 && ETA < 172800 /* two days */ )
       if (ETA > 0 && ETA < 172800 /* two days */ )
@@ -906,13 +905,13 @@ void pkgAcquireStatus::Stop()
    else
    else
       CurrentCPS = FetchedBytes/Delta;
       CurrentCPS = FetchedBytes/Delta;
    LastBytes = CurrentBytes;
    LastBytes = CurrentBytes;
-   ElapsedTime = (unsigned int)Delta;
+   ElapsedTime = (unsigned long long)Delta;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // AcquireStatus::Fetched - Called when a byte set has been fetched	/*{{{*/
 // AcquireStatus::Fetched - Called when a byte set has been fetched	/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* This is used to get accurate final transfer rate reporting. */
 /* This is used to get accurate final transfer rate reporting. */
-void pkgAcquireStatus::Fetched(unsigned long Size,unsigned long Resume)
+void pkgAcquireStatus::Fetched(unsigned long long Size,unsigned long long Resume)
 {   
 {   
    FetchedBytes += Size - Resume;
    FetchedBytes += Size - Resume;
 }
 }

+ 32 - 20
apt-pkg/acquire.h

@@ -91,6 +91,12 @@ class pkgAcquireStatus;
  */
  */
 class pkgAcquire
 class pkgAcquire
 {   
 {   
+   private:
+   /** \brief FD of the Lock file we acquire in Setup (if any) */
+   int LockFD;
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    public:
    public:
    
    
    class Item;
    class Item;
@@ -142,12 +148,7 @@ class pkgAcquire
    /** \brief The progress indicator for this download. */
    /** \brief The progress indicator for this download. */
    pkgAcquireStatus *Log;
    pkgAcquireStatus *Log;
 
 
-   /** \brief The total size of the files which are to be fetched.
-    *
-    *  This is not necessarily the total number of bytes to download
-    *  when, e.g., download resumption and list updates via patches
-    *  are taken into account.
-    */
+   /** \brief The number of files which are to be fetched. */
    unsigned long ToFetch;
    unsigned long ToFetch;
 
 
    // Configurable parameters for the scheduler
    // Configurable parameters for the scheduler
@@ -361,9 +362,6 @@ class pkgAcquire
     */
     */
    virtual ~pkgAcquire();
    virtual ~pkgAcquire();
 
 
-   private:
-   /** \brief FD of the Lock file we acquire in Setup (if any) */
-   int LockFD;
 };
 };
 
 
 /** \brief Represents a single download source from which an item
 /** \brief Represents a single download source from which an item
@@ -393,6 +391,9 @@ class pkgAcquire::Queue
    friend class pkgAcquire::UriIterator;
    friend class pkgAcquire::UriIterator;
    friend class pkgAcquire::Worker;
    friend class pkgAcquire::Worker;
 
 
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    /** \brief The next queue in the pkgAcquire object's list of queues. */
    /** \brief The next queue in the pkgAcquire object's list of queues. */
    Queue *Next;
    Queue *Next;
    
    
@@ -480,7 +481,7 @@ class pkgAcquire::Queue
     *
     *
     *  \todo Unimplemented.  Implement it or remove?
     *  \todo Unimplemented.  Implement it or remove?
     */
     */
-   bool ItemStart(QItem *Itm,unsigned long Size);
+   bool ItemStart(QItem *Itm,unsigned long long Size);
 
 
    /** \brief Remove the given item from this queue and set its state
    /** \brief Remove the given item from this queue and set its state
     *  to pkgAcquire::Item::StatDone.
     *  to pkgAcquire::Item::StatDone.
@@ -542,12 +543,15 @@ class pkgAcquire::Queue
    /** Shut down all the worker processes associated with this queue
    /** Shut down all the worker processes associated with this queue
     *  and empty the queue.
     *  and empty the queue.
     */
     */
-   ~Queue();
+   virtual ~Queue();
 };
 };
 									/*}}}*/
 									/*}}}*/
 /** \brief Iterates over all the URIs being fetched by a pkgAcquire object.	{{{*/
 /** \brief Iterates over all the URIs being fetched by a pkgAcquire object.	{{{*/
 class pkgAcquire::UriIterator
 class pkgAcquire::UriIterator
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    /** The next queue to iterate over. */
    /** The next queue to iterate over. */
    pkgAcquire::Queue *CurQ;
    pkgAcquire::Queue *CurQ;
    /** The item that we currently point at. */
    /** The item that we currently point at. */
@@ -583,11 +587,15 @@ class pkgAcquire::UriIterator
 	 CurQ = CurQ->Next;
 	 CurQ = CurQ->Next;
       }
       }
    }   
    }   
+   virtual ~UriIterator() {};
 };
 };
 									/*}}}*/
 									/*}}}*/
 /** \brief Information about the properties of a single acquire method.	{{{*/
 /** \brief Information about the properties of a single acquire method.	{{{*/
 struct pkgAcquire::MethodConfig
 struct pkgAcquire::MethodConfig
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+   
    /** \brief The next link on the acquire method list.
    /** \brief The next link on the acquire method list.
     *
     *
     *  \todo Why not an STL container?
     *  \todo Why not an STL container?
@@ -636,16 +644,20 @@ struct pkgAcquire::MethodConfig
     *  appropriate.
     *  appropriate.
     */
     */
    MethodConfig();
    MethodConfig();
+
+   /* \brief Destructor, empty currently */
+   virtual ~MethodConfig() {};
 };
 };
 									/*}}}*/
 									/*}}}*/
 /** \brief A monitor object for downloads controlled by the pkgAcquire class.	{{{
 /** \brief A monitor object for downloads controlled by the pkgAcquire class.	{{{
  *
  *
  *  \todo Why protected members?
  *  \todo Why protected members?
- *
- *  \todo Should the double members be uint64_t?
  */
  */
 class pkgAcquireStatus
 class pkgAcquireStatus
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    protected:
    protected:
    
    
    /** \brief The last time at which this monitor object was updated. */
    /** \brief The last time at which this monitor object was updated. */
@@ -657,34 +669,34 @@ class pkgAcquireStatus
    /** \brief The number of bytes fetched as of the previous call to
    /** \brief The number of bytes fetched as of the previous call to
     *  pkgAcquireStatus::Pulse, including local items.
     *  pkgAcquireStatus::Pulse, including local items.
     */
     */
-   double LastBytes;
+   unsigned long long LastBytes;
 
 
    /** \brief The current rate of download as of the most recent call
    /** \brief The current rate of download as of the most recent call
     *  to pkgAcquireStatus::Pulse, in bytes per second.
     *  to pkgAcquireStatus::Pulse, in bytes per second.
     */
     */
-   double CurrentCPS;
+   unsigned long long CurrentCPS;
 
 
    /** \brief The number of bytes fetched as of the most recent call
    /** \brief The number of bytes fetched as of the most recent call
     *  to pkgAcquireStatus::Pulse, including local items.
     *  to pkgAcquireStatus::Pulse, including local items.
     */
     */
-   double CurrentBytes;
+   unsigned long long CurrentBytes;
 
 
    /** \brief The total number of bytes that need to be fetched.
    /** \brief The total number of bytes that need to be fetched.
     *
     *
     *  \warning This member is inaccurate, as new items might be
     *  \warning This member is inaccurate, as new items might be
     *  enqueued while the download is in progress!
     *  enqueued while the download is in progress!
     */
     */
-   double TotalBytes;
+   unsigned long long TotalBytes;
 
 
    /** \brief The total number of bytes accounted for by items that
    /** \brief The total number of bytes accounted for by items that
     *  were successfully fetched.
     *  were successfully fetched.
     */
     */
-   double FetchedBytes;
+   unsigned long long FetchedBytes;
 
 
    /** \brief The amount of time that has elapsed since the download
    /** \brief The amount of time that has elapsed since the download
     *   started.
     *   started.
     */
     */
-   unsigned long ElapsedTime;
+   unsigned long long ElapsedTime;
 
 
    /** \brief The total number of items that need to be fetched.
    /** \brief The total number of items that need to be fetched.
     *
     *
@@ -717,7 +729,7 @@ class pkgAcquireStatus
     *
     *
     *  \param ResumePoint How much of the file was already fetched.
     *  \param ResumePoint How much of the file was already fetched.
     */
     */
-   virtual void Fetched(unsigned long Size,unsigned long ResumePoint);
+   virtual void Fetched(unsigned long long Size,unsigned long long ResumePoint);
    
    
    /** \brief Invoked when the user should be prompted to change the
    /** \brief Invoked when the user should be prompted to change the
     *         inserted removable media.
     *         inserted removable media.

+ 49 - 6
apt-pkg/algorithms.cc

@@ -20,12 +20,15 @@
 #include <apt-pkg/version.h>
 #include <apt-pkg/version.h>
 #include <apt-pkg/sptr.h>
 #include <apt-pkg/sptr.h>
 #include <apt-pkg/acquire-item.h>
 #include <apt-pkg/acquire-item.h>
-    
+#include <apt-pkg/edsp.h>
+
 #include <apti18n.h>
 #include <apti18n.h>
 #include <sys/types.h>
 #include <sys/types.h>
 #include <cstdlib>
 #include <cstdlib>
 #include <algorithm>
 #include <algorithm>
 #include <iostream>
 #include <iostream>
+
+#include <stdio.h>
 									/*}}}*/
 									/*}}}*/
 using namespace std;
 using namespace std;
 
 
@@ -327,6 +330,12 @@ bool pkgFixBroken(pkgDepCache &Cache)
  */
  */
 bool pkgDistUpgrade(pkgDepCache &Cache)
 bool pkgDistUpgrade(pkgDepCache &Cache)
 {
 {
+   std::string const solver = _config->Find("APT::Solver", "internal");
+   if (solver != "internal") {
+      OpTextProgress Prog(*_config);
+      return EDSP::ResolveExternal(solver.c_str(), Cache, false, true, false, &Prog);
+   }
+
    pkgDepCache::ActionGroup group(Cache);
    pkgDepCache::ActionGroup group(Cache);
 
 
    /* Upgrade all installed packages first without autoinst to help the resolver
    /* Upgrade all installed packages first without autoinst to help the resolver
@@ -379,6 +388,12 @@ bool pkgDistUpgrade(pkgDepCache &Cache)
    to install packages not marked for install */
    to install packages not marked for install */
 bool pkgAllUpgrade(pkgDepCache &Cache)
 bool pkgAllUpgrade(pkgDepCache &Cache)
 {
 {
+   std::string const solver = _config->Find("APT::Solver", "internal");
+   if (solver != "internal") {
+      OpTextProgress Prog(*_config);
+      return EDSP::ResolveExternal(solver.c_str(), Cache, true, false, false, &Prog);
+   }
+
    pkgDepCache::ActionGroup group(Cache);
    pkgDepCache::ActionGroup group(Cache);
 
 
    pkgProblemResolver Fix(&Cache);
    pkgProblemResolver Fix(&Cache);
@@ -725,7 +740,20 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg)
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
-// ProblemResolver::Resolve - Run the resolution pass			/*{{{*/
+// ProblemResolver::Resolve - calls a resolver to fix the situation	/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool pkgProblemResolver::Resolve(bool BrokenFix)
+{
+   std::string const solver = _config->Find("APT::Solver", "internal");
+   if (solver != "internal") {
+      OpTextProgress Prog(*_config);
+      return EDSP::ResolveExternal(solver.c_str(), Cache, false, false, false, &Prog);
+   }
+   return ResolveInternal(BrokenFix);
+}
+									/*}}}*/
+// ProblemResolver::ResolveInternal - Run the resolution pass		/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* This routines works by calculating a score for each package. The score
 /* This routines works by calculating a score for each package. The score
    is derived by considering the package's priority and all reverse 
    is derived by considering the package's priority and all reverse 
@@ -739,12 +767,10 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg)
  
  
    The BrokenFix flag enables a mode where the algorithm tries to 
    The BrokenFix flag enables a mode where the algorithm tries to 
    upgrade packages to advoid problems. */
    upgrade packages to advoid problems. */
-bool pkgProblemResolver::Resolve(bool BrokenFix)
+bool pkgProblemResolver::ResolveInternal(bool const BrokenFix)
 {
 {
    pkgDepCache::ActionGroup group(Cache);
    pkgDepCache::ActionGroup group(Cache);
 
 
-   unsigned long Size = Cache.Head().PackageCount;
-
    // Record which packages are marked for install
    // Record which packages are marked for install
    bool Again = false;
    bool Again = false;
    do
    do
@@ -774,7 +800,9 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
       clog << "Starting" << endl;
       clog << "Starting" << endl;
    
    
    MakeScores();
    MakeScores();
-   
+
+   unsigned long const Size = Cache.Head().PackageCount;
+
    /* We have to order the packages so that the broken fixing pass 
    /* We have to order the packages so that the broken fixing pass 
       operates from highest score to lowest. This prevents problems when
       operates from highest score to lowest. This prevents problems when
       high score packages cause the removal of lower score packages that
       high score packages cause the removal of lower score packages that
@@ -1207,6 +1235,21 @@ bool pkgProblemResolver::InstOrNewPolicyBroken(pkgCache::PkgIterator I)
    in that it does not install or remove any packages. It is assumed that the
    in that it does not install or remove any packages. It is assumed that the
    system was non-broken previously. */
    system was non-broken previously. */
 bool pkgProblemResolver::ResolveByKeep()
 bool pkgProblemResolver::ResolveByKeep()
+{
+   std::string const solver = _config->Find("APT::Solver", "internal");
+   if (solver != "internal") {
+      OpTextProgress Prog(*_config);
+      return EDSP::ResolveExternal(solver.c_str(), Cache, true, false, false, &Prog);
+   }
+   return ResolveByKeepInternal();
+}
+									/*}}}*/
+// ProblemResolver::ResolveByKeepInternal - Resolve problems using keep	/*{{{*/
+// ---------------------------------------------------------------------
+/* This is the work horse of the soft upgrade routine. It is very gental
+   in that it does not install or remove any packages. It is assumed that the
+   system was non-broken previously. */
+bool pkgProblemResolver::ResolveByKeepInternal()
 {
 {
    pkgDepCache::ActionGroup group(Cache);
    pkgDepCache::ActionGroup group(Cache);
 
 

+ 6 - 0
apt-pkg/algorithms.h

@@ -78,6 +78,9 @@ private:
 									/*}}}*/
 									/*}}}*/
 class pkgProblemResolver						/*{{{*/
 class pkgProblemResolver						/*{{{*/
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    pkgDepCache &Cache;
    pkgDepCache &Cache;
    typedef pkgCache::PkgIterator PkgIterator;
    typedef pkgCache::PkgIterator PkgIterator;
    typedef pkgCache::VerIterator VerIterator;
    typedef pkgCache::VerIterator VerIterator;
@@ -105,6 +108,9 @@ class pkgProblemResolver						/*{{{*/
 
 
    void MakeScores();
    void MakeScores();
    bool DoUpgrade(pkgCache::PkgIterator Pkg);
    bool DoUpgrade(pkgCache::PkgIterator Pkg);
+
+   bool ResolveInternal(bool const BrokenFix = false);
+   bool ResolveByKeepInternal();
    
    
    protected:
    protected:
    bool InstOrNewPolicyBroken(pkgCache::PkgIterator Pkg);
    bool InstOrNewPolicyBroken(pkgCache::PkgIterator Pkg);

+ 3 - 0
apt-pkg/cachefile.h

@@ -25,6 +25,9 @@
 
 
 class pkgCacheFile
 class pkgCacheFile
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    protected:
    protected:
    
    
    MMap *Map;
    MMap *Map;

+ 2 - 0
apt-pkg/cachefilter.h

@@ -16,6 +16,8 @@ namespace APT {
 namespace CacheFilter {
 namespace CacheFilter {
 // PackageNameMatchesRegEx						/*{{{*/
 // PackageNameMatchesRegEx						/*{{{*/
 class PackageNameMatchesRegEx {
 class PackageNameMatchesRegEx {
+         /** \brief dpointer placeholder (for later in case we need it) */
+         void *d;
 	regex_t* pattern;
 	regex_t* pattern;
 public:
 public:
 	PackageNameMatchesRegEx(std::string const &Pattern);
 	PackageNameMatchesRegEx(std::string const &Pattern);

+ 1 - 7
apt-pkg/cacheiterators.h

@@ -206,15 +206,10 @@ class pkgCache::VerIterator : public Iterator<Version, VerIterator> {
 	inline const char *VerStr() const {return S->VerStr == 0?0:Owner->StrP + S->VerStr;};
 	inline const char *VerStr() const {return S->VerStr == 0?0:Owner->StrP + S->VerStr;};
 	inline const char *Section() const {return S->Section == 0?0:Owner->StrP + S->Section;};
 	inline const char *Section() const {return S->Section == 0?0:Owner->StrP + S->Section;};
 	inline const char *Arch() const {
 	inline const char *Arch() const {
-		if (S->MultiArch == pkgCache::Version::All ||
-		    S->MultiArch == pkgCache::Version::AllForeign ||
-		    S->MultiArch == pkgCache::Version::AllAllowed)
+		if (S->MultiArch == pkgCache::Version::All)
 			return "all";
 			return "all";
 		return S->ParentPkg == 0?0:Owner->StrP + ParentPkg()->Arch;
 		return S->ParentPkg == 0?0:Owner->StrP + ParentPkg()->Arch;
 	};
 	};
-	__deprecated inline const char *Arch(bool const pseudo) const {
-		return S->ParentPkg == 0?0:Owner->StrP + ParentPkg()->Arch;
-	};
 	inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + S->ParentPkg);};
 	inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + S->ParentPkg);};
 
 
 	inline DescIterator DescriptionList() const;
 	inline DescIterator DescriptionList() const;
@@ -227,7 +222,6 @@ class pkgCache::VerIterator : public Iterator<Version, VerIterator> {
 	string RelStr() const;
 	string RelStr() const;
 
 
 	bool Automatic() const;
 	bool Automatic() const;
-	__deprecated bool Pseudo() const;
 	VerFileIterator NewestFile() const;
 	VerFileIterator NewestFile() const;
 
 
 	inline VerIterator(pkgCache &Owner,Version *Trg = 0) : Iterator<Version, VerIterator>(Owner, Trg) {
 	inline VerIterator(pkgCache &Owner,Version *Trg = 0) : Iterator<Version, VerIterator>(Owner, Trg) {

+ 0 - 2
apt-pkg/cacheset.h

@@ -257,7 +257,6 @@ public:									/*{{{*/
 		inline const char *VerStr() const { return (**this).VerStr(); };
 		inline const char *VerStr() const { return (**this).VerStr(); };
 		inline const char *Section() const { return (**this).Section(); };
 		inline const char *Section() const { return (**this).Section(); };
 		inline const char *Arch() const { return (**this).Arch(); };
 		inline const char *Arch() const { return (**this).Arch(); };
-		__deprecated inline const char *Arch(bool const pseudo) const { return (**this).Arch(); };
 		inline pkgCache::PkgIterator ParentPkg() const { return (**this).ParentPkg(); };
 		inline pkgCache::PkgIterator ParentPkg() const { return (**this).ParentPkg(); };
 		inline pkgCache::DescIterator DescriptionList() const { return (**this).DescriptionList(); };
 		inline pkgCache::DescIterator DescriptionList() const { return (**this).DescriptionList(); };
 		inline pkgCache::DescIterator TranslatedDescription() const { return (**this).TranslatedDescription(); };
 		inline pkgCache::DescIterator TranslatedDescription() const { return (**this).TranslatedDescription(); };
@@ -268,7 +267,6 @@ public:									/*{{{*/
 		inline const char *PriorityType() const { return (**this).PriorityType(); };
 		inline const char *PriorityType() const { return (**this).PriorityType(); };
 		inline string RelStr() const { return (**this).RelStr(); };
 		inline string RelStr() const { return (**this).RelStr(); };
 		inline bool Automatic() const { return (**this).Automatic(); };
 		inline bool Automatic() const { return (**this).Automatic(); };
-		__deprecated inline bool Pseudo() const { return false; };
 		inline pkgCache::VerFileIterator NewestFile() const { return (**this).NewestFile(); };
 		inline pkgCache::VerFileIterator NewestFile() const { return (**this).NewestFile(); };
 	};
 	};
 									/*}}}*/
 									/*}}}*/

+ 1 - 9
apt-pkg/cdrom.cc

@@ -874,9 +874,7 @@ pkgUdevCdromDevices::Dlopen()                     		        /*{{{*/
    libudev_handle = h;
    libudev_handle = h;
    udev_new = (udev* (*)(void)) dlsym(h, "udev_new");
    udev_new = (udev* (*)(void)) dlsym(h, "udev_new");
    udev_enumerate_add_match_property = (int (*)(udev_enumerate*, const char*, const char*))dlsym(h, "udev_enumerate_add_match_property");
    udev_enumerate_add_match_property = (int (*)(udev_enumerate*, const char*, const char*))dlsym(h, "udev_enumerate_add_match_property");
-#if 0 // FIXME: uncomment on next ABI break
    udev_enumerate_add_match_sysattr = (int (*)(udev_enumerate*, const char*, const char*))dlsym(h, "udev_enumerate_add_match_sysattr");
    udev_enumerate_add_match_sysattr = (int (*)(udev_enumerate*, const char*, const char*))dlsym(h, "udev_enumerate_add_match_sysattr");
-#endif
    udev_enumerate_scan_devices = (int (*)(udev_enumerate*))dlsym(h, "udev_enumerate_scan_devices");
    udev_enumerate_scan_devices = (int (*)(udev_enumerate*))dlsym(h, "udev_enumerate_scan_devices");
    udev_enumerate_get_list_entry = (udev_list_entry* (*)(udev_enumerate*))dlsym(h, "udev_enumerate_get_list_entry");
    udev_enumerate_get_list_entry = (udev_list_entry* (*)(udev_enumerate*))dlsym(h, "udev_enumerate_get_list_entry");
    udev_device_new_from_syspath = (udev_device* (*)(udev*, const char*))dlsym(h, "udev_device_new_from_syspath");
    udev_device_new_from_syspath = (udev_device* (*)(udev*, const char*))dlsym(h, "udev_device_new_from_syspath");
@@ -890,10 +888,8 @@ pkgUdevCdromDevices::Dlopen()                     		        /*{{{*/
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
-
                                                                         /*{{{*/
                                                                         /*{{{*/
-// compatiblity only with the old API/ABI, can be removed on the next
-// ABI break
+// convenience interface, this will just call ScanForRemovable
 vector<CdromDevice>
 vector<CdromDevice>
 pkgUdevCdromDevices::Scan()
 pkgUdevCdromDevices::Scan()
 { 
 { 
@@ -918,10 +914,6 @@ pkgUdevCdromDevices::ScanForRemovable(bool CdromOnly)
    if (CdromOnly)
    if (CdromOnly)
       udev_enumerate_add_match_property(enumerate, "ID_CDROM", "1");
       udev_enumerate_add_match_property(enumerate, "ID_CDROM", "1");
    else {
    else {
-#if 1 // FIXME: remove the next two lines on the next ABI break
-      int (*udev_enumerate_add_match_sysattr)(struct udev_enumerate *udev_enumerate, const char *property, const char *value);
-      udev_enumerate_add_match_sysattr = (int (*)(udev_enumerate*, const char*, const char*))dlsym(libudev_handle, "udev_enumerate_add_match_sysattr");
-#endif
       udev_enumerate_add_match_sysattr(enumerate, "removable", "1");
       udev_enumerate_add_match_sysattr(enumerate, "removable", "1");
    }
    }
 
 

+ 3 - 5
apt-pkg/cdrom.h

@@ -92,9 +92,7 @@ class pkgUdevCdromDevices						/*{{{*/
    struct udev_enumerate *(*udev_enumerate_new) (struct udev *udev);
    struct udev_enumerate *(*udev_enumerate_new) (struct udev *udev);
    struct udev_list_entry *(*udev_list_entry_get_next)(struct udev_list_entry *list_entry);
    struct udev_list_entry *(*udev_list_entry_get_next)(struct udev_list_entry *list_entry);
    const char* (*udev_device_get_property_value)(struct udev_device *udev_device, const char *key);
    const char* (*udev_device_get_property_value)(struct udev_device *udev_device, const char *key);
-#if 0 // FIXME: uncomment on next ABI break
    int (*udev_enumerate_add_match_sysattr)(struct udev_enumerate *udev_enumerate, const char *property, const char *value);
    int (*udev_enumerate_add_match_sysattr)(struct udev_enumerate *udev_enumerate, const char *property, const char *value);
-#endif 
    // end libudev dlopen
    // end libudev dlopen
    
    
  public:
  public:
@@ -104,11 +102,11 @@ class pkgUdevCdromDevices						/*{{{*/
    // try to open 
    // try to open 
    bool Dlopen();
    bool Dlopen();
 
 
-   // this is the new interface
-   vector<CdromDevice> ScanForRemovable(bool CdromOnly);
-   // FIXME: compat with the old interface/API/ABI only
+   // convenience interface, this will just call ScanForRemovable
+   // with "APT::cdrom::CdromOnly"
    vector<CdromDevice> Scan();
    vector<CdromDevice> Scan();
 
 
+   vector<CdromDevice> ScanForRemovable(bool CdromOnly);
 };
 };
 									/*}}}*/
 									/*}}}*/
 
 

+ 3 - 0
apt-pkg/clean.h

@@ -15,6 +15,9 @@
 
 
 class pkgArchiveCleaner
 class pkgArchiveCleaner
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    protected:
    protected:
    
    
    virtual void Erase(const char * /*File*/,string /*Pkg*/,string /*Ver*/,struct stat & /*St*/) {};
    virtual void Erase(const char * /*File*/,string /*Pkg*/,string /*Ver*/,struct stat & /*St*/) {};

+ 26 - 15
apt-pkg/contrib/hashes.cc

@@ -23,7 +23,7 @@
 
 
 const char* HashString::_SupportedHashes[] = 
 const char* HashString::_SupportedHashes[] = 
 {
 {
-   "SHA256", "SHA1", "MD5Sum", NULL
+   "SHA512", "SHA256", "SHA1", "MD5Sum", NULL
 };
 };
 
 
 HashString::HashString()
 HashString::HashString()
@@ -53,28 +53,33 @@ HashString::HashString(string StringedHash)				/*{{{*/
 									/*}}}*/
 									/*}}}*/
 bool HashString::VerifyFile(string filename) const			/*{{{*/
 bool HashString::VerifyFile(string filename) const			/*{{{*/
 {
 {
-   FileFd fd;
-   MD5Summation MD5;
-   SHA1Summation SHA1;
-   SHA256Summation SHA256;
    string fileHash;
    string fileHash;
 
 
    FileFd Fd(filename, FileFd::ReadOnly);
    FileFd Fd(filename, FileFd::ReadOnly);
-   if(Type == "MD5Sum") 
+   if(Type == "MD5Sum")
    {
    {
+      MD5Summation MD5;
       MD5.AddFD(Fd.Fd(), Fd.Size());
       MD5.AddFD(Fd.Fd(), Fd.Size());
       fileHash = (string)MD5.Result();
       fileHash = (string)MD5.Result();
-   } 
+   }
    else if (Type == "SHA1")
    else if (Type == "SHA1")
    {
    {
+      SHA1Summation SHA1;
       SHA1.AddFD(Fd.Fd(), Fd.Size());
       SHA1.AddFD(Fd.Fd(), Fd.Size());
       fileHash = (string)SHA1.Result();
       fileHash = (string)SHA1.Result();
-   } 
-   else if (Type == "SHA256") 
+   }
+   else if (Type == "SHA256")
    {
    {
+      SHA256Summation SHA256;
       SHA256.AddFD(Fd.Fd(), Fd.Size());
       SHA256.AddFD(Fd.Fd(), Fd.Size());
       fileHash = (string)SHA256.Result();
       fileHash = (string)SHA256.Result();
    }
    }
+   else if (Type == "SHA512")
+   {
+      SHA512Summation SHA512;
+      SHA512.AddFD(Fd.Fd(), Fd.Size());
+      fileHash = (string)SHA512.Result();
+   }
    Fd.Close();
    Fd.Close();
 
 
    if(_config->FindB("Debug::Hashes",false) == true)
    if(_config->FindB("Debug::Hashes",false) == true)
@@ -101,7 +106,8 @@ string HashString::toStr() const
 // Hashes::AddFD - Add the contents of the FD				/*{{{*/
 // Hashes::AddFD - Add the contents of the FD				/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
-bool Hashes::AddFD(int Fd,unsigned long Size)
+bool Hashes::AddFD(int const Fd,unsigned long Size, bool const addMD5,
+		   bool const addSHA1, bool const addSHA256, bool const addSHA512)
 {
 {
    unsigned char Buf[64*64];
    unsigned char Buf[64*64];
    int Res = 0;
    int Res = 0;
@@ -112,13 +118,18 @@ bool Hashes::AddFD(int Fd,unsigned long Size)
       if (!ToEOF) n = min(Size,(unsigned long)n);
       if (!ToEOF) n = min(Size,(unsigned long)n);
       Res = read(Fd,Buf,n);
       Res = read(Fd,Buf,n);
       if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read
       if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read
-         return false;
+	 return false;
       if (ToEOF && Res == 0) // EOF
       if (ToEOF && Res == 0) // EOF
-         break;
+	 break;
       Size -= Res;
       Size -= Res;
-      MD5.Add(Buf,Res);
-      SHA1.Add(Buf,Res);
-      SHA256.Add(Buf,Res);
+      if (addMD5 == true)
+	 MD5.Add(Buf,Res);
+      if (addSHA1 == true)
+	 SHA1.Add(Buf,Res);
+      if (addSHA256 == true)
+	 SHA256.Add(Buf,Res);
+      if (addSHA512 == true)
+	 SHA512.Add(Buf,Res);
    }
    }
    return true;
    return true;
 }
 }

+ 7 - 3
apt-pkg/contrib/hashes.h

@@ -16,7 +16,7 @@
 
 
 #include <apt-pkg/md5.h>
 #include <apt-pkg/md5.h>
 #include <apt-pkg/sha1.h>
 #include <apt-pkg/sha1.h>
-#include <apt-pkg/sha256.h>
+#include <apt-pkg/sha2.h>
 
 
 #include <algorithm>
 #include <algorithm>
 #include <vector>
 #include <vector>
@@ -60,13 +60,17 @@ class Hashes
    MD5Summation MD5;
    MD5Summation MD5;
    SHA1Summation SHA1;
    SHA1Summation SHA1;
    SHA256Summation SHA256;
    SHA256Summation SHA256;
+   SHA512Summation SHA512;
    
    
    inline bool Add(const unsigned char *Data,unsigned long Size)
    inline bool Add(const unsigned char *Data,unsigned long Size)
    {
    {
-      return MD5.Add(Data,Size) && SHA1.Add(Data,Size) && SHA256.Add(Data,Size);
+      return MD5.Add(Data,Size) && SHA1.Add(Data,Size) && SHA256.Add(Data,Size) && SHA512.Add(Data,Size);
    };
    };
    inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));};
    inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));};
-   bool AddFD(int Fd,unsigned long Size);
+   inline bool AddFD(int const Fd,unsigned long Size = 0)
+   { return AddFD(Fd, Size, true, true, true, true); };
+   bool AddFD(int const Fd, unsigned long Size, bool const addMD5,
+	      bool const addSHA1, bool const addSHA256, bool const addSHA512);
    inline bool Add(const unsigned char *Beg,const unsigned char *End) 
    inline bool Add(const unsigned char *Beg,const unsigned char *End) 
                   {return Add(Beg,End-Beg);};
                   {return Add(Beg,End-Beg);};
 };
 };

+ 27 - 0
apt-pkg/contrib/hashsum.cc

@@ -0,0 +1,27 @@
+// Cryptographic API Base
+
+#include <unistd.h>
+#include "hashsum_template.h"
+
+// Summation::AddFD - Add content of file into the checksum		/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool SummationImplementation::AddFD(int const Fd, unsigned long Size) {
+   unsigned char Buf[64 * 64];
+   int Res = 0;
+   int ToEOF = (Size == 0);
+   while (Size != 0 || ToEOF)
+   {
+      unsigned n = sizeof(Buf);
+      if (!ToEOF) n = min(Size,(unsigned long)n);
+      Res = read(Fd, Buf, n);
+      if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read
+	 return false;
+      if (ToEOF && Res == 0) // EOF
+	 break;
+      Size -= Res;
+      Add(Buf,Res);
+   }
+   return true;
+}
+									/*}}}*/

+ 107 - 0
apt-pkg/contrib/hashsum_template.h

@@ -0,0 +1,107 @@
+// -*- mode: cpp; mode: fold -*-
+// Description                                                          /*{{{*/
+// $Id: hashsum_template.h,v 1.3 2001/05/07 05:05:47 jgg Exp $
+/* ######################################################################
+
+   HashSumValueTemplate - Generic Storage for a hash value
+   
+   ##################################################################### */
+                                                                        /*}}}*/
+#ifndef APTPKG_HASHSUM_TEMPLATE_H
+#define APTPKG_HASHSUM_TEMPLATE_H
+
+#include <string>
+#include <cstring>
+#include <algorithm>
+#include <stdint.h>
+
+using std::string;
+using std::min;
+
+template<int N>
+class HashSumValue
+{
+   unsigned char Sum[N/8];
+   
+   public:
+
+   // Accessors
+   bool operator ==(const HashSumValue &rhs) const
+   {
+      return memcmp(Sum,rhs.Sum,sizeof(Sum)) == 0;
+   }; 
+
+   string Value() const
+   {
+      char Conv[16] =
+      { '0','1','2','3','4','5','6','7','8','9','a','b',
+        'c','d','e','f'
+      };
+      char Result[((N/8)*2)+1];
+      Result[(N/8)*2] = 0;
+      
+      // Convert each char into two letters
+      int J = 0;
+      int I = 0;
+      for (; I != (N/8)*2; J++,I += 2)
+      {
+         Result[I] = Conv[Sum[J] >> 4];
+         Result[I + 1] = Conv[Sum[J] & 0xF];
+      }
+      return string(Result);
+   };
+   
+   inline void Value(unsigned char S[N/8])
+   {
+      for (int I = 0; I != sizeof(Sum); I++) 
+         S[I] = Sum[I];
+   };
+
+   inline operator string() const 
+   {
+      return Value();
+   };
+
+   bool Set(string Str) 
+   {
+      return Hex2Num(Str,Sum,sizeof(Sum));
+   };
+
+   inline void Set(unsigned char S[N/8]) 
+   {
+      for (int I = 0; I != sizeof(Sum); I++) 
+         Sum[I] = S[I];
+   };
+
+   HashSumValue(string Str) 
+   {
+         memset(Sum,0,sizeof(Sum));
+         Set(Str);
+   }
+   HashSumValue()
+   {
+      memset(Sum,0,sizeof(Sum));
+   }
+};
+
+class SummationImplementation
+{
+   public:
+   virtual bool Add(const unsigned char *inbuf, unsigned long inlen) = 0;
+   inline bool Add(const char *inbuf, unsigned long const inlen)
+   { return Add((unsigned char *)inbuf, inlen); };
+
+   inline bool Add(const unsigned char *Data)
+   { return Add(Data, strlen((const char *)Data)); };
+   inline bool Add(const char *Data)
+   { return Add((const unsigned char *)Data, strlen((const char *)Data)); };
+
+   inline bool Add(const unsigned char *Beg, const unsigned char *End)
+   { return Add(Beg, End - Beg); };
+   inline bool Add(const char *Beg, const char *End)
+   { return Add((const unsigned char *)Beg, End - Beg); };
+
+   bool AddFD(int Fd, unsigned long Size = 0);
+};
+
+#endif

+ 1 - 79
apt-pkg/contrib/md5.cc

@@ -165,61 +165,6 @@ static void MD5Transform(uint32_t buf[4], uint32_t const in[16])
    buf[3] += d;
    buf[3] += d;
 }
 }
 									/*}}}*/
 									/*}}}*/
-// MD5SumValue::MD5SumValue - Constructs the summation from a string	/*{{{*/
-// ---------------------------------------------------------------------
-/* The string form of a MD5 is a 32 character hex number */
-MD5SumValue::MD5SumValue(string Str)
-{
-   memset(Sum,0,sizeof(Sum));
-   Set(Str);
-}
-									/*}}}*/
-// MD5SumValue::MD5SumValue - Default constructor			/*{{{*/
-// ---------------------------------------------------------------------
-/* Sets the value to 0 */
-MD5SumValue::MD5SumValue()
-{
-   memset(Sum,0,sizeof(Sum));
-}
-									/*}}}*/
-// MD5SumValue::Set - Set the sum from a string				/*{{{*/
-// ---------------------------------------------------------------------
-/* Converts the hex string into a set of chars */
-bool MD5SumValue::Set(string Str)
-{
-   return Hex2Num(Str,Sum,sizeof(Sum));
-}
-									/*}}}*/
-// MD5SumValue::Value - Convert the number into a string		/*{{{*/
-// ---------------------------------------------------------------------
-/* Converts the set of chars into a hex string in lower case */
-string MD5SumValue::Value() const
-{
-   char Conv[16] = {'0','1','2','3','4','5','6','7','8','9','a','b',
-                    'c','d','e','f'};
-   char Result[33];
-   Result[32] = 0;
-   
-   // Convert each char into two letters
-   int J = 0;
-   int I = 0;
-   for (; I != 32; J++, I += 2)
-   {
-      Result[I] = Conv[Sum[J] >> 4];
-      Result[I + 1] = Conv[Sum[J] & 0xF];
-   } 
-
-   return string(Result);
-}
-									/*}}}*/
-// MD5SumValue::operator == - Comparitor				/*{{{*/
-// ---------------------------------------------------------------------
-/* Call memcmp on the buffer */
-bool MD5SumValue::operator ==(const MD5SumValue &rhs) const
-{
-   return memcmp(Sum,rhs.Sum,sizeof(Sum)) == 0;
-}
-									/*}}}*/
 // MD5Summation::MD5Summation - Initialize the summer			/*{{{*/
 // MD5Summation::MD5Summation - Initialize the summer			/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* This assigns the deep magic initial values */
 /* This assigns the deep magic initial values */
@@ -286,29 +231,6 @@ bool MD5Summation::Add(const unsigned char *data,unsigned long len)
    return true;   
    return true;   
 }
 }
 									/*}}}*/
 									/*}}}*/
-// MD5Summation::AddFD - Add the contents of a FD to the hash		/*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool MD5Summation::AddFD(int Fd,unsigned long Size)
-{
-   unsigned char Buf[64*64];
-   int Res = 0;
-   int ToEOF = (Size == 0);
-   while (Size != 0 || ToEOF)
-   {
-      unsigned n = sizeof(Buf);
-      if (!ToEOF) n = min(Size,(unsigned long)n);
-      Res = read(Fd,Buf,n);
-      if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read
-         return false;
-      if (ToEOF && Res == 0) // EOF
-         break;
-      Size -= Res;
-      Add(Buf,Res);
-   }
-   return true;
-}
-									/*}}}*/
 // MD5Summation::Result - Returns the value of the sum			/*{{{*/
 // MD5Summation::Result - Returns the value of the sum			/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* Because this must add in the last bytes of the series it prevents anyone
 /* Because this must add in the last bytes of the series it prevents anyone
@@ -353,7 +275,7 @@ MD5SumValue MD5Summation::Result()
    }
    }
    
    
    MD5SumValue V;
    MD5SumValue V;
-   memcpy(V.Sum,buf,16);
+   V.Set((unsigned char *)buf);
    return V;
    return V;
 }
 }
 									/*}}}*/
 									/*}}}*/

+ 8 - 29
apt-pkg/contrib/md5.h

@@ -32,45 +32,24 @@
 using std::string;
 using std::string;
 using std::min;
 using std::min;
 
 
-class MD5Summation;
+#include "hashsum_template.h"
 
 
-class MD5SumValue
-{
-   friend class MD5Summation;
-   unsigned char Sum[4*4];
-   
-   public:
-
-   // Accessors
-   bool operator ==(const MD5SumValue &rhs) const; 
-   string Value() const;
-   inline void Value(unsigned char S[16]) 
-         {for (int I = 0; I != sizeof(Sum); I++) S[I] = Sum[I];};
-   inline operator string() const {return Value();};
-   bool Set(string Str);
-   inline void Set(unsigned char S[16]) 
-         {for (int I = 0; I != sizeof(Sum); I++) Sum[I] = S[I];};
-
-   MD5SumValue(string Str);
-   MD5SumValue();
-};
+typedef HashSumValue<128> MD5SumValue;
 
 
-class MD5Summation
+class MD5Summation : public SummationImplementation
 {
 {
    uint32_t Buf[4];
    uint32_t Buf[4];
    unsigned char Bytes[2*4];
    unsigned char Bytes[2*4];
    unsigned char In[16*4];
    unsigned char In[16*4];
    bool Done;
    bool Done;
-   
+
    public:
    public:
 
 
-   bool Add(const unsigned char *Data,unsigned long Size);
-   inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));};
-   bool AddFD(int Fd,unsigned long Size);
-   inline bool Add(const unsigned char *Beg,const unsigned char *End) 
-                  {return Add(Beg,End-Beg);};
+   bool Add(const unsigned char *inbuf, unsigned long inlen);
+   using SummationImplementation::Add;
+
    MD5SumValue Result();
    MD5SumValue Result();
-   
+
    MD5Summation();
    MD5Summation();
 };
 };
 
 

+ 9 - 18
apt-pkg/contrib/progress.cc

@@ -65,27 +65,18 @@ void OpProgress::OverallProgress(unsigned long Current, unsigned long Total,
 // OpProgress::SubProgress - Set the sub progress state			/*{{{*/
 // OpProgress::SubProgress - Set the sub progress state			/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
-void OpProgress::SubProgress(unsigned long SubTotal,const string &Op)
+void OpProgress::SubProgress(unsigned long SubTotal,const string &Op,
+			     float const Percent)
 {
 {
    this->SubTotal = SubTotal;
    this->SubTotal = SubTotal;
-   SubOp = Op;
-   if (Total == 0)
-      Percent = 0;
+   if (Op.empty() == false)
+      SubOp = Op;
+   if (Total == 0 || Percent == 0)
+      this->Percent = 0;
+   else if (Percent != -1)
+      this->Percent = this->Current += (Size*Percent)/SubTotal;
    else
    else
-      Percent = Current*100.0/Total;
-   Update();
-}
-									/*}}}*/
-// OpProgress::SubProgress - Set the sub progress state			/*{{{*/
-// ---------------------------------------------------------------------
-/* */
-void OpProgress::SubProgress(unsigned long SubTotal)
-{
-   this->SubTotal = SubTotal;
-   if (Total == 0)
-      Percent = 0;
-   else
-      Percent = Current*100.0/Total;
+      this->Percent = Current*100.0/Total;
    Update();
    Update();
 }
 }
 									/*}}}*/
 									/*}}}*/

+ 1 - 2
apt-pkg/contrib/progress.h

@@ -55,8 +55,7 @@ class OpProgress
    public:
    public:
    
    
    void Progress(unsigned long Current);
    void Progress(unsigned long Current);
-   void SubProgress(unsigned long SubTotal);
-   void SubProgress(unsigned long SubTotal,const string &Op);
+   void SubProgress(unsigned long SubTotal, const string &Op = "", float const Percent = -1);
    void OverallProgress(unsigned long Current,unsigned long Total,
    void OverallProgress(unsigned long Current,unsigned long Total,
 			unsigned long Size,const string &Op);
 			unsigned long Size,const string &Op);
    virtual void Done() {};
    virtual void Done() {};

+ 3 - 85
apt-pkg/contrib/sha1.cc

@@ -177,67 +177,6 @@ static void SHA1Transform(uint32_t state[5],uint8_t const buffer[64])
 }
 }
 									/*}}}*/
 									/*}}}*/
 
 
-// SHA1SumValue::SHA1SumValue - Constructs the summation from a string  /*{{{*/
-// ---------------------------------------------------------------------
-/* The string form of a SHA1 is a 40 character hex number */
-SHA1SumValue::SHA1SumValue(string Str)
-{
-   memset(Sum,0,sizeof(Sum));
-   Set(Str);
-}
-
-									/*}}} */
-// SHA1SumValue::SHA1SumValue - Default constructor                     /*{{{*/
-// ---------------------------------------------------------------------
-/* Sets the value to 0 */
-SHA1SumValue::SHA1SumValue()
-{
-   memset(Sum,0,sizeof(Sum));
-}
-
-									/*}}} */
-// SHA1SumValue::Set - Set the sum from a string                        /*{{{*/
-// ---------------------------------------------------------------------
-/* Converts the hex string into a set of chars */
-bool SHA1SumValue::Set(string Str)
-{
-   return Hex2Num(Str,Sum,sizeof(Sum));
-}
-
-									/*}}} */
-// SHA1SumValue::Value - Convert the number into a string               /*{{{*/
-// ---------------------------------------------------------------------
-/* Converts the set of chars into a hex string in lower case */
-string SHA1SumValue::Value() const
-{
-   char Conv[16] =
-      { '0','1','2','3','4','5','6','7','8','9','a','b',
-      'c','d','e','f'
-   };
-   char Result[41];
-   Result[40] = 0;
-
-   // Convert each char into two letters
-   int J = 0;
-   int I = 0;
-   for (; I != 40; J++,I += 2)
-   {
-      Result[I] = Conv[Sum[J] >> 4];
-      Result[I + 1] = Conv[Sum[J] & 0xF];
-   }
-
-   return string(Result);
-}
-
-									/*}}} */
-// SHA1SumValue::operator == - Comparator                               /*{{{*/
-// ---------------------------------------------------------------------
-/* Call memcmp on the buffer */
-bool SHA1SumValue::operator == (const SHA1SumValue & rhs) const
-{
-   return memcmp(Sum,rhs.Sum,sizeof(Sum)) == 0;
-}
-									/*}}}*/
 // SHA1Summation::SHA1Summation - Constructor                           /*{{{*/
 // SHA1Summation::SHA1Summation - Constructor                           /*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
@@ -289,11 +228,13 @@ SHA1SumValue SHA1Summation::Result()
 
 
    // Transfer over the result
    // Transfer over the result
    SHA1SumValue Value;
    SHA1SumValue Value;
+   unsigned char res[20];
    for (unsigned i = 0; i < 20; i++)
    for (unsigned i = 0; i < 20; i++)
    {
    {
-      Value.Sum[i] = (unsigned char)
+      res[i] = (unsigned char)
 	 ((state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255);
 	 ((state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255);
    }
    }
+   Value.Set(res);
    return Value;
    return Value;
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -331,26 +272,3 @@ bool SHA1Summation::Add(const unsigned char *data,unsigned long len)
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
-// SHA1Summation::AddFD - Add content of file into the checksum         /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool SHA1Summation::AddFD(int Fd,unsigned long Size)
-{
-   unsigned char Buf[64 * 64];
-   int Res = 0;
-   int ToEOF = (Size == 0);
-   while (Size != 0 || ToEOF)
-   {
-      unsigned n = sizeof(Buf);
-      if (!ToEOF) n = min(Size,(unsigned long)n);
-      Res = read(Fd,Buf,n);
-      if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read
-	 return false;
-      if (ToEOF && Res == 0) // EOF
-         break;
-      Size -= Res;
-      Add(Buf,Res);
-   }
-   return true;
-}
-									/*}}}*/

+ 5 - 27
apt-pkg/contrib/sha1.h

@@ -21,30 +21,11 @@
 using std::string;
 using std::string;
 using std::min;
 using std::min;
 
 
-class SHA1Summation;
+#include "hashsum_template.h"
 
 
-class SHA1SumValue
-{
-   friend class SHA1Summation;
-   unsigned char Sum[20];
-   
-   public:
-
-   // Accessors
-   bool operator ==(const SHA1SumValue &rhs) const; 
-   string Value() const;
-   inline void Value(unsigned char S[20])
-         {for (int I = 0; I != sizeof(Sum); I++) S[I] = Sum[I];};
-   inline operator string() const {return Value();};
-   bool Set(string Str);
-   inline void Set(unsigned char S[20]) 
-         {for (int I = 0; I != sizeof(Sum); I++) Sum[I] = S[I];};
-
-   SHA1SumValue(string Str);
-   SHA1SumValue();
-};
+typedef  HashSumValue<160> SHA1SumValue;
 
 
-class SHA1Summation
+class SHA1Summation : public SummationImplementation
 {
 {
    /* assumes 64-bit alignment just in case */
    /* assumes 64-bit alignment just in case */
    unsigned char Buffer[64] __attribute__((aligned(8)));
    unsigned char Buffer[64] __attribute__((aligned(8)));
@@ -53,12 +34,9 @@ class SHA1Summation
    bool Done;
    bool Done;
    
    
    public:
    public:
+   bool Add(const unsigned char *inbuf, unsigned long inlen);
+   using SummationImplementation::Add;
 
 
-   bool Add(const unsigned char *inbuf,unsigned long inlen);
-   inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));};
-   bool AddFD(int Fd,unsigned long Size);
-   inline bool Add(const unsigned char *Beg,const unsigned char *End) 
-                  {return Add(Beg,End-Beg);};
    SHA1SumValue Result();
    SHA1SumValue Result();
    
    
    SHA1Summation();
    SHA1Summation();

+ 103 - 0
apt-pkg/contrib/sha2.h

@@ -0,0 +1,103 @@
+// -*- mode: cpp; mode: fold -*-
+// Description                                                          /*{{{*/
+// $Id: sha512.h,v 1.3 2001/05/07 05:05:47 jgg Exp $
+/* ######################################################################
+
+   SHA{512,256}SumValue - Storage for a SHA-{512,256} hash.
+   SHA{512,256}Summation - SHA-{512,256} Secure Hash Algorithm.
+   
+   This is a C++ interface to a set of SHA{512,256}Sum functions, that mirrors
+   the equivalent MD5 & SHA1 classes. 
+
+   ##################################################################### */
+                                                                        /*}}}*/
+#ifndef APTPKG_SHA2_H
+#define APTPKG_SHA2_H
+
+#include <string>
+#include <cstring>
+#include <algorithm>
+#include <stdint.h>
+
+#include "sha2_internal.h"
+#include "hashsum_template.h"
+
+typedef HashSumValue<512> SHA512SumValue;
+typedef HashSumValue<256> SHA256SumValue;
+
+class SHA2SummationBase : public SummationImplementation
+{
+ protected:
+   bool Done;
+ public:
+   bool Add(const unsigned char *inbuf, unsigned long len) = 0;
+
+   void Result();
+};
+
+class SHA256Summation : public SHA2SummationBase
+{
+   SHA256_CTX ctx;
+   unsigned char Sum[32];
+
+   public:
+   bool Add(const unsigned char *inbuf, unsigned long len)
+   {
+      if (Done) 
+         return false;
+      SHA256_Update(&ctx, inbuf, len);
+      return true;
+   };
+   using SummationImplementation::Add;
+
+   SHA256SumValue Result()
+   {
+      if (!Done) {
+         SHA256_Final(Sum, &ctx);
+         Done = true;
+      }
+      SHA256SumValue res;
+      res.Set(Sum);
+      return res;
+   };
+   SHA256Summation() 
+   {
+      SHA256_Init(&ctx);
+      Done = false;
+   };
+};
+
+class SHA512Summation : public SHA2SummationBase
+{
+   SHA512_CTX ctx;
+   unsigned char Sum[64];
+
+   public:
+   bool Add(const unsigned char *inbuf, unsigned long len)
+   {
+      if (Done) 
+         return false;
+      SHA512_Update(&ctx, inbuf, len);
+      return true;
+   };
+   using SummationImplementation::Add;
+
+   SHA512SumValue Result()
+   {
+      if (!Done) {
+         SHA512_Final(Sum, &ctx);
+         Done = true;
+      }
+      SHA512SumValue res;
+      res.Set(Sum);
+      return res;
+   };
+   SHA512Summation()
+   {
+      SHA512_Init(&ctx);
+      Done = false;
+   };
+};
+
+
+#endif

+ 0 - 424
apt-pkg/contrib/sha256.cc

@@ -1,424 +0,0 @@
-/*
- * Cryptographic API.							{{{
- *
- * SHA-256, as specified in
- * http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf
- *
- * SHA-256 code by Jean-Luc Cooke <jlcooke@certainkey.com>.
- *
- * Copyright (c) Jean-Luc Cooke <jlcooke@certainkey.com>
- * Copyright (c) Andrew McDonald <andrew@mcdonald.org.uk>
- * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
- *
- * Ported from the Linux kernel to Apt by Anthony Towns <ajt@debian.org>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) 
- * any later version.
- *
- */									/*}}}*/
-
-#ifdef __GNUG__
-#pragma implementation "apt-pkg/sha256.h"
-#endif
-
-
-#define SHA256_DIGEST_SIZE      32
-#define SHA256_HMAC_BLOCK_SIZE  64
-
-#define ror32(value,bits) (((value) >> (bits)) | ((value) << (32 - (bits))))
-
-#include <apt-pkg/sha256.h>
-#include <apt-pkg/strutl.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <arpa/inet.h>
-
-typedef uint32_t u32;
-typedef uint8_t  u8;
-
-static inline u32 Ch(u32 x, u32 y, u32 z)
-{
-        return z ^ (x & (y ^ z));
-}
-
-static inline u32 Maj(u32 x, u32 y, u32 z)
-{
-        return (x & y) | (z & (x | y));
-}
-
-#define e0(x)       (ror32(x, 2) ^ ror32(x,13) ^ ror32(x,22))
-#define e1(x)       (ror32(x, 6) ^ ror32(x,11) ^ ror32(x,25))
-#define s0(x)       (ror32(x, 7) ^ ror32(x,18) ^ (x >> 3))
-#define s1(x)       (ror32(x,17) ^ ror32(x,19) ^ (x >> 10))
-
-#define H0         0x6a09e667
-#define H1         0xbb67ae85
-#define H2         0x3c6ef372
-#define H3         0xa54ff53a
-#define H4         0x510e527f
-#define H5         0x9b05688c
-#define H6         0x1f83d9ab
-#define H7         0x5be0cd19
-
-static inline void LOAD_OP(int I, u32 *W, const u8 *input)		/*{{{*/
-{
-	W[I] = (  ((u32) input[I * 4 + 0] << 24)
-		| ((u32) input[I * 4 + 1] << 16)
-		| ((u32) input[I * 4 + 2] << 8)
-		| ((u32) input[I * 4 + 3]));
-}
-									/*}}}*/
-static inline void BLEND_OP(int I, u32 *W)
-{
-        W[I] = s1(W[I-2]) + W[I-7] + s0(W[I-15]) + W[I-16];
-}
-
-static void sha256_transform(u32 *state, const u8 *input)		/*{{{*/
-{
-        u32 a, b, c, d, e, f, g, h, t1, t2;
-        u32 W[64];
-        int i;
-
-        /* load the input */
-        for (i = 0; i < 16; i++)
-                LOAD_OP(i, W, input);
-
-        /* now blend */
-        for (i = 16; i < 64; i++)
-                BLEND_OP(i, W);
-    
-        /* load the state into our registers */
-        a=state[0];  b=state[1];  c=state[2];  d=state[3];
-        e=state[4];  f=state[5];  g=state[6];  h=state[7];
-
-        /* now iterate */
-        t1 = h + e1(e) + Ch(e,f,g) + 0x428a2f98 + W[ 0];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0x71374491 + W[ 1];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0xb5c0fbcf + W[ 2];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0xe9b5dba5 + W[ 3];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0x3956c25b + W[ 4];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0x59f111f1 + W[ 5];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0x923f82a4 + W[ 6];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0xab1c5ed5 + W[ 7];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        t1 = h + e1(e) + Ch(e,f,g) + 0xd807aa98 + W[ 8];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0x12835b01 + W[ 9];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0x243185be + W[10];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0x550c7dc3 + W[11];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0x72be5d74 + W[12];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0x80deb1fe + W[13];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0x9bdc06a7 + W[14];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0xc19bf174 + W[15];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        t1 = h + e1(e) + Ch(e,f,g) + 0xe49b69c1 + W[16];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0xefbe4786 + W[17];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0x0fc19dc6 + W[18];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0x240ca1cc + W[19];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0x2de92c6f + W[20];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0x4a7484aa + W[21];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0x5cb0a9dc + W[22];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0x76f988da + W[23];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        t1 = h + e1(e) + Ch(e,f,g) + 0x983e5152 + W[24];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0xa831c66d + W[25];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0xb00327c8 + W[26];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0xbf597fc7 + W[27];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0xc6e00bf3 + W[28];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0xd5a79147 + W[29];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0x06ca6351 + W[30];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0x14292967 + W[31];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        t1 = h + e1(e) + Ch(e,f,g) + 0x27b70a85 + W[32];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0x2e1b2138 + W[33];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0x4d2c6dfc + W[34];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0x53380d13 + W[35];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0x650a7354 + W[36];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0x766a0abb + W[37];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0x81c2c92e + W[38];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0x92722c85 + W[39];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        t1 = h + e1(e) + Ch(e,f,g) + 0xa2bfe8a1 + W[40];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0xa81a664b + W[41];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0xc24b8b70 + W[42];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0xc76c51a3 + W[43];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0xd192e819 + W[44];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0xd6990624 + W[45];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0xf40e3585 + W[46];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0x106aa070 + W[47];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        t1 = h + e1(e) + Ch(e,f,g) + 0x19a4c116 + W[48];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0x1e376c08 + W[49];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0x2748774c + W[50];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0x34b0bcb5 + W[51];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0x391c0cb3 + W[52];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0x4ed8aa4a + W[53];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0x5b9cca4f + W[54];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0x682e6ff3 + W[55];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        t1 = h + e1(e) + Ch(e,f,g) + 0x748f82ee + W[56];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0x78a5636f + W[57];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0x84c87814 + W[58];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0x8cc70208 + W[59];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0x90befffa + W[60];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0xa4506ceb + W[61];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0xbef9a3f7 + W[62];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0xc67178f2 + W[63];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        state[0] += a; state[1] += b; state[2] += c; state[3] += d;
-        state[4] += e; state[5] += f; state[6] += g; state[7] += h;
-
-        /* clear any sensitive info... */
-        a = b = c = d = e = f = g = h = t1 = t2 = 0;
-        memset(W, 0, 64 * sizeof(u32));
-}
-									/*}}}*/
-SHA256Summation::SHA256Summation()					/*{{{*/
-{
-        Sum.state[0] = H0;
-        Sum.state[1] = H1;
-        Sum.state[2] = H2;
-        Sum.state[3] = H3;
-        Sum.state[4] = H4;
-        Sum.state[5] = H5;
-        Sum.state[6] = H6;
-        Sum.state[7] = H7;
-        Sum.count[0] = Sum.count[1] = 0;
-        memset(Sum.buf, 0, sizeof(Sum.buf));
-        Done = false;
-}
-									/*}}}*/
-bool SHA256Summation::Add(const u8 *data, unsigned long len)		/*{{{*/
-{
-        struct sha256_ctx *sctx = &Sum;
-        unsigned int i, index, part_len;
-
-        if (Done) return false;
-
-        /* Compute number of bytes mod 128 */
-        index = (unsigned int)((sctx->count[0] >> 3) & 0x3f);
-
-        /* Update number of bits */
-        if ((sctx->count[0] += (len << 3)) < (len << 3)) {
-                sctx->count[1]++;
-                sctx->count[1] += (len >> 29);
-        }
-
-        part_len = 64 - index;
-
-        /* Transform as many times as possible. */
-        if (len >= part_len) {
-                memcpy(&sctx->buf[index], data, part_len);
-                sha256_transform(sctx->state, sctx->buf);
-
-                for (i = part_len; i + 63 < len; i += 64)
-                        sha256_transform(sctx->state, &data[i]);
-                index = 0;
-        } else {
-                i = 0;
-        }
-
-        /* Buffer remaining input */
-        memcpy(&sctx->buf[index], &data[i], len-i);
-
-        return true;
-}
-									/*}}}*/
-SHA256SumValue SHA256Summation::Result()				/*{{{*/
-{
-   struct sha256_ctx *sctx = &Sum;
-   if (!Done) {
-        u8 bits[8];
-        unsigned int index, pad_len, t;
-        static const u8 padding[64] = { 0x80, };
-
-        /* Save number of bits */
-        t = sctx->count[0];
-        bits[7] = t; t >>= 8;
-        bits[6] = t; t >>= 8;
-        bits[5] = t; t >>= 8;
-        bits[4] = t;
-        t = sctx->count[1];
-        bits[3] = t; t >>= 8;
-        bits[2] = t; t >>= 8;
-        bits[1] = t; t >>= 8;
-        bits[0] = t;
-
-        /* Pad out to 56 mod 64. */
-        index = (sctx->count[0] >> 3) & 0x3f;
-        pad_len = (index < 56) ? (56 - index) : ((64+56) - index);
-        Add(padding, pad_len);
-
-        /* Append length (before padding) */
-        Add(bits, 8);
-   }
-
-   Done = true;
-
-   /* Store state in digest */
-
-   SHA256SumValue res;
-   u8 *out = res.Sum;
-
-   int i, j;
-   unsigned int t;
-   for (i = j = 0; i < 8; i++, j += 4) {
-      t = sctx->state[i];
-      out[j+3] = t; t >>= 8;
-      out[j+2] = t; t >>= 8;
-      out[j+1] = t; t >>= 8;
-      out[j  ] = t;
-   }
-
-   return res;
-}
-									/*}}}*/
-// SHA256SumValue::SHA256SumValue - Constructs the sum from a string   /*{{{*/
-// ---------------------------------------------------------------------
-/* The string form of a SHA256 is a 64 character hex number */
-SHA256SumValue::SHA256SumValue(string Str)
-{
-   memset(Sum,0,sizeof(Sum));
-   Set(Str);
-}
-                                                                       /*}}}*/
-// SHA256SumValue::SHA256SumValue - Default constructor                /*{{{*/
-// ---------------------------------------------------------------------
-/* Sets the value to 0 */
-SHA256SumValue::SHA256SumValue()
-{
-   memset(Sum,0,sizeof(Sum));
-}
-                                                                       /*}}}*/
-// SHA256SumValue::Set - Set the sum from a string                     /*{{{*/
-// ---------------------------------------------------------------------
-/* Converts the hex string into a set of chars */
-bool SHA256SumValue::Set(string Str)
-{
-   return Hex2Num(Str,Sum,sizeof(Sum));
-}
-                                                                       /*}}}*/
-// SHA256SumValue::Value - Convert the number into a string            /*{{{*/
-// ---------------------------------------------------------------------
-/* Converts the set of chars into a hex string in lower case */
-string SHA256SumValue::Value() const
-{
-   char Conv[16] =
-      { '0','1','2','3','4','5','6','7','8','9','a','b',
-      'c','d','e','f'
-   };
-   char Result[65];
-   Result[64] = 0;
-
-   // Convert each char into two letters
-   int J = 0;
-   int I = 0;
-   for (; I != 64; J++,I += 2)
-   {
-      Result[I] = Conv[Sum[J] >> 4];
-      Result[I + 1] = Conv[Sum[J] & 0xF];
-   }
-
-   return string(Result);
-}
-									/*}}}*/
-// SHA256SumValue::operator == - Comparator                            /*{{{*/
-// ---------------------------------------------------------------------
-/* Call memcmp on the buffer */
-bool SHA256SumValue::operator == (const SHA256SumValue & rhs) const
-{
-   return memcmp(Sum,rhs.Sum,sizeof(Sum)) == 0;
-}
-                                                                       /*}}}*/
-// SHA256Summation::AddFD - Add content of file into the checksum      /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool SHA256Summation::AddFD(int Fd,unsigned long Size)
-{
-   unsigned char Buf[64 * 64];
-   int Res = 0;
-   int ToEOF = (Size == 0);
-   while (Size != 0 || ToEOF)
-   {
-      unsigned n = sizeof(Buf);
-      if (!ToEOF) n = min(Size,(unsigned long)n);
-      Res = read(Fd,Buf,n);
-      if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read
-         return false;
-      if (ToEOF && Res == 0) // EOF
-         break;
-      Size -= Res;
-      Add(Buf,Res);
-   }
-   return true;
-}
-                                                                       /*}}}*/
-

+ 2 - 66
apt-pkg/contrib/sha256.h

@@ -1,72 +1,8 @@
-// -*- mode: cpp; mode: fold -*-
-// Description                                                          /*{{{*/
-// $Id: sha1.h,v 1.3 2001/05/07 05:05:47 jgg Exp $
-/* ######################################################################
-
-   SHA256SumValue - Storage for a SHA-256 hash.
-   SHA256Summation - SHA-256 Secure Hash Algorithm.
-   
-   This is a C++ interface to a set of SHA256Sum functions, that mirrors
-   the equivalent MD5 & SHA1 classes. 
-
-   ##################################################################### */
-                                                                        /*}}}*/
 #ifndef APTPKG_SHA256_H
 #ifndef APTPKG_SHA256_H
 #define APTPKG_SHA256_H
 #define APTPKG_SHA256_H
 
 
-#include <string>
-#include <cstring>
-#include <algorithm>
-#include <stdint.h>
-
-using std::string;
-using std::min;
-
-class SHA256Summation;
-
-class SHA256SumValue
-{
-   friend class SHA256Summation;
-   unsigned char Sum[32];
-   
-   public:
-
-   // Accessors
-   bool operator ==(const SHA256SumValue &rhs) const; 
-   string Value() const;
-   inline void Value(unsigned char S[32])
-         {for (int I = 0; I != sizeof(Sum); I++) S[I] = Sum[I];};
-   inline operator string() const {return Value();};
-   bool Set(string Str);
-   inline void Set(unsigned char S[32]) 
-         {for (int I = 0; I != sizeof(Sum); I++) Sum[I] = S[I];};
-
-   SHA256SumValue(string Str);
-   SHA256SumValue();
-};
-
-struct sha256_ctx {
-    uint32_t count[2];
-    uint32_t state[8];
-    uint8_t buf[128];
-};
-
-class SHA256Summation
-{
-   struct sha256_ctx Sum;
-
-   bool Done;
-
-   public:
+#include "sha2.h"
 
 
-   bool Add(const unsigned char *inbuf,unsigned long inlen);
-   inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));};
-   bool AddFD(int Fd,unsigned long Size);
-   inline bool Add(const unsigned char *Beg,const unsigned char *End) 
-                  {return Add(Beg,End-Beg);};
-   SHA256SumValue Result();
-   
-   SHA256Summation();
-};
+#warning "This header is deprecated, please include sha2.h instead"
 
 
 #endif
 #endif

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1065 - 0
apt-pkg/contrib/sha2_internal.cc


+ 188 - 0
apt-pkg/contrib/sha2_internal.h

@@ -0,0 +1,188 @@
+/*
+ * FILE:	sha2.h
+ * AUTHOR:	Aaron D. Gifford - http://www.aarongifford.com/
+ * 
+ * Copyright (c) 2000-2001, Aaron D. Gifford
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $Id: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $
+ */
+
+#ifndef __SHA2_H__
+#define __SHA2_H__
+
+/*
+ * Import u_intXX_t size_t type definitions from system headers.  You
+ * may need to change this, or define these things yourself in this
+ * file.
+ */
+#include <sys/types.h>
+
+#ifdef SHA2_USE_INTTYPES_H
+
+#include <inttypes.h>
+
+#endif /* SHA2_USE_INTTYPES_H */
+
+
+/*** SHA-256/384/512 Various Length Definitions ***********************/
+#define SHA256_BLOCK_LENGTH		64
+#define SHA256_DIGEST_LENGTH		32
+#define SHA256_DIGEST_STRING_LENGTH	(SHA256_DIGEST_LENGTH * 2 + 1)
+#define SHA384_BLOCK_LENGTH		128
+#define SHA384_DIGEST_LENGTH		48
+#define SHA384_DIGEST_STRING_LENGTH	(SHA384_DIGEST_LENGTH * 2 + 1)
+#define SHA512_BLOCK_LENGTH		128
+#define SHA512_DIGEST_LENGTH		64
+#define SHA512_DIGEST_STRING_LENGTH	(SHA512_DIGEST_LENGTH * 2 + 1)
+
+
+/*** SHA-256/384/512 Context Structures *******************************/
+/* NOTE: If your architecture does not define either u_intXX_t types or
+ * uintXX_t (from inttypes.h), you may need to define things by hand
+ * for your system:
+ */
+#if 0
+typedef unsigned char u_int8_t;		/* 1-byte  (8-bits)  */
+typedef unsigned int u_int32_t;		/* 4-bytes (32-bits) */
+typedef unsigned long long u_int64_t;	/* 8-bytes (64-bits) */
+#endif
+/*
+ * Most BSD systems already define u_intXX_t types, as does Linux.
+ * Some systems, however, like Compaq's Tru64 Unix instead can use
+ * uintXX_t types defined by very recent ANSI C standards and included
+ * in the file:
+ *
+ *   #include <inttypes.h>
+ *
+ * If you choose to use <inttypes.h> then please define: 
+ *
+ *   #define SHA2_USE_INTTYPES_H
+ *
+ * Or on the command line during compile:
+ *
+ *   cc -DSHA2_USE_INTTYPES_H ...
+ */
+#ifdef SHA2_USE_INTTYPES_H
+
+typedef struct _SHA256_CTX {
+	uint32_t	state[8];
+	uint64_t	bitcount;
+	uint8_t	buffer[SHA256_BLOCK_LENGTH];
+} SHA256_CTX;
+typedef struct _SHA512_CTX {
+	uint64_t	state[8];
+	uint64_t	bitcount[2];
+	uint8_t	buffer[SHA512_BLOCK_LENGTH];
+} SHA512_CTX;
+
+#else /* SHA2_USE_INTTYPES_H */
+
+typedef struct _SHA256_CTX {
+	u_int32_t	state[8];
+	u_int64_t	bitcount;
+	u_int8_t	buffer[SHA256_BLOCK_LENGTH];
+} SHA256_CTX;
+typedef struct _SHA512_CTX {
+	u_int64_t	state[8];
+	u_int64_t	bitcount[2];
+	u_int8_t	buffer[SHA512_BLOCK_LENGTH];
+} SHA512_CTX;
+
+#endif /* SHA2_USE_INTTYPES_H */
+
+typedef SHA512_CTX SHA384_CTX;
+
+
+/*** SHA-256/384/512 Function Prototypes ******************************/
+#ifndef NOPROTO
+#ifdef SHA2_USE_INTTYPES_H
+
+void SHA256_Init(SHA256_CTX *);
+void SHA256_Update(SHA256_CTX*, const uint8_t*, size_t);
+void SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
+char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
+char* SHA256_Data(const uint8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
+
+void SHA384_Init(SHA384_CTX*);
+void SHA384_Update(SHA384_CTX*, const uint8_t*, size_t);
+void SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*);
+char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
+char* SHA384_Data(const uint8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
+
+void SHA512_Init(SHA512_CTX*);
+void SHA512_Update(SHA512_CTX*, const uint8_t*, size_t);
+void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
+char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
+char* SHA512_Data(const uint8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
+
+#else /* SHA2_USE_INTTYPES_H */
+
+void SHA256_Init(SHA256_CTX *);
+void SHA256_Update(SHA256_CTX*, const u_int8_t*, size_t);
+void SHA256_Final(u_int8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
+char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
+char* SHA256_Data(const u_int8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
+
+void SHA384_Init(SHA384_CTX*);
+void SHA384_Update(SHA384_CTX*, const u_int8_t*, size_t);
+void SHA384_Final(u_int8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*);
+char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
+char* SHA384_Data(const u_int8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
+
+void SHA512_Init(SHA512_CTX*);
+void SHA512_Update(SHA512_CTX*, const u_int8_t*, size_t);
+void SHA512_Final(u_int8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
+char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
+char* SHA512_Data(const u_int8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
+
+#endif /* SHA2_USE_INTTYPES_H */
+
+#else /* NOPROTO */
+
+void SHA256_Init();
+void SHA256_Update();
+void SHA256_Final();
+char* SHA256_End();
+char* SHA256_Data();
+
+void SHA384_Init();
+void SHA384_Update();
+void SHA384_Final();
+char* SHA384_End();
+char* SHA384_Data();
+
+void SHA512_Init();
+void SHA512_Update();
+void SHA512_Final();
+char* SHA512_End();
+char* SHA512_Data();
+
+#endif /* NOPROTO */
+
+#endif /* __SHA2_H__ */
+

+ 19 - 1
apt-pkg/deb/debindexfile.h

@@ -22,8 +22,12 @@
 
 
 class debStatusIndex : public pkgIndexFile
 class debStatusIndex : public pkgIndexFile
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
+   protected:
    string File;
    string File;
-   
+
    public:
    public:
 
 
    virtual const Type *GetType() const;
    virtual const Type *GetType() const;
@@ -36,13 +40,18 @@ class debStatusIndex : public pkgIndexFile
    virtual bool HasPackages() const {return true;};
    virtual bool HasPackages() const {return true;};
    virtual unsigned long Size() const;
    virtual unsigned long Size() const;
    virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const;
    virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const;
+   bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog, unsigned long const Flag) const;
    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
 
 
    debStatusIndex(string File);
    debStatusIndex(string File);
+   virtual ~debStatusIndex() {};
 };
 };
     
     
 class debPackagesIndex : public pkgIndexFile
 class debPackagesIndex : public pkgIndexFile
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    string URI;
    string URI;
    string Dist;
    string Dist;
    string Section;
    string Section;
@@ -72,10 +81,14 @@ class debPackagesIndex : public pkgIndexFile
 
 
    debPackagesIndex(string const &URI, string const &Dist, string const &Section,
    debPackagesIndex(string const &URI, string const &Dist, string const &Section,
 			bool const &Trusted, string const &Arch = "native");
 			bool const &Trusted, string const &Arch = "native");
+   virtual ~debPackagesIndex() {};
 };
 };
 
 
 class debTranslationsIndex : public pkgIndexFile
 class debTranslationsIndex : public pkgIndexFile
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    string URI;
    string URI;
    string Dist;
    string Dist;
    string Section;
    string Section;
@@ -103,10 +116,14 @@ class debTranslationsIndex : public pkgIndexFile
    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
 
 
    debTranslationsIndex(string URI,string Dist,string Section, char const * const Language);
    debTranslationsIndex(string URI,string Dist,string Section, char const * const Language);
+   virtual ~debTranslationsIndex() {};
 };
 };
 
 
 class debSourcesIndex : public pkgIndexFile
 class debSourcesIndex : public pkgIndexFile
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    string URI;
    string URI;
    string Dist;
    string Dist;
    string Section;
    string Section;
@@ -136,6 +153,7 @@ class debSourcesIndex : public pkgIndexFile
    virtual unsigned long Size() const;
    virtual unsigned long Size() const;
    
    
    debSourcesIndex(string URI,string Dist,string Section,bool Trusted);
    debSourcesIndex(string URI,string Dist,string Section,bool Trusted);
+   virtual ~debSourcesIndex() {};
 };
 };
 
 
 #endif
 #endif

+ 3 - 8
apt-pkg/deb/deblistparser.cc

@@ -128,12 +128,7 @@ bool debListParser::NewVersion(pkgCache::VerIterator &Ver)
    }
    }
 
 
    if (ArchitectureAll() == true)
    if (ArchitectureAll() == true)
-      switch (Ver->MultiArch)
-      {
-	 case pkgCache::Version::Foreign: Ver->MultiArch = pkgCache::Version::AllForeign; break;
-	 case pkgCache::Version::Allowed: Ver->MultiArch = pkgCache::Version::AllAllowed; break;
-	 default: Ver->MultiArch = pkgCache::Version::All;
-      }
+      Ver->MultiArch |= pkgCache::Version::All;
 
 
    // Archive Size
    // Archive Size
    Ver->Size = Section.FindULL("Size");
    Ver->Size = Section.FindULL("Size");
@@ -690,12 +685,12 @@ bool debListParser::ParseProvides(pkgCache::VerIterator &Ver)
 
 
    if (MultiArchEnabled == false)
    if (MultiArchEnabled == false)
       return true;
       return true;
-   else if (Ver->MultiArch == pkgCache::Version::Allowed || Ver->MultiArch == pkgCache::Version::AllAllowed)
+   else if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed)
    {
    {
       string const Package = string(Ver.ParentPkg().Name()).append(":").append("any");
       string const Package = string(Ver.ParentPkg().Name()).append(":").append("any");
       return NewProvidesAllArch(Ver, Package, Ver.VerStr());
       return NewProvidesAllArch(Ver, Package, Ver.VerStr());
    }
    }
-   else if (Ver->MultiArch == pkgCache::Version::Foreign || Ver->MultiArch == pkgCache::Version::AllForeign)
+   else if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign)
       return NewProvidesAllArch(Ver, Ver.ParentPkg().Name(), Ver.VerStr());
       return NewProvidesAllArch(Ver, Ver.ParentPkg().Name(), Ver.VerStr());
 
 
    return true;
    return true;

+ 7 - 3
apt-pkg/deb/deblistparser.h

@@ -25,9 +25,12 @@ class debListParser : public pkgCacheGenerator::ListParser
       const char *Str;
       const char *Str;
       unsigned char Val;
       unsigned char Val;
    };
    };
-   
+
    private:
    private:
-   
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
+   protected:
    pkgTagFile Tags;
    pkgTagFile Tags;
    pkgTagSection Section;
    pkgTagSection Section;
    unsigned long iOffset;
    unsigned long iOffset;
@@ -36,7 +39,7 @@ class debListParser : public pkgCacheGenerator::ListParser
    bool MultiArchEnabled;
    bool MultiArchEnabled;
 
 
    unsigned long UniqFindTagWrite(const char *Tag);
    unsigned long UniqFindTagWrite(const char *Tag);
-   bool ParseStatus(pkgCache::PkgIterator &Pkg,pkgCache::VerIterator &Ver);
+   virtual bool ParseStatus(pkgCache::PkgIterator &Pkg,pkgCache::VerIterator &Ver);
    bool ParseDepends(pkgCache::VerIterator &Ver,const char *Tag,
    bool ParseDepends(pkgCache::VerIterator &Ver,const char *Tag,
 		     unsigned int Type);
 		     unsigned int Type);
    bool ParseProvides(pkgCache::VerIterator &Ver);
    bool ParseProvides(pkgCache::VerIterator &Ver);
@@ -74,6 +77,7 @@ class debListParser : public pkgCacheGenerator::ListParser
    static const char *ConvertRelation(const char *I,unsigned int &Op);
    static const char *ConvertRelation(const char *I,unsigned int &Op);
 
 
    debListParser(FileFd *File, string const &Arch = "");
    debListParser(FileFd *File, string const &Arch = "");
+   virtual ~debListParser() {};
 };
 };
 
 
 #endif
 #endif

+ 32 - 7
apt-pkg/deb/debmetaindex.cc

@@ -142,11 +142,13 @@ string debReleaseIndex::TranslationIndexURI(const char *Type, const string &Sect
       return URI + "dists/" + Dist + "/" + TranslationIndexURISuffix(Type, Section);
       return URI + "dists/" + Dist + "/" + TranslationIndexURISuffix(Type, Section);
 }
 }
 
 
-debReleaseIndex::debReleaseIndex(string const &URI, string const &Dist) {
-	this->URI = URI;
-	this->Dist = Dist;
-	this->Indexes = NULL;
-	this->Type = "deb";
+debReleaseIndex::debReleaseIndex(string const &URI, string const &Dist) :
+					metaIndex(URI, Dist, "deb"), Trusted(CHECK_TRUST)
+{}
+
+debReleaseIndex::debReleaseIndex(string const &URI, string const &Dist, bool const Trusted) :
+					metaIndex(URI, Dist, "deb") {
+	SetTrusted(Trusted);
 }
 }
 
 
 debReleaseIndex::~debReleaseIndex() {
 debReleaseIndex::~debReleaseIndex() {
@@ -252,8 +254,22 @@ bool debReleaseIndex::GetIndexes(pkgAcquire *Owner, bool const &GetAll) const
 	return true;
 	return true;
 }
 }
 
 
+void debReleaseIndex::SetTrusted(bool const Trusted)
+{
+	if (Trusted == true)
+		this->Trusted = ALWAYS_TRUSTED;
+	else
+		this->Trusted = NEVER_TRUSTED;
+}
+
 bool debReleaseIndex::IsTrusted() const
 bool debReleaseIndex::IsTrusted() const
 {
 {
+   if (Trusted == ALWAYS_TRUSTED)
+      return true;
+   else if (Trusted == NEVER_TRUSTED)
+      return false;
+
+
    if(_config->FindB("APT::Authentication::TrustCDROM", false))
    if(_config->FindB("APT::Authentication::TrustCDROM", false))
       if(URI.substr(0,strlen("cdrom:")) == "cdrom:")
       if(URI.substr(0,strlen("cdrom:")) == "cdrom:")
 	 return true;
 	 return true;
@@ -349,6 +365,7 @@ class debSLTypeDebian : public pkgSourceList::Type
       vector<string> const Archs =
       vector<string> const Archs =
 		(arch != Options.end()) ? VectorizeString(arch->second, ',') :
 		(arch != Options.end()) ? VectorizeString(arch->second, ',') :
 				APT::Configuration::getArchitectures();
 				APT::Configuration::getArchitectures();
+      map<string, string>::const_iterator const trusted = Options.find("trusted");
 
 
       for (vector<metaIndex *>::const_iterator I = List.begin();
       for (vector<metaIndex *>::const_iterator I = List.begin();
 	   I != List.end(); I++)
 	   I != List.end(); I++)
@@ -358,6 +375,9 @@ class debSLTypeDebian : public pkgSourceList::Type
 	    continue;
 	    continue;
 
 
 	 debReleaseIndex *Deb = (debReleaseIndex *) (*I);
 	 debReleaseIndex *Deb = (debReleaseIndex *) (*I);
+	 if (trusted != Options.end())
+	    Deb->SetTrusted(StringToBool(trusted->second, false));
+
 	 /* This check insures that there will be only one Release file
 	 /* This check insures that there will be only one Release file
 	    queued for all the Packages files and Sources files it
 	    queued for all the Packages files and Sources files it
 	    corresponds to. */
 	    corresponds to. */
@@ -375,9 +395,14 @@ class debSLTypeDebian : public pkgSourceList::Type
 	    return true;
 	    return true;
 	 }
 	 }
       }
       }
+
       // No currently created Release file indexes this entry, so we create a new one.
       // 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);
+      debReleaseIndex *Deb;
+      if (trusted != Options.end())
+	 Deb = new debReleaseIndex(URI, Dist, StringToBool(trusted->second, false));
+      else
+	 Deb = new debReleaseIndex(URI, Dist);
+
       if (IsSrc == true)
       if (IsSrc == true)
 	 Deb->PushSectionEntry ("source", new debReleaseIndex::debSectionEntry(Section, IsSrc));
 	 Deb->PushSectionEntry ("source", new debReleaseIndex::debSectionEntry(Section, IsSrc));
       else
       else

+ 6 - 1
apt-pkg/deb/debmetaindex.h

@@ -19,12 +19,16 @@ class debReleaseIndex : public metaIndex {
    };
    };
 
 
    private:
    private:
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
    std::map<string, vector<debSectionEntry const*> > ArchEntries;
    std::map<string, vector<debSectionEntry const*> > ArchEntries;
+   enum { ALWAYS_TRUSTED, NEVER_TRUSTED, CHECK_TRUST } Trusted;
 
 
    public:
    public:
 
 
    debReleaseIndex(string const &URI, string const &Dist);
    debReleaseIndex(string const &URI, string const &Dist);
-   ~debReleaseIndex();
+   debReleaseIndex(string const &URI, string const &Dist, bool const Trusted);
+   virtual ~debReleaseIndex();
 
 
    virtual string ArchiveURI(string const &File) const {return URI + File;};
    virtual string ArchiveURI(string const &File) const {return URI + File;};
    virtual bool GetIndexes(pkgAcquire *Owner, bool const &GetAll=false) const;
    virtual bool GetIndexes(pkgAcquire *Owner, bool const &GetAll=false) const;
@@ -41,6 +45,7 @@ class debReleaseIndex : public metaIndex {
    string TranslationIndexURISuffix(const char *Type, const string &Section) const;
    string TranslationIndexURISuffix(const char *Type, const string &Section) const;
    virtual vector <pkgIndexFile *> *GetIndexFiles();
    virtual vector <pkgIndexFile *> *GetIndexFiles();
 
 
+   void SetTrusted(bool const Trusted);
    virtual bool IsTrusted() const;
    virtual bool IsTrusted() const;
 
 
    void PushSectionEntry(vector<string> const &Archs, const debSectionEntry *Entry);
    void PushSectionEntry(vector<string> const &Archs, const debSectionEntry *Entry);

+ 18 - 1
apt-pkg/deb/debrecords.cc

@@ -77,7 +77,7 @@ string debRecordParser::SHA1Hash()
    return Section.FindS("SHA1");
    return Section.FindS("SHA1");
 }
 }
 									/*}}}*/
 									/*}}}*/
-// RecordParser::SHA1Hash - Return the archive hash			/*{{{*/
+// RecordParser::SHA256Hash - Return the archive hash			/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
 string debRecordParser::SHA256Hash()
 string debRecordParser::SHA256Hash()
@@ -85,6 +85,14 @@ string debRecordParser::SHA256Hash()
    return Section.FindS("SHA256");
    return Section.FindS("SHA256");
 }
 }
 									/*}}}*/
 									/*}}}*/
+// RecordParser::SHA512Hash - Return the archive hash			/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string debRecordParser::SHA512Hash()
+{
+   return Section.FindS("SHA512");
+}
+									/*}}}*/
 // RecordParser::Maintainer - Return the maintainer email		/*{{{*/
 // RecordParser::Maintainer - Return the maintainer email		/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
@@ -93,6 +101,15 @@ string debRecordParser::Maintainer()
    return Section.FindS("Maintainer");
    return Section.FindS("Maintainer");
 }
 }
 									/*}}}*/
 									/*}}}*/
+// RecordParser::RecordField - Return the value of an arbitrary field       /*{{*/
+// ---------------------------------------------------------------------
+/* */
+string debRecordParser::RecordField(const char *fieldName)
+{
+   return Section.FindS(fieldName);
+}
+
+                                                                        /*}}}*/
 // RecordParser::ShortDesc - Return a 1 line description		/*{{{*/
 // RecordParser::ShortDesc - Return a 1 line description		/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */

+ 8 - 0
apt-pkg/deb/debrecords.h

@@ -20,6 +20,9 @@
 
 
 class debRecordParser : public pkgRecords::Parser
 class debRecordParser : public pkgRecords::Parser
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    FileFd File;
    FileFd File;
    pkgTagFile Tags;
    pkgTagFile Tags;
    pkgTagSection Section;
    pkgTagSection Section;
@@ -36,6 +39,7 @@ class debRecordParser : public pkgRecords::Parser
    virtual string MD5Hash();
    virtual string MD5Hash();
    virtual string SHA1Hash();
    virtual string SHA1Hash();
    virtual string SHA256Hash();
    virtual string SHA256Hash();
+   virtual string SHA512Hash();
    virtual string SourcePkg();
    virtual string SourcePkg();
    virtual string SourceVer();
    virtual string SourceVer();
    
    
@@ -46,9 +50,13 @@ class debRecordParser : public pkgRecords::Parser
    virtual string Name();
    virtual string Name();
    virtual string Homepage();
    virtual string Homepage();
 
 
+   // An arbitrary custom field
+   virtual string RecordField(const char *fieldName);
+
    virtual void GetRec(const char *&Start,const char *&Stop);
    virtual void GetRec(const char *&Start,const char *&Stop);
    
    
    debRecordParser(string FileName,pkgCache &Cache);
    debRecordParser(string FileName,pkgCache &Cache);
+   virtual ~debRecordParser() {};
 };
 };
 
 
 #endif
 #endif

+ 4 - 1
apt-pkg/deb/debsrcrecords.h

@@ -18,6 +18,9 @@
 
 
 class debSrcRecordParser : public pkgSrcRecords::Parser
 class debSrcRecordParser : public pkgSrcRecords::Parser
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    FileFd Fd;
    FileFd Fd;
    pkgTagFile Tags;
    pkgTagFile Tags;
    pkgTagSection Sect;
    pkgTagSection Sect;
@@ -50,7 +53,7 @@ class debSrcRecordParser : public pkgSrcRecords::Parser
    debSrcRecordParser(string const &File,pkgIndexFile const *Index) 
    debSrcRecordParser(string const &File,pkgIndexFile const *Index) 
       : Parser(Index), Fd(File,FileFd::ReadOnlyGzip), Tags(&Fd,102400), 
       : Parser(Index), Fd(File,FileFd::ReadOnlyGzip), Tags(&Fd,102400), 
         Buffer(0), BufSize(0) {}
         Buffer(0), BufSize(0) {}
-   ~debSrcRecordParser();
+   virtual ~debSrcRecordParser();
 };
 };
 
 
 #endif
 #endif

+ 36 - 26
apt-pkg/deb/debsystem.cc

@@ -26,15 +26,24 @@
 
 
 debSystem debSys;
 debSystem debSys;
 
 
+class debSystemPrivate {
+public:
+   debSystemPrivate() : LockFD(-1), LockCount(0), StatusFile(0)
+   {
+   }
+   // For locking support
+   int LockFD;
+   unsigned LockCount;
+   
+   debStatusIndex *StatusFile;
+};
+
 // System::debSystem - Constructor					/*{{{*/
 // System::debSystem - Constructor					/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
 debSystem::debSystem()
 debSystem::debSystem()
 {
 {
-   LockFD = -1;
-   LockCount = 0;
-   StatusFile = 0;
-   
+   d = new debSystemPrivate();
    Label = "Debian dpkg interface";
    Label = "Debian dpkg interface";
    VS = &debVS;
    VS = &debVS;
 }
 }
@@ -44,7 +53,8 @@ debSystem::debSystem()
 /* */
 /* */
 debSystem::~debSystem()
 debSystem::~debSystem()
 {
 {
-   delete StatusFile;
+   delete d->StatusFile;
+   delete d;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // System::Lock - Get the lock						/*{{{*/
 // System::Lock - Get the lock						/*{{{*/
@@ -54,16 +64,16 @@ debSystem::~debSystem()
 bool debSystem::Lock()
 bool debSystem::Lock()
 {
 {
    // Disable file locking
    // Disable file locking
-   if (_config->FindB("Debug::NoLocking",false) == true || LockCount > 1)
+   if (_config->FindB("Debug::NoLocking",false) == true || d->LockCount > 1)
    {
    {
-      LockCount++;
+      d->LockCount++;
       return true;
       return true;
    }
    }
 
 
    // Create the lockfile
    // Create the lockfile
    string AdminDir = flNotFile(_config->Find("Dir::State::status"));
    string AdminDir = flNotFile(_config->Find("Dir::State::status"));
-   LockFD = GetLock(AdminDir + "lock");
-   if (LockFD == -1)
+   d->LockFD = GetLock(AdminDir + "lock");
+   if (d->LockFD == -1)
    {
    {
       if (errno == EACCES || errno == EAGAIN)
       if (errno == EACCES || errno == EAGAIN)
 	 return _error->Error(_("Unable to lock the administration directory (%s), "
 	 return _error->Error(_("Unable to lock the administration directory (%s), "
@@ -76,8 +86,8 @@ bool debSystem::Lock()
    // See if we need to abort with a dirty journal
    // See if we need to abort with a dirty journal
    if (CheckUpdates() == true)
    if (CheckUpdates() == true)
    {
    {
-      close(LockFD);
-      LockFD = -1;
+      close(d->LockFD);
+      d->LockFD = -1;
       const char *cmd;
       const char *cmd;
       if (getenv("SUDO_USER") != NULL)
       if (getenv("SUDO_USER") != NULL)
 	 cmd = "sudo dpkg --configure -a";
 	 cmd = "sudo dpkg --configure -a";
@@ -89,7 +99,7 @@ bool debSystem::Lock()
                              "run '%s' to correct the problem. "), cmd);
                              "run '%s' to correct the problem. "), cmd);
    }
    }
 
 
-	 LockCount++;
+	 d->LockCount++;
       
       
    return true;
    return true;
 }
 }
@@ -99,15 +109,15 @@ bool debSystem::Lock()
 /* */
 /* */
 bool debSystem::UnLock(bool NoErrors)
 bool debSystem::UnLock(bool NoErrors)
 {
 {
-   if (LockCount == 0 && NoErrors == true)
+   if (d->LockCount == 0 && NoErrors == true)
       return false;
       return false;
    
    
-   if (LockCount < 1)
+   if (d->LockCount < 1)
       return _error->Error(_("Not locked"));
       return _error->Error(_("Not locked"));
-   if (--LockCount == 0)
+   if (--d->LockCount == 0)
    {
    {
-      close(LockFD);
-      LockCount = 0;
+      close(d->LockFD);
+      d->LockCount = 0;
    }
    }
    
    
    return true;
    return true;
@@ -168,9 +178,9 @@ bool debSystem::Initialize(Configuration &Cnf)
    Cnf.CndSet("Dir::State::status","/var/lib/dpkg/status");
    Cnf.CndSet("Dir::State::status","/var/lib/dpkg/status");
    Cnf.CndSet("Dir::Bin::dpkg","/usr/bin/dpkg");
    Cnf.CndSet("Dir::Bin::dpkg","/usr/bin/dpkg");
 
 
-   if (StatusFile) {
-     delete StatusFile;
-     StatusFile = 0;
+   if (d->StatusFile) {
+     delete d->StatusFile;
+     d->StatusFile = 0;
    }
    }
 
 
    return true;
    return true;
@@ -208,9 +218,9 @@ signed debSystem::Score(Configuration const &Cnf)
 /* */
 /* */
 bool debSystem::AddStatusFiles(vector<pkgIndexFile *> &List)
 bool debSystem::AddStatusFiles(vector<pkgIndexFile *> &List)
 {
 {
-   if (StatusFile == 0)
-      StatusFile = new debStatusIndex(_config->FindFile("Dir::State::status"));
-   List.push_back(StatusFile);
+   if (d->StatusFile == 0)
+      d->StatusFile = new debStatusIndex(_config->FindFile("Dir::State::status"));
+   List.push_back(d->StatusFile);
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -220,11 +230,11 @@ bool debSystem::AddStatusFiles(vector<pkgIndexFile *> &List)
 bool debSystem::FindIndex(pkgCache::PkgFileIterator File,
 bool debSystem::FindIndex(pkgCache::PkgFileIterator File,
 			  pkgIndexFile *&Found) const
 			  pkgIndexFile *&Found) const
 {
 {
-   if (StatusFile == 0)
+   if (d->StatusFile == 0)
       return false;
       return false;
-   if (StatusFile->FindInCache(*File.Cache()) == File)
+   if (d->StatusFile->FindInCache(*File.Cache()) == File)
    {
    {
-      Found = StatusFile;
+      Found = d->StatusFile;
       return true;
       return true;
    }
    }
    
    

+ 6 - 7
apt-pkg/deb/debsystem.h

@@ -12,16 +12,15 @@
 
 
 #include <apt-pkg/pkgsystem.h>
 #include <apt-pkg/pkgsystem.h>
 
 
+class debSystemPrivate;
+
 class debStatusIndex;
 class debStatusIndex;
 class debSystem : public pkgSystem
 class debSystem : public pkgSystem
 {
 {
-   // For locking support
-   int LockFD;
-   unsigned LockCount;
+   // private d-pointer
+   debSystemPrivate *d;
    bool CheckUpdates();
    bool CheckUpdates();
-   
-   debStatusIndex *StatusFile;
-   
+
    public:
    public:
 
 
    virtual bool Lock();
    virtual bool Lock();
@@ -35,7 +34,7 @@ class debSystem : public pkgSystem
 			  pkgIndexFile *&Found) const;
 			  pkgIndexFile *&Found) const;
 
 
    debSystem();
    debSystem();
-   ~debSystem();
+   virtual ~debSystem();
 };
 };
 
 
 extern debSystem debSys;
 extern debSystem debSys;

+ 62 - 46
apt-pkg/deb/dpkgpm.cc

@@ -46,6 +46,21 @@
 
 
 using namespace std;
 using namespace std;
 
 
+class pkgDPkgPMPrivate 
+{
+public:
+   pkgDPkgPMPrivate() : dpkgbuf_pos(0), term_out(NULL), history_out(NULL)
+   {
+   }
+   bool stdin_is_dev_null;
+   // the buffer we use for the dpkg status-fd reading
+   char dpkgbuf[1024];
+   int dpkgbuf_pos;
+   FILE *term_out;
+   FILE *history_out;
+   string dpkg_error;
+};
+
 namespace
 namespace
 {
 {
   // Maps the dpkg "processing" info to human readable names.  Entry 0
   // Maps the dpkg "processing" info to human readable names.  Entry 0
@@ -110,9 +125,9 @@ ionice(int PID)
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
 pkgDPkgPM::pkgDPkgPM(pkgDepCache *Cache) 
 pkgDPkgPM::pkgDPkgPM(pkgDepCache *Cache) 
-   : pkgPackageManager(Cache), dpkgbuf_pos(0),
-     term_out(NULL), history_out(NULL), PackagesDone(0), PackagesTotal(0)
+   : pkgPackageManager(Cache), PackagesDone(0), PackagesTotal(0)
 {
 {
+   d = new pkgDPkgPMPrivate();
 }
 }
 									/*}}}*/
 									/*}}}*/
 // DPkgPM::pkgDPkgPM - Destructor					/*{{{*/
 // DPkgPM::pkgDPkgPM - Destructor					/*{{{*/
@@ -120,6 +135,7 @@ pkgDPkgPM::pkgDPkgPM(pkgDepCache *Cache)
 /* */
 /* */
 pkgDPkgPM::~pkgDPkgPM()
 pkgDPkgPM::~pkgDPkgPM()
 {
 {
+   delete d;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // DPkgPM::Install - Install a package					/*{{{*/
 // DPkgPM::Install - Install a package					/*{{{*/
@@ -376,7 +392,7 @@ void pkgDPkgPM::DoStdin(int master)
    if (len)
    if (len)
       write(master, input_buf, len);
       write(master, input_buf, len);
    else
    else
-      stdin_is_dev_null = true;
+      d->stdin_is_dev_null = true;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // DPkgPM::DoTerminalPty - Read the terminal pty and write log		/*{{{*/
 // DPkgPM::DoTerminalPty - Read the terminal pty and write log		/*{{{*/
@@ -401,8 +417,8 @@ void pkgDPkgPM::DoTerminalPty(int master)
    if(len <= 0) 
    if(len <= 0) 
       return;
       return;
    write(1, term_buf, len);
    write(1, term_buf, len);
-   if(term_out)
-      fwrite(term_buf, len, sizeof(char), term_out);
+   if(d->term_out)
+      fwrite(term_buf, len, sizeof(char), d->term_out);
 }
 }
 									/*}}}*/
 									/*}}}*/
 // DPkgPM::ProcessDpkgStatusBuf                                        	/*{{{*/
 // DPkgPM::ProcessDpkgStatusBuf                                        	/*{{{*/
@@ -606,14 +622,14 @@ void pkgDPkgPM::DoDpkgStatusFd(int statusfd, int OutStatusFd)
    char *p, *q;
    char *p, *q;
    int len;
    int len;
 
 
-   len=read(statusfd, &dpkgbuf[dpkgbuf_pos], sizeof(dpkgbuf)-dpkgbuf_pos);
-   dpkgbuf_pos += len;
+   len=read(statusfd, &d->dpkgbuf[d->dpkgbuf_pos], sizeof(d->dpkgbuf)-d->dpkgbuf_pos);
+   d->dpkgbuf_pos += len;
    if(len <= 0)
    if(len <= 0)
       return;
       return;
 
 
    // process line by line if we have a buffer
    // process line by line if we have a buffer
-   p = q = dpkgbuf;
-   while((q=(char*)memchr(p, '\n', dpkgbuf+dpkgbuf_pos-p)) != NULL)
+   p = q = d->dpkgbuf;
+   while((q=(char*)memchr(p, '\n', d->dpkgbuf+d->dpkgbuf_pos-p)) != NULL)
    {
    {
       *q = 0;
       *q = 0;
       ProcessDpkgStatusLine(OutStatusFd, p);
       ProcessDpkgStatusLine(OutStatusFd, p);
@@ -621,8 +637,8 @@ void pkgDPkgPM::DoDpkgStatusFd(int statusfd, int OutStatusFd)
    }
    }
 
 
    // now move the unprocessed bits (after the final \n that is now a 0x0) 
    // now move the unprocessed bits (after the final \n that is now a 0x0) 
-   // to the start and update dpkgbuf_pos
-   p = (char*)memrchr(dpkgbuf, 0, dpkgbuf_pos);
+   // to the start and update d->dpkgbuf_pos
+   p = (char*)memrchr(d->dpkgbuf, 0, d->dpkgbuf_pos);
    if(p == NULL)
    if(p == NULL)
       return;
       return;
 
 
@@ -630,8 +646,8 @@ void pkgDPkgPM::DoDpkgStatusFd(int statusfd, int OutStatusFd)
    p++;
    p++;
 
 
    // move the unprocessed tail to the start and update pos
    // move the unprocessed tail to the start and update pos
-   memmove(dpkgbuf, p, p-dpkgbuf);
-   dpkgbuf_pos = dpkgbuf+dpkgbuf_pos-p;
+   memmove(d->dpkgbuf, p, p-d->dpkgbuf);
+   d->dpkgbuf_pos = d->dpkgbuf+d->dpkgbuf_pos-p;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // DPkgPM::WriteHistoryTag						/*{{{*/
 // DPkgPM::WriteHistoryTag						/*{{{*/
@@ -643,7 +659,7 @@ void pkgDPkgPM::WriteHistoryTag(string const &tag, string value)
    // poor mans rstrip(", ")
    // poor mans rstrip(", ")
    if (value[length-2] == ',' && value[length-1] == ' ')
    if (value[length-2] == ',' && value[length-1] == ' ')
       value.erase(length - 2, 2);
       value.erase(length - 2, 2);
-   fprintf(history_out, "%s: %s\n", tag.c_str(), value.c_str());
+   fprintf(d->history_out, "%s: %s\n", tag.c_str(), value.c_str());
 }									/*}}}*/
 }									/*}}}*/
 // DPkgPM::OpenLog							/*{{{*/
 // DPkgPM::OpenLog							/*{{{*/
 bool pkgDPkgPM::OpenLog()
 bool pkgDPkgPM::OpenLog()
@@ -664,11 +680,11 @@ bool pkgDPkgPM::OpenLog()
 				   _config->Find("Dir::Log::Terminal"));
 				   _config->Find("Dir::Log::Terminal"));
    if (!logfile_name.empty())
    if (!logfile_name.empty())
    {
    {
-      term_out = fopen(logfile_name.c_str(),"a");
-      if (term_out == NULL)
+      d->term_out = fopen(logfile_name.c_str(),"a");
+      if (d->term_out == NULL)
 	 return _error->WarningE("OpenLog", _("Could not open file '%s'"), logfile_name.c_str());
 	 return _error->WarningE("OpenLog", _("Could not open file '%s'"), logfile_name.c_str());
-      setvbuf(term_out, NULL, _IONBF, 0);
-      SetCloseExec(fileno(term_out), true);
+      setvbuf(d->term_out, NULL, _IONBF, 0);
+      SetCloseExec(fileno(d->term_out), true);
       struct passwd *pw;
       struct passwd *pw;
       struct group *gr;
       struct group *gr;
       pw = getpwnam("root");
       pw = getpwnam("root");
@@ -676,7 +692,7 @@ bool pkgDPkgPM::OpenLog()
       if (pw != NULL && gr != NULL)
       if (pw != NULL && gr != NULL)
 	  chown(logfile_name.c_str(), pw->pw_uid, gr->gr_gid);
 	  chown(logfile_name.c_str(), pw->pw_uid, gr->gr_gid);
       chmod(logfile_name.c_str(), 0644);
       chmod(logfile_name.c_str(), 0644);
-      fprintf(term_out, "\nLog started: %s\n", timestr);
+      fprintf(d->term_out, "\nLog started: %s\n", timestr);
    }
    }
 
 
    // write your history
    // write your history
@@ -684,11 +700,11 @@ bool pkgDPkgPM::OpenLog()
 				   _config->Find("Dir::Log::History"));
 				   _config->Find("Dir::Log::History"));
    if (!history_name.empty())
    if (!history_name.empty())
    {
    {
-      history_out = fopen(history_name.c_str(),"a");
-      if (history_out == NULL)
+      d->history_out = fopen(history_name.c_str(),"a");
+      if (d->history_out == NULL)
 	 return _error->WarningE("OpenLog", _("Could not open file '%s'"), history_name.c_str());
 	 return _error->WarningE("OpenLog", _("Could not open file '%s'"), history_name.c_str());
       chmod(history_name.c_str(), 0644);
       chmod(history_name.c_str(), 0644);
-      fprintf(history_out, "\nStart-Date: %s\n", timestr);
+      fprintf(d->history_out, "\nStart-Date: %s\n", timestr);
       string remove, purge, install, reinstall, upgrade, downgrade;
       string remove, purge, install, reinstall, upgrade, downgrade;
       for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
       for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
       {
       {
@@ -729,7 +745,7 @@ bool pkgDPkgPM::OpenLog()
       WriteHistoryTag("Downgrade",downgrade);
       WriteHistoryTag("Downgrade",downgrade);
       WriteHistoryTag("Remove",remove);
       WriteHistoryTag("Remove",remove);
       WriteHistoryTag("Purge",purge);
       WriteHistoryTag("Purge",purge);
-      fflush(history_out);
+      fflush(d->history_out);
    }
    }
    
    
    return true;
    return true;
@@ -743,16 +759,16 @@ bool pkgDPkgPM::CloseLog()
    struct tm *tmp = localtime(&t);
    struct tm *tmp = localtime(&t);
    strftime(timestr, sizeof(timestr), "%F  %T", tmp);
    strftime(timestr, sizeof(timestr), "%F  %T", tmp);
 
 
-   if(term_out)
+   if(d->term_out)
    {
    {
-      fprintf(term_out, "Log ended: ");
-      fprintf(term_out, "%s", timestr);
-      fprintf(term_out, "\n");
-      fclose(term_out);
+      fprintf(d->term_out, "Log ended: ");
+      fprintf(d->term_out, "%s", timestr);
+      fprintf(d->term_out, "\n");
+      fclose(d->term_out);
    }
    }
-   term_out = NULL;
+   d->term_out = NULL;
 
 
-   if(history_out)
+   if(d->history_out)
    {
    {
       if (disappearedPkgs.empty() == false)
       if (disappearedPkgs.empty() == false)
       {
       {
@@ -769,12 +785,12 @@ bool pkgDPkgPM::CloseLog()
 	 }
 	 }
 	 WriteHistoryTag("Disappeared", disappear);
 	 WriteHistoryTag("Disappeared", disappear);
       }
       }
-      if (dpkg_error.empty() == false)
-	 fprintf(history_out, "Error: %s\n", dpkg_error.c_str());
-      fprintf(history_out, "End-Date: %s\n", timestr);
-      fclose(history_out);
+      if (d->dpkg_error.empty() == false)
+	 fprintf(d->history_out, "Error: %s\n", d->dpkg_error.c_str());
+      fprintf(d->history_out, "End-Date: %s\n", timestr);
+      fclose(d->history_out);
    }
    }
-   history_out = NULL;
+   d->history_out = NULL;
 
 
    return true;
    return true;
 }
 }
@@ -882,7 +898,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
       }
       }
    }
    }
 
 
-   stdin_is_dev_null = false;
+   d->stdin_is_dev_null = false;
 
 
    // create log
    // create log
    OpenLog();
    OpenLog();
@@ -1082,8 +1098,8 @@ bool pkgDPkgPM::Go(int OutStatusFd)
 	    const char *s = _("Can not write log, openpty() "
 	    const char *s = _("Can not write log, openpty() "
 	                      "failed (/dev/pts not mounted?)\n");
 	                      "failed (/dev/pts not mounted?)\n");
 	    fprintf(stderr, "%s",s);
 	    fprintf(stderr, "%s",s);
-            if(term_out)
-              fprintf(term_out, "%s",s);
+            if(d->term_out)
+              fprintf(d->term_out, "%s",s);
 	    master = slave = -1;
 	    master = slave = -1;
 	 }  else {
 	 }  else {
 	    struct termios rtt;
 	    struct termios rtt;
@@ -1213,7 +1229,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
 
 
 	 // wait for input or output here
 	 // wait for input or output here
 	 FD_ZERO(&rfds);
 	 FD_ZERO(&rfds);
-	 if (master >= 0 && !stdin_is_dev_null)
+	 if (master >= 0 && !d->stdin_is_dev_null)
 	    FD_SET(0, &rfds); 
 	    FD_SET(0, &rfds); 
 	 FD_SET(_dpkgin, &rfds);
 	 FD_SET(_dpkgin, &rfds);
 	 if(master >= 0)
 	 if(master >= 0)
@@ -1267,14 +1283,14 @@ bool pkgDPkgPM::Go(int OutStatusFd)
 	    RunScripts("DPkg::Post-Invoke");
 	    RunScripts("DPkg::Post-Invoke");
 
 
 	 if (WIFSIGNALED(Status) != 0 && WTERMSIG(Status) == SIGSEGV) 
 	 if (WIFSIGNALED(Status) != 0 && WTERMSIG(Status) == SIGSEGV) 
-	    strprintf(dpkg_error, "Sub-process %s received a segmentation fault.",Args[0]);
+	    strprintf(d->dpkg_error, "Sub-process %s received a segmentation fault.",Args[0]);
 	 else if (WIFEXITED(Status) != 0)
 	 else if (WIFEXITED(Status) != 0)
-	    strprintf(dpkg_error, "Sub-process %s returned an error code (%u)",Args[0],WEXITSTATUS(Status));
+	    strprintf(d->dpkg_error, "Sub-process %s returned an error code (%u)",Args[0],WEXITSTATUS(Status));
 	 else 
 	 else 
-	    strprintf(dpkg_error, "Sub-process %s exited unexpectedly",Args[0]);
+	    strprintf(d->dpkg_error, "Sub-process %s exited unexpectedly",Args[0]);
 
 
-	 if(dpkg_error.size() > 0)
-	    _error->Error("%s", dpkg_error.c_str());
+	 if(d->dpkg_error.size() > 0)
+	    _error->Error("%s", d->dpkg_error.c_str());
 
 
 	 if(stopOnError) 
 	 if(stopOnError) 
 	 {
 	 {
@@ -1438,8 +1454,8 @@ void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg)
    fprintf(report, "ErrorMessage:\n %s\n", errormsg);
    fprintf(report, "ErrorMessage:\n %s\n", errormsg);
 
 
    // ensure that the log is flushed
    // ensure that the log is flushed
-   if(term_out)
-      fflush(term_out);
+   if(d->term_out)
+      fflush(d->term_out);
 
 
    // attach terminal log it if we have it
    // attach terminal log it if we have it
    string logfile_name = _config->FindFile("Dir::Log::Terminal");
    string logfile_name = _config->FindFile("Dir::Log::Terminal");

+ 2 - 9
apt-pkg/deb/dpkgpm.h

@@ -18,19 +18,12 @@
 using std::vector;
 using std::vector;
 using std::map;
 using std::map;
 
 
+class pkgDPkgPMPrivate;
 
 
 class pkgDPkgPM : public pkgPackageManager
 class pkgDPkgPM : public pkgPackageManager
 {
 {
    private:
    private:
-
-   bool stdin_is_dev_null;
-
-   // the buffer we use for the dpkg status-fd reading
-   char dpkgbuf[1024];
-   int dpkgbuf_pos;
-   FILE *term_out;
-   FILE *history_out;
-   string dpkg_error;
+   pkgDPkgPMPrivate *d;
 
 
    /** \brief record the disappear action and handle accordingly
    /** \brief record the disappear action and handle accordingly
 
 

+ 42 - 80
apt-pkg/depcache.cc

@@ -406,60 +406,8 @@ bool pkgDepCache::CheckDep(DepIterator Dep,int Type,PkgIterator &Res)
 									/*}}}*/
 									/*}}}*/
 // DepCache::AddSizes - Add the packages sizes to the counters		/*{{{*/
 // DepCache::AddSizes - Add the packages sizes to the counters		/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
-/* Call with Mult = -1 to preform the inverse opration
-   The Mult increases the complexity of the calulations here and is unused -
-   or do we really have a usecase for removing the size of a package two
-   times? So let us replace it with a simple bool and be done with it… */
-__deprecated void pkgDepCache::AddSizes(const PkgIterator &Pkg,signed long Mult)
-{
-   StateCache &P = PkgState[Pkg->ID];
-   
-   if (Pkg->VersionList == 0)
-      return;
-   
-   if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure && 
-       P.Keep() == true)
-      return;
-   
-   // Compute the size data
-   if (P.NewInstall() == true)
-   {
-      iUsrSize += (signed long long)(Mult*P.InstVerIter(*this)->InstalledSize);
-      iDownloadSize += (signed long long)(Mult*P.InstVerIter(*this)->Size);
-      return;
-   }
-   
-   // Upgrading
-   if (Pkg->CurrentVer != 0 && 
-       (P.InstallVer != (Version *)Pkg.CurrentVer() || 
-	(P.iFlags & ReInstall) == ReInstall) && P.InstallVer != 0)
-   {
-      iUsrSize += (signed long long)(Mult*((signed long long)P.InstVerIter(*this)->InstalledSize - 
-			(signed long long)Pkg.CurrentVer()->InstalledSize));
-      iDownloadSize += (signed long long)(Mult*P.InstVerIter(*this)->Size);
-      return;
-   }
-   
-   // Reinstall
-   if (Pkg.State() == pkgCache::PkgIterator::NeedsUnpack &&
-       P.Delete() == false)
-   {
-      iDownloadSize += (signed long long)(Mult*P.InstVerIter(*this)->Size);
-      return;
-   }
-   
-   // Removing
-   if (Pkg->CurrentVer != 0 && P.InstallVer == 0)
-   {
-      iUsrSize -= (signed long long)(Mult*Pkg.CurrentVer()->InstalledSize);
-      return;
-   }   
-}
-									/*}}}*/
-// DepCache::AddSizes - Add the packages sizes to the counters		/*{{{*/
-// ---------------------------------------------------------------------
 /* Call with Inverse = true to preform the inverse opration */
 /* Call with Inverse = true to preform the inverse opration */
-void pkgDepCache::AddSizes(const PkgIterator &Pkg, bool const &Inverse)
+void pkgDepCache::AddSizes(const PkgIterator &Pkg, bool const Inverse)
 {
 {
    StateCache &P = PkgState[Pkg->ID];
    StateCache &P = PkgState[Pkg->ID];
    
    
@@ -530,8 +478,9 @@ void pkgDepCache::AddSizes(const PkgIterator &Pkg, bool const &Inverse)
    calld Remove/Add itself. Remember, dependencies can be circular so
    calld Remove/Add itself. Remember, dependencies can be circular so
    while processing a dep for Pkg it is possible that Add/Remove
    while processing a dep for Pkg it is possible that Add/Remove
    will be called on Pkg */
    will be called on Pkg */
-void pkgDepCache::AddStates(const PkgIterator &Pkg,int Add)
+void pkgDepCache::AddStates(const PkgIterator &Pkg, bool const Invert)
 {
 {
+   signed char const Add = (Invert == false) ? 1 : -1;
    StateCache &State = PkgState[Pkg->ID];
    StateCache &State = PkgState[Pkg->ID];
    
    
    // The Package is broken (either minimal dep or policy dep)
    // The Package is broken (either minimal dep or policy dep)
@@ -806,17 +755,17 @@ void pkgDepCache::Update(PkgIterator const &Pkg)
 // DepCache::MarkKeep - Put the package in the keep state		/*{{{*/
 // DepCache::MarkKeep - Put the package in the keep state		/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
-void pkgDepCache::MarkKeep(PkgIterator const &Pkg, bool Soft, bool FromUser,
+bool pkgDepCache::MarkKeep(PkgIterator const &Pkg, bool Soft, bool FromUser,
                            unsigned long Depth)
                            unsigned long Depth)
 {
 {
    if (IsModeChangeOk(ModeKeep, Pkg, Depth, FromUser) == false)
    if (IsModeChangeOk(ModeKeep, Pkg, Depth, FromUser) == false)
-      return;
+      return false;
 
 
    /* Reject an attempt to keep a non-source broken installed package, those
    /* Reject an attempt to keep a non-source broken installed package, those
       must be upgraded */
       must be upgraded */
    if (Pkg.State() == PkgIterator::NeedsUnpack && 
    if (Pkg.State() == PkgIterator::NeedsUnpack && 
        Pkg.CurrentVer().Downloadable() == false)
        Pkg.CurrentVer().Downloadable() == false)
-      return;
+      return false;
 
 
    /* We changed the soft state all the time so the UI is a bit nicer
    /* We changed the soft state all the time so the UI is a bit nicer
       to use */
       to use */
@@ -824,7 +773,7 @@ void pkgDepCache::MarkKeep(PkgIterator const &Pkg, bool Soft, bool FromUser,
 
 
    // Check that it is not already kept
    // Check that it is not already kept
    if (P.Mode == ModeKeep)
    if (P.Mode == ModeKeep)
-      return;
+      return true;
 
 
    if (Soft == true)
    if (Soft == true)
       P.iFlags |= AutoKept;
       P.iFlags |= AutoKept;
@@ -857,31 +806,31 @@ void pkgDepCache::MarkKeep(PkgIterator const &Pkg, bool Soft, bool FromUser,
       P.InstallVer = Pkg.CurrentVer();
       P.InstallVer = Pkg.CurrentVer();
 
 
    AddStates(Pkg);
    AddStates(Pkg);
-
    Update(Pkg);
    Update(Pkg);
-
    AddSizes(Pkg);
    AddSizes(Pkg);
+
+   return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // DepCache::MarkDelete - Put the package in the delete state		/*{{{*/
 // DepCache::MarkDelete - Put the package in the delete state		/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
-void pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge,
+bool pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge,
                              unsigned long Depth, bool FromUser)
                              unsigned long Depth, bool FromUser)
 {
 {
    if (IsModeChangeOk(ModeDelete, Pkg, Depth, FromUser) == false)
    if (IsModeChangeOk(ModeDelete, Pkg, Depth, FromUser) == false)
-      return;
+      return false;
 
 
    StateCache &P = PkgState[Pkg->ID];
    StateCache &P = PkgState[Pkg->ID];
 
 
    // Check that it is not already marked for delete
    // Check that it is not already marked for delete
    if ((P.Mode == ModeDelete || P.InstallVer == 0) && 
    if ((P.Mode == ModeDelete || P.InstallVer == 0) && 
        (Pkg.Purge() == true || rPurge == false))
        (Pkg.Purge() == true || rPurge == false))
-      return;
+      return true;
 
 
    // check if we are allowed to remove the package
    // check if we are allowed to remove the package
    if (IsDeleteOk(Pkg,rPurge,Depth,FromUser) == false)
    if (IsDeleteOk(Pkg,rPurge,Depth,FromUser) == false)
-      return;
+      return false;
 
 
    P.iFlags &= ~(AutoKept | Purge);
    P.iFlags &= ~(AutoKept | Purge);
    if (rPurge == true)
    if (rPurge == true)
@@ -905,6 +854,7 @@ void pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge,
    Update(Pkg);
    Update(Pkg);
    AddSizes(Pkg);
    AddSizes(Pkg);
 
 
+   return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // DepCache::IsDeleteOk - check if it is ok to remove this package	/*{{{*/
 // DepCache::IsDeleteOk - check if it is ok to remove this package	/*{{{*/
@@ -985,18 +935,18 @@ bool pkgDepCache::IsModeChangeOk(ModeList const mode, PkgIterator const &Pkg,
 // DepCache::MarkInstall - Put the package in the install state		/*{{{*/
 // DepCache::MarkInstall - Put the package in the install state		/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
-void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
+bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
 			      unsigned long Depth, bool FromUser,
 			      unsigned long Depth, bool FromUser,
 			      bool ForceImportantDeps)
 			      bool ForceImportantDeps)
 {
 {
    if (IsModeChangeOk(ModeInstall, Pkg, Depth, FromUser) == false)
    if (IsModeChangeOk(ModeInstall, Pkg, Depth, FromUser) == false)
-      return;
+      return false;
 
 
    StateCache &P = PkgState[Pkg->ID];
    StateCache &P = PkgState[Pkg->ID];
 
 
    // See if there is even any possible instalation candidate
    // See if there is even any possible instalation candidate
    if (P.CandidateVer == 0)
    if (P.CandidateVer == 0)
-      return;
+      return false;
 
 
    /* Check that it is not already marked for install and that it can be 
    /* Check that it is not already marked for install and that it can be 
       installed */
       installed */
@@ -1005,13 +955,13 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
 	P.CandidateVer == (Version *)Pkg.CurrentVer()))
 	P.CandidateVer == (Version *)Pkg.CurrentVer()))
    {
    {
       if (P.CandidateVer == (Version *)Pkg.CurrentVer() && P.InstallVer == 0)
       if (P.CandidateVer == (Version *)Pkg.CurrentVer() && P.InstallVer == 0)
-	 MarkKeep(Pkg, false, FromUser, Depth+1);
-      return;
+	 return MarkKeep(Pkg, false, FromUser, Depth+1);
+      return true;
    }
    }
 
 
    // check if we are allowed to install the package
    // check if we are allowed to install the package
    if (IsInstallOk(Pkg,AutoInst,Depth,FromUser) == false)
    if (IsInstallOk(Pkg,AutoInst,Depth,FromUser) == false)
-      return;
+      return false;
 
 
    ActionGroup group(*this);
    ActionGroup group(*this);
    P.iFlags &= ~AutoKept;
    P.iFlags &= ~AutoKept;
@@ -1046,8 +996,8 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
    Update(Pkg);
    Update(Pkg);
    AddSizes(Pkg);
    AddSizes(Pkg);
 
 
-   if (AutoInst == false)
-      return;
+   if (AutoInst == false || _config->Find("APT::Solver", "internal") != "internal")
+      return true;
 
 
    if (DebugMarker == true)
    if (DebugMarker == true)
       std::clog << OutputInDepth(Depth) << "MarkInstall " << Pkg << " FU=" << FromUser << std::endl;
       std::clog << OutputInDepth(Depth) << "MarkInstall " << Pkg << " FU=" << FromUser << std::endl;
@@ -1091,7 +1041,7 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
 	    continue;
 	    continue;
 	 // if the dependency was critical, we can't install it, so remove it again
 	 // if the dependency was critical, we can't install it, so remove it again
 	 MarkDelete(Pkg,false,Depth + 1, false);
 	 MarkDelete(Pkg,false,Depth + 1, false);
-	 return;
+	 return false;
       }
       }
 
 
       /* Check if any ImportantDep() (but not Critical) were added
       /* Check if any ImportantDep() (but not Critical) were added
@@ -1222,14 +1172,17 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
 	       continue;
 	       continue;
 
 
 	    if (PkgState[Pkg->ID].CandidateVer != *I &&
 	    if (PkgState[Pkg->ID].CandidateVer != *I &&
-	        Start->Type == Dep::DpkgBreaks)
-	       MarkInstall(Pkg,true,Depth + 1, false, ForceImportantDeps);
-	    else
-	       MarkDelete(Pkg,false,Depth + 1, false);
+		Start->Type == Dep::DpkgBreaks &&
+		MarkInstall(Pkg,true,Depth + 1, false, ForceImportantDeps) == true)
+	       continue;
+	    else if (MarkDelete(Pkg,false,Depth + 1, false) == false)
+	       break;
 	 }
 	 }
 	 continue;
 	 continue;
       }      
       }      
    }
    }
+
+   return Dep.end() == true;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // DepCache::IsInstallOk - check if it is ok to install this package	/*{{{*/
 // DepCache::IsInstallOk - check if it is ok to install this package	/*{{{*/
@@ -1268,7 +1221,7 @@ void pkgDepCache::SetReInstall(PkgIterator const &Pkg,bool To)
 // DepCache::SetCandidateVersion - Change the candidate version		/*{{{*/
 // DepCache::SetCandidateVersion - Change the candidate version		/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
-void pkgDepCache::SetCandidateVersion(VerIterator TargetVer, bool const &Pseudo)
+void pkgDepCache::SetCandidateVersion(VerIterator TargetVer)
 {
 {
    pkgCache::PkgIterator Pkg = TargetVer.ParentPkg();
    pkgCache::PkgIterator Pkg = TargetVer.ParentPkg();
    StateCache &P = PkgState[Pkg->ID];
    StateCache &P = PkgState[Pkg->ID];
@@ -1558,7 +1511,7 @@ bool pkgDepCache::Policy::IsImportantDep(DepIterator const &Dep)
       return true;
       return true;
    else if(Dep->Type == pkgCache::Dep::Recommends) 
    else if(Dep->Type == pkgCache::Dep::Recommends) 
    {
    {
-      if ( _config->FindB("APT::Install-Recommends", false))
+      if (InstallRecommends)
 	 return true;
 	 return true;
       // we suport a special mode to only install-recommends for certain
       // we suport a special mode to only install-recommends for certain
       // sections
       // sections
@@ -1569,11 +1522,17 @@ bool pkgDepCache::Policy::IsImportantDep(DepIterator const &Dep)
 	 return true;
 	 return true;
    }
    }
    else if(Dep->Type == pkgCache::Dep::Suggests)
    else if(Dep->Type == pkgCache::Dep::Suggests)
-     return _config->FindB("APT::Install-Suggests", false);
+      return InstallSuggests;
 
 
    return false;
    return false;
 }
 }
 									/*}}}*/
 									/*}}}*/
+// Policy::GetPriority - Get the priority of the package pin		/*{{{*/
+signed short pkgDepCache::Policy::GetPriority(pkgCache::PkgIterator const &Pkg)
+{ return 0; };
+signed short pkgDepCache::Policy::GetPriority(pkgCache::PkgFileIterator const &File)
+{ return 0; };
+									/*}}}*/
 pkgDepCache::InRootSetFunc *pkgDepCache::GetRootSetFunc()		/*{{{*/
 pkgDepCache::InRootSetFunc *pkgDepCache::GetRootSetFunc()		/*{{{*/
 {
 {
   DefaultRootSetFunc *f = new DefaultRootSetFunc;
   DefaultRootSetFunc *f = new DefaultRootSetFunc;
@@ -1599,6 +1558,9 @@ bool pkgDepCache::MarkFollowsSuggests()
 // pkgDepCache::MarkRequired - the main mark algorithm			/*{{{*/
 // pkgDepCache::MarkRequired - the main mark algorithm			/*{{{*/
 bool pkgDepCache::MarkRequired(InRootSetFunc &userFunc)
 bool pkgDepCache::MarkRequired(InRootSetFunc &userFunc)
 {
 {
+   if (_config->Find("APT::Solver", "internal") != "internal")
+      return true;
+
    bool follow_recommends;
    bool follow_recommends;
    bool follow_suggests;
    bool follow_suggests;
    bool debug_autoremove = _config->FindB("Debug::pkgAutoRemove",false);
    bool debug_autoremove = _config->FindB("Debug::pkgAutoRemove",false);

+ 20 - 18
apt-pkg/depcache.h

@@ -233,6 +233,7 @@ class pkgDepCache : protected pkgCache::Namespace
       inline bool Delete() const {return Mode == ModeDelete;};
       inline bool Delete() const {return Mode == ModeDelete;};
       inline bool Purge() const {return Delete() == true && (iFlags & pkgDepCache::Purge) == pkgDepCache::Purge; };
       inline bool Purge() const {return Delete() == true && (iFlags & pkgDepCache::Purge) == pkgDepCache::Purge; };
       inline bool Keep() const {return Mode == ModeKeep;};
       inline bool Keep() const {return Mode == ModeKeep;};
+      inline bool Protect() const {return (iFlags & Protected) == Protected;};
       inline bool Upgrade() const {return Status > 0 && Mode == ModeInstall;};
       inline bool Upgrade() const {return Status > 0 && Mode == ModeInstall;};
       inline bool Upgradable() const {return Status >= 1;};
       inline bool Upgradable() const {return Status >= 1;};
       inline bool Downgrade() const {return Status < 0 && Mode == ModeInstall;};
       inline bool Downgrade() const {return Status < 0 && Mode == ModeInstall;};
@@ -257,11 +258,21 @@ class pkgDepCache : protected pkgCache::Namespace
    class Policy
    class Policy
    {
    {
       public:
       public:
-      
+      Policy() {
+         InstallRecommends = _config->FindB("APT::Install-Recommends", false);
+         InstallSuggests = _config->FindB("APT::Install-Suggests", false);
+      }
+
       virtual VerIterator GetCandidateVer(PkgIterator const &Pkg);
       virtual VerIterator GetCandidateVer(PkgIterator const &Pkg);
       virtual bool IsImportantDep(DepIterator const &Dep);
       virtual bool IsImportantDep(DepIterator const &Dep);
-      
+      virtual signed short GetPriority(PkgIterator const &Pkg);
+      virtual signed short GetPriority(PkgFileIterator const &File);
+
       virtual ~Policy() {};
       virtual ~Policy() {};
+
+      private:
+      bool InstallRecommends;
+      bool InstallSuggests;
    };
    };
 
 
    private:
    private:
@@ -315,11 +326,10 @@ class pkgDepCache : protected pkgCache::Namespace
    void Update(PkgIterator const &P);
    void Update(PkgIterator const &P);
    
    
    // Count manipulators
    // Count manipulators
-   void AddSizes(const PkgIterator &Pkg, bool const &Invert = false);
+   void AddSizes(const PkgIterator &Pkg, bool const Invert = false);
    inline void RemoveSizes(const PkgIterator &Pkg) {AddSizes(Pkg, true);};
    inline void RemoveSizes(const PkgIterator &Pkg) {AddSizes(Pkg, true);};
-   void AddSizes(const PkgIterator &Pkg,signed long Mult) __deprecated;
-   void AddStates(const PkgIterator &Pkg,int Add = 1);
-   inline void RemoveStates(const PkgIterator &Pkg) {AddStates(Pkg,-1);};
+   void AddStates(const PkgIterator &Pkg, bool const Invert = false);
+   inline void RemoveStates(const PkgIterator &Pkg) {AddStates(Pkg,true);};
    
    
    public:
    public:
 
 
@@ -388,18 +398,17 @@ class pkgDepCache : protected pkgCache::Namespace
    /** \name State Manipulators
    /** \name State Manipulators
     */
     */
    // @{
    // @{
-   void MarkKeep(PkgIterator const &Pkg, bool Soft = false,
+   bool MarkKeep(PkgIterator const &Pkg, bool Soft = false,
 		 bool FromUser = true, unsigned long Depth = 0);
 		 bool FromUser = true, unsigned long Depth = 0);
-   void MarkDelete(PkgIterator const &Pkg, bool Purge = false,
+   bool MarkDelete(PkgIterator const &Pkg, bool Purge = false,
                    unsigned long Depth = 0, bool FromUser = true);
                    unsigned long Depth = 0, bool FromUser = true);
-   void MarkInstall(PkgIterator const &Pkg,bool AutoInst = true,
+   bool MarkInstall(PkgIterator const &Pkg,bool AutoInst = true,
 		    unsigned long Depth = 0, bool FromUser = true,
 		    unsigned long Depth = 0, bool FromUser = true,
 		    bool ForceImportantDeps = false);
 		    bool ForceImportantDeps = false);
    void MarkProtected(PkgIterator const &Pkg) { PkgState[Pkg->ID].iFlags |= Protected; };
    void MarkProtected(PkgIterator const &Pkg) { PkgState[Pkg->ID].iFlags |= Protected; };
 
 
    void SetReInstall(PkgIterator const &Pkg,bool To);
    void SetReInstall(PkgIterator const &Pkg,bool To);
-   // FIXME: Remove the unused boolean parameter on abi break
-   void SetCandidateVersion(VerIterator TargetVer, bool const &Pseudo = true);
+   void SetCandidateVersion(VerIterator TargetVer);
    bool SetCandidateRelease(pkgCache::VerIterator TargetVer,
    bool SetCandidateRelease(pkgCache::VerIterator TargetVer,
 				std::string const &TargetRel);
 				std::string const &TargetRel);
    /** Set the candidate version for dependencies too if needed.
    /** Set the candidate version for dependencies too if needed.
@@ -484,13 +493,6 @@ class pkgDepCache : protected pkgCache::Namespace
    virtual ~pkgDepCache();
    virtual ~pkgDepCache();
 
 
    private:
    private:
-   // Helper for Update(OpProgress) to remove pseudoinstalled arch all packages
-   // FIXME: they are private so shouldn't affect abi, but just in case…
-   __deprecated bool RemovePseudoInstalledPkg(PkgIterator &Pkg, std::set<unsigned long> &recheck) { return true; };
-   __deprecated bool ReInstallPseudoForGroup(unsigned long const &Grp, std::set<unsigned long> &recheck) { return true; };
-   __deprecated bool ReInstallPseudoForGroup(pkgCache::PkgIterator const &P, std::set<unsigned long> &recheck) { return true; };
-
-
    bool IsModeChangeOk(ModeList const mode, PkgIterator const &Pkg,
    bool IsModeChangeOk(ModeList const mode, PkgIterator const &Pkg,
 			unsigned long const Depth, bool const FromUser);
 			unsigned long const Depth, bool const FromUser);
 };
 };

+ 564 - 0
apt-pkg/edsp.cc

@@ -0,0 +1,564 @@
+// -*- mode: cpp; mode: fold -*-
+// Description								/*{{{*/
+/* ######################################################################
+   Set of methods to help writing and reading everything needed for EDSP
+   ##################################################################### */
+									/*}}}*/
+// Include Files							/*{{{*/
+#include <apt-pkg/edsp.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/version.h>
+#include <apt-pkg/policy.h>
+#include <apt-pkg/tagfile.h>
+
+#include <apti18n.h>
+#include <limits>
+
+#include <stdio.h>
+									/*}}}*/
+
+// we could use pkgCache::DepType and ::Priority, but these would be localized strings…
+const char * const EDSP::PrioMap[] = {0, "important", "required", "standard",
+				      "optional", "extra"};
+const char * const EDSP::DepMap[] = {"", "Depends", "Pre-Depends", "Suggests",
+				     "Recommends" , "Conflicts", "Replaces",
+				     "Obsoletes", "Breaks", "Enhances"};
+
+// EDSP::WriteScenario - to the given file descriptor			/*{{{*/
+bool EDSP::WriteScenario(pkgDepCache &Cache, FILE* output, OpProgress *Progress)
+{
+   if (Progress != NULL)
+      Progress->SubProgress(Cache.Head().VersionCount, _("Send scenario to solver"));
+   unsigned long p = 0;
+   for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
+      for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false; ++Ver, ++p)
+      {
+	 WriteScenarioVersion(Cache, output, Pkg, Ver);
+	 WriteScenarioDependency(Cache, output, Pkg, Ver);
+	 fprintf(output, "\n");
+	 if (Progress != NULL && p % 100 == 0)
+	    Progress->Progress(p);
+      }
+   return true;
+}
+									/*}}}*/
+// EDSP::WriteLimitedScenario - to the given file descriptor		/*{{{*/
+bool EDSP::WriteLimitedScenario(pkgDepCache &Cache, FILE* output,
+				APT::PackageSet const &pkgset,
+				OpProgress *Progress)
+{
+   if (Progress != NULL)
+      Progress->SubProgress(Cache.Head().VersionCount, _("Send scenario to solver"));
+   unsigned long p  = 0;
+   for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg, ++p)
+      for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false; ++Ver)
+      {
+	 WriteScenarioVersion(Cache, output, Pkg, Ver);
+	 WriteScenarioLimitedDependency(Cache, output, Pkg, Ver, pkgset);
+	 fprintf(output, "\n");
+	 if (Progress != NULL && p % 100 == 0)
+	    Progress->Progress(p);
+      }
+   if (Progress != NULL)
+      Progress->Done();
+   return true;
+}
+									/*}}}*/
+// EDSP::WriteScenarioVersion						/*{{{*/
+void EDSP::WriteScenarioVersion(pkgDepCache &Cache, FILE* output, pkgCache::PkgIterator const &Pkg,
+				pkgCache::VerIterator const &Ver)
+{
+   fprintf(output, "Package: %s\n", Pkg.Name());
+   fprintf(output, "Architecture: %s\n", Ver.Arch());
+   fprintf(output, "Version: %s\n", Ver.VerStr());
+   if (Pkg.CurrentVer() == Ver)
+      fprintf(output, "Installed: yes\n");
+   if (Pkg->SelectedState == pkgCache::State::Hold ||
+       (Cache[Pkg].Keep() == true && Cache[Pkg].Protect() == true))
+      fprintf(output, "Hold: yes\n");
+   fprintf(output, "APT-ID: %d\n", Ver->ID);
+   fprintf(output, "Priority: %s\n", PrioMap[Ver->Priority]);
+   if ((Pkg->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
+      fprintf(output, "Essential: yes\n");
+   fprintf(output, "Section: %s\n", Ver.Section());
+   if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed)
+      fprintf(output, "Multi-Arch: allowed\n");
+   else if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign)
+      fprintf(output, "Multi-Arch: foreign\n");
+   else if ((Ver->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)
+      fprintf(output, "Multi-Arch: same\n");
+   signed short Pin = std::numeric_limits<signed short>::min();
+   for (pkgCache::VerFileIterator File = Ver.FileList(); File.end() == false; ++File) {
+      signed short const p = Cache.GetPolicy().GetPriority(File.File());
+      if (Pin < p)
+	 Pin = p;
+   }
+   fprintf(output, "APT-Pin: %d\n", Pin);
+   if (Cache.GetCandidateVer(Pkg) == Ver)
+      fprintf(output, "APT-Candidate: yes\n");
+   if ((Cache[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto)
+      fprintf(output, "APT-Automatic: yes\n");
+}
+									/*}}}*/
+// EDSP::WriteScenarioDependency					/*{{{*/
+void EDSP::WriteScenarioDependency(pkgDepCache &Cache, FILE* output, pkgCache::PkgIterator const &Pkg,
+				pkgCache::VerIterator const &Ver)
+{
+   std::string dependencies[pkgCache::Dep::Enhances + 1];
+   bool orGroup = false;
+   for (pkgCache::DepIterator Dep = Ver.DependsList(); Dep.end() == false; ++Dep)
+   {
+      // Ignore implicit dependencies for multiarch here
+      if (strcmp(Pkg.Arch(), Dep.TargetPkg().Arch()) != 0)
+	 continue;
+      if (orGroup == false)
+	 dependencies[Dep->Type].append(", ");
+      dependencies[Dep->Type].append(Dep.TargetPkg().Name());
+      if (Dep->Version != 0)
+	 dependencies[Dep->Type].append(" (").append(pkgCache::CompTypeDeb(Dep->CompareOp)).append(" ").append(Dep.TargetVer()).append(")");
+      if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+      {
+	 dependencies[Dep->Type].append(" | ");
+	 orGroup = true;
+      }
+      else
+	 orGroup = false;
+   }
+   for (int i = 1; i < pkgCache::Dep::Enhances + 1; ++i)
+      if (dependencies[i].empty() == false)
+	 fprintf(output, "%s: %s\n", DepMap[i], dependencies[i].c_str()+2);
+   string provides;
+   for (pkgCache::PrvIterator Prv = Ver.ProvidesList(); Prv.end() == false; ++Prv)
+   {
+      // Ignore implicit provides for multiarch here
+      if (strcmp(Pkg.Arch(), Prv.ParentPkg().Arch()) != 0 || strcmp(Pkg.Name(),Prv.Name()) == 0)
+	 continue;
+      provides.append(", ").append(Prv.Name());
+   }
+   if (provides.empty() == false)
+      fprintf(output, "Provides: %s\n", provides.c_str()+2);
+}
+									/*}}}*/
+// EDSP::WriteScenarioLimitedDependency					/*{{{*/
+void EDSP::WriteScenarioLimitedDependency(pkgDepCache &Cache, FILE* output,
+					  pkgCache::PkgIterator const &Pkg,
+					  pkgCache::VerIterator const &Ver,
+					  APT::PackageSet const &pkgset)
+{
+   std::string dependencies[pkgCache::Dep::Enhances + 1];
+   bool orGroup = false;
+   for (pkgCache::DepIterator Dep = Ver.DependsList(); Dep.end() == false; ++Dep)
+   {
+      // Ignore implicit dependencies for multiarch here
+      if (strcmp(Pkg.Arch(), Dep.TargetPkg().Arch()) != 0)
+	 continue;
+      if (orGroup == false)
+      {
+	 if (pkgset.find(Dep.TargetPkg()) == pkgset.end())
+	    continue;
+	 dependencies[Dep->Type].append(", ");
+      }
+      else if (pkgset.find(Dep.TargetPkg()) == pkgset.end())
+      {
+	 if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+	    continue;
+	 dependencies[Dep->Type].erase(dependencies[Dep->Type].end()-3, dependencies[Dep->Type].end());
+	 orGroup = false;
+	 continue;
+      }
+      dependencies[Dep->Type].append(Dep.TargetPkg().Name());
+      if (Dep->Version != 0)
+	 dependencies[Dep->Type].append(" (").append(pkgCache::CompTypeDeb(Dep->CompareOp)).append(" ").append(Dep.TargetVer()).append(")");
+      if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or)
+      {
+	 dependencies[Dep->Type].append(" | ");
+	 orGroup = true;
+      }
+      else
+	 orGroup = false;
+   }
+   for (int i = 1; i < pkgCache::Dep::Enhances + 1; ++i)
+      if (dependencies[i].empty() == false)
+	 fprintf(output, "%s: %s\n", DepMap[i], dependencies[i].c_str()+2);
+   string provides;
+   for (pkgCache::PrvIterator Prv = Ver.ProvidesList(); Prv.end() == false; ++Prv)
+   {
+      // Ignore implicit provides for multiarch here
+      if (strcmp(Pkg.Arch(), Prv.ParentPkg().Arch()) != 0 || strcmp(Pkg.Name(),Prv.Name()) == 0)
+	 continue;
+      if (pkgset.find(Prv.ParentPkg()) == pkgset.end())
+	 continue;
+      provides.append(", ").append(Prv.Name());
+   }
+   if (provides.empty() == false)
+      fprintf(output, "Provides: %s\n", provides.c_str()+2);
+}
+									/*}}}*/
+// EDSP::WriteRequest - to the given file descriptor			/*{{{*/
+bool EDSP::WriteRequest(pkgDepCache &Cache, FILE* output, bool const Upgrade,
+			bool const DistUpgrade, bool const AutoRemove,
+			OpProgress *Progress)
+{
+   if (Progress != NULL)
+      Progress->SubProgress(Cache.Head().PackageCount, _("Send request to solver"));
+   unsigned long p = 0;
+   string del, inst;
+   for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg, ++p)
+   {
+      if (Progress != NULL && p % 100 == 0)
+         Progress->Progress(p);
+      string* req;
+      if (Cache[Pkg].Delete() == true)
+	 req = &del;
+      else if (Cache[Pkg].NewInstall() == true || Cache[Pkg].Upgrade() == true)
+	 req = &inst;
+      else
+	 continue;
+      req->append(" ").append(Pkg.FullName());
+   }
+   fprintf(output, "Request: EDSP 0.4\n");
+   if (del.empty() == false)
+      fprintf(output, "Remove: %s\n", del.c_str()+1);
+   if (inst.empty() == false)
+      fprintf(output, "Install: %s\n", inst.c_str()+1);
+   if (Upgrade == true)
+      fprintf(output, "Upgrade: yes\n");
+   if (DistUpgrade == true)
+      fprintf(output, "Dist-Upgrade: yes\n");
+   if (AutoRemove == true)
+      fprintf(output, "Autoremove: yes\n");
+   if (_config->FindB("APT::Solver::Strict-Pinning", true) == false)
+      fprintf(output, "Strict-Pinning: no\n");
+   string solverpref("APT::Solver::");
+   solverpref.append(_config->Find("APT::Solver", "internal")).append("::Preferences");
+   if (_config->Exists(solverpref) == true)
+      fprintf(output, "Preferences: %s\n", _config->Find(solverpref,"").c_str());
+   fprintf(output, "\n");
+
+   return true;
+}
+									/*}}}*/
+// EDSP::ReadResponse - from the given file descriptor			/*{{{*/
+bool EDSP::ReadResponse(int const input, pkgDepCache &Cache, OpProgress *Progress) {
+	/* We build an map id to mmap offset here
+	   In theory we could use the offset as ID, but then VersionCount
+	   couldn't be used to create other versionmappings anymore and it
+	   would be too easy for a (buggy) solver to segfault APT… */
+	unsigned long long const VersionCount = Cache.Head().VersionCount;
+	unsigned long VerIdx[VersionCount];
+	for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; ++P) {
+		for (pkgCache::VerIterator V = P.VersionList(); V.end() == false; ++V)
+			VerIdx[V->ID] = V.Index();
+		Cache[P].Marked = true;
+		Cache[P].Garbage = false;
+	}
+
+	FileFd in;
+	in.OpenDescriptor(input, FileFd::ReadOnly);
+	pkgTagFile response(&in, 100);
+	pkgTagSection section;
+
+	while (response.Step(section) == true) {
+		std::string type;
+		if (section.Exists("Install") == true)
+			type = "Install";
+		else if (section.Exists("Remove") == true)
+			type = "Remove";
+		else if (section.Exists("Progress") == true) {
+			if (Progress != NULL) {
+				string msg = section.FindS("Message");
+				if (msg.empty() == true)
+					msg = _("Prepare for receiving solution");
+				Progress->SubProgress(100, msg, section.FindI("Percentage", 0));
+			}
+			continue;
+		} else if (section.Exists("Error") == true) {
+			std::string msg = SubstVar(SubstVar(section.FindS("Message"), "\n .\n", "\n\n"), "\n ", "\n");
+			if (msg.empty() == true) {
+				msg = _("External solver failed without a proper error message");
+				_error->Error(msg.c_str());
+			} else
+				_error->Error("External solver failed with: %s", msg.substr(0,msg.find('\n')).c_str());
+			if (Progress != NULL)
+				Progress->Done();
+			std::cerr << "The solver encountered an error of type: " << section.FindS("Error") << std::endl;
+			std::cerr << "The following information might help you to understand what is wrong:" << std::endl;
+			std::cerr << msg << std::endl << std::endl;
+			return false;
+		} else if (section.Exists("Autoremove") == true)
+			type = "Autoremove";
+		else
+			continue;
+
+		size_t const id = section.FindULL(type.c_str(), VersionCount);
+		if (id == VersionCount) {
+			_error->Warning("Unable to parse %s request with id value '%s'!", type.c_str(), section.FindS(type.c_str()).c_str());
+			continue;
+		} else if (id > Cache.Head().VersionCount) {
+			_error->Warning("ID value '%s' in %s request stanza is to high to refer to a known version!", section.FindS(type.c_str()).c_str(), type.c_str());
+			continue;
+		}
+
+		pkgCache::VerIterator Ver(Cache.GetCache(), Cache.GetCache().VerP + VerIdx[id]);
+		Cache.SetCandidateVersion(Ver);
+		if (type == "Install")
+			Cache.MarkInstall(Ver.ParentPkg(), false, 0, false);
+		else if (type == "Remove")
+			Cache.MarkDelete(Ver.ParentPkg(), false);
+		else if (type == "Autoremove") {
+			Cache[Ver.ParentPkg()].Marked = false;
+			Cache[Ver.ParentPkg()].Garbage = true;
+		}
+	}
+	return true;
+}
+									/*}}}*/
+// EDSP::ReadLine - first line from the given file descriptor		/*{{{*/
+// ---------------------------------------------------------------------
+/* Little helper method to read a complete line into a string. Similar to
+   fgets but we need to use the low-level read() here as otherwise the
+   listparser will be confused later on as mixing of fgets and read isn't
+   a supported action according to the manpages and results are undefined */
+bool EDSP::ReadLine(int const input, std::string &line) {
+	char one;
+	ssize_t data = 0;
+	line.erase();
+	line.reserve(100);
+	while ((data = read(input, &one, sizeof(one))) != -1) {
+		if (data != 1)
+			continue;
+		if (one == '\n')
+			return true;
+		if (one == '\r')
+			continue;
+		if (line.empty() == true && isblank(one) != 0)
+			continue;
+		line += one;
+	}
+	return false;
+}
+									/*}}}*/
+// EDSP::StringToBool - convert yes/no to bool				/*{{{*/
+// ---------------------------------------------------------------------
+/* we are not as lazy as we are in the global StringToBool as we really
+   only accept yes/no here - but we will ignore leading spaces */
+bool EDSP::StringToBool(char const *answer, bool const defValue) {
+   for (; isspace(*answer) != 0; ++answer);
+   if (strncasecmp(answer, "yes", 3) == 0)
+      return true;
+   else if (strncasecmp(answer, "no", 2) == 0)
+      return false;
+   else
+      _error->Warning("Value '%s' is not a boolean 'yes' or 'no'!", answer);
+   return defValue;
+}
+									/*}}}*/
+// EDSP::ReadRequest - first stanza from the given file descriptor	/*{{{*/
+bool EDSP::ReadRequest(int const input, std::list<std::string> &install,
+			std::list<std::string> &remove, bool &upgrade,
+			bool &distUpgrade, bool &autoRemove)
+{
+   install.clear();
+   remove.clear();
+   upgrade = false;
+   distUpgrade = false;
+   autoRemove = false;
+   std::string line;
+   while (ReadLine(input, line) == true)
+   {
+      // Skip empty lines before request
+      if (line.empty() == true)
+	 continue;
+      // The first Tag must be a request, so search for it
+      if (line.compare(0, 8, "Request:") != 0)
+	 continue;
+
+      while (ReadLine(input, line) == true)
+      {
+	 // empty lines are the end of the request
+	 if (line.empty() == true)
+	    return true;
+
+	 std::list<std::string> *request = NULL;
+	 if (line.compare(0, 8, "Install:") == 0)
+	 {
+	    line.erase(0, 8);
+	    request = &install;
+	 }
+	 else if (line.compare(0, 7, "Remove:") == 0)
+	 {
+	    line.erase(0, 7);
+	    request = &remove;
+	 }
+	 else if (line.compare(0, 8, "Upgrade:") == 0)
+	    upgrade = EDSP::StringToBool(line.c_str() + 9, false);
+	 else if (line.compare(0, 13, "Dist-Upgrade:") == 0)
+	    distUpgrade = EDSP::StringToBool(line.c_str() + 14, false);
+	 else if (line.compare(0, 11, "Autoremove:") == 0)
+	    autoRemove = EDSP::StringToBool(line.c_str() + 12, false);
+	 else
+	    _error->Warning("Unknown line in EDSP Request stanza: %s", line.c_str());
+
+	 if (request == NULL)
+	    continue;
+	 size_t end = line.length();
+	 do {
+	    size_t begin = line.rfind(' ');
+	    if (begin == std::string::npos)
+	    {
+	       request->push_back(line.substr(0, end));
+	       break;
+	    }
+	    else if (begin < end)
+	       request->push_back(line.substr(begin + 1, end));
+	    line.erase(begin);
+	    end = line.find_last_not_of(' ');
+	 } while (end != std::string::npos);
+      }
+   }
+   return false;
+}
+									/*}}}*/
+// EDSP::ApplyRequest - first stanza from the given file descriptor	/*{{{*/
+bool EDSP::ApplyRequest(std::list<std::string> const &install,
+			 std::list<std::string> const &remove,
+			 pkgDepCache &Cache)
+{
+	for (std::list<std::string>::const_iterator i = install.begin();
+	     i != install.end(); ++i) {
+		pkgCache::PkgIterator P = Cache.FindPkg(*i);
+		if (P.end() == true)
+			_error->Warning("Package %s is not known, so can't be installed", i->c_str());
+		else
+			Cache.MarkInstall(P, false);
+	}
+
+	for (std::list<std::string>::const_iterator i = remove.begin();
+	     i != remove.end(); ++i) {
+		pkgCache::PkgIterator P = Cache.FindPkg(*i);
+		if (P.end() == true)
+			_error->Warning("Package %s is not known, so can't be installed", i->c_str());
+		else
+			Cache.MarkDelete(P);
+	}
+	return true;
+}
+									/*}}}*/
+// EDSP::WriteSolution - to the given file descriptor			/*{{{*/
+bool EDSP::WriteSolution(pkgDepCache &Cache, FILE* output)
+{
+   bool const Debug = _config->FindB("Debug::EDSP::WriteSolution", false);
+   for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
+   {
+      if (Cache[Pkg].Delete() == true)
+      {
+	 fprintf(output, "Remove: %d\n", Pkg.CurrentVer()->ID);
+	 if (Debug == true)
+	    fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), Pkg.CurrentVer().VerStr());
+      }
+      else if (Cache[Pkg].NewInstall() == true || Cache[Pkg].Upgrade() == true)
+      {
+	 fprintf(output, "Install: %d\n", Cache.GetCandidateVer(Pkg)->ID);
+	 if (Debug == true)
+	    fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), Cache.GetCandidateVer(Pkg).VerStr());
+      }
+      else if (Cache[Pkg].Garbage == true)
+      {
+	 fprintf(output, "Autoremove: %d\n", Pkg.CurrentVer()->ID);
+	 if (Debug == true)
+	    fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), Pkg.CurrentVer().VerStr());
+	    fprintf(stderr, "Autoremove: %s\nVersion: %s\n", Pkg.FullName().c_str(), Pkg.CurrentVer().VerStr());
+      }
+      else
+	 continue;
+      fprintf(output, "\n");
+   }
+
+   return true;
+}
+									/*}}}*/
+// EDSP::WriteProgess - pulse to the given file descriptor		/*{{{*/
+bool EDSP::WriteProgress(unsigned short const percent, const char* const message, FILE* output) {
+	fprintf(output, "Progress: %s\n", TimeRFC1123(time(NULL)).c_str());
+	fprintf(output, "Percentage: %d\n", percent);
+	fprintf(output, "Message: %s\n\n", message);
+	fflush(output);
+	return true;
+}
+									/*}}}*/
+// EDSP::WriteError - format an error message to be send to file descriptor /*{{{*/
+bool EDSP::WriteError(char const * const uuid, std::string const &message, FILE* output) {
+	fprintf(output, "Error: %s\n", uuid);
+	fprintf(output, "Message: %s\n\n", SubstVar(SubstVar(message, "\n\n", "\n.\n"), "\n", "\n ").c_str());
+	return true;
+}
+									/*}}}*/
+// EDSP::ExecuteSolver - fork requested solver and setup ipc pipes	{{{*/
+bool EDSP::ExecuteSolver(const char* const solver, int *solver_in, int *solver_out) {
+	std::vector<std::string> const solverDirs = _config->FindVector("Dir::Bin::Solvers");
+	std::string file;
+	for (std::vector<std::string>::const_iterator dir = solverDirs.begin();
+	     dir != solverDirs.end(); ++dir) {
+		file = flCombine(*dir, solver);
+		if (RealFileExists(file.c_str()) == true)
+			break;
+		file.clear();
+	}
+
+	if (file.empty() == true)
+		return _error->Error("Can't call external solver '%s' as it is not in a configured directory!", solver);
+	int external[4] = {-1, -1, -1, -1};
+	if (pipe(external) != 0 || pipe(external + 2) != 0)
+		return _error->Errno("Resolve", "Can't create needed IPC pipes for EDSP");
+	for (int i = 0; i < 4; ++i)
+		SetCloseExec(external[i], true);
+
+	pid_t Solver = ExecFork();
+	if (Solver == 0) {
+		dup2(external[0], STDIN_FILENO);
+		dup2(external[3], STDOUT_FILENO);
+		const char* calling[2] = { file.c_str(), 0 };
+		execv(calling[0], (char**) calling);
+		std::cerr << "Failed to execute solver '" << solver << "'!" << std::endl;
+		_exit(100);
+	}
+	close(external[0]);
+	close(external[3]);
+
+	if (WaitFd(external[1], true, 5) == false)
+		return _error->Errno("Resolve", "Timed out while Waiting on availability of solver stdin");
+
+	*solver_in = external[1];
+	*solver_out = external[2];
+	return true;
+}
+									/*}}}*/
+// EDSP::ResolveExternal - resolve problems by asking external for help	{{{*/
+bool EDSP::ResolveExternal(const char* const solver, pkgDepCache &Cache,
+			 bool const upgrade, bool const distUpgrade,
+			 bool const autoRemove, OpProgress *Progress) {
+	int solver_in, solver_out;
+	if (EDSP::ExecuteSolver(solver, &solver_in, &solver_out) == false)
+		return false;
+
+	FILE* output = fdopen(solver_in, "w");
+	if (output == NULL)
+		return _error->Errno("Resolve", "fdopen on solver stdin failed");
+
+	if (Progress != NULL)
+		Progress->OverallProgress(0, 100, 5, _("Execute external solver"));
+	EDSP::WriteRequest(Cache, output, upgrade, distUpgrade, autoRemove, Progress);
+	if (Progress != NULL)
+		Progress->OverallProgress(5, 100, 20, _("Execute external solver"));
+	EDSP::WriteScenario(Cache, output, Progress);
+	fclose(output);
+
+	if (Progress != NULL)
+		Progress->OverallProgress(25, 100, 75, _("Execute external solver"));
+	if (EDSP::ReadResponse(solver_out, Cache, Progress) == false)
+		return false;
+
+	return true;
+}
+									/*}}}*/

+ 222 - 0
apt-pkg/edsp.h

@@ -0,0 +1,222 @@
+// -*- mode: cpp; mode: fold -*-
+/** Description \file edsp.h						{{{
+   ######################################################################
+   Set of methods to help writing and reading everything needed for EDSP
+   with the noteable exception of reading a scenario for conversion into
+   a Cache as this is handled by edsp interface for listparser and friends
+   ##################################################################### */
+									/*}}}*/
+#ifndef PKGLIB_EDSP_H
+#define PKGLIB_EDSP_H
+
+#include <apt-pkg/depcache.h>
+#include <apt-pkg/cacheset.h>
+#include <apt-pkg/progress.h>
+
+#include <string>
+
+class EDSP								/*{{{*/
+{
+	// we could use pkgCache::DepType and ::Priority, but these would be localized strings…
+	static const char * const PrioMap[];
+	static const char * const DepMap[];
+
+	bool static ReadLine(int const input, std::string &line);
+	bool static StringToBool(char const *answer, bool const defValue);
+
+	void static WriteScenarioVersion(pkgDepCache &Cache, FILE* output,
+					 pkgCache::PkgIterator const &Pkg,
+					 pkgCache::VerIterator const &Ver);
+	void static WriteScenarioDependency(pkgDepCache &Cache, FILE* output,
+					    pkgCache::PkgIterator const &Pkg,
+					    pkgCache::VerIterator const &Ver);
+	void static WriteScenarioLimitedDependency(pkgDepCache &Cache, FILE* output,
+						   pkgCache::PkgIterator const &Pkg,
+						   pkgCache::VerIterator const &Ver,
+						   APT::PackageSet const &pkgset);
+public:
+	/** \brief creates the EDSP request stanza
+	 *
+	 *  In the EDSP protocol the first thing send to the resolver is a stanza
+	 *  encoding the request. This method will write this stanza by looking at
+	 *  the given Cache and requests the installation of all packages which were
+	 *  marked for installation in it (equally for remove).
+	 *
+	 *  \param Cache in which the request is encoded
+	 *  \param output is written to this "file"
+	 *  \param upgrade is true if it is an request like apt-get upgrade
+	 *  \param distUpgrade is true if it is a request like apt-get dist-upgrade
+	 *  \param autoRemove is true if removal of unneeded packages should be performed
+	 *  \param Progress is an instance to report progress to
+	 *
+	 *  \return true if request was composed successfully, otherwise false
+	 */
+	bool static WriteRequest(pkgDepCache &Cache, FILE* output,
+				 bool const upgrade = false,
+				 bool const distUpgrade = false,
+				 bool const autoRemove = false,
+				OpProgress *Progress = NULL);
+
+	/** \brief creates the scenario representing the package universe
+	 *
+	 *  After the request all known information about a package are send
+	 *  to the solver. The output looks similar to a Packages or status file
+	 *
+	 *  All packages and version included in this Cache are send, even if
+	 *  it doesn't make sense from an APT resolver point of view like versions
+	 *  with a negative pin to enable the solver to propose even that as a
+	 *  solution or at least to be able to give a hint what can be done to
+	 *  statisfy a request.
+	 *
+	 *  \param Cache is the known package universe
+	 *  \param output is written to this "file"
+	 *  \param Progress is an instance to report progress to
+	 *
+	 *  \return true if universe was composed successfully, otherwise false
+	 */
+	bool static WriteScenario(pkgDepCache &Cache, FILE* output, OpProgress *Progress = NULL);
+
+	/** \brief creates a limited scenario representing the package universe
+	 *
+	 *  This method works similar to #WriteScenario as it works in the same
+	 *  way but doesn't send the complete universe to the solver but only
+	 *  packages included in the pkgset which will have only dependencies
+	 *  on packages which are in the given set. All other dependencies will
+	 *  be removed, so that this method can be used to create testcases
+	 *
+	 *  \param Cache is the known package universe
+	 *  \param output is written to this "file"
+	 *  \param pkgset is a set of packages the universe should be limited to
+	 *  \param Progress is an instance to report progress to
+	 *
+	 *  \return true if universe was composed successfully, otherwise false
+	 */
+	bool static WriteLimitedScenario(pkgDepCache &Cache, FILE* output,
+					 APT::PackageSet const &pkgset,
+					 OpProgress *Progress = NULL);
+
+	/** \brief waits and acts on the information returned from the solver
+	 *
+	 *  This method takes care of interpreting whatever the solver sends
+	 *  through the standard output like a solution, progress or an error.
+	 *  The main thread should handle his control over to this method to
+	 *  wait for the solver to finish the given task
+	 *
+	 *  \param input file descriptor with the response from the solver
+	 *  \param Cache the solution should be applied on if any
+	 *  \param Progress is an instance to report progress to
+	 *
+	 *  \return true if a solution is found and applied correctly, otherwise false
+	 */
+	bool static ReadResponse(int const input, pkgDepCache &Cache, OpProgress *Progress = NULL);
+
+	/** \brief search and read the request stanza for action later
+	 *
+	 *  This method while ignore the input up to the point it finds the
+	 *  Request: line as an indicator for the Request stanza.
+	 *  The request is stored in the parameters install and remove then,
+	 *  as the cache isn't build yet as the scenario follows the request.
+	 *
+	 *  \param input file descriptor with the edsp input for the solver
+	 *  \param[out] install is a list which gets populated with requested installs
+	 *  \param[out] remove is a list which gets populated with requested removals
+	 *  \param[out] upgrade is true if it is a request like apt-get upgrade
+	 *  \param[out] distUpgrade is true if it is a request like apt-get dist-upgrade
+	 *  \param[out] autoRemove is true if removal of uneeded packages should be performed
+	 *
+	 *  \return true if the request could be found and worked on, otherwise false
+	 */
+	bool static ReadRequest(int const input, std::list<std::string> &install,
+			std::list<std::string> &remove, bool &upgrade,
+			bool &distUpgrade, bool &autoRemove);
+
+	/** \brief takes the request lists and applies it on the cache
+	 *
+	 *  The lists as created by #ReadRequest will be used to find the
+	 *  packages in question and mark them for install/remove.
+	 *  No solving is done and no auto-install/-remove.
+	 *
+	 *  \param install is a list of packages to mark for installation
+	 *  \param remove is a list of packages to mark for removal
+	 *  \param Cache is there the markers should be set
+	 *
+	 *  \return false if the request couldn't be applied, true otherwise
+	 */
+	bool static ApplyRequest(std::list<std::string> const &install,
+				 std::list<std::string> const &remove,
+				 pkgDepCache &Cache);
+
+	/** \brief encodes the changes in the Cache as a EDSP solution
+	 *
+	 *  The markers in the Cache are observed and send to given
+	 *  file. The solution isn't checked for consistency or alike,
+	 *  so even broken solutions can be written successfully,
+	 *  but the front-end revicing it will properly fail then.
+	 *
+	 *  \param Cache which represents the solution
+	 *  \param output to write the stanzas forming the solution to
+	 *
+	 *  \return true if solution could be written, otherwise false
+	 */
+	bool static WriteSolution(pkgDepCache &Cache, FILE* output);
+
+	/** \brief sends a progress report
+	 *
+	 *  \param percent of the solving completed
+	 *  \param message the solver wants the user to see
+	 *  \param output the front-end listens for progress report
+	 */
+	bool static WriteProgress(unsigned short const percent, const char* const message, FILE* output);
+
+	/** \brief sends an error report
+	 *
+	 *  Solvers are expected to execute successfully even if
+	 *  they were unable to calculate a solution for a given task.
+	 *  Obviously they can't send a solution through, so this
+	 *  methods deals with formatting an error message correctly
+	 *  so that the front-ends can recieve and display it.
+	 *
+	 *  The first line of the message should be a short description
+	 *  of the error so it can be used for dialog titles or alike
+	 *
+	 *  \param uuid of this error message
+	 *  \param message is free form text to discribe the error
+	 *  \param output the front-end listens for error messages
+	 */
+	bool static WriteError(char const * const uuid, std::string const &message, FILE* output);
+
+
+	/** \brief executes the given solver and returns the pipe ends
+	 *
+	 *  The given solver is executed if it can be found in one of the
+	 *  configured directories and setup for it is performed.
+	 *
+	 *  \param solver to execute
+	 *  \param[out] solver_in will be the stdin of the solver
+	 *  \param[out] solver_out will be the stdout of the solver
+	 *
+	 *  \return true if the solver could be started and the pipes
+	 *  are set up correctly, otherwise false and the pipes are invalid
+	 */
+	bool static ExecuteSolver(const char* const solver, int *solver_in, int *solver_out);
+
+	/** \brief call an external resolver to handle the request
+	 *
+	 *  This method wraps all the methods above to call an external solver
+	 *
+	 *  \param solver to execute
+	 *  \param Cache with the problem and as universe to work in
+	 *  \param upgrade is true if it is a request like apt-get upgrade
+	 *  \param distUpgrade is true if it is a request like apt-get dist-upgrade
+	 *  \param autoRemove is true if unneeded packages should be removed
+	 *  \param Progress is an instance to report progress to
+	 *
+	 *  \return true if the solver has successfully solved the problem,
+	 *  otherwise false
+	 */
+	bool static ResolveExternal(const char* const solver, pkgDepCache &Cache,
+				    bool const upgrade, bool const distUpgrade,
+				    bool const autoRemove, OpProgress *Progress = NULL);
+};
+									/*}}}*/
+#endif

+ 78 - 0
apt-pkg/edsp/edspindexfile.cc

@@ -0,0 +1,78 @@
+// -*- mode: cpp; mode: fold -*-
+// Description								/*{{{*/
+/* ######################################################################
+   The scenario file is designed to work as an intermediate file between
+   APT and the resolver. Its on propose very similar to a dpkg status file
+   ##################################################################### */
+									/*}}}*/
+// Include Files							/*{{{*/
+#include <apt-pkg/edspindexfile.h>
+#include <apt-pkg/edsplistparser.h>
+#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/progress.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/acquire-item.h>
+
+#include <sys/stat.h>
+									/*}}}*/
+
+// edspIndex::edspIndex - Constructor					/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+edspIndex::edspIndex(string File) : debStatusIndex(File)
+{
+}
+									/*}}}*/
+// StatusIndex::Merge - Load the index file into a cache		/*{{{*/
+bool edspIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
+{
+   FileFd Pkg;
+   if (File != "stdin")
+      Pkg.Open(File, FileFd::ReadOnly);
+   else
+      Pkg.OpenDescriptor(STDIN_FILENO, FileFd::ReadOnly);
+   if (_error->PendingError() == true)
+      return false;
+   edspListParser Parser(&Pkg);
+   if (_error->PendingError() == true)
+      return false;
+
+   if (Prog != NULL)
+      Prog->SubProgress(0,File);
+   if (Gen.SelectFile(File,string(),*this) == false)
+      return _error->Error("Problem with SelectFile %s",File.c_str());
+
+   // Store the IMS information
+   pkgCache::PkgFileIterator CFile = Gen.GetCurFile();
+   struct stat St;
+   if (fstat(Pkg.Fd(),&St) != 0)
+      return _error->Errno("fstat","Failed to stat");
+   CFile->Size = St.st_size;
+   CFile->mtime = St.st_mtime;
+   CFile->Archive = Gen.WriteUniqString("edsp::scenario");
+
+   if (Gen.MergeList(Parser) == false)
+      return _error->Error("Problem with MergeList %s",File.c_str());
+   return true;
+}
+									/*}}}*/
+// Index File types for APT						/*{{{*/
+class edspIFType: public pkgIndexFile::Type
+{
+   public:
+   virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator File) const
+   {
+      // we don't have a record parser for this type as the file is not presistent
+      return NULL;
+   };
+   edspIFType() {Label = "EDSP scenario file";};
+};
+static edspIFType _apt_Universe;
+
+const pkgIndexFile::Type *edspIndex::GetType() const
+{
+   return &_apt_Universe;
+}
+									/*}}}*/

+ 28 - 0
apt-pkg/edsp/edspindexfile.h

@@ -0,0 +1,28 @@
+// -*- mode: cpp; mode: fold -*-
+// Description								/*{{{*/
+/* ######################################################################
+   The scenario file is designed to work as an intermediate file between
+   APT and the resolver. Its on propose very similar to a dpkg status file
+   ##################################################################### */
+									/*}}}*/
+#ifndef PKGLIB_EDSPINDEXFILE_H
+#define PKGLIB_EDSPINDEXFILE_H
+
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/debindexfile.h>
+
+class edspIndex : public debStatusIndex
+{
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
+   public:
+
+   virtual const Type *GetType() const;
+
+   virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const;
+
+   edspIndex(string File);
+};
+
+#endif

+ 90 - 0
apt-pkg/edsp/edsplistparser.cc

@@ -0,0 +1,90 @@
+// -*- mode: cpp; mode: fold -*-
+// Description								/*{{{*/
+/* ######################################################################
+
+   Package Cache Generator - Generator for the cache structure.
+
+   This builds the cache structure from the abstract package list parser.
+
+   ##################################################################### */
+									/*}}}*/
+// Include Files							/*{{{*/
+#include <apt-pkg/edsplistparser.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/md5.h>
+#include <apt-pkg/macros.h>
+									/*}}}*/
+
+// ListParser::edspListParser - Constructor				/*{{{*/
+edspListParser::edspListParser(FileFd *File, string const &Arch) : debListParser(File, Arch)
+{}
+									/*}}}*/
+// ListParser::NewVersion - Fill in the version structure		/*{{{*/
+bool edspListParser::NewVersion(pkgCache::VerIterator &Ver)
+{
+   Ver->ID = Section.FindI("APT-ID", Ver->ID);
+   return debListParser::NewVersion(Ver);
+}
+									/*}}}*/
+// ListParser::Description - Return the description string		/*{{{*/
+// ---------------------------------------------------------------------
+/* Sorry, no description for the resolvers… */
+string edspListParser::Description()
+{
+   return "";
+}
+string edspListParser::DescriptionLanguage()
+{
+   return "";
+}
+MD5SumValue edspListParser::Description_md5()
+{
+   return MD5SumValue("");
+}
+									/*}}}*/
+// ListParser::VersionHash - Compute a unique hash for this version	/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+unsigned short edspListParser::VersionHash()
+{
+   if (Section.Exists("APT-Hash") == true)
+      return Section.FindI("APT-Hash");
+   else if (Section.Exists("APT-ID") == true)
+      return Section.FindI("APT-ID");
+   return 0;
+}
+									/*}}}*/
+// ListParser::ParseStatus - Parse the status field			/*{{{*/
+// ---------------------------------------------------------------------
+/* The Status: line here is not a normal dpkg one but just one which tells
+   use if the package is installed or not, where missing means not. */
+bool edspListParser::ParseStatus(pkgCache::PkgIterator &Pkg,
+				pkgCache::VerIterator &Ver)
+{
+   unsigned long state = 0;
+   if (Section.FindFlag("Hold",state,pkgCache::State::Hold) == false)
+      return false;
+   if (state != 0)
+      Pkg->SelectedState = pkgCache::State::Hold;
+
+   state = 0;
+   if (Section.FindFlag("Installed",state,pkgCache::State::Installed) == false)
+      return false;
+   if (state != 0)
+   {
+      Pkg->CurrentState = pkgCache::State::Installed;
+      Pkg->CurrentVer = Ver.Index();
+   }
+
+   return true;
+}
+									/*}}}*/
+// ListParser::LoadReleaseInfo - Load the release information		/*{{{*/
+bool edspListParser::LoadReleaseInfo(pkgCache::PkgFileIterator &FileI,
+				    FileFd &File, string component)
+{
+   return true;
+}
+									/*}}}*/

+ 38 - 0
apt-pkg/edsp/edsplistparser.h

@@ -0,0 +1,38 @@
+// -*- mode: cpp; mode: fold -*-
+// Description								/*{{{*/
+/* ######################################################################
+
+   EDSP Package List Parser - This implements the abstract parser
+   interface for the APT specific intermediate format which is passed
+   to external resolvers
+
+   ##################################################################### */
+									/*}}}*/
+#ifndef PKGLIB_EDSPLISTPARSER_H
+#define PKGLIB_EDSPLISTPARSER_H
+
+#include <apt-pkg/deblistparser.h>
+#include <apt-pkg/pkgcachegen.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/tagfile.h>
+
+class edspListParser : public debListParser
+{
+   public:
+   virtual bool NewVersion(pkgCache::VerIterator &Ver);
+   virtual string Description();
+   virtual string DescriptionLanguage();
+   virtual MD5SumValue Description_md5();
+   virtual unsigned short VersionHash();
+
+   bool LoadReleaseInfo(pkgCache::PkgFileIterator &FileI,FileFd &File,
+			string section);
+
+   edspListParser(FileFd *File, string const &Arch = "");
+
+   protected:
+   virtual bool ParseStatus(pkgCache::PkgIterator &Pkg,pkgCache::VerIterator &Ver);
+
+};
+
+#endif

+ 124 - 0
apt-pkg/edsp/edspsystem.cc

@@ -0,0 +1,124 @@
+// -*- mode: cpp; mode: fold -*-
+// Description								/*{{{*/
+/* ######################################################################
+
+   This system provides the abstraction to use the scenario file as the
+   only source of package information to be able to feed the created file
+   back to APT for its own consumption (eat your own dogfood).
+
+   ##################################################################### */
+									/*}}}*/
+// Include Files							/*{{{*/
+#include <apt-pkg/edspsystem.h>
+#include <apt-pkg/debversion.h>
+#include <apt-pkg/edspindexfile.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/error.h>
+#include <apt-pkg/fileutl.h>
+#include <apti18n.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <errno.h>
+									/*}}}*/
+
+edspSystem edspSys;
+
+// System::debSystem - Constructor					/*{{{*/
+edspSystem::edspSystem()
+{
+   StatusFile = 0;
+
+   Label = "Debian APT solver interface";
+   VS = &debVS;
+}
+									/*}}}*/
+// System::~debSystem - Destructor					/*{{{*/
+edspSystem::~edspSystem()
+{
+   delete StatusFile;
+}
+									/*}}}*/
+// System::Lock - Get the lock						/*{{{*/
+bool edspSystem::Lock()
+{
+   return true;
+}
+									/*}}}*/
+// System::UnLock - Drop a lock						/*{{{*/
+bool edspSystem::UnLock(bool NoErrors)
+{
+   return true;
+}
+									/*}}}*/
+// System::CreatePM - Create the underlying package manager		/*{{{*/
+// ---------------------------------------------------------------------
+/* we can't use edsp input as input for real installations - just a
+   simulation can work, but everything else will fail bigtime */
+pkgPackageManager *edspSystem::CreatePM(pkgDepCache *Cache) const
+{
+   return NULL;
+}
+									/*}}}*/
+// System::Initialize - Setup the configuration space..			/*{{{*/
+bool edspSystem::Initialize(Configuration &Cnf)
+{
+   Cnf.Set("Dir::State::extended_states", "/dev/null");
+   Cnf.Set("Dir::State::status","/dev/null");
+   Cnf.Set("Dir::State::lists","/dev/null");
+
+   Cnf.Set("Debug::NoLocking", "true");
+   Cnf.Set("APT::Get::Simulate", "true");
+
+   if (StatusFile) {
+     delete StatusFile;
+     StatusFile = 0;
+   }
+   return true;
+}
+									/*}}}*/
+// System::ArchiveSupported - Is a file format supported		/*{{{*/
+bool edspSystem::ArchiveSupported(const char *Type)
+{
+   return false;
+}
+									/*}}}*/
+// System::Score - Determine if we should use the edsp system		/*{{{*/
+signed edspSystem::Score(Configuration const &Cnf)
+{
+   if (Cnf.Find("edsp::scenario", "") == "stdin")
+      return 1000;
+   if (FileExists(Cnf.FindFile("edsp::scenario","")) == true)
+      return 1000;
+   return -1000;
+}
+									/*}}}*/
+// System::AddStatusFiles - Register the status files			/*{{{*/
+bool edspSystem::AddStatusFiles(vector<pkgIndexFile *> &List)
+{
+   if (StatusFile == 0)
+   {
+      if (_config->Find("edsp::scenario", "") == "stdin")
+	 StatusFile = new edspIndex("stdin");
+      else
+	 StatusFile = new edspIndex(_config->FindFile("edsp::scenario"));
+   }
+   List.push_back(StatusFile);
+   return true;
+}
+									/*}}}*/
+// System::FindIndex - Get an index file for status files		/*{{{*/
+bool edspSystem::FindIndex(pkgCache::PkgFileIterator File,
+			  pkgIndexFile *&Found) const
+{
+   if (StatusFile == 0)
+      return false;
+   if (StatusFile->FindInCache(*File.Cache()) == File)
+   {
+      Found = StatusFile;
+      return true;
+   }
+
+   return false;
+}
+									/*}}}*/

+ 41 - 0
apt-pkg/edsp/edspsystem.h

@@ -0,0 +1,41 @@
+// -*- mode: cpp; mode: fold -*-
+// Description								/*{{{*/
+// $Id: debsystem.h,v 1.4 2003/01/11 07:16:33 jgg Exp $
+/* ######################################################################
+
+   System - Debian version of the  System Class
+
+   ##################################################################### */
+									/*}}}*/
+#ifndef PKGLIB_EDSPSYSTEM_H
+#define PKGLIB_EDSPSYSTEM_H
+
+#include <apt-pkg/pkgsystem.h>
+
+class edspIndex;
+class edspSystem : public pkgSystem
+{
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
+   edspIndex *StatusFile;
+
+   public:
+
+   virtual bool Lock();
+   virtual bool UnLock(bool NoErrors = false);
+   virtual pkgPackageManager *CreatePM(pkgDepCache *Cache) const;
+   virtual bool Initialize(Configuration &Cnf);
+   virtual bool ArchiveSupported(const char *Type);
+   virtual signed Score(Configuration const &Cnf);
+   virtual bool AddStatusFiles(std::vector<pkgIndexFile *> &List);
+   virtual bool FindIndex(pkgCache::PkgFileIterator File,
+			  pkgIndexFile *&Found) const;
+
+   edspSystem();
+   ~edspSystem();
+};
+
+extern edspSystem edspSys;
+
+#endif

+ 6 - 2
apt-pkg/indexcopy.h

@@ -24,6 +24,9 @@ class pkgCdromStatus;
 
 
 class IndexCopy								/*{{{*/
 class IndexCopy								/*{{{*/
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    protected:
    protected:
    
    
    pkgTagSection *Section;
    pkgTagSection *Section;
@@ -55,7 +58,6 @@ class PackageCopy : public IndexCopy					/*{{{*/
    virtual const char *GetFileName() {return "Packages";};
    virtual const char *GetFileName() {return "Packages";};
    virtual const char *Type() {return "Package";};
    virtual const char *Type() {return "Package";};
    
    
-   public:
 };
 };
 									/*}}}*/
 									/*}}}*/
 class SourceCopy : public IndexCopy					/*{{{*/
 class SourceCopy : public IndexCopy					/*{{{*/
@@ -67,7 +69,6 @@ class SourceCopy : public IndexCopy					/*{{{*/
    virtual const char *GetFileName() {return "Sources";};
    virtual const char *GetFileName() {return "Sources";};
    virtual const char *Type() {return "Source";};
    virtual const char *Type() {return "Source";};
    
    
-   public:
 };
 };
 									/*}}}*/
 									/*}}}*/
 class TranslationsCopy							/*{{{*/
 class TranslationsCopy							/*{{{*/
@@ -82,6 +83,9 @@ class TranslationsCopy							/*{{{*/
 									/*}}}*/
 									/*}}}*/
 class SigVerify								/*{{{*/
 class SigVerify								/*{{{*/
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    bool Verify(string prefix,string file, indexRecords *records);
    bool Verify(string prefix,string file, indexRecords *records);
    bool CopyMetaIndex(string CDROM, string CDName, 
    bool CopyMetaIndex(string CDROM, string CDName, 
 		      string prefix, string file);
 		      string prefix, string file);

+ 1 - 0
apt-pkg/init.cc

@@ -74,6 +74,7 @@ bool pkgInitConfig(Configuration &Cnf)
    Cnf.CndSet("Dir::Etc::trusted", "trusted.gpg");
    Cnf.CndSet("Dir::Etc::trusted", "trusted.gpg");
    Cnf.CndSet("Dir::Etc::trustedparts","trusted.gpg.d");
    Cnf.CndSet("Dir::Etc::trustedparts","trusted.gpg.d");
    Cnf.CndSet("Dir::Bin::methods","/usr/lib/apt/methods");
    Cnf.CndSet("Dir::Bin::methods","/usr/lib/apt/methods");
+   Cnf.CndSet("Dir::Bin::solvers::","/usr/lib/apt/solvers");
    Cnf.CndSet("Dir::Media::MountPath","/media/apt");
    Cnf.CndSet("Dir::Media::MountPath","/media/apt");
 
 
    // State   
    // State   

+ 2 - 2
apt-pkg/init.h

@@ -22,8 +22,8 @@
 // Non-ABI-Breaks should only increase RELEASE number.
 // Non-ABI-Breaks should only increase RELEASE number.
 // See also buildlib/libversion.mak
 // See also buildlib/libversion.mak
 #define APT_PKG_MAJOR 4
 #define APT_PKG_MAJOR 4
-#define APT_PKG_MINOR 10
-#define APT_PKG_RELEASE 1
+#define APT_PKG_MINOR 11
+#define APT_PKG_RELEASE 0
     
     
 extern const char *pkgVersion;
 extern const char *pkgVersion;
 extern const char *pkgLibVersion;
 extern const char *pkgLibVersion;

+ 13 - 5
apt-pkg/makefile

@@ -3,7 +3,7 @@ BASE=..
 SUBDIR=apt-pkg
 SUBDIR=apt-pkg
 
 
 # Header location
 # Header location
-SUBDIRS = deb contrib
+SUBDIRS = deb edsp contrib
 HEADER_TARGETDIRS = apt-pkg
 HEADER_TARGETDIRS = apt-pkg
 
 
 # Bring in the default rules
 # Bring in the default rules
@@ -20,11 +20,15 @@ APT_DOMAIN:=libapt-pkg$(LIBAPTPKG_MAJOR)
 # Source code for the contributed non-core things
 # Source code for the contributed non-core things
 SOURCE = contrib/mmap.cc contrib/error.cc contrib/strutl.cc \
 SOURCE = contrib/mmap.cc contrib/error.cc contrib/strutl.cc \
          contrib/configuration.cc contrib/progress.cc contrib/cmndline.cc \
          contrib/configuration.cc contrib/progress.cc contrib/cmndline.cc \
-	 contrib/md5.cc contrib/sha1.cc contrib/sha256.cc contrib/hashes.cc \
+	 contrib/hashsum.cc contrib/md5.cc contrib/sha1.cc \
+	 contrib/sha2_internal.cc\
+         contrib/hashes.cc \
 	 contrib/cdromutl.cc contrib/crc-16.cc contrib/netrc.cc \
 	 contrib/cdromutl.cc contrib/crc-16.cc contrib/netrc.cc \
 	 contrib/fileutl.cc 
 	 contrib/fileutl.cc 
 HEADERS = mmap.h error.h configuration.h fileutl.h  cmndline.h netrc.h\
 HEADERS = mmap.h error.h configuration.h fileutl.h  cmndline.h netrc.h\
-	  md5.h crc-16.h cdromutl.h strutl.h sptr.h sha1.h sha256.h hashes.h \
+	  md5.h crc-16.h cdromutl.h strutl.h sptr.h sha1.h sha2.h sha256.h\
+	  sha2_internal.h \
+          hashes.h hashsum_template.h\
 	  macros.h weakptr.h
 	  macros.h weakptr.h
 
 
 # Source code for the core main library
 # Source code for the core main library
@@ -35,7 +39,7 @@ SOURCE+= pkgcache.cc version.cc depcache.cc \
 	 srcrecords.cc cachefile.cc versionmatch.cc policy.cc \
 	 srcrecords.cc cachefile.cc versionmatch.cc policy.cc \
 	 pkgsystem.cc indexfile.cc pkgcachegen.cc acquire-item.cc \
 	 pkgsystem.cc indexfile.cc pkgcachegen.cc acquire-item.cc \
 	 indexrecords.cc vendor.cc vendorlist.cc cdrom.cc indexcopy.cc \
 	 indexrecords.cc vendor.cc vendorlist.cc cdrom.cc indexcopy.cc \
-	 aptconfiguration.cc cachefilter.cc cacheset.cc
+	 aptconfiguration.cc cachefilter.cc cacheset.cc edsp.cc
 HEADERS+= algorithms.h depcache.h pkgcachegen.h cacheiterators.h \
 HEADERS+= algorithms.h depcache.h pkgcachegen.h cacheiterators.h \
 	  orderlist.h sourcelist.h packagemanager.h tagfile.h \
 	  orderlist.h sourcelist.h packagemanager.h tagfile.h \
 	  init.h pkgcache.h version.h progress.h pkgrecords.h \
 	  init.h pkgcache.h version.h progress.h pkgrecords.h \
@@ -43,7 +47,7 @@ HEADERS+= algorithms.h depcache.h pkgcachegen.h cacheiterators.h \
 	  clean.h srcrecords.h cachefile.h versionmatch.h policy.h \
 	  clean.h srcrecords.h cachefile.h versionmatch.h policy.h \
 	  pkgsystem.h indexfile.h metaindex.h indexrecords.h vendor.h \
 	  pkgsystem.h indexfile.h metaindex.h indexrecords.h vendor.h \
 	  vendorlist.h cdrom.h indexcopy.h aptconfiguration.h \
 	  vendorlist.h cdrom.h indexcopy.h aptconfiguration.h \
-	  cachefilter.h cacheset.h
+	  cachefilter.h cacheset.h edsp.h
 
 
 # Source code for the debian specific components
 # Source code for the debian specific components
 # In theory the deb headers do not need to be exported..
 # In theory the deb headers do not need to be exported..
@@ -53,6 +57,10 @@ SOURCE+= deb/deblistparser.cc deb/debrecords.cc deb/dpkgpm.cc \
 HEADERS+= debversion.h debsrcrecords.h dpkgpm.h debrecords.h \
 HEADERS+= debversion.h debsrcrecords.h dpkgpm.h debrecords.h \
 	  deblistparser.h debsystem.h debindexfile.h debmetaindex.h
 	  deblistparser.h debsystem.h debindexfile.h debmetaindex.h
 
 
+# Source code for the APT resolver interface specific components
+SOURCE+= edsp/edsplistparser.cc edsp/edspindexfile.cc edsp/edspsystem.cc
+HEADERS+= edsplistparser.h edspindexfile.h edspsystem.h
+
 HEADERS := $(addprefix apt-pkg/,$(HEADERS))
 HEADERS := $(addprefix apt-pkg/,$(HEADERS))
 
 
 include $(LIBRARY_H)
 include $(LIBRARY_H)

+ 4 - 0
apt-pkg/metaindex.h

@@ -39,6 +39,10 @@ class metaIndex
    virtual vector<pkgIndexFile *> *GetIndexFiles() = 0; 
    virtual vector<pkgIndexFile *> *GetIndexFiles() = 0; 
    virtual bool IsTrusted() const = 0;
    virtual bool IsTrusted() const = 0;
 
 
+   metaIndex(string const &URI, string const &Dist, char const * const Type) :
+		Indexes(NULL), Type(Type), URI(URI), Dist(Dist) {
+   }
+
    virtual ~metaIndex() {
    virtual ~metaIndex() {
       if (Indexes == 0)
       if (Indexes == 0)
 	 return;
 	 return;

+ 2 - 2
apt-pkg/packagemanager.cc

@@ -319,7 +319,7 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg)
       List->Flag(Pkg,pkgOrderList::Configured,pkgOrderList::States);
       List->Flag(Pkg,pkgOrderList::Configured,pkgOrderList::States);
    }
    }
 
 
-   if (Cache[Pkg].InstVerIter(Cache)->MultiArch == pkgCache::Version::Same)
+   if ((Cache[Pkg].InstVerIter(Cache)->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)
       for (PkgIterator P = Pkg.Group().PackageList();
       for (PkgIterator P = Pkg.Group().PackageList();
 	   P.end() == false; P = Pkg.Group().NextPkg(P))
 	   P.end() == false; P = Pkg.Group().NextPkg(P))
       {
       {
@@ -602,7 +602,7 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate)
 
 
    List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States);
    List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States);
 
 
-   if (instVer->MultiArch == pkgCache::Version::Same)
+   if ((instVer->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)
       for (PkgIterator P = Pkg.Group().PackageList();
       for (PkgIterator P = Pkg.Group().PackageList();
 	   P.end() == false; P = Pkg.Group().NextPkg(P))
 	   P.end() == false; P = Pkg.Group().NextPkg(P))
       {
       {

+ 5 - 3
apt-pkg/pkgcache.cc

@@ -84,6 +84,8 @@ pkgCache::Header::Header()
    memset(PkgHashTable,0,sizeof(PkgHashTable));
    memset(PkgHashTable,0,sizeof(PkgHashTable));
    memset(GrpHashTable,0,sizeof(GrpHashTable));
    memset(GrpHashTable,0,sizeof(GrpHashTable));
    memset(Pools,0,sizeof(Pools));
    memset(Pools,0,sizeof(Pools));
+
+   CacheFileSize = 0;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // Cache::Header::CheckSizes - Check if the two headers have same *sz	/*{{{*/
 // Cache::Header::CheckSizes - Check if the two headers have same *sz	/*{{{*/
@@ -155,6 +157,9 @@ bool pkgCache::ReMap(bool const &Errorchecks)
        HeaderP->CheckSizes(DefHeader) == false)
        HeaderP->CheckSizes(DefHeader) == false)
       return _error->Error(_("The package cache file is an incompatible version"));
       return _error->Error(_("The package cache file is an incompatible version"));
 
 
+   if (Map.Size() < HeaderP->CacheFileSize)
+      return _error->Error(_("The package cache file is corrupted, it is too small"));
+
    // Locate our VS..
    // Locate our VS..
    if (HeaderP->VerSysName == 0 ||
    if (HeaderP->VerSysName == 0 ||
        (VS = pkgVersioningSystem::GetVS(StrP + HeaderP->VerSysName)) == 0)
        (VS = pkgVersioningSystem::GetVS(StrP + HeaderP->VerSysName)) == 0)
@@ -749,9 +754,6 @@ bool pkgCache::VerIterator::Automatic() const
    return false;
    return false;
 }
 }
 									/*}}}*/
 									/*}}}*/
-// VerIterator::Pseudo - deprecated no-op method			/*{{{*/
-bool pkgCache::VerIterator::Pseudo() const { return false; }
-									/*}}}*/
 // VerIterator::NewestFile - Return the newest file version relation	/*{{{*/
 // VerIterator::NewestFile - Return the newest file version relation	/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* This looks at the version numbers associated with all of the sources
 /* This looks at the version numbers associated with all of the sources

+ 15 - 7
apt-pkg/pkgcache.h

@@ -314,6 +314,9 @@ struct pkgCache::Header
    map_ptrloc PkgHashTable[2*1048];
    map_ptrloc PkgHashTable[2*1048];
    map_ptrloc GrpHashTable[2*1048];
    map_ptrloc GrpHashTable[2*1048];
 
 
+   /** \brief Size of the complete cache file */
+   unsigned long  CacheFileSize;
+
    bool CheckSizes(Header &Against) const;
    bool CheckSizes(Header &Against) const;
    Header();
    Header();
 };
 };
@@ -500,15 +503,20 @@ struct pkgCache::Version
    map_ptrloc VerStr;            // StringItem
    map_ptrloc VerStr;            // StringItem
    /** \brief section this version is filled in */
    /** \brief section this version is filled in */
    map_ptrloc Section;           // StringItem
    map_ptrloc Section;           // StringItem
+
+   /** \brief Multi-Arch capabilities of a package version */
+   enum VerMultiArch { None = 0, /*!< is the default and doesn't trigger special behaviour */
+		       All = (1<<0), /*!< will cause that Ver.Arch() will report "all" */
+		       Foreign = (1<<1), /*!< can satisfy dependencies in another architecture */
+		       Same = (1<<2), /*!< can be co-installed with itself from other architectures */
+		       Allowed = (1<<3), /*!< other packages are allowed to depend on thispkg:any */
+		       AllForeign = All | Foreign,
+		       AllAllowed = All | Allowed };
    /** \brief stores the MultiArch capabilities of this version
    /** \brief stores the MultiArch capabilities of this version
 
 
-       None is the default and doesn't trigger special behaviour,
-       Foreign means that this version can fulfill dependencies even
-       if it is built for another architecture as the requester.
-       Same indicates that builds for different architectures can
-       be co-installed on the system */
-   /* FIXME: A bitflag would be better with the next abibreak… */
-   enum {None, All, Foreign, Same, Allowed, AllForeign, AllAllowed} MultiArch;
+       Flags used are defined in pkgCache::Version::VerMultiArch
+   */
+   unsigned char MultiArch;
 
 
    /** \brief references all the PackageFile's that this version came from
    /** \brief references all the PackageFile's that this version came from
 
 

+ 1 - 0
apt-pkg/pkgcachegen.cc

@@ -98,6 +98,7 @@ pkgCacheGenerator::~pkgCacheGenerator()
       return;
       return;
    
    
    Cache.HeaderP->Dirty = false;
    Cache.HeaderP->Dirty = false;
+   Cache.HeaderP->CacheFileSize = Map.Size();
    Map.Sync(0,sizeof(pkgCache::Header));
    Map.Sync(0,sizeof(pkgCache::Header));
 }
 }
 									/*}}}*/
 									/*}}}*/

+ 8 - 3
apt-pkg/pkgrecords.h

@@ -28,12 +28,13 @@ class pkgRecords							/*{{{*/
    class Parser;
    class Parser;
    
    
    private:
    private:
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
    
    
    pkgCache &Cache;
    pkgCache &Cache;
    std::vector<Parser *>Files;
    std::vector<Parser *>Files;
 
 
-   public:
-
+    public:
    // Lookup function
    // Lookup function
    Parser &Lookup(pkgCache::VerFileIterator const &Ver);
    Parser &Lookup(pkgCache::VerFileIterator const &Ver);
    Parser &Lookup(pkgCache::DescFileIterator const &Desc);
    Parser &Lookup(pkgCache::DescFileIterator const &Desc);
@@ -58,6 +59,7 @@ class pkgRecords::Parser						/*{{{*/
    virtual string MD5Hash() {return string();};
    virtual string MD5Hash() {return string();};
    virtual string SHA1Hash() {return string();};
    virtual string SHA1Hash() {return string();};
    virtual string SHA256Hash() {return string();};
    virtual string SHA256Hash() {return string();};
+   virtual string SHA512Hash() {return string();};
    virtual string SourcePkg() {return string();};
    virtual string SourcePkg() {return string();};
    virtual string SourceVer() {return string();};
    virtual string SourceVer() {return string();};
 
 
@@ -67,7 +69,10 @@ class pkgRecords::Parser						/*{{{*/
    virtual string LongDesc() {return string();};
    virtual string LongDesc() {return string();};
    virtual string Name() {return string();};
    virtual string Name() {return string();};
    virtual string Homepage() {return string();}
    virtual string Homepage() {return string();}
-   
+
+   // An arbitrary custom field
+   virtual string RecordField(const char *fieldName) { return string();};
+
    // The record in binary form
    // The record in binary form
    virtual void GetRec(const char *&Start,const char *&Stop) {Start = Stop = 0;};
    virtual void GetRec(const char *&Start,const char *&Stop) {Start = Stop = 0;};
    
    

+ 4 - 0
apt-pkg/policy.cc

@@ -319,6 +319,10 @@ signed short pkgPolicy::GetPriority(pkgCache::PkgIterator const &Pkg)
    }
    }
    
    
    return 0;
    return 0;
+}
+signed short pkgPolicy::GetPriority(pkgCache::PkgFileIterator const &File)
+{
+   return PFPriority[File->ID];
 }
 }
 									/*}}}*/
 									/*}}}*/
 // PreferenceSection class - Overriding the default TrimRecord method	/*{{{*/
 // PreferenceSection class - Overriding the default TrimRecord method	/*{{{*/

+ 3 - 4
apt-pkg/policy.h

@@ -70,14 +70,13 @@ class pkgPolicy : public pkgDepCache::Policy
    // Things for manipulating pins
    // Things for manipulating pins
    void CreatePin(pkgVersionMatch::MatchType Type,string Pkg,
    void CreatePin(pkgVersionMatch::MatchType Type,string Pkg,
 		  string Data,signed short Priority);
 		  string Data,signed short Priority);
-   inline signed short GetPriority(pkgCache::PkgFileIterator const &File) 
-       {return PFPriority[File->ID];};
-   signed short GetPriority(pkgCache::PkgIterator const &Pkg);
    pkgCache::VerIterator GetMatch(pkgCache::PkgIterator const &Pkg);
    pkgCache::VerIterator GetMatch(pkgCache::PkgIterator const &Pkg);
 
 
    // Things for the cache interface.
    // Things for the cache interface.
    virtual pkgCache::VerIterator GetCandidateVer(pkgCache::PkgIterator const &Pkg);
    virtual pkgCache::VerIterator GetCandidateVer(pkgCache::PkgIterator const &Pkg);
-   virtual bool IsImportantDep(pkgCache::DepIterator const &Dep) {return pkgDepCache::Policy::IsImportantDep(Dep);};
+   virtual signed short GetPriority(pkgCache::PkgIterator const &Pkg);
+   virtual signed short GetPriority(pkgCache::PkgFileIterator const &File);
+
    bool InitDefaults();
    bool InitDefaults();
    
    
    pkgPolicy(pkgCache *Owner);
    pkgPolicy(pkgCache *Owner);

+ 6 - 2
apt-pkg/sourcelist.cc

@@ -346,10 +346,14 @@ bool pkgSourceList::ReadSourceDir(string Dir)
 /* */
 /* */
 time_t pkgSourceList::GetLastModifiedTime()
 time_t pkgSourceList::GetLastModifiedTime()
 {
 {
-   // go over the parts
+   vector<string> List;
+
    string Main = _config->FindFile("Dir::Etc::sourcelist");
    string Main = _config->FindFile("Dir::Etc::sourcelist");
    string Parts = _config->FindDir("Dir::Etc::sourceparts");
    string Parts = _config->FindDir("Dir::Etc::sourceparts");
-   vector<string> const List = GetListOfFilesInDir(Parts, "list", true);
+
+   // go over the parts
+   if (DirectoryExists(Parts) == true)
+      List = GetListOfFilesInDir(Parts, "list", true);
 
 
    // calculate the time
    // calculate the time
    time_t mtime_sources = GetModificationTime(Main);
    time_t mtime_sources = GetModificationTime(Main);

+ 3 - 1
apt-pkg/srcrecords.h

@@ -79,6 +79,8 @@ class pkgSrcRecords
    };
    };
    
    
    private:
    private:
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
    
    
    // The list of files and the current parser pointer
    // The list of files and the current parser pointer
    vector<Parser*> Files;
    vector<Parser*> Files;
@@ -93,7 +95,7 @@ class pkgSrcRecords
    Parser *Find(const char *Package,bool const &SrcOnly = false);
    Parser *Find(const char *Package,bool const &SrcOnly = false);
    
    
    pkgSrcRecords(pkgSourceList &List);
    pkgSrcRecords(pkgSourceList &List);
-   ~pkgSrcRecords();
+   virtual ~pkgSrcRecords();
 };
 };
 
 
 #endif
 #endif

+ 73 - 51
apt-pkg/tagfile.cc

@@ -24,26 +24,40 @@
 
 
 using std::string;
 using std::string;
 
 
+class pkgTagFilePrivate
+{
+public:
+   pkgTagFilePrivate(FileFd *pFd, unsigned long Size) : Fd(*pFd), Size(Size)
+   {
+   }
+   FileFd &Fd;
+   char *Buffer;
+   char *Start;
+   char *End;
+   bool Done;
+   unsigned long iOffset;
+   unsigned long Size;
+};
+
 // TagFile::pkgTagFile - Constructor					/*{{{*/
 // TagFile::pkgTagFile - Constructor					/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
-pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) :
-     Fd(*pFd),
-     Size(Size)
+pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size)
 {
 {
-   if (Fd.IsOpen() == false)
+   d = new pkgTagFilePrivate(pFd, Size);
+
+   if (d->Fd.IsOpen() == false)
    {
    {
-      Buffer = 0;
-      Start = End = Buffer = 0;
-      Done = true;
-      iOffset = 0;
+      d->Start = d->End = d->Buffer = 0;
+      d->Done = true;
+      d->iOffset = 0;
       return;
       return;
    }
    }
    
    
-   Buffer = new char[Size];
-   Start = End = Buffer;
-   Done = false;
-   iOffset = 0;
+   d->Buffer = new char[Size];
+   d->Start = d->End = d->Buffer;
+   d->Done = false;
+   d->iOffset = 0;
    Fill();
    Fill();
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -52,7 +66,14 @@ pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) :
 /* */
 /* */
 pkgTagFile::~pkgTagFile()
 pkgTagFile::~pkgTagFile()
 {
 {
-   delete [] Buffer;
+   delete [] d->Buffer;
+   delete d;
+}
+									/*}}}*/
+// TagFile::Offset - Return the current offset in the buffer     	/*{{{*/
+unsigned long pkgTagFile::Offset()
+{
+   return d->iOffset;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // TagFile::Resize - Resize the internal buffer				/*{{{*/
 // TagFile::Resize - Resize the internal buffer				/*{{{*/
@@ -63,22 +84,22 @@ pkgTagFile::~pkgTagFile()
 bool pkgTagFile::Resize()
 bool pkgTagFile::Resize()
 {
 {
    char *tmp;
    char *tmp;
-   unsigned long EndSize = End - Start;
+   unsigned long EndSize = d->End - d->Start;
 
 
    // fail is the buffer grows too big
    // fail is the buffer grows too big
-   if(Size > 1024*1024+1)
+   if(d->Size > 1024*1024+1)
       return false;
       return false;
 
 
    // get new buffer and use it
    // get new buffer and use it
-   tmp = new char[2*Size];
-   memcpy(tmp, Buffer, Size);
-   Size = Size*2;
-   delete [] Buffer;
-   Buffer = tmp;
+   tmp = new char[2*d->Size];
+   memcpy(tmp, d->Buffer, d->Size);
+   d->Size = d->Size*2;
+   delete [] d->Buffer;
+   d->Buffer = tmp;
 
 
    // update the start/end pointers to the new buffer
    // update the start/end pointers to the new buffer
-   Start = Buffer;
-   End = Start + EndSize;
+   d->Start = d->Buffer;
+   d->End = d->Start + EndSize;
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -90,20 +111,20 @@ bool pkgTagFile::Resize()
  */
  */
 bool pkgTagFile::Step(pkgTagSection &Tag)
 bool pkgTagFile::Step(pkgTagSection &Tag)
 {
 {
-   while (Tag.Scan(Start,End - Start) == false)
+   while (Tag.Scan(d->Start,d->End - d->Start) == false)
    {
    {
       if (Fill() == false)
       if (Fill() == false)
 	 return false;
 	 return false;
       
       
-      if(Tag.Scan(Start,End - Start))
+      if(Tag.Scan(d->Start,d->End - d->Start))
 	 break;
 	 break;
 
 
       if (Resize() == false)
       if (Resize() == false)
 	 return _error->Error(_("Unable to parse package file %s (1)"),
 	 return _error->Error(_("Unable to parse package file %s (1)"),
-				 Fd.Name().c_str());
+                              d->Fd.Name().c_str());
    }
    }
-   Start += Tag.size();
-   iOffset += Tag.size();
+   d->Start += Tag.size();
+   d->iOffset += Tag.size();
 
 
    Tag.Trim();
    Tag.Trim();
    return true;
    return true;
@@ -115,37 +136,37 @@ bool pkgTagFile::Step(pkgTagSection &Tag)
    then fills the rest from the file */
    then fills the rest from the file */
 bool pkgTagFile::Fill()
 bool pkgTagFile::Fill()
 {
 {
-   unsigned long EndSize = End - Start;
+   unsigned long EndSize = d->End - d->Start;
    unsigned long Actual = 0;
    unsigned long Actual = 0;
    
    
-   memmove(Buffer,Start,EndSize);
-   Start = Buffer;
-   End = Buffer + EndSize;
+   memmove(d->Buffer,d->Start,EndSize);
+   d->Start = d->Buffer;
+   d->End = d->Buffer + EndSize;
    
    
-   if (Done == false)
+   if (d->Done == false)
    {
    {
       // See if only a bit of the file is left
       // See if only a bit of the file is left
-      if (Fd.Read(End,Size - (End - Buffer),&Actual) == false)
+      if (d->Fd.Read(d->End, d->Size - (d->End - d->Buffer),&Actual) == false)
 	 return false;
 	 return false;
-      if (Actual != Size - (End - Buffer))
-	 Done = true;
-      End += Actual;
+      if (Actual != d->Size - (d->End - d->Buffer))
+	 d->Done = true;
+      d->End += Actual;
    }
    }
    
    
-   if (Done == true)
+   if (d->Done == true)
    {
    {
       if (EndSize <= 3 && Actual == 0)
       if (EndSize <= 3 && Actual == 0)
 	 return false;
 	 return false;
-      if (Size - (End - Buffer) < 4)
+      if (d->Size - (d->End - d->Buffer) < 4)
 	 return true;
 	 return true;
       
       
       // Append a double new line if one does not exist
       // Append a double new line if one does not exist
       unsigned int LineCount = 0;
       unsigned int LineCount = 0;
-      for (const char *E = End - 1; E - End < 6 && (*E == '\n' || *E == '\r'); E--)
+      for (const char *E = d->End - 1; E - d->End < 6 && (*E == '\n' || *E == '\r'); E--)
 	 if (*E == '\n')
 	 if (*E == '\n')
 	    LineCount++;
 	    LineCount++;
       for (; LineCount < 2; LineCount++)
       for (; LineCount < 2; LineCount++)
-	 *End++ = '\n';
+	 *d->End++ = '\n';
       
       
       return true;
       return true;
    }
    }
@@ -160,33 +181,33 @@ bool pkgTagFile::Fill()
 bool pkgTagFile::Jump(pkgTagSection &Tag,unsigned long Offset)
 bool pkgTagFile::Jump(pkgTagSection &Tag,unsigned long Offset)
 {
 {
    // We are within a buffer space of the next hit..
    // We are within a buffer space of the next hit..
-   if (Offset >= iOffset && iOffset + (End - Start) > Offset)
+   if (Offset >= d->iOffset && d->iOffset + (d->End - d->Start) > Offset)
    {
    {
-      unsigned long Dist = Offset - iOffset;
-      Start += Dist;
-      iOffset += Dist;
+      unsigned long Dist = Offset - d->iOffset;
+      d->Start += Dist;
+      d->iOffset += Dist;
       return Step(Tag);
       return Step(Tag);
    }
    }
 
 
    // Reposition and reload..
    // Reposition and reload..
-   iOffset = Offset;
-   Done = false;
-   if (Fd.Seek(Offset) == false)
+   d->iOffset = Offset;
+   d->Done = false;
+   if (d->Fd.Seek(Offset) == false)
       return false;
       return false;
-   End = Start = Buffer;
+   d->End = d->Start = d->Buffer;
    
    
    if (Fill() == false)
    if (Fill() == false)
       return false;
       return false;
 
 
-   if (Tag.Scan(Start,End - Start) == true)
+   if (Tag.Scan(d->Start, d->End - d->Start) == true)
       return true;
       return true;
    
    
    // This appends a double new line (for the real eof handling)
    // This appends a double new line (for the real eof handling)
    if (Fill() == false)
    if (Fill() == false)
       return false;
       return false;
    
    
-   if (Tag.Scan(Start,End - Start) == false)
-      return _error->Error(_("Unable to parse package file %s (2)"),Fd.Name().c_str());
+   if (Tag.Scan(d->Start, d->End - d->Start) == false)
+      return _error->Error(_("Unable to parse package file %s (2)"),d->Fd.Name().c_str());
    
    
    return true;
    return true;
 }
 }
@@ -457,6 +478,7 @@ static const char *iTFRewritePackageOrder[] = {
                           "MD5Sum",
                           "MD5Sum",
                           "SHA1",
                           "SHA1",
                           "SHA256",
                           "SHA256",
+                          "SHA512",
                            "MSDOS-Filename",   // Obsolete
                            "MSDOS-Filename",   // Obsolete
                           "Description",
                           "Description",
                           0};
                           0};

+ 8 - 13
apt-pkg/tagfile.h

@@ -23,16 +23,16 @@
 
 
 #include <apt-pkg/fileutl.h>
 #include <apt-pkg/fileutl.h>
 #include <stdio.h>
 #include <stdio.h>
-    
+
 class pkgTagSection
 class pkgTagSection
 {
 {
    const char *Section;
    const char *Section;
-   
    // We have a limit of 256 tags per section.
    // We have a limit of 256 tags per section.
    unsigned int Indexes[256];
    unsigned int Indexes[256];
    unsigned int AlphaIndexes[0x100];
    unsigned int AlphaIndexes[0x100];
-   
    unsigned int TagCount;
    unsigned int TagCount;
+   // dpointer placeholder (for later in case we need it)
+   void *d;
 
 
    /* This very simple hash function for the last 8 letters gives
    /* This very simple hash function for the last 8 letters gives
       very good performance on the debian package files */
       very good performance on the debian package files */
@@ -44,7 +44,6 @@ class pkgTagSection
       return Res & 0xFF;
       return Res & 0xFF;
    }
    }
 
 
-
    protected:
    protected:
    const char *Stop;
    const char *Stop;
 
 
@@ -80,17 +79,13 @@ class pkgTagSection
    };
    };
    
    
    pkgTagSection() : Section(0), Stop(0) {};
    pkgTagSection() : Section(0), Stop(0) {};
+   virtual ~pkgTagSection() {};
 };
 };
 
 
+class pkgTagFilePrivate;
 class pkgTagFile
 class pkgTagFile
 {
 {
-   FileFd &Fd;
-   char *Buffer;
-   char *Start;
-   char *End;
-   bool Done;
-   unsigned long iOffset;
-   unsigned long Size;
+   pkgTagFilePrivate *d;
 
 
    bool Fill();
    bool Fill();
    bool Resize();
    bool Resize();
@@ -98,11 +93,11 @@ class pkgTagFile
    public:
    public:
 
 
    bool Step(pkgTagSection &Section);
    bool Step(pkgTagSection &Section);
-   inline unsigned long Offset() {return iOffset;};
+   unsigned long Offset();
    bool Jump(pkgTagSection &Tag,unsigned long Offset);
    bool Jump(pkgTagSection &Tag,unsigned long Offset);
 
 
    pkgTagFile(FileFd *F,unsigned long Size = 32*1024);
    pkgTagFile(FileFd *F,unsigned long Size = 32*1024);
-   ~pkgTagFile();
+   virtual ~pkgTagFile();
 };
 };
 
 
 /* This is the list of things to rewrite. The rewriter
 /* This is the list of things to rewrite. The rewriter

+ 1 - 1
cmdline/acqprogress.cc

@@ -200,7 +200,7 @@ bool AcqTextStatus::Pulse(pkgAcquire *Owner)
             
             
       // Add the current progress
       // Add the current progress
       if (Mode == Long)
       if (Mode == Long)
-	 snprintf(S,End-S," %lu",I->CurrentSize);
+	 snprintf(S,End-S," %llu",I->CurrentSize);
       else
       else
       {
       {
 	 if (Mode == Medium || I->TotalSize == 0)
 	 if (Mode == Medium || I->TotalSize == 0)

+ 50 - 0
cmdline/apt-dump-solver.cc

@@ -0,0 +1,50 @@
+// -*- mode: cpp; mode: fold -*-
+// Description								/*{{{*/
+/* #####################################################################
+
+   dummy solver to get quickly a scenario file out of APT
+
+   ##################################################################### */
+									/*}}}*/
+// Include Files							/*{{{*/
+#include <apt-pkg/edsp.h>
+
+#include <config.h>
+
+#include <cstdio>
+									/*}}}*/
+
+// ShowHelp - Show a help screen					/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool ShowHelp() {
+
+	std::cout <<
+		PACKAGE " " VERSION " for " COMMON_ARCH " compiled on " __DATE__ " " __TIME__ << std::endl <<
+		"Usage: apt-dump-resolver\n"
+		"\n"
+		"apt-dump-resolver is a dummy solver who just dumps its input to the\n"
+		"file /tmp/dump.edsp and exists with a proper EDSP error.\n"
+		"\n"
+		"                       This dump has lost Super Cow Powers.\n";
+	return true;
+}
+									/*}}}*/
+int main(int argc,const char *argv[])					/*{{{*/
+{
+	if (argc > 1 && (strcmp(argv[1], "--help") == 0 || strcmp(argv[1],"-h") == 0 ||
+	    strcmp(argv[1],"-v") == 0 || strcmp(argv[1],"--version") == 0)) {
+		ShowHelp();
+		return 0;
+	}
+
+	FILE* input = fdopen(STDIN_FILENO, "r");
+	FILE* output = fopen("/tmp/dump.edsp", "w");
+	char buffer[400];
+	while (fgets(buffer, sizeof(buffer), input) != NULL)
+		fputs(buffer, output);
+	fclose(output);
+	fclose(input);
+
+	EDSP::WriteError("ERR_JUST_DUMPING", "I am too dumb, i can just dump!\nPlease use one of my friends instead!", stdout);
+}

+ 16 - 5
cmdline/apt-get.cc

@@ -135,6 +135,11 @@ bool YnPrompt(bool Default=true)
       c1out << _("Y") << endl;
       c1out << _("Y") << endl;
       return true;
       return true;
    }
    }
+   else if (_config->FindB("APT::Get::Assume-No",false) == true)
+   {
+      c1out << _("N") << endl;
+      return false;
+   }
 
 
    char response[1024] = "";
    char response[1024] = "";
    cin.getline(response, sizeof(response));
    cin.getline(response, sizeof(response));
@@ -1894,8 +1899,7 @@ bool DoInstall(CommandLine &CmdL)
       {
       {
 	 // Call the scored problem resolver
 	 // Call the scored problem resolver
 	 Fix->InstallProtect();
 	 Fix->InstallProtect();
-	 if (Fix->Resolve(true) == false)
-	    _error->Discard();
+	 Fix->Resolve(true);
 	 delete Fix;
 	 delete Fix;
       }
       }
 
 
@@ -1921,8 +1925,11 @@ bool DoInstall(CommandLine &CmdL)
 	 c1out << _("The following information may help to resolve the situation:") << endl;
 	 c1out << _("The following information may help to resolve the situation:") << endl;
 	 c1out << endl;
 	 c1out << endl;
 	 ShowBroken(c1out,Cache,false);
 	 ShowBroken(c1out,Cache,false);
-	 return _error->Error(_("Broken packages"));
-      }   
+	 if (_error->PendingError() == true)
+	    return false;
+	 else
+	    return _error->Error(_("Broken packages"));
+      }
    }
    }
    if (!DoAutomaticRemove(Cache)) 
    if (!DoAutomaticRemove(Cache)) 
       return false;
       return false;
@@ -2305,6 +2312,8 @@ bool DoDownload(CommandLine &CmdL)
       strprintf(descr, _("Downloading %s %s"), Pkg.Name(), Ver.VerStr());
       strprintf(descr, _("Downloading %s %s"), Pkg.Name(), Ver.VerStr());
       // get the most appropriate hash
       // get the most appropriate hash
       HashString hash;
       HashString hash;
+      if (rec.SHA512Hash() != "")
+         hash = HashString("sha512", rec.SHA512Hash());
       if (rec.SHA256Hash() != "")
       if (rec.SHA256Hash() != "")
          hash = HashString("sha256", rec.SHA256Hash());
          hash = HashString("sha256", rec.SHA256Hash());
       else if (rec.SHA1Hash() != "")
       else if (rec.SHA1Hash() != "")
@@ -3339,7 +3348,8 @@ int main(int argc,const char *argv[])					/*{{{*/
       {'s',"dry-run","APT::Get::Simulate",0},
       {'s',"dry-run","APT::Get::Simulate",0},
       {'s',"no-act","APT::Get::Simulate",0},
       {'s',"no-act","APT::Get::Simulate",0},
       {'y',"yes","APT::Get::Assume-Yes",0},
       {'y',"yes","APT::Get::Assume-Yes",0},
-      {'y',"assume-yes","APT::Get::Assume-Yes",0},      
+      {'y',"assume-yes","APT::Get::Assume-Yes",0},
+      {0,"assume-no","APT::Get::Assume-No",0},
       {'f',"fix-broken","APT::Get::Fix-Broken",0},
       {'f',"fix-broken","APT::Get::Fix-Broken",0},
       {'u',"show-upgraded","APT::Get::Show-Upgraded",0},
       {'u',"show-upgraded","APT::Get::Show-Upgraded",0},
       {'m',"ignore-missing","APT::Get::Fix-Missing",0},
       {'m',"ignore-missing","APT::Get::Fix-Missing",0},
@@ -3369,6 +3379,7 @@ int main(int argc,const char *argv[])					/*{{{*/
       {0,"install-recommends","APT::Install-Recommends",CommandLine::Boolean},
       {0,"install-recommends","APT::Install-Recommends",CommandLine::Boolean},
       {0,"install-suggests","APT::Install-Suggests",CommandLine::Boolean},
       {0,"install-suggests","APT::Install-Suggests",CommandLine::Boolean},
       {0,"fix-policy","APT::Get::Fix-Policy-Broken",0},
       {0,"fix-policy","APT::Get::Fix-Policy-Broken",0},
+      {0,"solver","APT::Solver",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}};

+ 190 - 0
cmdline/apt-internal-solver.cc

@@ -0,0 +1,190 @@
+// -*- mode: cpp; mode: fold -*-
+// Description								/*{{{*/
+/* #####################################################################
+
+   cover around the internal solver to be able to run it like an external
+
+   ##################################################################### */
+									/*}}}*/
+// Include Files							/*{{{*/
+#include <apt-pkg/error.h>
+#include <apt-pkg/cmndline.h>
+#include <apt-pkg/init.h>
+#include <apt-pkg/cachefile.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/edsp.h>
+#include <apt-pkg/algorithms.h>
+#include <apt-pkg/fileutl.h>
+
+#include <config.h>
+#include <apti18n.h>
+
+#include <unistd.h>
+#include <cstdio>
+									/*}}}*/
+
+// ShowHelp - Show a help screen					/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool ShowHelp(CommandLine &CmdL) {
+	ioprintf(std::cout,_("%s %s for %s compiled on %s %s\n"),PACKAGE,VERSION,
+		 COMMON_ARCH,__DATE__,__TIME__);
+
+	std::cout <<
+		_("Usage: apt-internal-resolver\n"
+		"\n"
+		"apt-internal-resolver is an interface to use the current internal\n"
+		"like an external resolver for the APT family for debugging or alike\n"
+		"\n"
+		"Options:\n"
+		"  -h  This help text.\n"
+		"  -q  Loggable output - no progress indicator\n"
+		"  -c=? Read this configuration file\n"
+		"  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
+		"apt.conf(5) manual pages for more information and options.\n"
+		"                       This APT has Super Cow Powers.\n");
+	return true;
+}
+									/*}}}*/
+int main(int argc,const char *argv[])					/*{{{*/
+{
+	CommandLine::Args Args[] = {
+		{'h',"help","help",0},
+		{'v',"version","version",0},
+		{'q',"quiet","quiet",CommandLine::IntLevel},
+		{'q',"silent","quiet",CommandLine::IntLevel},
+		{'c',"config-file",0,CommandLine::ConfigFile},
+		{'o',"option",0,CommandLine::ArbItem},
+		{0,0,0,0}};
+
+	CommandLine CmdL(Args,_config);
+	if (pkgInitConfig(*_config) == false ||
+	    CmdL.Parse(argc,argv) == false) {
+		_error->DumpErrors();
+		return 2;
+	}
+
+	// See if the help should be shown
+	if (_config->FindB("help") == true ||
+	    _config->FindB("version") == true) {
+		ShowHelp(CmdL);
+		return 1;
+	}
+
+	if (CmdL.FileList[0] != 0 && strcmp(CmdL.FileList[0], "scenario") == 0)
+	{
+		if (pkgInitSystem(*_config,_system) == false) {
+			std::cerr << "System could not be initialized!" << std::endl;
+			return 1;
+		}
+		pkgCacheFile CacheFile;
+		CacheFile.Open(NULL, false);
+		APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1);
+		FILE* output = stdout;
+		if (pkgset.empty() == true)
+			EDSP::WriteScenario(CacheFile, output);
+		else
+			EDSP::WriteLimitedScenario(CacheFile, output, pkgset);
+		fclose(output);
+		_error->DumpErrors(std::cerr);
+		return 0;
+	}
+
+	// Deal with stdout not being a tty
+	if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1)
+		_config->Set("quiet","1");
+
+	if (_config->FindI("quiet", 0) < 1)
+		_config->Set("Debug::EDSP::WriteSolution", true);
+
+	_config->Set("APT::Solver", "internal");
+	_config->Set("edsp::scenario", "stdin");
+	int input = STDIN_FILENO;
+	FILE* output = stdout;
+	SetNonBlock(input, false);
+
+	EDSP::WriteProgress(0, "Start up solver…", output);
+
+	if (pkgInitSystem(*_config,_system) == false) {
+		std::cerr << "System could not be initialized!" << std::endl;
+		return 1;
+	}
+
+	EDSP::WriteProgress(1, "Read request…", output);
+
+	if (WaitFd(input, false, 5) == false)
+		std::cerr << "WAIT timed out in the resolver" << std::endl;
+
+	std::list<std::string> install, remove;
+	bool upgrade, distUpgrade, autoRemove;
+	if (EDSP::ReadRequest(input, install, remove, upgrade, distUpgrade, autoRemove) == false) {
+		std::cerr << "Parsing the request failed!" << std::endl;
+		return 2;
+	}
+
+	EDSP::WriteProgress(5, "Read scenario…", output);
+
+	pkgCacheFile CacheFile;
+	CacheFile.Open(NULL, false);
+
+	EDSP::WriteProgress(50, "Apply request on scenario…", output);
+
+	if (EDSP::ApplyRequest(install, remove, CacheFile) == false) {
+		std::cerr << "Failed to apply request to depcache!" << std::endl;
+		return 3;
+	}
+
+	pkgProblemResolver Fix(CacheFile);
+	for (std::list<std::string>::const_iterator i = remove.begin();
+	     i != remove.end(); ++i) {
+		pkgCache::PkgIterator P = CacheFile->FindPkg(*i);
+		Fix.Clear(P);
+		Fix.Protect(P);
+		Fix.Remove(P);
+	}
+
+	for (std::list<std::string>::const_iterator i = install.begin();
+	     i != install.end(); ++i) {
+		pkgCache::PkgIterator P = CacheFile->FindPkg(*i);
+		Fix.Clear(P);
+		Fix.Protect(P);
+	}
+
+	for (std::list<std::string>::const_iterator i = install.begin();
+	     i != install.end(); ++i)
+		CacheFile->MarkInstall(CacheFile->FindPkg(*i), true);
+
+	EDSP::WriteProgress(60, "Call problemresolver on current scenario…", output);
+
+	if (upgrade == true) {
+		if (pkgAllUpgrade(CacheFile) == false) {
+			EDSP::WriteError("ERR_UNSOLVABLE_UPGRADE", "An upgrade error occured", output);
+			return 0;
+		}
+	} else if (distUpgrade == true) {
+		if (pkgDistUpgrade(CacheFile) == false) {
+			EDSP::WriteError("ERR_UNSOLVABLE_DIST_UPGRADE", "An dist-upgrade error occured", output);
+			return 0;
+		}
+	} else if (Fix.Resolve() == false) {
+		EDSP::WriteError("ERR_UNSOLVABLE", "An error occured", output);
+		return 0;
+	}
+
+	EDSP::WriteProgress(95, "Write solution…", output);
+
+	if (EDSP::WriteSolution(CacheFile, output) == false) {
+		std::cerr << "Failed to output the solution!" << std::endl;
+		return 4;
+	}
+
+	EDSP::WriteProgress(100, "Done", output);
+
+	bool const Errors = _error->PendingError();
+	if (_config->FindI("quiet",0) > 0)
+		_error->DumpErrors(std::cerr);
+	else
+		_error->DumpErrors(std::cerr, GlobalError::DEBUG);
+	return Errors == true ? 100 : 0;
+}
+									/*}}}*/

+ 14 - 0
cmdline/makefile

@@ -65,3 +65,17 @@ include $(PROGRAM_H)
 #TO=$(BIN)
 #TO=$(BIN)
 #TARGET=program
 #TARGET=program
 #include $(COPY_H)
 #include $(COPY_H)
+
+# The internal solver acting as an external
+PROGRAM=apt-internal-solver
+SLIBS = -lapt-pkg $(INTLLIBS)
+LIB_MAKES = apt-pkg/makefile
+SOURCE = apt-internal-solver.cc
+include $(PROGRAM_H)
+
+# This just dumps out the state
+PROGRAM=apt-dump-solver
+SLIBS = -lapt-pkg $(INTLLIBS)
+LIB_MAKES = apt-pkg/makefile
+SOURCE = apt-dump-solver.cc
+include $(PROGRAM_H)

+ 1 - 1
configure.in

@@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 
 
 dnl -- SET THIS TO THE RELEASE VERSION --
 dnl -- SET THIS TO THE RELEASE VERSION --
-AC_DEFINE_UNQUOTED(VERSION,"0.8.2")
+AC_DEFINE_UNQUOTED(VERSION,"0.8.16~exp5")
 PACKAGE="apt"
 PACKAGE="apt"
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_SUBST(PACKAGE)
 AC_SUBST(PACKAGE)

+ 1 - 0
debian/apt-doc.docs

@@ -1,2 +1,3 @@
 README.progress-reporting
 README.progress-reporting
 README.MultiArch
 README.MultiArch
+doc/external-dependency-solver-protocol.txt

+ 1 - 1
debian/apt-utils.dirs

@@ -1,2 +1,2 @@
-usr/lib
+usr/lib/apt/solvers
 usr/bin
 usr/bin

+ 1 - 1
debian/apt-utils.install

@@ -1 +1 @@
-bin/libapt-inst*.so.* usr/lib/
+

+ 1 - 0
debian/apt-utils.links

@@ -0,0 +1 @@
+usr/bin/apt-internal-solver usr/lib/apt/solvers/apt

+ 1 - 0
debian/apt.dirs

@@ -1,5 +1,6 @@
 usr/bin
 usr/bin
 usr/lib/apt/methods
 usr/lib/apt/methods
+usr/lib/apt/solvers
 usr/lib/dpkg/methods/apt
 usr/lib/dpkg/methods/apt
 etc/apt
 etc/apt
 etc/apt/apt.conf.d
 etc/apt/apt.conf.d

+ 1 - 2
debian/apt.install

@@ -1,5 +1,4 @@
 bin/apt-* usr/bin/
 bin/apt-* usr/bin/
-bin/libapt-pkg*.so.* usr/lib/
 bin/methods/* usr/lib/apt/methods/
 bin/methods/* usr/lib/apt/methods/
 scripts/dselect/* usr/lib/dpkg/methods/apt/
 scripts/dselect/* usr/lib/dpkg/methods/apt/
-locale usr/share/
+usr/share/locale/*/*/apt.mo

+ 290 - 0
debian/changelog

@@ -1,3 +1,114 @@
+apt (0.8.16~exp5) experimental; urgency=low
+
+  * apt-pkg/makefile:
+    - install sha256.h compat header
+  * apt-pkg/pkgcachegen.{cc,h}:
+    - use ref-to-ptr semantic in NewDepends() to ensure that the   
+      libapt does not segfault if the cache is remapped in between
+      (LP: #812862)
+    - fix crash when P.Arch() was used but the cache got remapped
+  * apt-pkg/acquire-item.{cc,h}:
+    - do not check for a "Package" tag in optional index targets
+      like the translations index
+
+ -- Michael Vogt <mvo@debian.org>  Fri, 05 Aug 2011 10:57:08 +0200
+
+apt (0.8.16~exp4) experimental; urgency=low
+
+  [ Julian Andres Klode ]
+  * apt-pkg/pkgcache.h:
+    - [ABI break] Add pkgCache::Header::CacheFileSize, storing the cache size
+  * apt-pkg/pkgcachegen.cc:
+    - Write the file size to the cache
+  * apt-pkg/pkgcache.cc:
+    - Check that cache is at least CacheFileSize bytes large (LP: #16467)
+  
+  [ Michael Vogt ]
+  * merged latest fixes from debian-sid
+  * apt-pkg/cdrom.{cc,h}:
+    - cleanup old ABI break avoidance hacks
+  * [ABI break] apt-pkg/acquire-item.{cc,h}:
+    - cleanup around OptionalIndexTarget and SubIndexTarget
+  * [ABI break] merged patch from Jonathan Thomas to have a new
+    RecordField() function in the pkgRecorder parser. Many thanks
+    Thomas
+  * [ABI break] merge patch from Jonathan Thomas to speed up the
+    depcache by caching the install-recommends and install-suggests
+    values
+  * apt-pkg/contrib/fileutl.{cc,h}:
+    - add GetModificationTime() helper
+  * apt-pkg/pkgcachegen.cc:
+    - regenerate the cache if the sources.list changes to ensure
+      that changes in the ordering there will be honored by apt
+  * apt-pkg/sourcelist.{cc,h}:
+    - add pkgSourceList::GetLastModifiedTime() helper
+
+ -- Michael Vogt <mvo@debian.org>  Thu, 28 Jul 2011 16:57:08 +0200
+
+apt (0.8.16~exp3) experimental; urgency=low
+
+  [ David Kalnischkies ]
+  * apt-pkg/pkgcache.h:
+    - readd All{Foreign,Allowed} as suggested by Julian to
+      remain strictly API compatible
+  * apt-pkg/acquire*.{cc,h}:
+    - try even harder to support really big files in the fetcher by
+      converting (hopefully) everything to 'long long' (Closes: #632271)
+  * ftparchive/writer.cc:
+    - generate all checksums in one run over the file for Release
+  * cmdline/apt-get.cc:
+    - add an --assume-no option for testing to say 'no' to everything
+  * apt-pkg/deb/debmetaindex.cc:
+    - add trusted=yes option to mark unsigned (local) repository as trusted
+      based on a patch from Ansgar Burchardt, thanks a lot! (Closes: #596498)
+
+  [ Michael Vogt ]
+  * merge fixes from the debian/unstable upload
+  * merge lp:~mvo/apt/sha512-template to get fixes for the 
+    sha1/md5 verifiation (closes: #632520)
+
+ -- Michael Vogt <mvo@debian.org>  Fri, 15 Jul 2011 09:56:17 +0200
+
+apt (0.8.16~exp2) experimental; urgency=low
+
+  [ David Kalnischkies ]
+  * [ABI-Break] Implement EDSP in libapt-pkg so that all front-ends which
+    use the internal resolver can now be used also with external
+    ones as the usage is hidden in between the old API
+  * provide two edsp solvers in apt-utils:
+    - 'dump' to quickly output a complete scenario and
+    - 'apt' to use the internal as an external resolver
+  * apt-pkg/pkgcache.h:
+    - clean up mess with the "all" handling in MultiArch to
+      fix LP: #733741 cleanly for everyone now
+  * apt-pkg/depcache.cc:
+    - use a boolean instead of an int for Add/Remove in AddStates
+      similar to how it works with AddSizes
+    - let the Mark methods return if their marking was successful
+    - if a Breaks can't be upgraded, remove it. If it or a Conflict
+      can't be removed the installation of the breaker fails.
+  * cmdline/apt-get.cc:
+    - do not discard the error messages from the resolver and instead
+      only show the general 'Broken packages' message if nothing else
+
+  [ Stefano Zacchiroli ]
+  * doc/external-dependency-solver-protocol.txt:
+    - describe EDSP and the configuration interface around it
+  
+  [ Michael Vogt ]
+  * [ABI-Break] merge lp:~mvo/apt/sha512-template to add support for sha512
+  * [ABI-Break] merge lp:~mvo/apt/dpointer to support easier extending
+    without breaking the ABI
+  * increase ABI version and update package names
+
+ -- Michael Vogt <mvo@debian.org>  Wed, 29 Jun 2011 13:57:28 +0200
+
+apt (0.8.16~exp1) experimental; urgency=low
+
+  * merged with the debian/unstable upload
+
+ -- Michael Vogt <mvo@debian.org>  Wed, 29 Jun 2011 12:40:31 +0200
+
 apt (0.8.15.5.6) UNRELEASED; urgency=low
 apt (0.8.15.5.6) UNRELEASED; urgency=low
 
 
   * apt-pkg/contrib/fileutl.{cc,h}:
   * apt-pkg/contrib/fileutl.{cc,h}:
@@ -231,6 +342,185 @@ apt (0.8.15) unstable; urgency=low
 
 
  -- Michael Vogt <mvo@debian.org>  Tue, 28 Jun 2011 18:00:48 +0200
  -- Michael Vogt <mvo@debian.org>  Tue, 28 Jun 2011 18:00:48 +0200
 
 
+apt (0.8.15~exp3) experimental; urgency=low
+
+  * debian/control:
+    - add Breaks: 0.8.15~exp3) for libapt-pkg4.10 and 
+     libapt-inst1.2 (thanks to Jonathan Nieder, closes: #630214)
+    - use depends for the ${shlibs:Depends} to make the breaks work
+
+ -- Michael Vogt <mvo@debian.org>  Fri, 17 Jun 2011 21:51:41 +0200
+
+apt (0.8.15~exp2) experimental; urgency=low
+
+  * debian/control:
+    - fix incorrect Replaces (closes: #630204) for libapt-inst1.2
+
+ -- Michael Vogt <mvo@debian.org>  Wed, 15 Jun 2011 16:51:14 +0200
+
+apt (0.8.15~exp1) experimental; urgency=low
+
+  [ Julian Andres Klode ]
+  * apt-pkg/depcache.cc:
+    - Really release action groups only once (Closes: #622744)
+    - Make purge work again for config-files (LP: #244598) (Closes: #150831)
+  * apt-pkg/acquire-item.cc:
+    - Reject files known to be invalid (LP: #346386) (Closes: #627642)
+  * debian/apt.cron.daily:
+    - Check power after wait, patch by manuel-soto (LP: #705269)
+  * debian/control:
+    - Move ${shlibs:Depends} to Pre-Depends, as we do not want APT
+      unpacked if a library is too old and thus break upgrades
+  * doc/apt-key.8.xml:
+    - Document apt-key net-update (LP: #192810)
+
+  [ Christian Perrier ]
+  * Galician translation update (Miguel Anxo Bouzada). Closes: #626505
+  * Italian translation update (Milo Casagrande). Closes: #627834
+  * German documentation translation update (Chris Leick). Closes: #629949
+
+  [ David Kalnischkies ]
+  * fix a bunch of cppcheck warnings/errors based on a patch by
+    Niels Thykier, thanks! (Closes: #622805)
+  * apt-pkg/depcache.cc:
+    - really include 'rc' packages in the delete count by fixing a
+      typo which exists since 1999 in the source… (LP: #761175)
+    - if critical or-group can't be satisfied, exit directly.
+  * apt-pkg/acquire-method.cc:
+    - write directly to stdout instead of creating the message in
+      memory first before writing to avoid hitting limits
+    - fix order of CurrentURI and UsedMirror in Status() and Log()
+  * apt-pkg/orderlist.cc:
+    - let VisitRProvides report if the calls were successful
+  * apt-pkg/deb/dpkgpm.cc:
+    - replace obsolete usleep with nanosleep
+  * debian/apt{,-utils}.symbols:
+    - update both experimental symbol-files to reflect 0.8.14 state
+  * debian/rules:
+    - remove unused embedded jquery by doxygen from libapt-pkg-doc
+  * cmdline/apt-mark.cc:
+    - reimplement apt-mark in c++
+    - provide a 'showmanual' command (Closes: #582791)
+    - provide a 'dpkg --set-selections' wrapper to set/release holds
+  * cmdline/apt-get.cc:
+    - deprecate mostly undocumented 'markauto' in favor of 'apt-mark'
+  * cmdline/apt-cache.cc:
+    - deprecate mostly undocumented 'showauto' in favor of 'apt-mark'
+  * apt-pkg/pkgcache.cc:
+    - really ignore :arch in FindPkg() in non-multiarch environment
+  * doc/po/de.po:
+    - undo the translation of the command 'dump' in manpage of apt-config
+      as report by Burghard Grossmann on debian-l10n-german, thanks!
+  * apt-pkg/deb/debmetaindex.cc:
+    - do not download TranslationIndex if no Translation-* will be
+      downloaded later on anyway (Closes: #624218)
+  * test/versions.lst:
+    - disable obscure version number tests with versions dpkg doesn't
+      allow any more as they don't start with a number
+  * apt-pkg/acquire-worker.cc:
+    - print filename in the unmatching size warning (Closes: #623137)
+  * apt-pkg/acquire-item.cc:
+    - apply fix for poorly worded 'locate file' error message from
+      Ben Finney, thanks! (Closes: #623171)
+  * methods/http.cc:
+    - add config option to ignore a closed stdin to be able to easily
+      use the method as a simple standalone downloader
+    - Location header in redirects should be absolute URI, but some
+      servers just send an absolute path so still deal with it properly
+    - dequote URL taken from Location in redirects as we will otherwise
+      quote an already quoted string in the request later (Closes: #602412)
+  * apt-pkg/contrib/netrc.cc:
+    - replace non-posix gnu-extension strdupa with strdup
+  * apt-pkg/packagemanager.cc:
+    - ensure for Multi-Arch:same packages that they are unpacked in
+      lock step even in immediate configuration (Closes: #618288)
+
+  [ Michael Vogt ]
+  * methods/mirror.cc:
+    - ignore lines starting with "#" in the mirror file
+    - ignore non http urls in the mirrors
+    - append the dist (e.g. sid, wheezy) as a query string when
+      asking for a suitable mirror 
+  * debian/control:
+    - add libapt-pkg4.10 and libapt-inst1.2 library packages
+
+ -- Michael Vogt <mvo@debian.org>  Fri, 10 Jun 2011 15:32:07 +0200
+
+apt (0.8.14.2) UNRELEASED; urgency=low
+
+  [ Julian Andres Klode ]
+  * apt-pkg/depcache.cc:
+    - Really release action groups only once (Closes: #622744)
+    - Make purge work again for config-files (LP: #244598) (Closes: #150831)
+  * debian/apt.cron.daily:
+    - Check power after wait, patch by manuel-soto (LP: #705269)
+  * debian/control:
+    - Move ${shlibs:Depends} to Pre-Depends, as we do not want APT
+      unpacked if a library is too old and thus break upgrades
+  * doc/apt-key.8.xml:
+    - Document apt-key net-update (LP: #192810)
+
+  [ Christian Perrier ]
+  * Galician translation update (Miguel Anxo Bouzada). Closes: #626505
+
+  [ David Kalnischkies ]
+  * fix a bunch of cppcheck warnings/errors based on a patch by
+    Niels Thykier, thanks! (Closes: #622805)
+  * apt-pkg/depcache.cc:
+    - really include 'rc' packages in the delete count by fixing a
+      typo which exists since 1999 in the source… (LP: #761175)
+    - if critical or-group can't be satisfied, exit directly.
+  * apt-pkg/acquire-method.cc:
+    - write directly to stdout instead of creating the message in
+      memory first before writing to avoid hitting limits
+    - fix order of CurrentURI and UsedMirror in Status() and Log()
+  * apt-pkg/orderlist.cc:
+    - let VisitRProvides report if the calls were successful
+  * apt-pkg/deb/dpkgpm.cc:
+    - replace obsolete usleep with nanosleep
+  * debian/apt{,-utils}.symbols:
+    - update both experimental symbol-files to reflect 0.8.14 state
+  * debian/rules:
+    - remove unused embedded jquery by doxygen from libapt-pkg-doc
+  * cmdline/apt-mark.cc:
+    - reimplement apt-mark in c++
+    - provide a 'showmanual' command (Closes: #582791)
+    - provide a 'dpkg --set-selections' wrapper to set/release holds
+  * cmdline/apt-get.cc:
+    - deprecate mostly undocumented 'markauto' in favor of 'apt-mark'
+  * cmdline/apt-cache.cc:
+    - deprecate mostly undocumented 'showauto' in favor of 'apt-mark'
+  * apt-pkg/pkgcache.cc:
+    - really ignore :arch in FindPkg() in non-multiarch environment
+  * doc/po/de.po:
+    - undo the translation of the command 'dump' in manpage of apt-config
+      as report by Burghard Grossmann on debian-l10n-german, thanks!
+  * apt-pkg/deb/debmetaindex.cc:
+    - do not download TranslationIndex if no Translation-* will be
+      downloaded later on anyway (Closes: #624218)
+  * test/versions.lst:
+    - disable obscure version number tests with versions dpkg doesn't
+      allow any more as they don't start with a number
+  * apt-pkg/acquire-worker.cc:
+    - print filename in the unmatching size warning (Closes: #623137)
+  * apt-pkg/acquire-item.cc:
+    - apply fix for poorly worded 'locate file' error message from
+      Ben Finney, thanks! (Closes: #623171)
+  * methods/http.cc:
+    - add config option to ignore a closed stdin to be able to easily
+      use the method as a simple standalone downloader
+    - Location header in redirects should be absolute URI, but some
+      servers just send an absolute path so still deal with it properly
+    - dequote URL taken from Location in redirects as we will otherwise
+      quote an already quoted string in the request later (Closes: #602412)
+  * apt-pkg/contrib/netrc.cc:
+    - replace non-posix gnu-extension strdupa with strdup
+  * apt-pkg/packagemanager.cc:
+    - ensure for Multi-Arch:same packages that they are unpacked in
+      lock step even in immediate configuration (Closes: #618288)
+
+ -- Michael Vogt <mvo@debian.org>  Mon, 16 May 2011 14:57:52 +0200
+
 apt (0.8.14.1) unstable; urgency=low
 apt (0.8.14.1) unstable; urgency=low
 
 
   * apt-pkg/acquire-item.cc:
   * apt-pkg/acquire-item.cc:

+ 63 - 22
debian/control

@@ -6,26 +6,61 @@ Uploaders: Michael Vogt <mvo@debian.org>, Otavio Salvador <otavio@debian.org>,
  Christian Perrier <bubulle@debian.org>, Daniel Burrows <dburrows@debian.org>,
  Christian Perrier <bubulle@debian.org>, Daniel Burrows <dburrows@debian.org>,
  Julian Andres Klode <jak@debian.org>
  Julian Andres Klode <jak@debian.org>
 Standards-Version: 3.9.2
 Standards-Version: 3.9.2
-Build-Depends: dpkg-dev (>= 1.15.8), debhelper (>= 7.2.3~), libdb-dev, gettext (>= 0.12), libcurl4-gnutls-dev (>= 7.19.0), zlib1g-dev | libz-dev, debiandoc-sgml, xsltproc, docbook-xsl, docbook-xml, po4a (>= 0.34-2), autotools-dev, autoconf, automake, doxygen
+Build-Depends: dpkg-dev (>= 1.15.8), debhelper (>= 7.2.3~), libdb-dev,
+ gettext (>= 0.12), libcurl4-gnutls-dev (>= 7.19.0), 
+ zlib1g-dev | libz-dev, debiandoc-sgml, xsltproc, docbook-xsl, docbook-xml, 
+ po4a (>= 0.34-2), autotools-dev, autoconf, automake, doxygen
 Build-Conflicts: autoconf2.13, automake1.4
 Build-Conflicts: autoconf2.13, automake1.4
 Vcs-Bzr: http://bzr.debian.org/apt/debian-sid/
 Vcs-Bzr: http://bzr.debian.org/apt/debian-sid/
 Vcs-Browser: http://bzr.debian.org/loggerhead/apt/debian-sid/
 Vcs-Browser: http://bzr.debian.org/loggerhead/apt/debian-sid/
 
 
 Package: apt
 Package: apt
 Architecture: any
 Architecture: any
-Pre-Depends: ${shlibs:Depends}
-Depends: debian-archive-keyring, ${misc:Depends}, gnupg
+Depends: ${shlibs:Depends}, ${misc:Depends}, debian-archive-keyring, gnupg
 Replaces: manpages-pl (<< 20060617-3~)
 Replaces: manpages-pl (<< 20060617-3~)
-Provides: ${libapt-pkg:provides}
 Conflicts: python-apt (<< 0.7.93.2~)
 Conflicts: python-apt (<< 0.7.93.2~)
 Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt
 Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt
-Description: Advanced front-end for dpkg
- This is Debian's next generation front-end for the dpkg package manager.
- It provides the apt-get utility and APT dselect method that provides a 
- simpler, safer way to install and upgrade packages.
+Description: APT's commandline package manager
+ This package provides commandline tools for searching and
+ managing as well as querying information about packages
+ as a low-level access to all features of the libapt-pkg library.
  .
  .
- APT features complete installation ordering, multiple source capability
- and several other unique features, see the Users Guide in apt-doc.
+ These include:
+  * apt-get for retrieval of packages and information about them
+    from authenticated sources and for installation, upgrade and
+    removal of packages together with their dependencies
+  * apt-cache for querying available information about installed
+    as well as installable packages
+  * apt-cdrom to use removable media as a source for packages
+  * apt-config as an interface to the configuration settings
+  * apt-key as an interface to manage authentication keys
+
+Package: libapt-pkg4.11
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: APT's package managment runtime library
+ This library provides the common functionality for searching and
+ managing packages as well as information about packages.
+ Higher-level package managers can depend upon this library.
+ .
+ This includes:
+  * retrieval of information about packages from multiple sources
+  * retrieval of packages and all dependent packages
+    needed to satisfy a request either through an internal
+    solver or by interfacing with an external one
+  * authenticating the sources and validating the retrieved data
+  * installation and removal of packages in the system
+  * providing different transports to retrieve data over cdrom, ftp,
+    http, rsh as well as an interface to add more transports like
+    https (apt-transport-https) and debtorrent (apt-transport-debtorrent).
+
+Package: libapt-inst1.3
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: APT's deb package format runtime library
+ This library provides methods to query and extract information 
+ from deb packages. This includes the control data and the package
+ file content.
 
 
 Package: apt-doc
 Package: apt-doc
 Architecture: all
 Architecture: all
@@ -33,13 +68,13 @@ Priority: optional
 Depends: ${misc:Depends}
 Depends: ${misc:Depends}
 Section: doc
 Section: doc
 Description: Documentation for APT
 Description: Documentation for APT
- This package contains the user guide and offline guide, for APT, an
- Advanced Package Tool.
+ This package contains the user guide and offline guide for various
+ APT tools which are provided in a html and a text-only version.
 
 
 Package: libapt-pkg-dev
 Package: libapt-pkg-dev
 Architecture: any
 Architecture: any
 Priority: optional
 Priority: optional
-Depends: apt (= ${binary:Version}), apt-utils (= ${binary:Version}), ${libapt-pkg:provides}, ${libapt-inst:provides}, ${misc:Depends}, zlib1g-dev | zlib-dev
+Depends: ${libapt-pkg-name} (= ${binary:Version}), ${libapt-inst-name} (= ${binary:Version}), ${misc:Depends}, zlib1g-dev | zlib-dev
 Section: libdevel
 Section: libdevel
 Description: Development files for APT's libapt-pkg and libapt-inst
 Description: Development files for APT's libapt-pkg and libapt-inst
  This package contains the header files and libraries for
  This package contains the header files and libraries for
@@ -61,19 +96,25 @@ Description: Documentation for APT development
 Package: apt-utils
 Package: apt-utils
 Architecture: any
 Architecture: any
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Depends: ${shlibs:Depends}, ${misc:Depends}
-Provides: ${libapt-inst:provides}
 Description: APT utility programs
 Description: APT utility programs
- This package contains some APT utility programs such as apt-ftparchive,
- apt-sortpkgs and apt-extracttemplates.
+ This package contains some less used commandline utilities related
+ to package managment with APT.
  .
  .
- apt-extracttemplates is used by debconf to prompt for configuration 
- questions before installation. apt-ftparchive is used to create Package
- and other index files. apt-sortpkgs is a Package/Source file normalizer.
+  * apt-extracttemplates is used by debconf to prompt for configuration
+    questions before installation.
+  * apt-ftparchive is used to create Packages and other index files
+    needed to publish an archive of debian packages
+  * apt-sortpkgs is a Packages/Sources file normalizer.
 
 
 Package: apt-transport-https
 Package: apt-transport-https
 Architecture: any
 Architecture: any
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Priority: optional
 Priority: optional
-Description: APT https transport
- This package contains a APT https transport. It makes it possible to
- use 'deb https://foo distro main' lines in the sources.list.
+Description: https download transport for APT
+ This package enables the usage of 'deb https://foo distro main' lines
+ in the /etc/apt/sources.list so that all package managers using the
+ libapt-pkg library can access metadata and packages available in sources
+ accessable over https (Hypertext Transfer Protocol Secure).
+ .
+ This transport supports server as well as client authenification
+ with certificates.

+ 2 - 0
debian/libapt-inst1.3.install

@@ -0,0 +1,2 @@
+bin/libapt-inst*.so.* usr/lib/
+usr/share/locale/*/*/libapt-inst*.mo

+ 2 - 3
debian/apt-utils.symbols

@@ -1,5 +1,4 @@
-libapt-inst.so.1.2 libapt-inst1.2
-| apt-utils #MINVER#
+libapt-inst.so.1.3 libapt-inst1.3 #MINVER#
 * Build-Depends-Package: libapt-pkg-dev
 * Build-Depends-Package: libapt-pkg-dev
  (c++)"ExtractTar::Done(bool)@Base" 0.8.0
  (c++)"ExtractTar::Done(bool)@Base" 0.8.0
  (c++)"ExtractTar::Go(pkgDirStream&)@Base" 0.8.0
  (c++)"ExtractTar::Go(pkgDirStream&)@Base" 0.8.0
@@ -114,7 +113,7 @@ libapt-inst.so.1.2 libapt-inst1.2
 # (c++|regex|optional=std)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0
 # (c++|regex|optional=std)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0
 # (c++|optional=std)"std::basic_string<char, std::char_traits<char>, std::allocator<char> >& std::basic_string<char, std::char_traits<char>, std::allocator<char> >::append<unsigned char*>(unsigned char*, unsigned char*)@Base" 0.8.0
 # (c++|optional=std)"std::basic_string<char, std::char_traits<char>, std::allocator<char> >& std::basic_string<char, std::char_traits<char>, std::allocator<char> >::append<unsigned char*>(unsigned char*, unsigned char*)@Base" 0.8.0
 ### gcc-4.6 specific
 ### gcc-4.6 specific
- (c++|optional=std)"std::vector<APT::Configuration::Compressor, std::allocator<APT::Configuration::Compressor> >::~vector()@Base" 0.8.12 1
+ (c++|optional=std)"std::vector<APT::Configuration::Compressor, std::allocator<APT::Configuration::Compressor> >::~vector()@Base" 0.8.12
  (c++|optional=std)"std::basic_string<char, std::char_traits<char>, std::allocator<char> >& std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace_dispatch<unsigned char*>(__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, unsigned char*, unsigned char*, std::__false_type)@Base" 0.8.0
  (c++|optional=std)"std::basic_string<char, std::char_traits<char>, std::allocator<char> >& std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace_dispatch<unsigned char*>(__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, unsigned char*, unsigned char*, std::__false_type)@Base" 0.8.0
 ### try to ignore std:: template instances
 ### try to ignore std:: template instances
  (c++|regex|optional=std)"^std::basic_string<.+ >\(.+\)@Base$" 0.8.0
  (c++|regex|optional=std)"^std::basic_string<.+ >\(.+\)@Base$" 0.8.0

+ 2 - 0
debian/libapt-pkg4.11.install

@@ -0,0 +1,2 @@
+bin/libapt-pkg*.so.* usr/lib/
+usr/share/locale/*/*/libapt-pkg*.mo

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 70 - 70
debian/apt.symbols


+ 57 - 14
debian/rules

@@ -62,7 +62,7 @@ configure.in:
 endif
 endif
 
 
 # APT Programs in apt-utils
 # APT Programs in apt-utils
-APT_UTILS=ftparchive sortpkgs extracttemplates
+APT_UTILS=ftparchive sortpkgs extracttemplates internal-solver
 
 
 # Uncomment this to turn on verbose mode.
 # Uncomment this to turn on verbose mode.
 #export DH_VERBOSE=1
 #export DH_VERBOSE=1
@@ -70,9 +70,9 @@ APT_UTILS=ftparchive sortpkgs extracttemplates
 # Find the libapt-pkg major version for use in other control files
 # Find the libapt-pkg major version for use in other control files
 include buildlib/libversion.mak
 include buildlib/libversion.mak
 
 
-# Determine which package we should provide in the control files
-LIBAPTPKG_PROVIDE=libapt-pkg$(LIBAPTPKG_MAJOR)
-LIBAPTINST_PROVIDE=libapt-inst$(LIBAPTINST_MAJOR)
+# Determine which library package names to use
+LIBAPT_PKG=libapt-pkg$(LIBAPTPKG_MAJOR)
+LIBAPT_INST=libapt-inst$(LIBAPTINST_MAJOR)
 
 
 # do not fail as we are just experimenting with symbol files for now
 # do not fail as we are just experimenting with symbol files for now
 export DPKG_GENSYMBOLS_CHECK_LEVEL=0
 export DPKG_GENSYMBOLS_CHECK_LEVEL=0
@@ -97,6 +97,10 @@ build/configure-stamp: configure
 build/build-stamp: build/configure-stamp
 build/build-stamp: build/configure-stamp
 	# Add here commands to compile the package.
 	# Add here commands to compile the package.
 	$(MAKE) binary
 	$(MAKE) binary
+	# compat symlink for the locale split
+	mkdir -p build/usr/share 
+	cd build/usr/share && ln -f -s ../../locale .
+	# done here
 	touch $@
 	touch $@
 
 
 build/build-doc-stamp: build/configure-stamp
 build/build-doc-stamp: build/configure-stamp
@@ -134,7 +138,7 @@ libapt-pkg-doc: build-doc
 	dh_compress -p$@
 	dh_compress -p$@
 	dh_fixperms -p$@
 	dh_fixperms -p$@
 	dh_installdeb -p$@
 	dh_installdeb -p$@
-	dh_gencontrol -p$@ -- -Vlibapt-pkg:provides=$(LIBAPTPKG_PROVIDE)
+	dh_gencontrol -p$@
 	dh_md5sums -p$@
 	dh_md5sums -p$@
 	dh_builddeb -p$@
 	dh_builddeb -p$@
 
 
@@ -162,7 +166,7 @@ apt-doc: build-doc
 
 
 # Build architecture-dependent files here.
 # Build architecture-dependent files here.
 
 
-binary-arch: apt libapt-pkg-dev apt-utils apt-transport-https
+binary-arch: $(LIBAPT_PKG) $(LIBAPT_INST) apt libapt-pkg-dev apt-utils apt-transport-https
 apt_MANPAGES = apt-cache apt-cdrom apt-config apt-get apt-key apt-mark apt-secure apt apt.conf apt_preferences sources.list
 apt_MANPAGES = apt-cache apt-cdrom apt-config apt-get apt-key apt-mark apt-secure apt apt.conf apt_preferences sources.list
 apt: build build-doc
 apt: build build-doc
 	dh_testdir -p$@
 	dh_testdir -p$@
@@ -182,7 +186,7 @@ apt: build build-doc
 	dh_install -p$@ --sourcedir=$(BLD)
 	dh_install -p$@ --sourcedir=$(BLD)
 
 
 	# Remove the bits that are in apt-utils
 	# Remove the bits that are in apt-utils
-	rm $(addprefix debian/$@/usr/bin/apt-,$(APT_UTILS))
+	rm $(addprefix debian/$@/usr/bin/apt-,$(APT_UTILS) dump-solver)
 
 
 	# https has its own package
 	# https has its own package
 	rm debian/$@/usr/lib/apt/methods/https
 	rm debian/$@/usr/lib/apt/methods/https
@@ -202,10 +206,9 @@ apt: build build-doc
 	dh_strip -p$@
 	dh_strip -p$@
 	dh_compress -p$@
 	dh_compress -p$@
 	dh_fixperms -p$@
 	dh_fixperms -p$@
-	dh_makeshlibs -p$@
 	dh_installdeb -p$@
 	dh_installdeb -p$@
-	dh_shlibdeps -p$@ -l$(CURDIR)/debian/apt/usr/lib:$(CURDIR)/debian/$@/usr/lib
-	dh_gencontrol -p$@ -- -Vlibapt-pkg:provides=$(LIBAPTPKG_PROVIDE)
+	dh_shlibdeps -p$@
+	dh_gencontrol -p$@
 	dh_md5sums -p$@
 	dh_md5sums -p$@
 	dh_builddeb -p$@
 	dh_builddeb -p$@
 
 
@@ -224,7 +227,7 @@ libapt-pkg-dev: build
 	dh_compress -p$@
 	dh_compress -p$@
 	dh_fixperms -p$@
 	dh_fixperms -p$@
 	dh_installdeb -p$@
 	dh_installdeb -p$@
-	dh_gencontrol -p$@ -- -Vlibapt-pkg:provides=$(LIBAPTPKG_PROVIDE) -Vlibapt-inst:provides=$(LIBAPTINST_PROVIDE)
+	dh_gencontrol -p$@ -- -Vlibapt-pkg-name=$(LIBAPT_PKG) -Vlibapt-inst-name=$(LIBAPT_INST)
 	dh_md5sums -p$@
 	dh_md5sums -p$@
 	dh_builddeb -p$@
 	dh_builddeb -p$@
 
 
@@ -236,8 +239,10 @@ apt-utils: build
 	dh_installdirs -p$@
 	dh_installdirs -p$@
 
 
 	cp $(addprefix $(BLD)/bin/apt-,$(APT_UTILS)) debian/$@/usr/bin/
 	cp $(addprefix $(BLD)/bin/apt-,$(APT_UTILS)) debian/$@/usr/bin/
+	cp $(BLD)/bin/apt-dump-solver debian/$@/usr/lib/apt/solvers/dump
 
 
 	dh_install -p$@ --sourcedir=$(BLD)
 	dh_install -p$@ --sourcedir=$(BLD)
+	dh_link -p$@
 	dh_installdocs -p$@
 	dh_installdocs -p$@
 	dh_installexamples -p$@
 	dh_installexamples -p$@
 
 
@@ -250,8 +255,46 @@ apt-utils: build
 	dh_fixperms -p$@
 	dh_fixperms -p$@
 	dh_makeshlibs -p$@
 	dh_makeshlibs -p$@
 	dh_installdeb -p$@
 	dh_installdeb -p$@
-	dh_shlibdeps -p$@ -l$(CURDIR)/debian/apt/usr/lib:$(CURDIR)/debian/$@/usr/lib
-	dh_gencontrol -p$@ -- -Vlibapt-inst:provides=$(LIBAPTINST_PROVIDE)
+	dh_shlibdeps -p$@
+	dh_gencontrol -p$@
+	dh_md5sums -p$@
+	dh_builddeb -p$@
+
+$(LIBAPT_PKG): build
+	dh_testdir -p$@
+	dh_testroot -p$@
+	dh_prep -p$@
+	dh_installdirs -p$@
+
+	dh_install -p$@ --sourcedir=$(BLD)
+	dh_installdocs -p$@
+	dh_installchangelogs -p$@
+	dh_strip -p$@
+	dh_compress -p$@
+	dh_fixperms -p$@
+	dh_makeshlibs -p$@
+	dh_installdeb -p$@
+	dh_shlibdeps -p$@ 
+	dh_gencontrol -p$@
+	dh_md5sums -p$@
+	dh_builddeb -p$@
+
+$(LIBAPT_INST): build
+	dh_testdir -p$@
+	dh_testroot -p$@
+	dh_prep -p$@
+	dh_installdirs -p$@
+
+	dh_install -p$@ --sourcedir=$(BLD)
+	dh_installdocs -p$@
+	dh_installchangelogs -p$@
+	dh_strip -p$@
+	dh_compress -p$@
+	dh_fixperms -p$@
+	dh_makeshlibs -p$@
+	dh_installdeb -p$@
+	dh_shlibdeps -p$@ 
+	dh_gencontrol -p$@
 	dh_md5sums -p$@
 	dh_md5sums -p$@
 	dh_builddeb -p$@
 	dh_builddeb -p$@
 
 
@@ -273,7 +316,7 @@ apt-transport-https: build libapt-pkg-dev
 	dh_compress -p$@
 	dh_compress -p$@
 	dh_fixperms -p$@
 	dh_fixperms -p$@
 	dh_installdeb -p$@
 	dh_installdeb -p$@
-	dh_shlibdeps -p$@ -l$(CURDIR)/debian/apt/usr/lib:$(CURDIR)/debian/$@/usr/lib
+	dh_shlibdeps -p$@ 
 	dh_gencontrol -p$@
 	dh_gencontrol -p$@
 	dh_md5sums -p$@
 	dh_md5sums -p$@
 	dh_builddeb -p$@
 	dh_builddeb -p$@

+ 5 - 0
doc/apt-get.8.xml

@@ -433,6 +433,11 @@
      Configuration Item: <literal>APT::Get::Assume-Yes</literal>.</para></listitem>
      Configuration Item: <literal>APT::Get::Assume-Yes</literal>.</para></listitem>
      </varlistentry>
      </varlistentry>
 
 
+     <varlistentry><term><option>--assume-no</option></term>
+     <listitem><para>Automatic "no" to all prompts.
+     Configuration Item: <literal>APT::Get::Assume-No</literal>.</para></listitem>
+     </varlistentry>
+
      <varlistentry><term><option>-u</option></term><term><option>--show-upgraded</option></term>
      <varlistentry><term><option>-u</option></term><term><option>--show-upgraded</option></term>
      <listitem><para>Show upgraded packages; Print out a list of all packages that are to be
      <listitem><para>Show upgraded packages; Print out a list of all packages that are to be
      upgraded. 
      upgraded. 

+ 299 - 0
doc/external-dependency-solver-protocol.txt

@@ -0,0 +1,299 @@
+# APT External Dependency Solver Protocol (EDSP) - version 0.4
+
+This document describes the communication protocol between APT and
+external dependency solvers. The protocol is called APT EDSP, for "APT
+External Dependency Solver Protocol".
+
+
+## Components
+
+- **APT**: we know this one.
+- APT is equipped with its own **internal solver** for dependencies,
+  which is identified by the string `internal`.
+- **External solver**: an *external* software component able to resolve
+  dependencies on behalf of APT.
+  
+At each interaction with APT, a single solver is in use.  When there is
+a total of 2 or more solvers, internals or externals, the user can
+choose which one to use.
+
+Each solver is identified by an unique string, the **solver
+name**. Solver names must be formed using only alphanumeric ASCII
+characters, dashes, and underscores; solver names must start with a
+lowercase ASCII letter. The special name `internal` denotes APT's
+internal solver, is reserved, and cannot be used by external solvers.
+
+
+## Installation
+
+Each external solver is installed as a file under Dir::Bin::Solvers (see
+below), which defaults to `/usr/lib/apt/solvers`. We will assume in the
+remainder of this section that such a default value is in effect.
+
+The naming scheme is `/usr/lib/apt/solvers/NAME`, where `NAME` is the
+name of the external solver.
+
+Each file under `/usr/lib/apt/solvers` corresponding to an external
+solver must be executable.
+
+No non-solver files must be installed under `/usr/lib/apt/solvers`, so
+that an index of available external solvers can be obtained by listing
+the content of that directory.
+
+
+## Configuration
+
+Several APT options can be used to affect dependency solving in APT. An
+overview of them is given below. Please refer to proper APT
+configuration documentation for more, and more up to date, information.
+
+- **APT::Solver**: the name of the solver to be used for
+  dependency solving. Defaults to `internal`
+
+- **APT::Solver::Strict-Pinning**: whether pinning must be strictly
+  respected (as the internal solver does) or can be slightly deviated
+  from. Defaults to `yes`.
+
+- **APT::Solver::NAME::Preferences** (where NAME is a solver name):
+  solver-specific user preference string used during dependency solving,
+  when the solver NAME is in use. Check solver-specific documentation
+  for what is supported here. Defaults to the empty string.
+
+- **Dir::Bin::Solvers**: absolute path of the directory where to look for
+  external solvers. Defaults to `/usr/lib/apt/solvers`.
+
+## Protocol
+
+When configured to use an external solver, APT will resort to it to
+decide which packages should be installed or removed.
+
+The interaction happens **in batch**: APT will invoke the external
+solver passing the current status of installed and available packages,
+as well as the user request to alter the set of installed packages. The
+external solver will compute a new complete set of installed packages
+and gives APT a "diff" listing of which *additional* packages should be
+installed and of which currently installed packages should be
+*removed*. (Note: the order in which those actions have to be performed
+will be up to APT to decide.)
+
+External solvers are invoked by executing them. Communications happens
+via the file descriptors: **stdin** (standard input) and **stdout**
+(standard output). stderr is not used by the EDSP protocol. Solvers can
+therefore use stderr to dump debugging information that could be
+inspected separately.
+
+After invocation, the protocol passes through a sequence of phases:
+
+1. APT invokes the external solver
+2. APT send to the solver a dependency solving **scenario**
+3. The solver solves dependencies. During this phase the solver may
+   send, repeatedly, **progress** information to APT.
+4. The solver sends back to APT an **answer**, i.e. either a *solution*
+   or an *error* report.
+5. The external solver exits
+
+
+### Scenario
+
+A scenario is a text file encoded in a format very similar to the "Deb
+822" format (AKA "the format used by Debian `Packages` files"). A
+scenario consists of two distinct parts: a **request** and a **package
+universe**, occurring in that order. The request consists of a single
+Deb 822 stanza, while the package universe consists of several such
+stanzas. All stanzas occurring in a scenario are separated by an empty
+line.
+
+
+#### Request
+
+Within a dependency solving scenario, a request represents the action on
+installed packages requested by the user.
+
+A request is a single Deb 822 stanza opened by a mandatory Request field
+and followed by a mixture of action and preference fields.
+
+The value of the **Request:** field is a string describing the EDSP
+protocol which will be used to communicate. At present, the string must
+be `EDSP 0.4`.
+
+a unique request identifier, such as an
+UUID. Request fields are mainly used to identify the beginning of a
+request stanza; their actual values are otherwise not used by the EDSP
+protocol.
+
+The following **action fields** are supported in request stanzas:
+
+- **Install:** (optional, defaults to the empty string) A space
+  separated list of package names, with *no version attached*, to
+  install. This field denotes a list of packages that the user wants to
+  install, usually via an APT `install` request.
+
+- **Remove:** (optional, defaults to the empty string) Same syntax of
+  Install. This field denotes a list of packages that the user wants to
+  remove, usually via APT `remove` or `purge` requests.
+
+- **Upgrade:** (optional, defaults to `no`). Allowed values: `yes`,
+  `no`. When set to `yes`, an upgrade of all installed packages has been
+  requested, usually via an APT `upgrade` request.
+
+- **Dist-Upgrade:** (optional, defaults to `no`). Allowed values: `yes`,
+  `no`. Same as Upgrade, but for APT `dist-upgrade` requests.
+
+- **Autoremove:** (optional, defaults to `no`). Allowed values: `yes`,
+  `no`. When set to `yes`, a clean up of unused automatically installed
+  packages has been requested, usually via an APT `autoremove` request.
+
+The following **preference fields** are supported in request stanzas:
+
+- **Strict-Pinning:** (optional, defaults to `yes`). Allowed values:
+  `yes`, `no`. When set to `yes`, APT pinning is strict, in the sense
+  that the solver must not propose to install packages which are not APT
+  candidates (see the `APT-Pin` and `APT-Candidate` fields in the
+  package universe). When set to `no`, the solver does only a best
+  effort attempt to install APT candidates. Usually, the value of this
+  field comes from the `APT::Solver::Strict-Pinning` configuration
+  option.
+
+- **Preferences:** a solver-specific optimization string, usually coming
+  from the `APT::Solver::Preferences` configuration option.
+
+
+#### Package universe
+
+A package universe is a list of Deb 822 stanzas, one per package, called
+**package stanzas**. Each package stanzas starts with a Package
+field. The following fields are supported in package stanzas:
+
+- All fields contained in the dpkg database, with the exception of
+  fields marked as "internal" (see the manpage `dpkg-query (1)`). Among
+  those fields, the following are mandatory for all package stanzas:
+  Package, Version, Architecture.
+  
+  It is recommended not to pass the Description field to external
+  solvers or, alternatively, to trim it to the short description only.
+
+- **Installed:** (optional, defaults to `no`). Allowed values: `yes`,
+  `no`. When set to `yes`, the corresponding package is currently
+  installed.
+  
+  Note: the Status field present in the dpkg database must not be passed
+  to the external solver, as it's an internal dpkg field. Installed and
+  other fields permit to encode the most relevant aspects of Status in
+  communications with solvers.
+
+- **Hold:** (optional, defaults to `no`). Allowed values: `yes`,
+  `no`. When set to `yes`, the corresponding package is marked as "on
+  hold" by dpkg.
+
+- **APT-ID:** (mandatory). Unique package identifier, according to APT.
+
+- **APT-Pin:** (mandatory). Must be an integer. Package pin value,
+  according to APT policy.
+
+- **APT-Candidate:** (optional, defaults to `no`). Allowed values:
+  `yes`, `no`. When set to `yes`, the corresponding package is the APT
+  candidate for installation among all available packages with the same
+  name.
+
+- **APT-Automatic:** (optional, defaults to `no`). Allowed values:
+  `yes`, `no`. When set to `yes`, the corresponding package is marked by
+  APT as automatic installed. Note that automatic installed packages
+  should be removed by the solver only when the Autoremove action is
+  requested (see Request section).
+
+### Answer
+
+An answer from the external solver to APT is either a *solution* or an
+*error*.
+
+The following invariant on **exit codes** must hold true. When the
+external solver is *able to find a solution*, it will write the solution
+to standard output and then exit with an exit code of 0. When the
+external solver is *unable to find a solution* (and s aware of that), it
+will write an error to standard output and then exit with an exit code
+of 0. An exit code other than 0 will be interpreted as a solver crash
+with no meaningful error about dependency resolution to convey to the
+user.
+
+
+#### Solution
+
+A solution is a list of Deb 822 stanzas. Each of them could be an
+install stanza (telling APT to install a specific package), a remove
+stanza (telling APT to remove one), or an autoremove stanza (telling APT
+about the *future* possibility of removing a package using the
+Autoremove action).
+
+An **install stanza** starts with an Install field and supports the
+following fields:
+
+- **Install:** (mandatory). The value is a package identifier,
+  referencing one of the package stanzas of the package universe via its
+  APT-ID field.
+
+- All fields supported by package stanzas.
+
+**Remove stanzas** are similar to install stanzas, but have **Remove**
+fields instead of Install fields.
+
+**Autoremove stanzas** are similar to install stanzas, but have
+**Autoremove** fields instead of Install fields. Autoremove stanzas
+should be output so that APT can inform the user of which packages they
+can now autoremove, as a consequence of the executed action. However,
+this protocol makes no assumption on the fact that a subsequent
+invocation of an Autoremove action will actually remove the very same
+packages indicated by Autoremove stanzas in the former solution.
+
+In terms of expressivity, install and remove stanzas can carry one
+single field each, as APT-IDs are enough to pinpoint packages to be
+installed/removed. Nonetheless, for protocol readability, it is
+recommended that solvers either add unconditionally the fields Package,
+Version, and Architecture to all install/remove stanzas or,
+alternatively, that they support a `--verbose` command line flag that
+explicitly enables the output of those fields in solutions.
+
+
+#### Error
+
+An error is a single Deb 822 stanza, starting the field Error. The
+following fields are supported in error stanzas:
+
+- **Error:** (mandatory). The value of this field is ignored, although
+  it should be a unique error identifier, such as a UUID.
+
+- **Message:** (mandatory). The value of this field is a text string,
+  meant to be read by humans, that explains the cause of the solver
+  error. Message fields might be multi-line, like the Description field
+  in the dpkg database. The first line conveys a short message, which
+  can be explained in more details using subsequent lines.
+
+
+### Progress
+
+During dependency solving, an external solver may send progress
+information to APT using **progress stanzas**. A progress stanza starts
+with the Progress field and might contain the following fields:
+
+- **Progress:** (mandatory). The value of this field is a date and time
+  timestamp, in RFC 2822 format. The timestamp provides a time
+  annotation for the progress report.
+
+- **Percentage:** (optional). An integer from 0 to 100, representing the
+  completion of the dependency solving process, as declared by the
+  solver.
+
+- **Message:** (optional). A textual message, meant to be read by the
+  APT user, telling what is going on within the dependency solving
+  (e.g. the current phase of dependency solving, as declared by the
+  solver).
+
+
+# Future extensions
+
+Potential future extensions to this protocol, listed in no specific
+order, include:
+
+- fixed error types to identify common failures across solvers and
+  enable APT to translate error messages
+- structured error data to explain failures in terms of packages and
+  dependencies

+ 48 - 50
doc/po/apt-doc.pot

@@ -7,7 +7,7 @@
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2011-06-28 16:42+0200\n"
+"POT-Creation-Date: 2011-06-08 16:54+0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -967,7 +967,7 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:288 apt-ftparchive.1.xml:572 apt-get.8.xml:393 apt-sortpkgs.1.xml:61
+#: apt-cache.8.xml:288 apt-ftparchive.1.xml:571 apt-get.8.xml:393 apt-sortpkgs.1.xml:61
 msgid "<option>-s</option>"
 msgid "<option>-s</option>"
 msgstr ""
 msgstr ""
 
 
@@ -987,12 +987,12 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:296 apt-ftparchive.1.xml:546 apt-get.8.xml:383
+#: apt-cache.8.xml:296 apt-ftparchive.1.xml:545 apt-get.8.xml:383
 msgid "<option>-q</option>"
 msgid "<option>-q</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:296 apt-ftparchive.1.xml:546 apt-get.8.xml:383
+#: apt-cache.8.xml:296 apt-ftparchive.1.xml:545 apt-get.8.xml:383
 msgid "<option>--quiet</option>"
 msgid "<option>--quiet</option>"
 msgstr ""
 msgstr ""
 
 
@@ -1067,7 +1067,7 @@ msgstr ""
 #: apt-cache.8.xml:317
 #: apt-cache.8.xml:317
 msgid ""
 msgid ""
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
-"print all dependencies. This can be tweaked with these flags which will omit "
+"print all dependencies. This can be twicked with these flags which will omit "
 "the specified dependency type.  Configuration Item: "
 "the specified dependency type.  Configuration Item: "
 "<literal>APT::Cache::Show<replaceable>DependencyType</replaceable></literal> "
 "<literal>APT::Cache::Show<replaceable>DependencyType</replaceable></literal> "
 "e.g. <literal>APT::Cache::ShowRecommends</literal>."
 "e.g. <literal>APT::Cache::ShowRecommends</literal>."
@@ -1091,7 +1091,7 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:328 apt-cdrom.8.xml:134 apt-ftparchive.1.xml:584
+#: apt-cache.8.xml:328 apt-cdrom.8.xml:134 apt-ftparchive.1.xml:583
 msgid "<option>-a</option>"
 msgid "<option>-a</option>"
 msgstr ""
 msgstr ""
 
 
@@ -1187,7 +1187,7 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist>
 #. type: Content of: <refentry><refsect1><variablelist>
-#: apt-cache.8.xml:367 apt-cdrom.8.xml:153 apt-config.8.xml:101 apt-extracttemplates.1.xml:70 apt-ftparchive.1.xml:612 apt-get.8.xml:570 apt-mark.8.xml:140 apt-sortpkgs.1.xml:67
+#: apt-cache.8.xml:367 apt-cdrom.8.xml:153 apt-config.8.xml:101 apt-extracttemplates.1.xml:70 apt-ftparchive.1.xml:611 apt-get.8.xml:570 apt-mark.8.xml:140 apt-sortpkgs.1.xml:67
 msgid "&apt-commonoptions;"
 msgid "&apt-commonoptions;"
 msgstr ""
 msgstr ""
 
 
@@ -1202,7 +1202,7 @@ msgid "&file-sourceslist; &file-statelists;"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
-#: apt-cache.8.xml:379 apt-cdrom.8.xml:158 apt-config.8.xml:106 apt-extracttemplates.1.xml:77 apt-ftparchive.1.xml:628 apt-get.8.xml:585 apt-key.8.xml:193 apt-mark.8.xml:150 apt-secure.8.xml:185 apt-sortpkgs.1.xml:72 apt.conf.5.xml:1099 apt_preferences.5.xml:704 sources.list.5.xml:234
+#: apt-cache.8.xml:379 apt-cdrom.8.xml:158 apt-config.8.xml:106 apt-extracttemplates.1.xml:77 apt-ftparchive.1.xml:627 apt-get.8.xml:585 apt-key.8.xml:193 apt-mark.8.xml:150 apt-secure.8.xml:185 apt-sortpkgs.1.xml:72 apt.conf.5.xml:1099 apt_preferences.5.xml:704 sources.list.5.xml:234
 msgid "See Also"
 msgid "See Also"
 msgstr ""
 msgstr ""
 
 
@@ -1212,7 +1212,7 @@ msgid "&apt-conf;, &sources-list;, &apt-get;"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
-#: apt-cache.8.xml:384 apt-cdrom.8.xml:163 apt-config.8.xml:111 apt-extracttemplates.1.xml:81 apt-ftparchive.1.xml:632 apt-get.8.xml:591 apt-mark.8.xml:154 apt-sortpkgs.1.xml:76
+#: apt-cache.8.xml:384 apt-cdrom.8.xml:163 apt-config.8.xml:111 apt-extracttemplates.1.xml:81 apt-ftparchive.1.xml:631 apt-get.8.xml:591 apt-mark.8.xml:154 apt-sortpkgs.1.xml:76
 msgid "Diagnostics"
 msgid "Diagnostics"
 msgstr ""
 msgstr ""
 
 
@@ -1316,7 +1316,7 @@ msgid "Options"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cdrom.8.xml:98 apt-ftparchive.1.xml:540 apt-get.8.xml:345
+#: apt-cdrom.8.xml:98 apt-ftparchive.1.xml:539 apt-get.8.xml:345
 msgid "<option>-d</option>"
 msgid "<option>-d</option>"
 msgstr ""
 msgstr ""
 
 
@@ -1519,7 +1519,7 @@ msgid "Just show the contents of the configuration space."
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-config.8.xml:107 apt-extracttemplates.1.xml:78 apt-ftparchive.1.xml:629 apt-sortpkgs.1.xml:73
+#: apt-config.8.xml:107 apt-extracttemplates.1.xml:78 apt-ftparchive.1.xml:628 apt-sortpkgs.1.xml:73
 msgid "&apt-conf;"
 msgid "&apt-conf;"
 msgstr ""
 msgstr ""
 
 
@@ -2443,28 +2443,26 @@ msgid ""
 "Configuration Items: "
 "Configuration Items: "
 "<literal>APT::FTPArchive::<replaceable>Checksum</replaceable></literal> and "
 "<literal>APT::FTPArchive::<replaceable>Checksum</replaceable></literal> and "
 "<literal>APT::FTPArchive::<replaceable>Index</replaceable>::<replaceable>Checksum</replaceable></literal> "
 "<literal>APT::FTPArchive::<replaceable>Index</replaceable>::<replaceable>Checksum</replaceable></literal> "
-"where <literal><replaceable>Index</replaceable></literal> can be "
-"<literal>Packages</literal>, <literal>Sources</literal> or "
-"<literal>Release</literal> and "
-"<literal><replaceable>Checksum</replaceable></literal> can be "
-"<literal>MD5</literal>, <literal>SHA1</literal> or "
-"<literal>SHA256</literal>."
+"where <literal>Index</literal> can be <literal>Packages</literal>, "
+"<literal>Sources</literal> or <literal>Release</literal> and "
+"<literal>Checksum</literal> can be <literal>MD5</literal>, "
+"<literal>SHA1</literal> or <literal>SHA256</literal>."
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:540
+#: apt-ftparchive.1.xml:539
 msgid "<option>--db</option>"
 msgid "<option>--db</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:542
+#: apt-ftparchive.1.xml:541
 msgid ""
 msgid ""
 "Use a binary caching DB. This has no effect on the generate command.  "
 "Use a binary caching DB. This has no effect on the generate command.  "
 "Configuration Item: <literal>APT::FTPArchive::DB</literal>."
 "Configuration Item: <literal>APT::FTPArchive::DB</literal>."
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:548
+#: apt-ftparchive.1.xml:547
 msgid ""
 msgid ""
 "Quiet; produces output suitable for logging, omitting progress indicators.  "
 "Quiet; produces output suitable for logging, omitting progress indicators.  "
 "More q's will produce more quiet up to a maximum of 2. You can also use "
 "More q's will produce more quiet up to a maximum of 2. You can also use "
@@ -2473,12 +2471,12 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:554
+#: apt-ftparchive.1.xml:553
 msgid "<option>--delink</option>"
 msgid "<option>--delink</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:556
+#: apt-ftparchive.1.xml:555
 msgid ""
 msgid ""
 "Perform Delinking. If the <literal>External-Links</literal> setting is used "
 "Perform Delinking. If the <literal>External-Links</literal> setting is used "
 "then this option actually enables delinking of the files. It defaults to on "
 "then this option actually enables delinking of the files. It defaults to on "
@@ -2487,12 +2485,12 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:562
+#: apt-ftparchive.1.xml:561
 msgid "<option>--contents</option>"
 msgid "<option>--contents</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:564
+#: apt-ftparchive.1.xml:563
 msgid ""
 msgid ""
 "Perform contents generation. When this option is set and package indexes are "
 "Perform contents generation. When this option is set and package indexes are "
 "being generated with a cache DB then the file listing will also be extracted "
 "being generated with a cache DB then the file listing will also be extracted "
@@ -2502,12 +2500,12 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:572
+#: apt-ftparchive.1.xml:571
 msgid "<option>--source-override</option>"
 msgid "<option>--source-override</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:574
+#: apt-ftparchive.1.xml:573
 msgid ""
 msgid ""
 "Select the source override file to use with the <literal>sources</literal> "
 "Select the source override file to use with the <literal>sources</literal> "
 "command.  Configuration Item: "
 "command.  Configuration Item: "
@@ -2515,24 +2513,24 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:578
+#: apt-ftparchive.1.xml:577
 msgid "<option>--readonly</option>"
 msgid "<option>--readonly</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:580
+#: apt-ftparchive.1.xml:579
 msgid ""
 msgid ""
 "Make the caching databases read only.  Configuration Item: "
 "Make the caching databases read only.  Configuration Item: "
 "<literal>APT::FTPArchive::ReadOnlyDB</literal>."
 "<literal>APT::FTPArchive::ReadOnlyDB</literal>."
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:584
+#: apt-ftparchive.1.xml:583
 msgid "<option>--arch</option>"
 msgid "<option>--arch</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:585
+#: apt-ftparchive.1.xml:584
 msgid ""
 msgid ""
 "Accept in the <literal>packages</literal> and <literal>contents</literal> "
 "Accept in the <literal>packages</literal> and <literal>contents</literal> "
 "commands only package files matching <literal>*_arch.deb</literal> or "
 "commands only package files matching <literal>*_arch.deb</literal> or "
@@ -2541,12 +2539,12 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:591
+#: apt-ftparchive.1.xml:590
 msgid "<option>APT::FTPArchive::AlwaysStat</option>"
 msgid "<option>APT::FTPArchive::AlwaysStat</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:593
+#: apt-ftparchive.1.xml:592
 msgid ""
 msgid ""
 "&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
 "&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 "
 "packages are recompiled and/or republished with the same version again, this "
@@ -2560,12 +2558,12 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:603
+#: apt-ftparchive.1.xml:602
 msgid "<option>APT::FTPArchive::LongDescription</option>"
 msgid "<option>APT::FTPArchive::LongDescription</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:605
+#: apt-ftparchive.1.xml:604
 msgid ""
 msgid ""
 "This configuration option defaults to \"<literal>true</literal>\" and should "
 "This configuration option defaults to \"<literal>true</literal>\" and should "
 "only be set to <literal>\"false\"</literal> if the Archive generated with "
 "only be set to <literal>\"false\"</literal> if the Archive generated with "
@@ -2575,12 +2573,12 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
-#: apt-ftparchive.1.xml:617 apt.conf.5.xml:1087 apt_preferences.5.xml:544 sources.list.5.xml:198
+#: apt-ftparchive.1.xml:616 apt.conf.5.xml:1087 apt_preferences.5.xml:544 sources.list.5.xml:198
 msgid "Examples"
 msgid "Examples"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><para><programlisting>
 #. type: Content of: <refentry><refsect1><para><programlisting>
-#: apt-ftparchive.1.xml:623
+#: apt-ftparchive.1.xml:622
 #, no-wrap
 #, no-wrap
 msgid ""
 msgid ""
 "<command>apt-ftparchive</command> packages "
 "<command>apt-ftparchive</command> packages "
@@ -2589,14 +2587,14 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-ftparchive.1.xml:619
+#: apt-ftparchive.1.xml:618
 msgid ""
 msgid ""
 "To create a compressed Packages file for a directory containing binary "
 "To create a compressed Packages file for a directory containing binary "
 "packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
 "packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-ftparchive.1.xml:633
+#: apt-ftparchive.1.xml:632
 msgid ""
 msgid ""
 "<command>apt-ftparchive</command> returns zero on normal operation, decimal "
 "<command>apt-ftparchive</command> returns zero on normal operation, decimal "
 "100 on error."
 "100 on error."
@@ -2924,7 +2922,7 @@ msgstr ""
 #: apt-get.8.xml:282
 #: apt-get.8.xml:282
 msgid ""
 msgid ""
 "<literal>download</literal> will download the given binary package into the "
 "<literal>download</literal> will download the given binary package into the "
-"current directory."
+"current directoy."
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
@@ -4201,10 +4199,10 @@ msgstr ""
 #: apt.conf.5.xml:52
 #: apt.conf.5.xml:52
 msgid ""
 msgid ""
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
-"order which have either no or \"<literal>conf</literal>\" as filename "
-"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
-"and period (.) characters.  Otherwise APT will print a notice that it has "
-"ignored a file if the file doesn't match a pattern in the "
+"order which have no or \"<literal>conf</literal>\" as filename extension and "
+"which only contain alphanumeric, hyphen (-), underscore (_) and period (.) "
+"characters.  Otherwise APT will print a notice that it has ignored a file if "
+"the file doesn't match a pattern in the "
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
 "case it will be silently ignored."
 "case it will be silently ignored."
 msgstr ""
 msgstr ""
@@ -4912,7 +4910,7 @@ msgid ""
 "Note that at run time the "
 "Note that at run time the "
 "<literal>Dir::Bin::<replaceable>Methodname</replaceable></literal> will be "
 "<literal>Dir::Bin::<replaceable>Methodname</replaceable></literal> will be "
 "checked: If this setting exists the method will only be used if this file "
 "checked: If this setting exists the method will only be used if this file "
-"exists, e.g. for the bzip2 method (the inbuilt) setting is: <placeholder "
+"exists, e.g. for the bzip2 method (the inbuilt) setting is <placeholder "
 "type=\"literallayout\" id=\"0\"/> Note also that list entries specified on "
 "type=\"literallayout\" id=\"0\"/> Note also that list entries specified on "
 "the command line will be added at the end of the list specified in the "
 "the command line will be added at the end of the list specified in the "
 "configuration files, but before the default entries. To prefer a type in "
 "configuration files, but before the default entries. To prefer a type in "
@@ -4925,7 +4923,7 @@ msgstr ""
 #: apt.conf.5.xml:449
 #: apt.conf.5.xml:449
 msgid ""
 msgid ""
 "The special type <literal>uncompressed</literal> can be used to give "
 "The special type <literal>uncompressed</literal> can be used to give "
-"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files a preference, but note that most archives doesn't provide "
 "uncompressed files so this is mostly only useable for local mirrors."
 "uncompressed files so this is mostly only useable for local mirrors."
 msgstr ""
 msgstr ""
 
 
@@ -5867,8 +5865,8 @@ msgstr ""
 msgid ""
 msgid ""
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "directory are parsed in alphanumeric ascending order and need to obey the "
 "directory are parsed in alphanumeric ascending order and need to obey the "
-"following naming convention: The files have either no or "
-"\"<literal>pref</literal>\" as filename extension and only contain "
+"following naming convention: The files have no or "
+"\"<literal>pref</literal>\" as filename extension and which only contain "
 "alphanumeric, hyphen (-), underscore (_) and period (.) characters.  "
 "alphanumeric, hyphen (-), underscore (_) and period (.) characters.  "
 "Otherwise APT will print a notice that it has ignored a file if the file "
 "Otherwise APT will print a notice that it has ignored a file if the file "
 "doesn't match a pattern in the <literal>Dir::Ignore-Files-Silently</literal> "
 "doesn't match a pattern in the <literal>Dir::Ignore-Files-Silently</literal> "
@@ -6200,8 +6198,8 @@ msgid ""
 "APT also supports pinning by glob() expressions and regular expressions "
 "APT also supports pinning by glob() expressions and regular expressions "
 "surrounded by /. For example, the following example assigns the priority 500 "
 "surrounded by /. For example, the following example assigns the priority 500 "
 "to all packages from experimental where the name starts with gnome (as a "
 "to all packages from experimental where the name starts with gnome (as a "
-"glob()-like expression) or contains the word kde (as a POSIX extended "
-"regular expression surrounded by slashes)."
+"glob()-like expression or contains the word kde (as a POSIX extended regular "
+"expression surrounded by slashes)."
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><refsect2><programlisting>
 #. type: Content of: <refentry><refsect1><refsect2><programlisting>
@@ -6217,7 +6215,7 @@ msgstr ""
 #: apt_preferences.5.xml:279
 #: apt_preferences.5.xml:279
 msgid ""
 msgid ""
 "The rule for those expressions is that they can occur anywhere where a "
 "The rule for those expressions is that they can occur anywhere where a "
-"string can occur. Thus, the following pin assigns the priority 990 to all "
+"string can occur. Those, the following pin assigns the priority 990 to all "
 "packages from a release starting with karmic."
 "packages from a release starting with karmic."
 msgstr ""
 msgstr ""
 
 

+ 60 - 91
doc/po/de.po

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt-doc 0.8.14-1\n"
 "Project-Id-Version: apt-doc 0.8.14-1\n"
 "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
 "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2011-06-28 13:40+0300\n"
+"POT-Creation-Date: 2011-06-08 16:54+0300\n"
 "PO-Revision-Date: 2011-05-31 21:00+0100\n"
 "PO-Revision-Date: 2011-05-31 21:00+0100\n"
 "Last-Translator: Chris Leick <c.leick@vollbio.de>\n"
 "Last-Translator: Chris Leick <c.leick@vollbio.de>\n"
 "Language-Team: German <debian-l10n-german@lists.debian.org>\n"
 "Language-Team: German <debian-l10n-german@lists.debian.org>\n"
@@ -1282,7 +1282,7 @@ msgstr ""
 "pkgcache</literal>."
 "pkgcache</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:288 apt-ftparchive.1.xml:572 apt-get.8.xml:393
+#: apt-cache.8.xml:288 apt-ftparchive.1.xml:571 apt-get.8.xml:393
 #: apt-sortpkgs.1.xml:61
 #: apt-sortpkgs.1.xml:61
 msgid "<option>-s</option>"
 msgid "<option>-s</option>"
 msgstr "<option>-s</option>"
 msgstr "<option>-s</option>"
@@ -1310,12 +1310,12 @@ msgstr ""
 "srcpkgcache</literal>."
 "srcpkgcache</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:296 apt-ftparchive.1.xml:546 apt-get.8.xml:383
+#: apt-cache.8.xml:296 apt-ftparchive.1.xml:545 apt-get.8.xml:383
 msgid "<option>-q</option>"
 msgid "<option>-q</option>"
 msgstr "<option>-q</option>"
 msgstr "<option>-q</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:296 apt-ftparchive.1.xml:546 apt-get.8.xml:383
+#: apt-cache.8.xml:296 apt-ftparchive.1.xml:545 apt-get.8.xml:383
 msgid "<option>--quiet</option>"
 msgid "<option>--quiet</option>"
 msgstr "<option>--quiet</option>"
 msgstr "<option>--quiet</option>"
 
 
@@ -1394,18 +1394,12 @@ msgstr "<option>--no-replaces</option>"
 msgid "<option>--no-enhances</option>"
 msgid "<option>--no-enhances</option>"
 msgstr "<option>--no-enhances</option>"
 msgstr "<option>--no-enhances</option>"
 
 
+# FIXME s/twicked/tricked/
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-cache.8.xml:317
 #: apt-cache.8.xml:317
-#, fuzzy
-#| msgid ""
-#| "Per default the <literal>depends</literal> and <literal>rdepends</"
-#| "literal> print all dependencies. This can be twicked with these flags "
-#| "which will omit the specified dependency type.  Configuration Item: "
-#| "<literal>APT::Cache::Show<replaceable>DependencyType</replaceable></"
-#| "literal> e.g. <literal>APT::Cache::ShowRecommends</literal>."
 msgid ""
 msgid ""
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
-"print all dependencies. This can be tweaked with these flags which will omit "
+"print all dependencies. This can be twicked with these flags which will omit "
 "the specified dependency type.  Configuration Item: <literal>APT::Cache::"
 "the specified dependency type.  Configuration Item: <literal>APT::Cache::"
 "Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
 "Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
 "Cache::ShowRecommends</literal>."
 "Cache::ShowRecommends</literal>."
@@ -1436,7 +1430,7 @@ msgstr ""
 "Konfigurationselement: <literal>APT::Cache::ShowFull</literal>."
 "Konfigurationselement: <literal>APT::Cache::ShowFull</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:328 apt-cdrom.8.xml:134 apt-ftparchive.1.xml:584
+#: apt-cache.8.xml:328 apt-cdrom.8.xml:134 apt-ftparchive.1.xml:583
 msgid "<option>-a</option>"
 msgid "<option>-a</option>"
 msgstr "<option>-a</option>"
 msgstr "<option>-a</option>"
 
 
@@ -1553,7 +1547,7 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist>
 #. type: Content of: <refentry><refsect1><variablelist>
 #: apt-cache.8.xml:367 apt-cdrom.8.xml:153 apt-config.8.xml:101
 #: apt-cache.8.xml:367 apt-cdrom.8.xml:153 apt-config.8.xml:101
-#: apt-extracttemplates.1.xml:70 apt-ftparchive.1.xml:612 apt-get.8.xml:570
+#: apt-extracttemplates.1.xml:70 apt-ftparchive.1.xml:611 apt-get.8.xml:570
 #: apt-mark.8.xml:140 apt-sortpkgs.1.xml:67
 #: apt-mark.8.xml:140 apt-sortpkgs.1.xml:67
 msgid "&apt-commonoptions;"
 msgid "&apt-commonoptions;"
 msgstr "&apt-commonoptions;"
 msgstr "&apt-commonoptions;"
@@ -1571,7 +1565,7 @@ msgstr "&file-sourceslist; &file-statelists;"
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #: apt-cache.8.xml:379 apt-cdrom.8.xml:158 apt-config.8.xml:106
 #: apt-cache.8.xml:379 apt-cdrom.8.xml:158 apt-config.8.xml:106
-#: apt-extracttemplates.1.xml:77 apt-ftparchive.1.xml:628 apt-get.8.xml:585
+#: apt-extracttemplates.1.xml:77 apt-ftparchive.1.xml:627 apt-get.8.xml:585
 #: apt-key.8.xml:193 apt-mark.8.xml:150 apt-secure.8.xml:185
 #: apt-key.8.xml:193 apt-mark.8.xml:150 apt-secure.8.xml:185
 #: apt-sortpkgs.1.xml:72 apt.conf.5.xml:1099 apt_preferences.5.xml:704
 #: apt-sortpkgs.1.xml:72 apt.conf.5.xml:1099 apt_preferences.5.xml:704
 #: sources.list.5.xml:234
 #: sources.list.5.xml:234
@@ -1585,7 +1579,7 @@ msgstr "&apt-conf;, &sources-list;, &apt-get;"
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #: apt-cache.8.xml:384 apt-cdrom.8.xml:163 apt-config.8.xml:111
 #: apt-cache.8.xml:384 apt-cdrom.8.xml:163 apt-config.8.xml:111
-#: apt-extracttemplates.1.xml:81 apt-ftparchive.1.xml:632 apt-get.8.xml:591
+#: apt-extracttemplates.1.xml:81 apt-ftparchive.1.xml:631 apt-get.8.xml:591
 #: apt-mark.8.xml:154 apt-sortpkgs.1.xml:76
 #: apt-mark.8.xml:154 apt-sortpkgs.1.xml:76
 msgid "Diagnostics"
 msgid "Diagnostics"
 msgstr "Diagnose"
 msgstr "Diagnose"
@@ -1720,7 +1714,7 @@ msgid "Options"
 msgstr "Optionen"
 msgstr "Optionen"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cdrom.8.xml:98 apt-ftparchive.1.xml:540 apt-get.8.xml:345
+#: apt-cdrom.8.xml:98 apt-ftparchive.1.xml:539 apt-get.8.xml:345
 msgid "<option>-d</option>"
 msgid "<option>-d</option>"
 msgstr "<option>-d</option>"
 msgstr "<option>-d</option>"
 
 
@@ -1974,7 +1968,7 @@ msgid "Just show the contents of the configuration space."
 msgstr "Nur der Inhalt des Konfigurationsbereichs wird angezeigt."
 msgstr "Nur der Inhalt des Konfigurationsbereichs wird angezeigt."
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-config.8.xml:107 apt-extracttemplates.1.xml:78 apt-ftparchive.1.xml:629
+#: apt-config.8.xml:107 apt-extracttemplates.1.xml:78 apt-ftparchive.1.xml:628
 #: apt-sortpkgs.1.xml:73
 #: apt-sortpkgs.1.xml:73
 msgid "&apt-conf;"
 msgid "&apt-conf;"
 msgstr "&apt-conf;"
 msgstr "&apt-conf;"
@@ -3139,6 +3133,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "<option>--md5</option>, <option>--sha1</option>, <option>--sha256</option>"
 "<option>--md5</option>, <option>--sha1</option>, <option>--sha256</option>"
 
 
+# FIXME <literal>Checksum</literal> im letzten Abschnitt <replaceable>?
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-ftparchive.1.xml:531
 #: apt-ftparchive.1.xml:531
 msgid ""
 msgid ""
@@ -3147,29 +3142,29 @@ msgid ""
 "Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
 "Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
 "replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
 "replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
 "replaceable>::<replaceable>Checksum</replaceable></literal> where "
 "replaceable>::<replaceable>Checksum</replaceable></literal> where "
-"<literal><replaceable>Index</replaceable></literal> can be "
-"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
-"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
-"<literal>MD5</literal>, <literal>SHA1</literal> or <literal>SHA256</literal>."
+"<literal>Index</literal> can be <literal>Packages</literal>, "
+"<literal>Sources</literal> or <literal>Release</literal> and "
+"<literal>Checksum</literal> can be <literal>MD5</literal>, <literal>SHA1</"
+"literal> or <literal>SHA256</literal>."
 msgstr ""
 msgstr ""
 "erzeugt die vorgegebene Prüfsumme. Diese Optionen sind standardmäßig "
 "erzeugt die vorgegebene Prüfsumme. Diese Optionen sind standardmäßig "
 "aktiviert. Wenn sie deaktiviert sind, werden die erzeugten Indexdateien nach "
 "aktiviert. Wenn sie deaktiviert sind, werden die erzeugten Indexdateien nach "
 "Möglichkeit keine Prüfsummenfelder erhalten. Konfigurationselemente: "
 "Möglichkeit keine Prüfsummenfelder erhalten. Konfigurationselemente: "
 "<literal>APT::FTPArchive::<replaceable>Prüfsumme</replaceable></literal> und "
 "<literal>APT::FTPArchive::<replaceable>Prüfsumme</replaceable></literal> und "
 "<literal>APT::FTPArchive::<replaceable>Index</replaceable>::"
 "<literal>APT::FTPArchive::<replaceable>Index</replaceable>::"
-"<replaceable>Prüfsumme</replaceable></literal>, wobei <literal><replaceable>Index</replaceable></"
+"<replaceable>Prüfsumme</replaceable></literal>, wobei <literal>Index</"
 "literal> <literal>Packages</literal>, <literal>Sources</literal> oder "
 "literal> <literal>Packages</literal>, <literal>Sources</literal> oder "
-"<literal>Release</literal> sein kann und <literal><replaceable>Prüfsumme</replaceable></literal> "
+"<literal>Release</literal> sein kann und <literal>Checksum</literal> "
 "<literal>MD5</literal>, <literal>SHA1</literal> oder <literal>SHA256</"
 "<literal>MD5</literal>, <literal>SHA1</literal> oder <literal>SHA256</"
 "literal> sein kann."
 "literal> sein kann."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:540
+#: apt-ftparchive.1.xml:539
 msgid "<option>--db</option>"
 msgid "<option>--db</option>"
 msgstr "<option>--db</option>"
 msgstr "<option>--db</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:542
+#: apt-ftparchive.1.xml:541
 msgid ""
 msgid ""
 "Use a binary caching DB. This has no effect on the generate command.  "
 "Use a binary caching DB. This has no effect on the generate command.  "
 "Configuration Item: <literal>APT::FTPArchive::DB</literal>."
 "Configuration Item: <literal>APT::FTPArchive::DB</literal>."
@@ -3179,7 +3174,7 @@ msgstr ""
 "DB</literal>."
 "DB</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:548
+#: apt-ftparchive.1.xml:547
 msgid ""
 msgid ""
 "Quiet; produces output suitable for logging, omitting progress indicators.  "
 "Quiet; produces output suitable for logging, omitting progress indicators.  "
 "More q's will produce more quiet up to a maximum of 2. You can also use "
 "More q's will produce more quiet up to a maximum of 2. You can also use "
@@ -3193,12 +3188,12 @@ msgstr ""
 "Konfigurationselement: <literal>quiet</literal>."
 "Konfigurationselement: <literal>quiet</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:554
+#: apt-ftparchive.1.xml:553
 msgid "<option>--delink</option>"
 msgid "<option>--delink</option>"
 msgstr "<option>--delink</option>"
 msgstr "<option>--delink</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:556
+#: apt-ftparchive.1.xml:555
 msgid ""
 msgid ""
 "Perform Delinking. If the <literal>External-Links</literal> setting is used "
 "Perform Delinking. If the <literal>External-Links</literal> setting is used "
 "then this option actually enables delinking of the files. It defaults to on "
 "then this option actually enables delinking of the files. It defaults to on "
@@ -3212,12 +3207,12 @@ msgstr ""
 "DeLinkAct</literal>."
 "DeLinkAct</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:562
+#: apt-ftparchive.1.xml:561
 msgid "<option>--contents</option>"
 msgid "<option>--contents</option>"
 msgstr "<option>--contents</option>"
 msgstr "<option>--contents</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:564
+#: apt-ftparchive.1.xml:563
 msgid ""
 msgid ""
 "Perform contents generation. When this option is set and package indexes are "
 "Perform contents generation. When this option is set and package indexes are "
 "being generated with a cache DB then the file listing will also be extracted "
 "being generated with a cache DB then the file listing will also be extracted "
@@ -3233,12 +3228,12 @@ msgstr ""
 "Konfigurationselement: <literal>APT::FTPArchive::Contents</literal>."
 "Konfigurationselement: <literal>APT::FTPArchive::Contents</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:572
+#: apt-ftparchive.1.xml:571
 msgid "<option>--source-override</option>"
 msgid "<option>--source-override</option>"
 msgstr "<option>--source-override</option>"
 msgstr "<option>--source-override</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:574
+#: apt-ftparchive.1.xml:573
 msgid ""
 msgid ""
 "Select the source override file to use with the <literal>sources</literal> "
 "Select the source override file to use with the <literal>sources</literal> "
 "command.  Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
 "command.  Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
@@ -3249,12 +3244,12 @@ msgstr ""
 "SourceOverride</literal>."
 "SourceOverride</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:578
+#: apt-ftparchive.1.xml:577
 msgid "<option>--readonly</option>"
 msgid "<option>--readonly</option>"
 msgstr "<option>--readonly</option>"
 msgstr "<option>--readonly</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:580
+#: apt-ftparchive.1.xml:579
 msgid ""
 msgid ""
 "Make the caching databases read only.  Configuration Item: <literal>APT::"
 "Make the caching databases read only.  Configuration Item: <literal>APT::"
 "FTPArchive::ReadOnlyDB</literal>."
 "FTPArchive::ReadOnlyDB</literal>."
@@ -3263,12 +3258,12 @@ msgstr ""
 "<literal>APT::FTPArchive::ReadOnlyDB</literal>."
 "<literal>APT::FTPArchive::ReadOnlyDB</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:584
+#: apt-ftparchive.1.xml:583
 msgid "<option>--arch</option>"
 msgid "<option>--arch</option>"
 msgstr "<option>--arch</option>"
 msgstr "<option>--arch</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:585
+#: apt-ftparchive.1.xml:584
 msgid ""
 msgid ""
 "Accept in the <literal>packages</literal> and <literal>contents</literal> "
 "Accept in the <literal>packages</literal> and <literal>contents</literal> "
 "commands only package files matching <literal>*_arch.deb</literal> or "
 "commands only package files matching <literal>*_arch.deb</literal> or "
@@ -3282,12 +3277,12 @@ msgstr ""
 "Architecture</literal>."
 "Architecture</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:591
+#: apt-ftparchive.1.xml:590
 msgid "<option>APT::FTPArchive::AlwaysStat</option>"
 msgid "<option>APT::FTPArchive::AlwaysStat</option>"
 msgstr "<option>APT::FTPArchive::AlwaysStat</option>"
 msgstr "<option>APT::FTPArchive::AlwaysStat</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:593
+#: apt-ftparchive.1.xml:592
 msgid ""
 msgid ""
 "&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
 "&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 "
 "packages are recompiled and/or republished with the same version again, this "
@@ -3311,12 +3306,12 @@ msgstr ""
 "haben sollte und all diese zusätzlichen Prüfungen daher nutzlos sind."
 "haben sollte und all diese zusätzlichen Prüfungen daher nutzlos sind."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:603
+#: apt-ftparchive.1.xml:602
 msgid "<option>APT::FTPArchive::LongDescription</option>"
 msgid "<option>APT::FTPArchive::LongDescription</option>"
 msgstr "<option>APT::FTPArchive::LongDescription</option>"
 msgstr "<option>APT::FTPArchive::LongDescription</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:605
+#: apt-ftparchive.1.xml:604
 msgid ""
 msgid ""
 "This configuration option defaults to \"<literal>true</literal>\" and should "
 "This configuration option defaults to \"<literal>true</literal>\" and should "
 "only be set to <literal>\"false\"</literal> if the Archive generated with "
 "only be set to <literal>\"false\"</literal> if the Archive generated with "
@@ -3332,19 +3327,19 @@ msgstr ""
 "werden kann."
 "werden kann."
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
-#: apt-ftparchive.1.xml:617 apt.conf.5.xml:1087 apt_preferences.5.xml:544
+#: apt-ftparchive.1.xml:616 apt.conf.5.xml:1087 apt_preferences.5.xml:544
 #: sources.list.5.xml:198
 #: sources.list.5.xml:198
 msgid "Examples"
 msgid "Examples"
 msgstr "Beispiele"
 msgstr "Beispiele"
 
 
 #. type: Content of: <refentry><refsect1><para><programlisting>
 #. type: Content of: <refentry><refsect1><para><programlisting>
-#: apt-ftparchive.1.xml:623
+#: apt-ftparchive.1.xml:622
 #, no-wrap
 #, no-wrap
 msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgstr "<command>apt-ftparchive</command> Pakete <replaceable>Verzeichnis</replaceable> | <command>gzip</command> > <filename>Pakete.gz</filename>\n"
 msgstr "<command>apt-ftparchive</command> Pakete <replaceable>Verzeichnis</replaceable> | <command>gzip</command> > <filename>Pakete.gz</filename>\n"
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-ftparchive.1.xml:619
+#: apt-ftparchive.1.xml:618
 msgid ""
 msgid ""
 "To create a compressed Packages file for a directory containing binary "
 "To create a compressed Packages file for a directory containing binary "
 "packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
 "packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
@@ -3354,7 +3349,7 @@ msgstr ""
 ">"
 ">"
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-ftparchive.1.xml:633
+#: apt-ftparchive.1.xml:632
 msgid ""
 msgid ""
 "<command>apt-ftparchive</command> returns zero on normal operation, decimal "
 "<command>apt-ftparchive</command> returns zero on normal operation, decimal "
 "100 on error."
 "100 on error."
@@ -3826,11 +3821,12 @@ msgstr ""
 msgid "download"
 msgid "download"
 msgstr "download"
 msgstr "download"
 
 
+# FIXME s/directoy/directory/
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-get.8.xml:282
 #: apt-get.8.xml:282
 msgid ""
 msgid ""
 "<literal>download</literal> will download the given binary package into the "
 "<literal>download</literal> will download the given binary package into the "
-"current directory."
+"current directoy."
 msgstr ""
 msgstr ""
 "<literal>download</literal> wird das angegebene Binärpaket in das aktuelle "
 "<literal>download</literal> wird das angegebene Binärpaket in das aktuelle "
 "Verzeichnis herunterladen."
 "Verzeichnis herunterladen."
@@ -5518,25 +5514,16 @@ msgstr ""
 "die Datei, die durch die Umgebungsvariable <envar>APT_CONFIG</envar> "
 "die Datei, die durch die Umgebungsvariable <envar>APT_CONFIG</envar> "
 "angegeben wird (falls gesetzt)"
 "angegeben wird (falls gesetzt)"
 
 
+# FIXME s/no or/no/
 #. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
 #. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
 #: apt.conf.5.xml:52
 #: apt.conf.5.xml:52
-#, fuzzy
-#| msgid ""
-#| "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
-#| "order which have no or \"<literal>conf</literal>\" as filename extension "
-#| "and which only contain alphanumeric, hyphen (-), underscore (_) and "
-#| "period (.) characters.  Otherwise APT will print a notice that it has "
-#| "ignored a file if the file doesn't match a pattern in the <literal>Dir::"
-#| "Ignore-Files-Silently</literal> configuration list - in this case it will "
-#| "be silently ignored."
 msgid ""
 msgid ""
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
-"order which have either no or \"<literal>conf</literal>\" as filename "
-"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
-"and period (.) characters.  Otherwise APT will print a notice that it has "
-"ignored a file if the file doesn't match a pattern in the <literal>Dir::"
-"Ignore-Files-Silently</literal> configuration list - in this case it will be "
-"silently ignored."
+"order which have no or \"<literal>conf</literal>\" as filename extension and "
+"which only contain alphanumeric, hyphen (-), underscore (_) and period (.) "
+"characters.  Otherwise APT will print a notice that it has ignored a file if "
+"the file doesn't match a pattern in the <literal>Dir::Ignore-Files-Silently</"
+"literal> configuration list - in this case it will be silently ignored."
 msgstr ""
 msgstr ""
 "alle Dateien in <literal>Dir::Etc::Parts</literal> in aufsteigender "
 "alle Dateien in <literal>Dir::Etc::Parts</literal> in aufsteigender "
 "alphanumerischer Reihenfolge, die kein »<literal>conf</literal>« als "
 "alphanumerischer Reihenfolge, die kein »<literal>conf</literal>« als "
@@ -6574,27 +6561,16 @@ msgstr ""
 msgid "Dir::Bin::bzip2 \"/bin/bzip2\";"
 msgid "Dir::Bin::bzip2 \"/bin/bzip2\";"
 msgstr "Dir::Bin::bzip2 \"/bin/bzip2\";"
 msgstr "Dir::Bin::bzip2 \"/bin/bzip2\";"
 
 
+# FIXME s/> Note/>. Note/
 #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
 #: apt.conf.5.xml:442
 #: apt.conf.5.xml:442
-#, fuzzy
-#| msgid ""
-#| "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
-#| "replaceable></literal> will be checked: If this setting exists the method "
-#| "will only be used if this file exists, e.g. for the bzip2 method (the "
-#| "inbuilt) setting is <placeholder type=\"literallayout\" id=\"0\"/> Note "
-#| "also that list entries specified on the command line will be added at the "
-#| "end of the list specified in the configuration files, but before the "
-#| "default entries. To prefer a type in this case over the ones specified in "
-#| "the configuration files you can set the option direct - not in list "
-#| "style.  This will not override the defined list, it will only prefix the "
-#| "list with this type."
 msgid ""
 msgid ""
 "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
 "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
 "replaceable></literal> will be checked: If this setting exists the method "
 "replaceable></literal> will be checked: If this setting exists the method "
 "will only be used if this file exists, e.g. for the bzip2 method (the "
 "will only be used if this file exists, e.g. for the bzip2 method (the "
-"inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> Note "
-"also that list entries specified on the command line will be added at the "
-"end of the list specified in the configuration files, but before the default "
+"inbuilt) setting is <placeholder type=\"literallayout\" id=\"0\"/> Note also "
+"that list entries specified on the command line will be added at the end of "
+"the list specified in the configuration files, but before the default "
 "entries. To prefer a type in this case over the ones specified in the "
 "entries. To prefer a type in this case over the ones specified in the "
 "configuration files you can set the option direct - not in list style.  This "
 "configuration files you can set the option direct - not in list style.  This "
 "will not override the defined list, it will only prefix the list with this "
 "will not override the defined list, it will only prefix the list with this "
@@ -6612,11 +6588,12 @@ msgstr ""
 "nicht im Listenstil. Dies wird die definierte Liste nicht überschreiben, es "
 "nicht im Listenstil. Dies wird die definierte Liste nicht überschreiben, es "
 "wird diesen Typ nur vor die Liste setzen."
 "wird diesen Typ nur vor die Liste setzen."
 
 
+# FIXME: s/doesn't provide/don't provide/
 #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
 #: apt.conf.5.xml:449
 #: apt.conf.5.xml:449
 msgid ""
 msgid ""
 "The special type <literal>uncompressed</literal> can be used to give "
 "The special type <literal>uncompressed</literal> can be used to give "
-"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files a preference, but note that most archives doesn't provide "
 "uncompressed files so this is mostly only useable for local mirrors."
 "uncompressed files so this is mostly only useable for local mirrors."
 msgstr ""
 msgstr ""
 "Der besondere Typ <literal>uncompressed</literal> kann benutzt werden, um "
 "Der besondere Typ <literal>uncompressed</literal> kann benutzt werden, um "
@@ -7901,21 +7878,11 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
 #: apt_preferences.5.xml:70
 #: apt_preferences.5.xml:70
-#, fuzzy
-#| msgid ""
-#| "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
-#| "directory are parsed in alphanumeric ascending order and need to obey the "
-#| "following naming convention: The files have no or \"<literal>pref</"
-#| "literal>\" as filename extension and which only contain alphanumeric, "
-#| "hyphen (-), underscore (_) and period (.) characters.  Otherwise APT will "
-#| "print a notice that it has ignored a file if the file doesn't match a "
-#| "pattern in the <literal>Dir::Ignore-Files-Silently</literal> "
-#| "configuration list - in this case it will be silently ignored."
 msgid ""
 msgid ""
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "directory are parsed in alphanumeric ascending order and need to obey the "
 "directory are parsed in alphanumeric ascending order and need to obey the "
-"following naming convention: The files have either no or \"<literal>pref</"
-"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"following naming convention: The files have no or \"<literal>pref</literal>"
+"\" as filename extension and which only contain alphanumeric, hyphen (-), "
 "underscore (_) and period (.) characters.  Otherwise APT will print a notice "
 "underscore (_) and period (.) characters.  Otherwise APT will print a notice "
 "that it has ignored a file if the file doesn't match a pattern in the "
 "that it has ignored a file if the file doesn't match a pattern in the "
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
@@ -8384,13 +8351,14 @@ msgstr ""
 msgid "Regular expressions and glob() syntax"
 msgid "Regular expressions and glob() syntax"
 msgstr "Reguläre Ausdrücke und glob()-Syntax"
 msgstr "Reguläre Ausdrücke und glob()-Syntax"
 
 
+# FIXME: s/expression or/expression) or/
 #. type: Content of: <refentry><refsect1><refsect2><para>
 #. type: Content of: <refentry><refsect1><refsect2><para>
 #: apt_preferences.5.xml:264
 #: apt_preferences.5.xml:264
 msgid ""
 msgid ""
 "APT also supports pinning by glob() expressions and regular expressions "
 "APT also supports pinning by glob() expressions and regular expressions "
 "surrounded by /. For example, the following example assigns the priority 500 "
 "surrounded by /. For example, the following example assigns the priority 500 "
 "to all packages from experimental where the name starts with gnome (as a glob"
 "to all packages from experimental where the name starts with gnome (as a glob"
-"()-like expression) or contains the word kde (as a POSIX extended regular "
+"()-like expression or contains the word kde (as a POSIX extended regular "
 "expression surrounded by slashes)."
 "expression surrounded by slashes)."
 msgstr ""
 msgstr ""
 "APT unterstützt außerdem Pinning mittels glob()-Ausdrücken und regulären "
 "APT unterstützt außerdem Pinning mittels glob()-Ausdrücken und regulären "
@@ -8412,11 +8380,12 @@ msgstr ""
 "Pin: release n=experimental\n"
 "Pin: release n=experimental\n"
 "Pin-Priority: 500\n"
 "Pin-Priority: 500\n"
 
 
+# FIXME: s/Those/Thus/
 #. type: Content of: <refentry><refsect1><refsect2><para>
 #. type: Content of: <refentry><refsect1><refsect2><para>
 #: apt_preferences.5.xml:279
 #: apt_preferences.5.xml:279
 msgid ""
 msgid ""
 "The rule for those expressions is that they can occur anywhere where a "
 "The rule for those expressions is that they can occur anywhere where a "
-"string can occur. Thus, the following pin assigns the priority 990 to all "
+"string can occur. Those, the following pin assigns the priority 990 to all "
 "packages from a release starting with karmic."
 "packages from a release starting with karmic."
 msgstr ""
 msgstr ""
 "Die Regel für diese Ausdrücke ist, dass sie überall dort auftreten können, "
 "Die Regel für diese Ausdrücke ist, dass sie überall dort auftreten können, "

+ 68 - 58
doc/po/es.po

@@ -36,7 +36,7 @@
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt 0.7.25\n"
 "Project-Id-Version: apt 0.7.25\n"
-"POT-Creation-Date: 2011-06-28 16:42+0200\n"
+"POT-Creation-Date: 2011-06-08 16:54+0300\n"
 "PO-Revision-Date: 2010-08-25 03:25+0200\n"
 "PO-Revision-Date: 2010-08-25 03:25+0200\n"
 "Last-Translator: Omar Campagne <ocampagne@gmail.com>\n"
 "Last-Translator: Omar Campagne <ocampagne@gmail.com>\n"
 "Language-Team: Debian l10n Spanish <debian-l10n-spanish@lists.debian.org>\n"
 "Language-Team: Debian l10n Spanish <debian-l10n-spanish@lists.debian.org>\n"
@@ -1354,7 +1354,7 @@ msgstr ""
 "configuración: <literal>Dir::Cache::pkgcache</literal>."
 "configuración: <literal>Dir::Cache::pkgcache</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:288 apt-ftparchive.1.xml:572 apt-get.8.xml:393
+#: apt-cache.8.xml:288 apt-ftparchive.1.xml:571 apt-get.8.xml:393
 #: apt-sortpkgs.1.xml:61
 #: apt-sortpkgs.1.xml:61
 msgid "<option>-s</option>"
 msgid "<option>-s</option>"
 msgstr "<option>-s</option>"
 msgstr "<option>-s</option>"
@@ -1380,12 +1380,12 @@ msgstr ""
 "Opción de configuración: <literal>Dir::Cache::srcpkgcache</literal>."
 "Opción de configuración: <literal>Dir::Cache::srcpkgcache</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:296 apt-ftparchive.1.xml:546 apt-get.8.xml:383
+#: apt-cache.8.xml:296 apt-ftparchive.1.xml:545 apt-get.8.xml:383
 msgid "<option>-q</option>"
 msgid "<option>-q</option>"
 msgstr "<option>-q</option>"
 msgstr "<option>-q</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:296 apt-ftparchive.1.xml:546 apt-get.8.xml:383
+#: apt-cache.8.xml:296 apt-ftparchive.1.xml:545 apt-get.8.xml:383
 msgid "<option>--quiet</option>"
 msgid "<option>--quiet</option>"
 msgstr "<option>--quiet</option>"
 msgstr "<option>--quiet</option>"
 
 
@@ -1466,16 +1466,9 @@ msgstr "<option>--no-enhances</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-cache.8.xml:317
 #: apt-cache.8.xml:317
-#, fuzzy
-#| msgid ""
-#| "Per default the <literal>depends</literal> and <literal>rdepends</"
-#| "literal> print all dependencies. This can be twicked with these flags "
-#| "which will omit the specified dependency type.  Configuration Item: "
-#| "<literal>APT::Cache::Show<replaceable>DependencyType</replaceable></"
-#| "literal> e.g. <literal>APT::Cache::ShowRecommends</literal>."
 msgid ""
 msgid ""
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
-"print all dependencies. This can be tweaked with these flags which will omit "
+"print all dependencies. This can be twicked with these flags which will omit "
 "the specified dependency type.  Configuration Item: <literal>APT::Cache::"
 "the specified dependency type.  Configuration Item: <literal>APT::Cache::"
 "Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
 "Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
 "Cache::ShowRecommends</literal>."
 "Cache::ShowRecommends</literal>."
@@ -1507,7 +1500,7 @@ msgstr ""
 "Opción de configuración: <literal>APT::Cache::ShowFull</literal>."
 "Opción de configuración: <literal>APT::Cache::ShowFull</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:328 apt-cdrom.8.xml:134 apt-ftparchive.1.xml:584
+#: apt-cache.8.xml:328 apt-cdrom.8.xml:134 apt-ftparchive.1.xml:583
 msgid "<option>-a</option>"
 msgid "<option>-a</option>"
 msgstr "<option>-a</option>"
 msgstr "<option>-a</option>"
 
 
@@ -1624,7 +1617,7 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist>
 #. type: Content of: <refentry><refsect1><variablelist>
 #: apt-cache.8.xml:367 apt-cdrom.8.xml:153 apt-config.8.xml:101
 #: apt-cache.8.xml:367 apt-cdrom.8.xml:153 apt-config.8.xml:101
-#: apt-extracttemplates.1.xml:70 apt-ftparchive.1.xml:612 apt-get.8.xml:570
+#: apt-extracttemplates.1.xml:70 apt-ftparchive.1.xml:611 apt-get.8.xml:570
 #: apt-mark.8.xml:140 apt-sortpkgs.1.xml:67
 #: apt-mark.8.xml:140 apt-sortpkgs.1.xml:67
 msgid "&apt-commonoptions;"
 msgid "&apt-commonoptions;"
 msgstr "&apt-commonoptions;"
 msgstr "&apt-commonoptions;"
@@ -1642,7 +1635,7 @@ msgstr "&file-sourceslist; &file-statelists;"
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #: apt-cache.8.xml:379 apt-cdrom.8.xml:158 apt-config.8.xml:106
 #: apt-cache.8.xml:379 apt-cdrom.8.xml:158 apt-config.8.xml:106
-#: apt-extracttemplates.1.xml:77 apt-ftparchive.1.xml:628 apt-get.8.xml:585
+#: apt-extracttemplates.1.xml:77 apt-ftparchive.1.xml:627 apt-get.8.xml:585
 #: apt-key.8.xml:193 apt-mark.8.xml:150 apt-secure.8.xml:185
 #: apt-key.8.xml:193 apt-mark.8.xml:150 apt-secure.8.xml:185
 #: apt-sortpkgs.1.xml:72 apt.conf.5.xml:1099 apt_preferences.5.xml:704
 #: apt-sortpkgs.1.xml:72 apt.conf.5.xml:1099 apt_preferences.5.xml:704
 #: sources.list.5.xml:234
 #: sources.list.5.xml:234
@@ -1656,7 +1649,7 @@ msgstr "&apt-conf;, &sources-list;, &apt-get;"
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #: apt-cache.8.xml:384 apt-cdrom.8.xml:163 apt-config.8.xml:111
 #: apt-cache.8.xml:384 apt-cdrom.8.xml:163 apt-config.8.xml:111
-#: apt-extracttemplates.1.xml:81 apt-ftparchive.1.xml:632 apt-get.8.xml:591
+#: apt-extracttemplates.1.xml:81 apt-ftparchive.1.xml:631 apt-get.8.xml:591
 #: apt-mark.8.xml:154 apt-sortpkgs.1.xml:76
 #: apt-mark.8.xml:154 apt-sortpkgs.1.xml:76
 msgid "Diagnostics"
 msgid "Diagnostics"
 msgstr "Diagnósticos"
 msgstr "Diagnósticos"
@@ -1791,7 +1784,7 @@ msgid "Options"
 msgstr "Opciones"
 msgstr "Opciones"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cdrom.8.xml:98 apt-ftparchive.1.xml:540 apt-get.8.xml:345
+#: apt-cdrom.8.xml:98 apt-ftparchive.1.xml:539 apt-get.8.xml:345
 msgid "<option>-d</option>"
 msgid "<option>-d</option>"
 msgstr "<option>-d</option>"
 msgstr "<option>-d</option>"
 
 
@@ -2048,7 +2041,7 @@ msgid "Just show the contents of the configuration space."
 msgstr "Sólo muestra el contenido del espacio de configuración."
 msgstr "Sólo muestra el contenido del espacio de configuración."
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-config.8.xml:107 apt-extracttemplates.1.xml:78 apt-ftparchive.1.xml:629
+#: apt-config.8.xml:107 apt-extracttemplates.1.xml:78 apt-ftparchive.1.xml:628
 #: apt-sortpkgs.1.xml:73
 #: apt-sortpkgs.1.xml:73
 msgid "&apt-conf;"
 msgid "&apt-conf;"
 msgstr "&apt-conf;"
 msgstr "&apt-conf;"
@@ -3205,25 +3198,43 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-ftparchive.1.xml:531
 #: apt-ftparchive.1.xml:531
+#, fuzzy
+#| msgid ""
+#| "Values for the additional metadata fields in the Release file are taken "
+#| "from the corresponding variables under <literal>APT::FTPArchive::Release</"
+#| "literal>, e.g. <literal>APT::FTPArchive::Release::Origin</literal>.  The "
+#| "supported fields are: <literal>Origin</literal>, <literal>Label</"
+#| "literal>, <literal>Suite</literal>, <literal>Version</literal>, "
+#| "<literal>Codename</literal>, <literal>Date</literal>, <literal>Valid-"
+#| "Until</literal>, <literal>Architectures</literal>, <literal>Components</"
+#| "literal>, <literal>Description</literal>."
 msgid ""
 msgid ""
 "Generate the given checksum. These options default to on, when turned off "
 "Generate the given checksum. These options default to on, when turned off "
 "the generated index files will not have the checksum fields where possible.  "
 "the generated index files will not have the checksum fields where possible.  "
 "Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
 "Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
 "replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
 "replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
 "replaceable>::<replaceable>Checksum</replaceable></literal> where "
 "replaceable>::<replaceable>Checksum</replaceable></literal> where "
-"<literal><replaceable>Index</replaceable></literal> can be "
-"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
-"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
-"<literal>MD5</literal>, <literal>SHA1</literal> or <literal>SHA256</literal>."
+"<literal>Index</literal> can be <literal>Packages</literal>, "
+"<literal>Sources</literal> or <literal>Release</literal> and "
+"<literal>Checksum</literal> can be <literal>MD5</literal>, <literal>SHA1</"
+"literal> or <literal>SHA256</literal>."
 msgstr ""
 msgstr ""
+"Los valores para los campos de metadatos adicionales en el fichero «Release» "
+"se toman de las variables correspondientes en <literal>APT::FTPArchive::"
+"Release</literal>, por ejemplo <literal>APT::FTPArchive::Release::Origin</"
+"literal>. Los campos permitidos son: <literal>Origin</literal>, "
+"<literal>Label</literal>, <literal>Suite</literal>, <literal>Version</"
+"literal>, <literal>Codename</literal>, <literal>Date</literal>, "
+"<literal>Valid-Until</literal>, <literal>Architectures</literal>, "
+"<literal>Components</literal> y <literal>Description</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:540
+#: apt-ftparchive.1.xml:539
 msgid "<option>--db</option>"
 msgid "<option>--db</option>"
 msgstr "<option>--db</option>"
 msgstr "<option>--db</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:542
+#: apt-ftparchive.1.xml:541
 msgid ""
 msgid ""
 "Use a binary caching DB. This has no effect on the generate command.  "
 "Use a binary caching DB. This has no effect on the generate command.  "
 "Configuration Item: <literal>APT::FTPArchive::DB</literal>."
 "Configuration Item: <literal>APT::FTPArchive::DB</literal>."
@@ -3232,7 +3243,7 @@ msgstr ""
 "«generate». Opción de configuración: <literal>APT::FTPArchive::DB</literal>."
 "«generate». Opción de configuración: <literal>APT::FTPArchive::DB</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:548
+#: apt-ftparchive.1.xml:547
 msgid ""
 msgid ""
 "Quiet; produces output suitable for logging, omitting progress indicators.  "
 "Quiet; produces output suitable for logging, omitting progress indicators.  "
 "More q's will produce more quiet up to a maximum of 2. You can also use "
 "More q's will produce more quiet up to a maximum of 2. You can also use "
@@ -3246,12 +3257,12 @@ msgstr ""
 "configuración. Opción de configuración: <literal>quiet</literal>."
 "configuración. Opción de configuración: <literal>quiet</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:554
+#: apt-ftparchive.1.xml:553
 msgid "<option>--delink</option>"
 msgid "<option>--delink</option>"
 msgstr "<option>--delink</option>"
 msgstr "<option>--delink</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:556
+#: apt-ftparchive.1.xml:555
 msgid ""
 msgid ""
 "Perform Delinking. If the <literal>External-Links</literal> setting is used "
 "Perform Delinking. If the <literal>External-Links</literal> setting is used "
 "then this option actually enables delinking of the files. It defaults to on "
 "then this option actually enables delinking of the files. It defaults to on "
@@ -3264,12 +3275,12 @@ msgstr ""
 "Opción de configuración: <literal>APT::FTPArchive::DeLinkAct</literal>."
 "Opción de configuración: <literal>APT::FTPArchive::DeLinkAct</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:562
+#: apt-ftparchive.1.xml:561
 msgid "<option>--contents</option>"
 msgid "<option>--contents</option>"
 msgstr "<option>--contents</option>"
 msgstr "<option>--contents</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:564
+#: apt-ftparchive.1.xml:563
 msgid ""
 msgid ""
 "Perform contents generation. When this option is set and package indexes are "
 "Perform contents generation. When this option is set and package indexes are "
 "being generated with a cache DB then the file listing will also be extracted "
 "being generated with a cache DB then the file listing will also be extracted "
@@ -3286,12 +3297,12 @@ msgstr ""
 "Contents</literal>."
 "Contents</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:572
+#: apt-ftparchive.1.xml:571
 msgid "<option>--source-override</option>"
 msgid "<option>--source-override</option>"
 msgstr "<option>--source-override</option>"
 msgstr "<option>--source-override</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:574
+#: apt-ftparchive.1.xml:573
 msgid ""
 msgid ""
 "Select the source override file to use with the <literal>sources</literal> "
 "Select the source override file to use with the <literal>sources</literal> "
 "command.  Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
 "command.  Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
@@ -3302,12 +3313,12 @@ msgstr ""
 "FTPArchive::SourceOverride</literal>."
 "FTPArchive::SourceOverride</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:578
+#: apt-ftparchive.1.xml:577
 msgid "<option>--readonly</option>"
 msgid "<option>--readonly</option>"
 msgstr "<option>--readonly</option>"
 msgstr "<option>--readonly</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:580
+#: apt-ftparchive.1.xml:579
 msgid ""
 msgid ""
 "Make the caching databases read only.  Configuration Item: <literal>APT::"
 "Make the caching databases read only.  Configuration Item: <literal>APT::"
 "FTPArchive::ReadOnlyDB</literal>."
 "FTPArchive::ReadOnlyDB</literal>."
@@ -3316,12 +3327,12 @@ msgstr ""
 "Opción de configuración: <literal>APT::FTPArchive::ReadOnlyDB</literal>."
 "Opción de configuración: <literal>APT::FTPArchive::ReadOnlyDB</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:584
+#: apt-ftparchive.1.xml:583
 msgid "<option>--arch</option>"
 msgid "<option>--arch</option>"
 msgstr "<option>--arch</option>"
 msgstr "<option>--arch</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:585
+#: apt-ftparchive.1.xml:584
 msgid ""
 msgid ""
 "Accept in the <literal>packages</literal> and <literal>contents</literal> "
 "Accept in the <literal>packages</literal> and <literal>contents</literal> "
 "commands only package files matching <literal>*_arch.deb</literal> or "
 "commands only package files matching <literal>*_arch.deb</literal> or "
@@ -3335,12 +3346,12 @@ msgstr ""
 "FTPArchive::Architecture</literal>."
 "FTPArchive::Architecture</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:591
+#: apt-ftparchive.1.xml:590
 msgid "<option>APT::FTPArchive::AlwaysStat</option>"
 msgid "<option>APT::FTPArchive::AlwaysStat</option>"
 msgstr "<option>APT::FTPArchive::AlwaysStat</option>"
 msgstr "<option>APT::FTPArchive::AlwaysStat</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:593
+#: apt-ftparchive.1.xml:592
 msgid ""
 msgid ""
 "&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
 "&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 "
 "packages are recompiled and/or republished with the same version again, this "
@@ -3364,12 +3375,12 @@ msgstr ""
 "comprobaciones adicionales son innecesarias."
 "comprobaciones adicionales son innecesarias."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:603
+#: apt-ftparchive.1.xml:602
 msgid "<option>APT::FTPArchive::LongDescription</option>"
 msgid "<option>APT::FTPArchive::LongDescription</option>"
 msgstr "<option>APT::FTPArchive::LongDescription</option>"
 msgstr "<option>APT::FTPArchive::LongDescription</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:605
+#: apt-ftparchive.1.xml:604
 msgid ""
 msgid ""
 "This configuration option defaults to \"<literal>true</literal>\" and should "
 "This configuration option defaults to \"<literal>true</literal>\" and should "
 "only be set to <literal>\"false\"</literal> if the Archive generated with "
 "only be set to <literal>\"false\"</literal> if the Archive generated with "
@@ -3385,19 +3396,19 @@ msgstr ""
 "con la orden «generate»."
 "con la orden «generate»."
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
-#: apt-ftparchive.1.xml:617 apt.conf.5.xml:1087 apt_preferences.5.xml:544
+#: apt-ftparchive.1.xml:616 apt.conf.5.xml:1087 apt_preferences.5.xml:544
 #: sources.list.5.xml:198
 #: sources.list.5.xml:198
 msgid "Examples"
 msgid "Examples"
 msgstr "Ejemplos"
 msgstr "Ejemplos"
 
 
 #. type: Content of: <refentry><refsect1><para><programlisting>
 #. type: Content of: <refentry><refsect1><para><programlisting>
-#: apt-ftparchive.1.xml:623
+#: apt-ftparchive.1.xml:622
 #, no-wrap
 #, no-wrap
 msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgstr "<command>apt-ftparchive</command> packages <replaceable>directorio</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgstr "<command>apt-ftparchive</command> packages <replaceable>directorio</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-ftparchive.1.xml:619
+#: apt-ftparchive.1.xml:618
 msgid ""
 msgid ""
 "To create a compressed Packages file for a directory containing binary "
 "To create a compressed Packages file for a directory containing binary "
 "packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
 "packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
@@ -3406,7 +3417,7 @@ msgstr ""
 "paquetes binarios («.deb»): <placeholder type=\"programlisting\" id=\"0\"/>"
 "paquetes binarios («.deb»): <placeholder type=\"programlisting\" id=\"0\"/>"
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-ftparchive.1.xml:633
+#: apt-ftparchive.1.xml:632
 msgid ""
 msgid ""
 "<command>apt-ftparchive</command> returns zero on normal operation, decimal "
 "<command>apt-ftparchive</command> returns zero on normal operation, decimal "
 "100 on error."
 "100 on error."
@@ -3879,7 +3890,7 @@ msgstr ""
 #: apt-get.8.xml:282
 #: apt-get.8.xml:282
 msgid ""
 msgid ""
 "<literal>download</literal> will download the given binary package into the "
 "<literal>download</literal> will download the given binary package into the "
-"current directory."
+"current directoy."
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
@@ -5571,12 +5582,11 @@ msgstr ""
 #| "period (.) characters - otherwise they will be silently ignored."
 #| "period (.) characters - otherwise they will be silently ignored."
 msgid ""
 msgid ""
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
-"order which have either no or \"<literal>conf</literal>\" as filename "
-"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
-"and period (.) characters.  Otherwise APT will print a notice that it has "
-"ignored a file if the file doesn't match a pattern in the <literal>Dir::"
-"Ignore-Files-Silently</literal> configuration list - in this case it will be "
-"silently ignored."
+"order which have no or \"<literal>conf</literal>\" as filename extension and "
+"which only contain alphanumeric, hyphen (-), underscore (_) and period (.) "
+"characters.  Otherwise APT will print a notice that it has ignored a file if "
+"the file doesn't match a pattern in the <literal>Dir::Ignore-Files-Silently</"
+"literal> configuration list - in this case it will be silently ignored."
 msgstr ""
 msgstr ""
 "Todos los ficheros en <literal>Dir::Etc::Parts</literal> en orden "
 "Todos los ficheros en <literal>Dir::Etc::Parts</literal> en orden "
 "alfanumérico ascendente que no tienen extensión o la extensión "
 "alfanumérico ascendente que no tienen extensión o la extensión "
@@ -6605,9 +6615,9 @@ msgid ""
 "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
 "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
 "replaceable></literal> will be checked: If this setting exists the method "
 "replaceable></literal> will be checked: If this setting exists the method "
 "will only be used if this file exists, e.g. for the bzip2 method (the "
 "will only be used if this file exists, e.g. for the bzip2 method (the "
-"inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> Note "
-"also that list entries specified on the command line will be added at the "
-"end of the list specified in the configuration files, but before the default "
+"inbuilt) setting is <placeholder type=\"literallayout\" id=\"0\"/> Note also "
+"that list entries specified on the command line will be added at the end of "
+"the list specified in the configuration files, but before the default "
 "entries. To prefer a type in this case over the ones specified in the "
 "entries. To prefer a type in this case over the ones specified in the "
 "configuration files you can set the option direct - not in list style.  This "
 "configuration files you can set the option direct - not in list style.  This "
 "will not override the defined list, it will only prefix the list with this "
 "will not override the defined list, it will only prefix the list with this "
@@ -6629,7 +6639,7 @@ msgstr ""
 #: apt.conf.5.xml:449
 #: apt.conf.5.xml:449
 msgid ""
 msgid ""
 "The special type <literal>uncompressed</literal> can be used to give "
 "The special type <literal>uncompressed</literal> can be used to give "
-"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files a preference, but note that most archives doesn't provide "
 "uncompressed files so this is mostly only useable for local mirrors."
 "uncompressed files so this is mostly only useable for local mirrors."
 msgstr ""
 msgstr ""
 
 
@@ -7922,8 +7932,8 @@ msgstr ""
 msgid ""
 msgid ""
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "directory are parsed in alphanumeric ascending order and need to obey the "
 "directory are parsed in alphanumeric ascending order and need to obey the "
-"following naming convention: The files have either no or \"<literal>pref</"
-"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"following naming convention: The files have no or \"<literal>pref</literal>"
+"\" as filename extension and which only contain alphanumeric, hyphen (-), "
 "underscore (_) and period (.) characters.  Otherwise APT will print a notice "
 "underscore (_) and period (.) characters.  Otherwise APT will print a notice "
 "that it has ignored a file if the file doesn't match a pattern in the "
 "that it has ignored a file if the file doesn't match a pattern in the "
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
@@ -8391,7 +8401,7 @@ msgid ""
 "APT also supports pinning by glob() expressions and regular expressions "
 "APT also supports pinning by glob() expressions and regular expressions "
 "surrounded by /. For example, the following example assigns the priority 500 "
 "surrounded by /. For example, the following example assigns the priority 500 "
 "to all packages from experimental where the name starts with gnome (as a glob"
 "to all packages from experimental where the name starts with gnome (as a glob"
-"()-like expression) or contains the word kde (as a POSIX extended regular "
+"()-like expression or contains the word kde (as a POSIX extended regular "
 "expression surrounded by slashes)."
 "expression surrounded by slashes)."
 msgstr ""
 msgstr ""
 
 
@@ -8415,7 +8425,7 @@ msgstr ""
 #: apt_preferences.5.xml:279
 #: apt_preferences.5.xml:279
 msgid ""
 msgid ""
 "The rule for those expressions is that they can occur anywhere where a "
 "The rule for those expressions is that they can occur anywhere where a "
-"string can occur. Thus, the following pin assigns the priority 990 to all "
+"string can occur. Those, the following pin assigns the priority 990 to all "
 "packages from a release starting with karmic."
 "packages from a release starting with karmic."
 msgstr ""
 msgstr ""
 
 

+ 68 - 89
doc/po/fr.po

@@ -9,7 +9,7 @@
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: \n"
 "Project-Id-Version: \n"
-"POT-Creation-Date: 2011-06-28 16:42+0200\n"
+"POT-Creation-Date: 2011-06-08 16:54+0300\n"
 "PO-Revision-Date: 2011-02-17 07:50+0100\n"
 "PO-Revision-Date: 2011-02-17 07:50+0100\n"
 "Last-Translator: Christian Perrier <bubulle@debian.org>\n"
 "Last-Translator: Christian Perrier <bubulle@debian.org>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
@@ -1277,7 +1277,7 @@ msgstr ""
 "<literal>Dir::Cache::pkgcache</literal>."
 "<literal>Dir::Cache::pkgcache</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:288 apt-ftparchive.1.xml:572 apt-get.8.xml:393
+#: apt-cache.8.xml:288 apt-ftparchive.1.xml:571 apt-get.8.xml:393
 #: apt-sortpkgs.1.xml:61
 #: apt-sortpkgs.1.xml:61
 msgid "<option>-s</option>"
 msgid "<option>-s</option>"
 msgstr "<option>-s</option>"
 msgstr "<option>-s</option>"
@@ -1304,12 +1304,12 @@ msgstr ""
 "<literal>Dir::Cache::srcpkgcache</literal>."
 "<literal>Dir::Cache::srcpkgcache</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:296 apt-ftparchive.1.xml:546 apt-get.8.xml:383
+#: apt-cache.8.xml:296 apt-ftparchive.1.xml:545 apt-get.8.xml:383
 msgid "<option>-q</option>"
 msgid "<option>-q</option>"
 msgstr "<option>-q</option>"
 msgstr "<option>-q</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:296 apt-ftparchive.1.xml:546 apt-get.8.xml:383
+#: apt-cache.8.xml:296 apt-ftparchive.1.xml:545 apt-get.8.xml:383
 msgid "<option>--quiet</option>"
 msgid "<option>--quiet</option>"
 msgstr "<option>--quiet</option>"
 msgstr "<option>--quiet</option>"
 
 
@@ -1391,16 +1391,9 @@ msgstr "<option>--no-enhances</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-cache.8.xml:317
 #: apt-cache.8.xml:317
-#, fuzzy
-#| msgid ""
-#| "Per default the <literal>depends</literal> and <literal>rdepends</"
-#| "literal> print all dependencies. This can be twicked with these flags "
-#| "which will omit the specified dependency type.  Configuration Item: "
-#| "<literal>APT::Cache::Show<replaceable>DependencyType</replaceable></"
-#| "literal> e.g. <literal>APT::Cache::ShowRecommends</literal>."
 msgid ""
 msgid ""
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
-"print all dependencies. This can be tweaked with these flags which will omit "
+"print all dependencies. This can be twicked with these flags which will omit "
 "the specified dependency type.  Configuration Item: <literal>APT::Cache::"
 "the specified dependency type.  Configuration Item: <literal>APT::Cache::"
 "Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
 "Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
 "Cache::ShowRecommends</literal>."
 "Cache::ShowRecommends</literal>."
@@ -1432,7 +1425,7 @@ msgstr ""
 "literal>."
 "literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:328 apt-cdrom.8.xml:134 apt-ftparchive.1.xml:584
+#: apt-cache.8.xml:328 apt-cdrom.8.xml:134 apt-ftparchive.1.xml:583
 msgid "<option>-a</option>"
 msgid "<option>-a</option>"
 msgstr "<option>-a</option>"
 msgstr "<option>-a</option>"
 
 
@@ -1552,7 +1545,7 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist>
 #. type: Content of: <refentry><refsect1><variablelist>
 #: apt-cache.8.xml:367 apt-cdrom.8.xml:153 apt-config.8.xml:101
 #: apt-cache.8.xml:367 apt-cdrom.8.xml:153 apt-config.8.xml:101
-#: apt-extracttemplates.1.xml:70 apt-ftparchive.1.xml:612 apt-get.8.xml:570
+#: apt-extracttemplates.1.xml:70 apt-ftparchive.1.xml:611 apt-get.8.xml:570
 #: apt-mark.8.xml:140 apt-sortpkgs.1.xml:67
 #: apt-mark.8.xml:140 apt-sortpkgs.1.xml:67
 msgid "&apt-commonoptions;"
 msgid "&apt-commonoptions;"
 msgstr "&apt-commonoptions;"
 msgstr "&apt-commonoptions;"
@@ -1570,7 +1563,7 @@ msgstr "&file-sourceslist; &file-statelists;"
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #: apt-cache.8.xml:379 apt-cdrom.8.xml:158 apt-config.8.xml:106
 #: apt-cache.8.xml:379 apt-cdrom.8.xml:158 apt-config.8.xml:106
-#: apt-extracttemplates.1.xml:77 apt-ftparchive.1.xml:628 apt-get.8.xml:585
+#: apt-extracttemplates.1.xml:77 apt-ftparchive.1.xml:627 apt-get.8.xml:585
 #: apt-key.8.xml:193 apt-mark.8.xml:150 apt-secure.8.xml:185
 #: apt-key.8.xml:193 apt-mark.8.xml:150 apt-secure.8.xml:185
 #: apt-sortpkgs.1.xml:72 apt.conf.5.xml:1099 apt_preferences.5.xml:704
 #: apt-sortpkgs.1.xml:72 apt.conf.5.xml:1099 apt_preferences.5.xml:704
 #: sources.list.5.xml:234
 #: sources.list.5.xml:234
@@ -1584,7 +1577,7 @@ msgstr "&apt-conf;, &sources-list;, &apt-get;."
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #: apt-cache.8.xml:384 apt-cdrom.8.xml:163 apt-config.8.xml:111
 #: apt-cache.8.xml:384 apt-cdrom.8.xml:163 apt-config.8.xml:111
-#: apt-extracttemplates.1.xml:81 apt-ftparchive.1.xml:632 apt-get.8.xml:591
+#: apt-extracttemplates.1.xml:81 apt-ftparchive.1.xml:631 apt-get.8.xml:591
 #: apt-mark.8.xml:154 apt-sortpkgs.1.xml:76
 #: apt-mark.8.xml:154 apt-sortpkgs.1.xml:76
 msgid "Diagnostics"
 msgid "Diagnostics"
 msgstr "Diagnostics"
 msgstr "Diagnostics"
@@ -1719,7 +1712,7 @@ msgid "Options"
 msgstr "Options"
 msgstr "Options"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cdrom.8.xml:98 apt-ftparchive.1.xml:540 apt-get.8.xml:345
+#: apt-cdrom.8.xml:98 apt-ftparchive.1.xml:539 apt-get.8.xml:345
 msgid "<option>-d</option>"
 msgid "<option>-d</option>"
 msgstr "<option>-d</option>"
 msgstr "<option>-d</option>"
 
 
@@ -1976,7 +1969,7 @@ msgid "Just show the contents of the configuration space."
 msgstr "Affiche seulement le contenu de l'espace de configuration."
 msgstr "Affiche seulement le contenu de l'espace de configuration."
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-config.8.xml:107 apt-extracttemplates.1.xml:78 apt-ftparchive.1.xml:629
+#: apt-config.8.xml:107 apt-extracttemplates.1.xml:78 apt-ftparchive.1.xml:628
 #: apt-sortpkgs.1.xml:73
 #: apt-sortpkgs.1.xml:73
 msgid "&apt-conf;"
 msgid "&apt-conf;"
 msgstr "&apt-conf;"
 msgstr "&apt-conf;"
@@ -3133,25 +3126,43 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-ftparchive.1.xml:531
 #: apt-ftparchive.1.xml:531
+#, fuzzy
+#| msgid ""
+#| "Values for the additional metadata fields in the Release file are taken "
+#| "from the corresponding variables under <literal>APT::FTPArchive::Release</"
+#| "literal>, e.g. <literal>APT::FTPArchive::Release::Origin</literal>.  The "
+#| "supported fields are: <literal>Origin</literal>, <literal>Label</"
+#| "literal>, <literal>Suite</literal>, <literal>Version</literal>, "
+#| "<literal>Codename</literal>, <literal>Date</literal>, <literal>Valid-"
+#| "Until</literal>, <literal>Architectures</literal>, <literal>Components</"
+#| "literal>, <literal>Description</literal>."
 msgid ""
 msgid ""
 "Generate the given checksum. These options default to on, when turned off "
 "Generate the given checksum. These options default to on, when turned off "
 "the generated index files will not have the checksum fields where possible.  "
 "the generated index files will not have the checksum fields where possible.  "
 "Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
 "Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
 "replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
 "replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
 "replaceable>::<replaceable>Checksum</replaceable></literal> where "
 "replaceable>::<replaceable>Checksum</replaceable></literal> where "
-"<literal><replaceable>Index</replaceable></literal> can be "
-"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
-"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
-"<literal>MD5</literal>, <literal>SHA1</literal> or <literal>SHA256</literal>."
+"<literal>Index</literal> can be <literal>Packages</literal>, "
+"<literal>Sources</literal> or <literal>Release</literal> and "
+"<literal>Checksum</literal> can be <literal>MD5</literal>, <literal>SHA1</"
+"literal> or <literal>SHA256</literal>."
 msgstr ""
 msgstr ""
+"La valeur des autres champs de métadonnées du fichier Release sont tirées de "
+"la valeur correspondante dans <literal>APT::FTPArchive::Release</literal>, "
+"p. ex. <literal>APT::FTPArchive::Release::Origin</literal>.  Les champs "
+"reconnus sont : <literal>Origin</literal>, <literal>Label</literal>, "
+"<literal>Suite</literal>, <literal>Version</literal>, <literal>Codename</"
+"literal>, <literal>Date</literal>, <literal>Valid-Until</literal>, "
+"<literal>Architectures</literal>, <literal>Components</literal>, "
+"<literal>Description</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:540
+#: apt-ftparchive.1.xml:539
 msgid "<option>--db</option>"
 msgid "<option>--db</option>"
 msgstr "<option>--db</option>"
 msgstr "<option>--db</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:542
+#: apt-ftparchive.1.xml:541
 msgid ""
 msgid ""
 "Use a binary caching DB. This has no effect on the generate command.  "
 "Use a binary caching DB. This has no effect on the generate command.  "
 "Configuration Item: <literal>APT::FTPArchive::DB</literal>."
 "Configuration Item: <literal>APT::FTPArchive::DB</literal>."
@@ -3161,7 +3172,7 @@ msgstr ""
 "literal>."
 "literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:548
+#: apt-ftparchive.1.xml:547
 msgid ""
 msgid ""
 "Quiet; produces output suitable for logging, omitting progress indicators.  "
 "Quiet; produces output suitable for logging, omitting progress indicators.  "
 "More q's will produce more quiet up to a maximum of 2. You can also use "
 "More q's will produce more quiet up to a maximum of 2. You can also use "
@@ -3176,12 +3187,12 @@ msgstr ""
 "configuration : <literal>quiet</literal>."
 "configuration : <literal>quiet</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:554
+#: apt-ftparchive.1.xml:553
 msgid "<option>--delink</option>"
 msgid "<option>--delink</option>"
 msgstr "<option>--delink</option>"
 msgstr "<option>--delink</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:556
+#: apt-ftparchive.1.xml:555
 msgid ""
 msgid ""
 "Perform Delinking. If the <literal>External-Links</literal> setting is used "
 "Perform Delinking. If the <literal>External-Links</literal> setting is used "
 "then this option actually enables delinking of the files. It defaults to on "
 "then this option actually enables delinking of the files. It defaults to on "
@@ -3195,12 +3206,12 @@ msgstr ""
 "literal>."
 "literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:562
+#: apt-ftparchive.1.xml:561
 msgid "<option>--contents</option>"
 msgid "<option>--contents</option>"
 msgstr "<option>--contents</option>"
 msgstr "<option>--contents</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:564
+#: apt-ftparchive.1.xml:563
 msgid ""
 msgid ""
 "Perform contents generation. When this option is set and package indexes are "
 "Perform contents generation. When this option is set and package indexes are "
 "being generated with a cache DB then the file listing will also be extracted "
 "being generated with a cache DB then the file listing will also be extracted "
@@ -3216,12 +3227,12 @@ msgstr ""
 "de configuration : <literal>APT::FTPArchive::Contents</literal>."
 "de configuration : <literal>APT::FTPArchive::Contents</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:572
+#: apt-ftparchive.1.xml:571
 msgid "<option>--source-override</option>"
 msgid "<option>--source-override</option>"
 msgstr "<option>--source-override</option>"
 msgstr "<option>--source-override</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:574
+#: apt-ftparchive.1.xml:573
 msgid ""
 msgid ""
 "Select the source override file to use with the <literal>sources</literal> "
 "Select the source override file to use with the <literal>sources</literal> "
 "command.  Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
 "command.  Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
@@ -3232,12 +3243,12 @@ msgstr ""
 "FTPArchive::SourceOverride</literal>."
 "FTPArchive::SourceOverride</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:578
+#: apt-ftparchive.1.xml:577
 msgid "<option>--readonly</option>"
 msgid "<option>--readonly</option>"
 msgstr "<option>--readonly</option>"
 msgstr "<option>--readonly</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:580
+#: apt-ftparchive.1.xml:579
 msgid ""
 msgid ""
 "Make the caching databases read only.  Configuration Item: <literal>APT::"
 "Make the caching databases read only.  Configuration Item: <literal>APT::"
 "FTPArchive::ReadOnlyDB</literal>."
 "FTPArchive::ReadOnlyDB</literal>."
@@ -3246,12 +3257,12 @@ msgstr ""
 "configuration : <literal>APT::FTPArchive::ReadOnlyDB</literal>."
 "configuration : <literal>APT::FTPArchive::ReadOnlyDB</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:584
+#: apt-ftparchive.1.xml:583
 msgid "<option>--arch</option>"
 msgid "<option>--arch</option>"
 msgstr "<option>--arch</option>"
 msgstr "<option>--arch</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:585
+#: apt-ftparchive.1.xml:584
 msgid ""
 msgid ""
 "Accept in the <literal>packages</literal> and <literal>contents</literal> "
 "Accept in the <literal>packages</literal> and <literal>contents</literal> "
 "commands only package files matching <literal>*_arch.deb</literal> or "
 "commands only package files matching <literal>*_arch.deb</literal> or "
@@ -3265,12 +3276,12 @@ msgstr ""
 "<literal>APT::FTPArchive::Architecture</literal>."
 "<literal>APT::FTPArchive::Architecture</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:591
+#: apt-ftparchive.1.xml:590
 msgid "<option>APT::FTPArchive::AlwaysStat</option>"
 msgid "<option>APT::FTPArchive::AlwaysStat</option>"
 msgstr "<option>APT::FTPArchive::AlwaysStat</option>"
 msgstr "<option>APT::FTPArchive::AlwaysStat</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:593
+#: apt-ftparchive.1.xml:592
 msgid ""
 msgid ""
 "&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
 "&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 "
 "packages are recompiled and/or republished with the same version again, this "
@@ -3293,12 +3304,12 @@ msgstr ""
 "survenir et l'ensemble de ces contrôles devient inutile."
 "survenir et l'ensemble de ces contrôles devient inutile."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:603
+#: apt-ftparchive.1.xml:602
 msgid "<option>APT::FTPArchive::LongDescription</option>"
 msgid "<option>APT::FTPArchive::LongDescription</option>"
 msgstr "<option>APT::FTPArchive::LongDescription</option>"
 msgstr "<option>APT::FTPArchive::LongDescription</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:605
+#: apt-ftparchive.1.xml:604
 msgid ""
 msgid ""
 "This configuration option defaults to \"<literal>true</literal>\" and should "
 "This configuration option defaults to \"<literal>true</literal>\" and should "
 "only be set to <literal>\"false\"</literal> if the Archive generated with "
 "only be set to <literal>\"false\"</literal> if the Archive generated with "
@@ -3314,19 +3325,19 @@ msgstr ""
 "generate."
 "generate."
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
-#: apt-ftparchive.1.xml:617 apt.conf.5.xml:1087 apt_preferences.5.xml:544
+#: apt-ftparchive.1.xml:616 apt.conf.5.xml:1087 apt_preferences.5.xml:544
 #: sources.list.5.xml:198
 #: sources.list.5.xml:198
 msgid "Examples"
 msgid "Examples"
 msgstr "Exemples"
 msgstr "Exemples"
 
 
 #. type: Content of: <refentry><refsect1><para><programlisting>
 #. type: Content of: <refentry><refsect1><para><programlisting>
-#: apt-ftparchive.1.xml:623
+#: apt-ftparchive.1.xml:622
 #, no-wrap
 #, no-wrap
 msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgstr "<command>apt-ftparchive</command> packages <replaceable>répertoire</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgstr "<command>apt-ftparchive</command> packages <replaceable>répertoire</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-ftparchive.1.xml:619
+#: apt-ftparchive.1.xml:618
 msgid ""
 msgid ""
 "To create a compressed Packages file for a directory containing binary "
 "To create a compressed Packages file for a directory containing binary "
 "packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
 "packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
@@ -3335,7 +3346,7 @@ msgstr ""
 "des paquets binaires (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
 "des paquets binaires (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-ftparchive.1.xml:633
+#: apt-ftparchive.1.xml:632
 msgid ""
 msgid ""
 "<command>apt-ftparchive</command> returns zero on normal operation, decimal "
 "<command>apt-ftparchive</command> returns zero on normal operation, decimal "
 "100 on error."
 "100 on error."
@@ -3811,7 +3822,7 @@ msgstr "download"
 #: apt-get.8.xml:282
 #: apt-get.8.xml:282
 msgid ""
 msgid ""
 "<literal>download</literal> will download the given binary package into the "
 "<literal>download</literal> will download the given binary package into the "
-"current directory."
+"current directoy."
 msgstr ""
 msgstr ""
 "<literal>download</literal> télécharge le fichier binaire indiqué dans le "
 "<literal>download</literal> télécharge le fichier binaire indiqué dans le "
 "répertoire courant."
 "répertoire courant."
@@ -5486,23 +5497,13 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
 #. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
 #: apt.conf.5.xml:52
 #: apt.conf.5.xml:52
-#, fuzzy
-#| msgid ""
-#| "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
-#| "order which have no or \"<literal>conf</literal>\" as filename extension "
-#| "and which only contain alphanumeric, hyphen (-), underscore (_) and "
-#| "period (.) characters.  Otherwise APT will print a notice that it has "
-#| "ignored a file if the file doesn't match a pattern in the <literal>Dir::"
-#| "Ignore-Files-Silently</literal> configuration list - in this case it will "
-#| "be silently ignored."
 msgid ""
 msgid ""
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
-"order which have either no or \"<literal>conf</literal>\" as filename "
-"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
-"and period (.) characters.  Otherwise APT will print a notice that it has "
-"ignored a file if the file doesn't match a pattern in the <literal>Dir::"
-"Ignore-Files-Silently</literal> configuration list - in this case it will be "
-"silently ignored."
+"order which have no or \"<literal>conf</literal>\" as filename extension and "
+"which only contain alphanumeric, hyphen (-), underscore (_) and period (.) "
+"characters.  Otherwise APT will print a notice that it has ignored a file if "
+"the file doesn't match a pattern in the <literal>Dir::Ignore-Files-Silently</"
+"literal> configuration list - in this case it will be silently ignored."
 msgstr ""
 msgstr ""
 "tous les fichiers de <literal>Dir::Etc::Parts</literal> dans l'ordre "
 "tous les fichiers de <literal>Dir::Etc::Parts</literal> dans l'ordre "
 "alphanumérique ascendant qui ont soit l'extension \"<literal>conf</literal>"
 "alphanumérique ascendant qui ont soit l'extension \"<literal>conf</literal>"
@@ -6538,25 +6539,13 @@ msgstr "Dir::Bin::bzip2 \"/bin/bzip2\";"
 
 
 #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
 #: apt.conf.5.xml:442
 #: apt.conf.5.xml:442
-#, fuzzy
-#| msgid ""
-#| "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
-#| "replaceable></literal> will be checked: If this setting exists the method "
-#| "will only be used if this file exists, e.g. for the bzip2 method (the "
-#| "inbuilt) setting is <placeholder type=\"literallayout\" id=\"0\"/> Note "
-#| "also that list entries specified on the command line will be added at the "
-#| "end of the list specified in the configuration files, but before the "
-#| "default entries. To prefer a type in this case over the ones specified in "
-#| "the configuration files you can set the option direct - not in list "
-#| "style.  This will not override the defined list, it will only prefix the "
-#| "list with this type."
 msgid ""
 msgid ""
 "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
 "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
 "replaceable></literal> will be checked: If this setting exists the method "
 "replaceable></literal> will be checked: If this setting exists the method "
 "will only be used if this file exists, e.g. for the bzip2 method (the "
 "will only be used if this file exists, e.g. for the bzip2 method (the "
-"inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> Note "
-"also that list entries specified on the command line will be added at the "
-"end of the list specified in the configuration files, but before the default "
+"inbuilt) setting is <placeholder type=\"literallayout\" id=\"0\"/> Note also "
+"that list entries specified on the command line will be added at the end of "
+"the list specified in the configuration files, but before the default "
 "entries. To prefer a type in this case over the ones specified in the "
 "entries. To prefer a type in this case over the ones specified in the "
 "configuration files you can set the option direct - not in list style.  This "
 "configuration files you can set the option direct - not in list style.  This "
 "will not override the defined list, it will only prefix the list with this "
 "will not override the defined list, it will only prefix the list with this "
@@ -6578,7 +6567,7 @@ msgstr ""
 #: apt.conf.5.xml:449
 #: apt.conf.5.xml:449
 msgid ""
 msgid ""
 "The special type <literal>uncompressed</literal> can be used to give "
 "The special type <literal>uncompressed</literal> can be used to give "
-"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files a preference, but note that most archives doesn't provide "
 "uncompressed files so this is mostly only useable for local mirrors."
 "uncompressed files so this is mostly only useable for local mirrors."
 msgstr ""
 msgstr ""
 "Le type spécial <literal>uncompressed</literal> peut servir à donner la "
 "Le type spécial <literal>uncompressed</literal> peut servir à donner la "
@@ -7866,21 +7855,11 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
 #: apt_preferences.5.xml:70
 #: apt_preferences.5.xml:70
-#, fuzzy
-#| msgid ""
-#| "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
-#| "directory are parsed in alphanumeric ascending order and need to obey the "
-#| "following naming convention: The files have no or \"<literal>pref</"
-#| "literal>\" as filename extension and which only contain alphanumeric, "
-#| "hyphen (-), underscore (_) and period (.) characters.  Otherwise APT will "
-#| "print a notice that it has ignored a file if the file doesn't match a "
-#| "pattern in the <literal>Dir::Ignore-Files-Silently</literal> "
-#| "configuration list - in this case it will be silently ignored."
 msgid ""
 msgid ""
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "directory are parsed in alphanumeric ascending order and need to obey the "
 "directory are parsed in alphanumeric ascending order and need to obey the "
-"following naming convention: The files have either no or \"<literal>pref</"
-"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"following naming convention: The files have no or \"<literal>pref</literal>"
+"\" as filename extension and which only contain alphanumeric, hyphen (-), "
 "underscore (_) and period (.) characters.  Otherwise APT will print a notice "
 "underscore (_) and period (.) characters.  Otherwise APT will print a notice "
 "that it has ignored a file if the file doesn't match a pattern in the "
 "that it has ignored a file if the file doesn't match a pattern in the "
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
@@ -8346,7 +8325,7 @@ msgid ""
 "APT also supports pinning by glob() expressions and regular expressions "
 "APT also supports pinning by glob() expressions and regular expressions "
 "surrounded by /. For example, the following example assigns the priority 500 "
 "surrounded by /. For example, the following example assigns the priority 500 "
 "to all packages from experimental where the name starts with gnome (as a glob"
 "to all packages from experimental where the name starts with gnome (as a glob"
-"()-like expression) or contains the word kde (as a POSIX extended regular "
+"()-like expression or contains the word kde (as a POSIX extended regular "
 "expression surrounded by slashes)."
 "expression surrounded by slashes)."
 msgstr ""
 msgstr ""
 
 
@@ -8370,7 +8349,7 @@ msgstr ""
 #: apt_preferences.5.xml:279
 #: apt_preferences.5.xml:279
 msgid ""
 msgid ""
 "The rule for those expressions is that they can occur anywhere where a "
 "The rule for those expressions is that they can occur anywhere where a "
-"string can occur. Thus, the following pin assigns the priority 990 to all "
+"string can occur. Those, the following pin assigns the priority 990 to all "
 "packages from a release starting with karmic."
 "packages from a release starting with karmic."
 msgstr ""
 msgstr ""
 
 

+ 50 - 51
doc/po/it.po

@@ -9,7 +9,7 @@
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: \n"
 "Project-Id-Version: \n"
-"POT-Creation-Date: 2011-06-28 16:42+0200\n"
+"POT-Creation-Date: 2011-06-08 16:54+0300\n"
 "PO-Revision-Date: 2003-04-26 23:26+0100\n"
 "PO-Revision-Date: 2003-04-26 23:26+0100\n"
 "Last-Translator: Traduzione di Eugenia Franzoni <eugenia@linuxcare.com>\n"
 "Last-Translator: Traduzione di Eugenia Franzoni <eugenia@linuxcare.com>\n"
 "Language-Team: <debian-l10n-italian@lists.debian.org>\n"
 "Language-Team: <debian-l10n-italian@lists.debian.org>\n"
@@ -934,7 +934,7 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:288 apt-ftparchive.1.xml:572 apt-get.8.xml:393
+#: apt-cache.8.xml:288 apt-ftparchive.1.xml:571 apt-get.8.xml:393
 #: apt-sortpkgs.1.xml:61
 #: apt-sortpkgs.1.xml:61
 msgid "<option>-s</option>"
 msgid "<option>-s</option>"
 msgstr ""
 msgstr ""
@@ -955,12 +955,12 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:296 apt-ftparchive.1.xml:546 apt-get.8.xml:383
+#: apt-cache.8.xml:296 apt-ftparchive.1.xml:545 apt-get.8.xml:383
 msgid "<option>-q</option>"
 msgid "<option>-q</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:296 apt-ftparchive.1.xml:546 apt-get.8.xml:383
+#: apt-cache.8.xml:296 apt-ftparchive.1.xml:545 apt-get.8.xml:383
 msgid "<option>--quiet</option>"
 msgid "<option>--quiet</option>"
 msgstr ""
 msgstr ""
 
 
@@ -1035,7 +1035,7 @@ msgstr ""
 #: apt-cache.8.xml:317
 #: apt-cache.8.xml:317
 msgid ""
 msgid ""
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
-"print all dependencies. This can be tweaked with these flags which will omit "
+"print all dependencies. This can be twicked with these flags which will omit "
 "the specified dependency type.  Configuration Item: <literal>APT::Cache::"
 "the specified dependency type.  Configuration Item: <literal>APT::Cache::"
 "Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
 "Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
 "Cache::ShowRecommends</literal>."
 "Cache::ShowRecommends</literal>."
@@ -1059,7 +1059,7 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:328 apt-cdrom.8.xml:134 apt-ftparchive.1.xml:584
+#: apt-cache.8.xml:328 apt-cdrom.8.xml:134 apt-ftparchive.1.xml:583
 msgid "<option>-a</option>"
 msgid "<option>-a</option>"
 msgstr ""
 msgstr ""
 
 
@@ -1155,7 +1155,7 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist>
 #. type: Content of: <refentry><refsect1><variablelist>
 #: apt-cache.8.xml:367 apt-cdrom.8.xml:153 apt-config.8.xml:101
 #: apt-cache.8.xml:367 apt-cdrom.8.xml:153 apt-config.8.xml:101
-#: apt-extracttemplates.1.xml:70 apt-ftparchive.1.xml:612 apt-get.8.xml:570
+#: apt-extracttemplates.1.xml:70 apt-ftparchive.1.xml:611 apt-get.8.xml:570
 #: apt-mark.8.xml:140 apt-sortpkgs.1.xml:67
 #: apt-mark.8.xml:140 apt-sortpkgs.1.xml:67
 msgid "&apt-commonoptions;"
 msgid "&apt-commonoptions;"
 msgstr ""
 msgstr ""
@@ -1173,7 +1173,7 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #: apt-cache.8.xml:379 apt-cdrom.8.xml:158 apt-config.8.xml:106
 #: apt-cache.8.xml:379 apt-cdrom.8.xml:158 apt-config.8.xml:106
-#: apt-extracttemplates.1.xml:77 apt-ftparchive.1.xml:628 apt-get.8.xml:585
+#: apt-extracttemplates.1.xml:77 apt-ftparchive.1.xml:627 apt-get.8.xml:585
 #: apt-key.8.xml:193 apt-mark.8.xml:150 apt-secure.8.xml:185
 #: apt-key.8.xml:193 apt-mark.8.xml:150 apt-secure.8.xml:185
 #: apt-sortpkgs.1.xml:72 apt.conf.5.xml:1099 apt_preferences.5.xml:704
 #: apt-sortpkgs.1.xml:72 apt.conf.5.xml:1099 apt_preferences.5.xml:704
 #: sources.list.5.xml:234
 #: sources.list.5.xml:234
@@ -1187,7 +1187,7 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #: apt-cache.8.xml:384 apt-cdrom.8.xml:163 apt-config.8.xml:111
 #: apt-cache.8.xml:384 apt-cdrom.8.xml:163 apt-config.8.xml:111
-#: apt-extracttemplates.1.xml:81 apt-ftparchive.1.xml:632 apt-get.8.xml:591
+#: apt-extracttemplates.1.xml:81 apt-ftparchive.1.xml:631 apt-get.8.xml:591
 #: apt-mark.8.xml:154 apt-sortpkgs.1.xml:76
 #: apt-mark.8.xml:154 apt-sortpkgs.1.xml:76
 msgid "Diagnostics"
 msgid "Diagnostics"
 msgstr ""
 msgstr ""
@@ -1292,7 +1292,7 @@ msgid "Options"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cdrom.8.xml:98 apt-ftparchive.1.xml:540 apt-get.8.xml:345
+#: apt-cdrom.8.xml:98 apt-ftparchive.1.xml:539 apt-get.8.xml:345
 msgid "<option>-d</option>"
 msgid "<option>-d</option>"
 msgstr ""
 msgstr ""
 
 
@@ -1496,7 +1496,7 @@ msgid "Just show the contents of the configuration space."
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-config.8.xml:107 apt-extracttemplates.1.xml:78 apt-ftparchive.1.xml:629
+#: apt-config.8.xml:107 apt-extracttemplates.1.xml:78 apt-ftparchive.1.xml:628
 #: apt-sortpkgs.1.xml:73
 #: apt-sortpkgs.1.xml:73
 msgid "&apt-conf;"
 msgid "&apt-conf;"
 msgstr ""
 msgstr ""
@@ -2419,26 +2419,26 @@ msgid ""
 "Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
 "Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
 "replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
 "replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
 "replaceable>::<replaceable>Checksum</replaceable></literal> where "
 "replaceable>::<replaceable>Checksum</replaceable></literal> where "
-"<literal><replaceable>Index</replaceable></literal> can be "
-"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
-"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
-"<literal>MD5</literal>, <literal>SHA1</literal> or <literal>SHA256</literal>."
+"<literal>Index</literal> can be <literal>Packages</literal>, "
+"<literal>Sources</literal> or <literal>Release</literal> and "
+"<literal>Checksum</literal> can be <literal>MD5</literal>, <literal>SHA1</"
+"literal> or <literal>SHA256</literal>."
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:540
+#: apt-ftparchive.1.xml:539
 msgid "<option>--db</option>"
 msgid "<option>--db</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:542
+#: apt-ftparchive.1.xml:541
 msgid ""
 msgid ""
 "Use a binary caching DB. This has no effect on the generate command.  "
 "Use a binary caching DB. This has no effect on the generate command.  "
 "Configuration Item: <literal>APT::FTPArchive::DB</literal>."
 "Configuration Item: <literal>APT::FTPArchive::DB</literal>."
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:548
+#: apt-ftparchive.1.xml:547
 msgid ""
 msgid ""
 "Quiet; produces output suitable for logging, omitting progress indicators.  "
 "Quiet; produces output suitable for logging, omitting progress indicators.  "
 "More q's will produce more quiet up to a maximum of 2. You can also use "
 "More q's will produce more quiet up to a maximum of 2. You can also use "
@@ -2447,12 +2447,12 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:554
+#: apt-ftparchive.1.xml:553
 msgid "<option>--delink</option>"
 msgid "<option>--delink</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:556
+#: apt-ftparchive.1.xml:555
 msgid ""
 msgid ""
 "Perform Delinking. If the <literal>External-Links</literal> setting is used "
 "Perform Delinking. If the <literal>External-Links</literal> setting is used "
 "then this option actually enables delinking of the files. It defaults to on "
 "then this option actually enables delinking of the files. It defaults to on "
@@ -2461,12 +2461,12 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:562
+#: apt-ftparchive.1.xml:561
 msgid "<option>--contents</option>"
 msgid "<option>--contents</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:564
+#: apt-ftparchive.1.xml:563
 msgid ""
 msgid ""
 "Perform contents generation. When this option is set and package indexes are "
 "Perform contents generation. When this option is set and package indexes are "
 "being generated with a cache DB then the file listing will also be extracted "
 "being generated with a cache DB then the file listing will also be extracted "
@@ -2476,12 +2476,12 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:572
+#: apt-ftparchive.1.xml:571
 msgid "<option>--source-override</option>"
 msgid "<option>--source-override</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:574
+#: apt-ftparchive.1.xml:573
 msgid ""
 msgid ""
 "Select the source override file to use with the <literal>sources</literal> "
 "Select the source override file to use with the <literal>sources</literal> "
 "command.  Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
 "command.  Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
@@ -2489,24 +2489,24 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:578
+#: apt-ftparchive.1.xml:577
 msgid "<option>--readonly</option>"
 msgid "<option>--readonly</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:580
+#: apt-ftparchive.1.xml:579
 msgid ""
 msgid ""
 "Make the caching databases read only.  Configuration Item: <literal>APT::"
 "Make the caching databases read only.  Configuration Item: <literal>APT::"
 "FTPArchive::ReadOnlyDB</literal>."
 "FTPArchive::ReadOnlyDB</literal>."
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:584
+#: apt-ftparchive.1.xml:583
 msgid "<option>--arch</option>"
 msgid "<option>--arch</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:585
+#: apt-ftparchive.1.xml:584
 msgid ""
 msgid ""
 "Accept in the <literal>packages</literal> and <literal>contents</literal> "
 "Accept in the <literal>packages</literal> and <literal>contents</literal> "
 "commands only package files matching <literal>*_arch.deb</literal> or "
 "commands only package files matching <literal>*_arch.deb</literal> or "
@@ -2515,12 +2515,12 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:591
+#: apt-ftparchive.1.xml:590
 msgid "<option>APT::FTPArchive::AlwaysStat</option>"
 msgid "<option>APT::FTPArchive::AlwaysStat</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:593
+#: apt-ftparchive.1.xml:592
 msgid ""
 msgid ""
 "&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
 "&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 "
 "packages are recompiled and/or republished with the same version again, this "
@@ -2534,12 +2534,12 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:603
+#: apt-ftparchive.1.xml:602
 msgid "<option>APT::FTPArchive::LongDescription</option>"
 msgid "<option>APT::FTPArchive::LongDescription</option>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:605
+#: apt-ftparchive.1.xml:604
 msgid ""
 msgid ""
 "This configuration option defaults to \"<literal>true</literal>\" and should "
 "This configuration option defaults to \"<literal>true</literal>\" and should "
 "only be set to <literal>\"false\"</literal> if the Archive generated with "
 "only be set to <literal>\"false\"</literal> if the Archive generated with "
@@ -2549,26 +2549,26 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
-#: apt-ftparchive.1.xml:617 apt.conf.5.xml:1087 apt_preferences.5.xml:544
+#: apt-ftparchive.1.xml:616 apt.conf.5.xml:1087 apt_preferences.5.xml:544
 #: sources.list.5.xml:198
 #: sources.list.5.xml:198
 msgid "Examples"
 msgid "Examples"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><para><programlisting>
 #. type: Content of: <refentry><refsect1><para><programlisting>
-#: apt-ftparchive.1.xml:623
+#: apt-ftparchive.1.xml:622
 #, no-wrap
 #, no-wrap
 msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-ftparchive.1.xml:619
+#: apt-ftparchive.1.xml:618
 msgid ""
 msgid ""
 "To create a compressed Packages file for a directory containing binary "
 "To create a compressed Packages file for a directory containing binary "
 "packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
 "packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-ftparchive.1.xml:633
+#: apt-ftparchive.1.xml:632
 msgid ""
 msgid ""
 "<command>apt-ftparchive</command> returns zero on normal operation, decimal "
 "<command>apt-ftparchive</command> returns zero on normal operation, decimal "
 "100 on error."
 "100 on error."
@@ -2897,7 +2897,7 @@ msgstr ""
 #: apt-get.8.xml:282
 #: apt-get.8.xml:282
 msgid ""
 msgid ""
 "<literal>download</literal> will download the given binary package into the "
 "<literal>download</literal> will download the given binary package into the "
-"current directory."
+"current directoy."
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
@@ -4174,12 +4174,11 @@ msgstr ""
 #: apt.conf.5.xml:52
 #: apt.conf.5.xml:52
 msgid ""
 msgid ""
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
-"order which have either no or \"<literal>conf</literal>\" as filename "
-"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
-"and period (.) characters.  Otherwise APT will print a notice that it has "
-"ignored a file if the file doesn't match a pattern in the <literal>Dir::"
-"Ignore-Files-Silently</literal> configuration list - in this case it will be "
-"silently ignored."
+"order which have no or \"<literal>conf</literal>\" as filename extension and "
+"which only contain alphanumeric, hyphen (-), underscore (_) and period (.) "
+"characters.  Otherwise APT will print a notice that it has ignored a file if "
+"the file doesn't match a pattern in the <literal>Dir::Ignore-Files-Silently</"
+"literal> configuration list - in this case it will be silently ignored."
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
 #. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
@@ -4877,9 +4876,9 @@ msgid ""
 "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
 "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
 "replaceable></literal> will be checked: If this setting exists the method "
 "replaceable></literal> will be checked: If this setting exists the method "
 "will only be used if this file exists, e.g. for the bzip2 method (the "
 "will only be used if this file exists, e.g. for the bzip2 method (the "
-"inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> Note "
-"also that list entries specified on the command line will be added at the "
-"end of the list specified in the configuration files, but before the default "
+"inbuilt) setting is <placeholder type=\"literallayout\" id=\"0\"/> Note also "
+"that list entries specified on the command line will be added at the end of "
+"the list specified in the configuration files, but before the default "
 "entries. To prefer a type in this case over the ones specified in the "
 "entries. To prefer a type in this case over the ones specified in the "
 "configuration files you can set the option direct - not in list style.  This "
 "configuration files you can set the option direct - not in list style.  This "
 "will not override the defined list, it will only prefix the list with this "
 "will not override the defined list, it will only prefix the list with this "
@@ -4890,7 +4889,7 @@ msgstr ""
 #: apt.conf.5.xml:449
 #: apt.conf.5.xml:449
 msgid ""
 msgid ""
 "The special type <literal>uncompressed</literal> can be used to give "
 "The special type <literal>uncompressed</literal> can be used to give "
-"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files a preference, but note that most archives doesn't provide "
 "uncompressed files so this is mostly only useable for local mirrors."
 "uncompressed files so this is mostly only useable for local mirrors."
 msgstr ""
 msgstr ""
 
 
@@ -5831,8 +5830,8 @@ msgstr ""
 msgid ""
 msgid ""
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "directory are parsed in alphanumeric ascending order and need to obey the "
 "directory are parsed in alphanumeric ascending order and need to obey the "
-"following naming convention: The files have either no or \"<literal>pref</"
-"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"following naming convention: The files have no or \"<literal>pref</literal>"
+"\" as filename extension and which only contain alphanumeric, hyphen (-), "
 "underscore (_) and period (.) characters.  Otherwise APT will print a notice "
 "underscore (_) and period (.) characters.  Otherwise APT will print a notice "
 "that it has ignored a file if the file doesn't match a pattern in the "
 "that it has ignored a file if the file doesn't match a pattern in the "
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
@@ -6160,7 +6159,7 @@ msgid ""
 "APT also supports pinning by glob() expressions and regular expressions "
 "APT also supports pinning by glob() expressions and regular expressions "
 "surrounded by /. For example, the following example assigns the priority 500 "
 "surrounded by /. For example, the following example assigns the priority 500 "
 "to all packages from experimental where the name starts with gnome (as a glob"
 "to all packages from experimental where the name starts with gnome (as a glob"
-"()-like expression) or contains the word kde (as a POSIX extended regular "
+"()-like expression or contains the word kde (as a POSIX extended regular "
 "expression surrounded by slashes)."
 "expression surrounded by slashes)."
 msgstr ""
 msgstr ""
 
 
@@ -6177,7 +6176,7 @@ msgstr ""
 #: apt_preferences.5.xml:279
 #: apt_preferences.5.xml:279
 msgid ""
 msgid ""
 "The rule for those expressions is that they can occur anywhere where a "
 "The rule for those expressions is that they can occur anywhere where a "
-"string can occur. Thus, the following pin assigns the priority 990 to all "
+"string can occur. Those, the following pin assigns the priority 990 to all "
 "packages from a release starting with karmic."
 "packages from a release starting with karmic."
 msgstr ""
 msgstr ""
 
 

+ 67 - 51
doc/po/ja.po

@@ -7,7 +7,7 @@
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt 0.7.25.3\n"
 "Project-Id-Version: apt 0.7.25.3\n"
-"POT-Creation-Date: 2011-06-28 16:42+0200\n"
+"POT-Creation-Date: 2011-06-08 16:54+0300\n"
 "PO-Revision-Date: 2010-09-07 07:38+0900\n"
 "PO-Revision-Date: 2010-09-07 07:38+0900\n"
 "Last-Translator: KURASAWA Nozomu <nabetaro@caldron.jp>\n"
 "Last-Translator: KURASAWA Nozomu <nabetaro@caldron.jp>\n"
 "Language-Team: Debian Japanese List <debian-japanese@lists.debian.org>\n"
 "Language-Team: Debian Japanese List <debian-japanese@lists.debian.org>\n"
@@ -1357,7 +1357,7 @@ msgstr ""
 "pkgcache</literal>"
 "pkgcache</literal>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:288 apt-ftparchive.1.xml:572 apt-get.8.xml:393
+#: apt-cache.8.xml:288 apt-ftparchive.1.xml:571 apt-get.8.xml:393
 #: apt-sortpkgs.1.xml:61
 #: apt-sortpkgs.1.xml:61
 msgid "<option>-s</option>"
 msgid "<option>-s</option>"
 msgstr "<option>-s</option>"
 msgstr "<option>-s</option>"
@@ -1384,12 +1384,12 @@ msgstr ""
 "<literal>Dir::Cache::srcpkgcache</literal>"
 "<literal>Dir::Cache::srcpkgcache</literal>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:296 apt-ftparchive.1.xml:546 apt-get.8.xml:383
+#: apt-cache.8.xml:296 apt-ftparchive.1.xml:545 apt-get.8.xml:383
 msgid "<option>-q</option>"
 msgid "<option>-q</option>"
 msgstr "<option>-q</option>"
 msgstr "<option>-q</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:296 apt-ftparchive.1.xml:546 apt-get.8.xml:383
+#: apt-cache.8.xml:296 apt-ftparchive.1.xml:545 apt-get.8.xml:383
 msgid "<option>--quiet</option>"
 msgid "<option>--quiet</option>"
 msgstr "<option>--quiet</option>"
 msgstr "<option>--quiet</option>"
 
 
@@ -1475,7 +1475,7 @@ msgstr "<option>--no-enhances</option>"
 #, fuzzy
 #, fuzzy
 msgid ""
 msgid ""
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
-"print all dependencies. This can be tweaked with these flags which will omit "
+"print all dependencies. This can be twicked with these flags which will omit "
 "the specified dependency type.  Configuration Item: <literal>APT::Cache::"
 "the specified dependency type.  Configuration Item: <literal>APT::Cache::"
 "Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
 "Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
 "Cache::ShowRecommends</literal>."
 "Cache::ShowRecommends</literal>."
@@ -1505,7 +1505,7 @@ msgstr ""
 "ShowFull</literal>"
 "ShowFull</literal>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:328 apt-cdrom.8.xml:134 apt-ftparchive.1.xml:584
+#: apt-cache.8.xml:328 apt-cdrom.8.xml:134 apt-ftparchive.1.xml:583
 msgid "<option>-a</option>"
 msgid "<option>-a</option>"
 msgstr "<option>-a</option>"
 msgstr "<option>-a</option>"
 
 
@@ -1627,7 +1627,7 @@ msgstr ""
 # type: Content of: <refentry><refsect1><para>
 # type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><variablelist>
 #. type: Content of: <refentry><refsect1><variablelist>
 #: apt-cache.8.xml:367 apt-cdrom.8.xml:153 apt-config.8.xml:101
 #: apt-cache.8.xml:367 apt-cdrom.8.xml:153 apt-config.8.xml:101
-#: apt-extracttemplates.1.xml:70 apt-ftparchive.1.xml:612 apt-get.8.xml:570
+#: apt-extracttemplates.1.xml:70 apt-ftparchive.1.xml:611 apt-get.8.xml:570
 #: apt-mark.8.xml:140 apt-sortpkgs.1.xml:67
 #: apt-mark.8.xml:140 apt-sortpkgs.1.xml:67
 msgid "&apt-commonoptions;"
 msgid "&apt-commonoptions;"
 msgstr "&apt-commonoptions;"
 msgstr "&apt-commonoptions;"
@@ -1647,7 +1647,7 @@ msgstr "&file-sourceslist; &file-statelists;"
 # type: Content of: <refentry><refsect1><title>
 # type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #: apt-cache.8.xml:379 apt-cdrom.8.xml:158 apt-config.8.xml:106
 #: apt-cache.8.xml:379 apt-cdrom.8.xml:158 apt-config.8.xml:106
-#: apt-extracttemplates.1.xml:77 apt-ftparchive.1.xml:628 apt-get.8.xml:585
+#: apt-extracttemplates.1.xml:77 apt-ftparchive.1.xml:627 apt-get.8.xml:585
 #: apt-key.8.xml:193 apt-mark.8.xml:150 apt-secure.8.xml:185
 #: apt-key.8.xml:193 apt-mark.8.xml:150 apt-secure.8.xml:185
 #: apt-sortpkgs.1.xml:72 apt.conf.5.xml:1099 apt_preferences.5.xml:704
 #: apt-sortpkgs.1.xml:72 apt.conf.5.xml:1099 apt_preferences.5.xml:704
 #: sources.list.5.xml:234
 #: sources.list.5.xml:234
@@ -1663,7 +1663,7 @@ msgstr "&apt-conf;, &sources-list;, &apt-get;"
 # type: Content of: <refentry><refsect1><title>
 # type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #: apt-cache.8.xml:384 apt-cdrom.8.xml:163 apt-config.8.xml:111
 #: apt-cache.8.xml:384 apt-cdrom.8.xml:163 apt-config.8.xml:111
-#: apt-extracttemplates.1.xml:81 apt-ftparchive.1.xml:632 apt-get.8.xml:591
+#: apt-extracttemplates.1.xml:81 apt-ftparchive.1.xml:631 apt-get.8.xml:591
 #: apt-mark.8.xml:154 apt-sortpkgs.1.xml:76
 #: apt-mark.8.xml:154 apt-sortpkgs.1.xml:76
 msgid "Diagnostics"
 msgid "Diagnostics"
 msgstr "診断メッセージ"
 msgstr "診断メッセージ"
@@ -1805,7 +1805,7 @@ msgid "Options"
 msgstr "オプション"
 msgstr "オプション"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cdrom.8.xml:98 apt-ftparchive.1.xml:540 apt-get.8.xml:345
+#: apt-cdrom.8.xml:98 apt-ftparchive.1.xml:539 apt-get.8.xml:345
 msgid "<option>-d</option>"
 msgid "<option>-d</option>"
 msgstr "<option>-d</option>"
 msgstr "<option>-d</option>"
 
 
@@ -2075,7 +2075,7 @@ msgstr "設定箇所の内容を表示するだけです。"
 
 
 # type: Content of: <refentry><refsect1><para>
 # type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-config.8.xml:107 apt-extracttemplates.1.xml:78 apt-ftparchive.1.xml:629
+#: apt-config.8.xml:107 apt-extracttemplates.1.xml:78 apt-ftparchive.1.xml:628
 #: apt-sortpkgs.1.xml:73
 #: apt-sortpkgs.1.xml:73
 msgid "&apt-conf;"
 msgid "&apt-conf;"
 msgstr "&apt-conf;"
 msgstr "&apt-conf;"
@@ -3292,26 +3292,43 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #: apt-ftparchive.1.xml:531
 #: apt-ftparchive.1.xml:531
+#, fuzzy
+#| msgid ""
+#| "Values for the additional metadata fields in the Release file are taken "
+#| "from the corresponding variables under <literal>APT::FTPArchive::Release</"
+#| "literal>, e.g. <literal>APT::FTPArchive::Release::Origin</literal>.  The "
+#| "supported fields are: <literal>Origin</literal>, <literal>Label</"
+#| "literal>, <literal>Suite</literal>, <literal>Version</literal>, "
+#| "<literal>Codename</literal>, <literal>Date</literal>, <literal>Valid-"
+#| "Until</literal>, <literal>Architectures</literal>, <literal>Components</"
+#| "literal>, <literal>Description</literal>."
 msgid ""
 msgid ""
 "Generate the given checksum. These options default to on, when turned off "
 "Generate the given checksum. These options default to on, when turned off "
 "the generated index files will not have the checksum fields where possible.  "
 "the generated index files will not have the checksum fields where possible.  "
 "Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
 "Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
 "replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
 "replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
 "replaceable>::<replaceable>Checksum</replaceable></literal> where "
 "replaceable>::<replaceable>Checksum</replaceable></literal> where "
-"<literal><replaceable>Index</replaceable></literal> can be "
-"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
-"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
-"<literal>MD5</literal>, <literal>SHA1</literal> or <literal>SHA256</literal>."
+"<literal>Index</literal> can be <literal>Packages</literal>, "
+"<literal>Sources</literal> or <literal>Release</literal> and "
+"<literal>Checksum</literal> can be <literal>MD5</literal>, <literal>SHA1</"
+"literal> or <literal>SHA256</literal>."
 msgstr ""
 msgstr ""
+"Release ファイルの追加メタデータフィールドの値は、<literal>APT::FTPArchive::"
+"Release</literal> 以下の相当する値 (例: <literal>APT::FTPArchive::Release::"
+"Origin</literal>) をとります。サポートするフィールドは、<literal>Origin</"
+"literal>, <literal>Label</literal>, <literal>Suite</literal>, "
+"<literal>Version</literal>, <literal>Codename</literal>, <literal>Date</"
+"literal>, <literal>Valid-Until</literal>, <literal>Architectures</literal>, "
+"<literal>Components</literal>, <literal>Description</literal> です。"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:540
+#: apt-ftparchive.1.xml:539
 msgid "<option>--db</option>"
 msgid "<option>--db</option>"
 msgstr "<option>--db</option>"
 msgstr "<option>--db</option>"
 
 
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:542
+#: apt-ftparchive.1.xml:541
 msgid ""
 msgid ""
 "Use a binary caching DB. This has no effect on the generate command.  "
 "Use a binary caching DB. This has no effect on the generate command.  "
 "Configuration Item: <literal>APT::FTPArchive::DB</literal>."
 "Configuration Item: <literal>APT::FTPArchive::DB</literal>."
@@ -3321,7 +3338,7 @@ msgstr ""
 
 
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:548
+#: apt-ftparchive.1.xml:547
 msgid ""
 msgid ""
 "Quiet; produces output suitable for logging, omitting progress indicators.  "
 "Quiet; produces output suitable for logging, omitting progress indicators.  "
 "More q's will produce more quiet up to a maximum of 2. You can also use "
 "More q's will produce more quiet up to a maximum of 2. You can also use "
@@ -3334,13 +3351,13 @@ msgstr ""
 "<literal>quiet</literal>"
 "<literal>quiet</literal>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:554
+#: apt-ftparchive.1.xml:553
 msgid "<option>--delink</option>"
 msgid "<option>--delink</option>"
 msgstr "<option>--delink</option>"
 msgstr "<option>--delink</option>"
 
 
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:556
+#: apt-ftparchive.1.xml:555
 msgid ""
 msgid ""
 "Perform Delinking. If the <literal>External-Links</literal> setting is used "
 "Perform Delinking. If the <literal>External-Links</literal> setting is used "
 "then this option actually enables delinking of the files. It defaults to on "
 "then this option actually enables delinking of the files. It defaults to on "
@@ -3353,13 +3370,13 @@ msgstr ""
 "<literal>APT::FTPArchive::DeLinkAct</literal>"
 "<literal>APT::FTPArchive::DeLinkAct</literal>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:562
+#: apt-ftparchive.1.xml:561
 msgid "<option>--contents</option>"
 msgid "<option>--contents</option>"
 msgstr "<option>--contents</option>"
 msgstr "<option>--contents</option>"
 
 
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:564
+#: apt-ftparchive.1.xml:563
 msgid ""
 msgid ""
 "Perform contents generation. When this option is set and package indexes are "
 "Perform contents generation. When this option is set and package indexes are "
 "being generated with a cache DB then the file listing will also be extracted "
 "being generated with a cache DB then the file listing will also be extracted "
@@ -3374,13 +3391,13 @@ msgstr ""
 "<literal>APT::FTPArchive::Contents</literal>"
 "<literal>APT::FTPArchive::Contents</literal>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:572
+#: apt-ftparchive.1.xml:571
 msgid "<option>--source-override</option>"
 msgid "<option>--source-override</option>"
 msgstr "<option>--source-override</option>"
 msgstr "<option>--source-override</option>"
 
 
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:574
+#: apt-ftparchive.1.xml:573
 msgid ""
 msgid ""
 "Select the source override file to use with the <literal>sources</literal> "
 "Select the source override file to use with the <literal>sources</literal> "
 "command.  Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
 "command.  Configuration Item: <literal>APT::FTPArchive::SourceOverride</"
@@ -3390,13 +3407,13 @@ msgstr ""
 "選択します。設定項目 - <literal>APT::FTPArchive::SourceOverride</literal>"
 "選択します。設定項目 - <literal>APT::FTPArchive::SourceOverride</literal>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:578
+#: apt-ftparchive.1.xml:577
 msgid "<option>--readonly</option>"
 msgid "<option>--readonly</option>"
 msgstr "<option>--readonly</option>"
 msgstr "<option>--readonly</option>"
 
 
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:580
+#: apt-ftparchive.1.xml:579
 msgid ""
 msgid ""
 "Make the caching databases read only.  Configuration Item: <literal>APT::"
 "Make the caching databases read only.  Configuration Item: <literal>APT::"
 "FTPArchive::ReadOnlyDB</literal>."
 "FTPArchive::ReadOnlyDB</literal>."
@@ -3405,13 +3422,13 @@ msgstr ""
 "FTPArchive::ReadOnlyDB</literal>"
 "FTPArchive::ReadOnlyDB</literal>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:584
+#: apt-ftparchive.1.xml:583
 msgid "<option>--arch</option>"
 msgid "<option>--arch</option>"
 msgstr "<option>--arch</option>"
 msgstr "<option>--arch</option>"
 
 
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:585
+#: apt-ftparchive.1.xml:584
 #, fuzzy
 #, fuzzy
 msgid ""
 msgid ""
 "Accept in the <literal>packages</literal> and <literal>contents</literal> "
 "Accept in the <literal>packages</literal> and <literal>contents</literal> "
@@ -3425,12 +3442,12 @@ msgstr ""
 "literal>"
 "literal>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:591
+#: apt-ftparchive.1.xml:590
 msgid "<option>APT::FTPArchive::AlwaysStat</option>"
 msgid "<option>APT::FTPArchive::AlwaysStat</option>"
 msgstr "<option>--version</option>"
 msgstr "<option>--version</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:593
+#: apt-ftparchive.1.xml:592
 msgid ""
 msgid ""
 "&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
 "&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 "
 "packages are recompiled and/or republished with the same version again, this "
@@ -3444,12 +3461,12 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:603
+#: apt-ftparchive.1.xml:602
 msgid "<option>APT::FTPArchive::LongDescription</option>"
 msgid "<option>APT::FTPArchive::LongDescription</option>"
 msgstr "<option>APT::FTPArchive::LongDescription</option>"
 msgstr "<option>APT::FTPArchive::LongDescription</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:605
+#: apt-ftparchive.1.xml:604
 #, fuzzy
 #, fuzzy
 msgid ""
 msgid ""
 "This configuration option defaults to \"<literal>true</literal>\" and should "
 "This configuration option defaults to \"<literal>true</literal>\" and should "
@@ -3465,14 +3482,14 @@ msgstr ""
 
 
 # type: Content of: <refentry><refsect1><title>
 # type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
-#: apt-ftparchive.1.xml:617 apt.conf.5.xml:1087 apt_preferences.5.xml:544
+#: apt-ftparchive.1.xml:616 apt.conf.5.xml:1087 apt_preferences.5.xml:544
 #: sources.list.5.xml:198
 #: sources.list.5.xml:198
 msgid "Examples"
 msgid "Examples"
 msgstr "サンプル"
 msgstr "サンプル"
 
 
 # type: Content of: <refentry><refsect1><para><programlisting>
 # type: Content of: <refentry><refsect1><para><programlisting>
 #. type: Content of: <refentry><refsect1><para><programlisting>
 #. type: Content of: <refentry><refsect1><para><programlisting>
-#: apt-ftparchive.1.xml:623
+#: apt-ftparchive.1.xml:622
 #, no-wrap
 #, no-wrap
 msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgstr ""
 msgstr ""
@@ -3481,7 +3498,7 @@ msgstr ""
 
 
 # type: Content of: <refentry><refsect1><para>
 # type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-ftparchive.1.xml:619
+#: apt-ftparchive.1.xml:618
 msgid ""
 msgid ""
 "To create a compressed Packages file for a directory containing binary "
 "To create a compressed Packages file for a directory containing binary "
 "packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
 "packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
@@ -3491,7 +3508,7 @@ msgstr ""
 
 
 # type: Content of: <refentry><refsect1><para>
 # type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-ftparchive.1.xml:633
+#: apt-ftparchive.1.xml:632
 msgid ""
 msgid ""
 "<command>apt-ftparchive</command> returns zero on normal operation, decimal "
 "<command>apt-ftparchive</command> returns zero on normal operation, decimal "
 "100 on error."
 "100 on error."
@@ -3967,7 +3984,7 @@ msgstr ""
 #: apt-get.8.xml:282
 #: apt-get.8.xml:282
 msgid ""
 msgid ""
 "<literal>download</literal> will download the given binary package into the "
 "<literal>download</literal> will download the given binary package into the "
-"current directory."
+"current directoy."
 msgstr ""
 msgstr ""
 
 
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 # type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
@@ -5713,12 +5730,11 @@ msgstr "<envar>APT_CONFIG</envar> 環境変数で指定したファイル (存
 #| "period (.) characters - otherwise they will be silently ignored."
 #| "period (.) characters - otherwise they will be silently ignored."
 msgid ""
 msgid ""
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
-"order which have either no or \"<literal>conf</literal>\" as filename "
-"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
-"and period (.) characters.  Otherwise APT will print a notice that it has "
-"ignored a file if the file doesn't match a pattern in the <literal>Dir::"
-"Ignore-Files-Silently</literal> configuration list - in this case it will be "
-"silently ignored."
+"order which have no or \"<literal>conf</literal>\" as filename extension and "
+"which only contain alphanumeric, hyphen (-), underscore (_) and period (.) "
+"characters.  Otherwise APT will print a notice that it has ignored a file if "
+"the file doesn't match a pattern in the <literal>Dir::Ignore-Files-Silently</"
+"literal> configuration list - in this case it will be silently ignored."
 msgstr ""
 msgstr ""
 "<literal>Dir::Etc::Parts</literal> にあるすべてのファイルを英数字の昇順に。"
 "<literal>Dir::Etc::Parts</literal> にあるすべてのファイルを英数字の昇順に。"
 "ファイル名には拡張子がないか、\"<literal>conf</literal>\" となっており、英数"
 "ファイル名には拡張子がないか、\"<literal>conf</literal>\" となっており、英数"
@@ -6713,9 +6729,9 @@ msgid ""
 "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
 "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
 "replaceable></literal> will be checked: If this setting exists the method "
 "replaceable></literal> will be checked: If this setting exists the method "
 "will only be used if this file exists, e.g. for the bzip2 method (the "
 "will only be used if this file exists, e.g. for the bzip2 method (the "
-"inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> Note "
-"also that list entries specified on the command line will be added at the "
-"end of the list specified in the configuration files, but before the default "
+"inbuilt) setting is <placeholder type=\"literallayout\" id=\"0\"/> Note also "
+"that list entries specified on the command line will be added at the end of "
+"the list specified in the configuration files, but before the default "
 "entries. To prefer a type in this case over the ones specified in the "
 "entries. To prefer a type in this case over the ones specified in the "
 "configuration files you can set the option direct - not in list style.  This "
 "configuration files you can set the option direct - not in list style.  This "
 "will not override the defined list, it will only prefix the list with this "
 "will not override the defined list, it will only prefix the list with this "
@@ -6735,7 +6751,7 @@ msgstr ""
 #: apt.conf.5.xml:449
 #: apt.conf.5.xml:449
 msgid ""
 msgid ""
 "The special type <literal>uncompressed</literal> can be used to give "
 "The special type <literal>uncompressed</literal> can be used to give "
-"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files a preference, but note that most archives doesn't provide "
 "uncompressed files so this is mostly only useable for local mirrors."
 "uncompressed files so this is mostly only useable for local mirrors."
 msgstr ""
 msgstr ""
 
 
@@ -7871,8 +7887,8 @@ msgstr ""
 msgid ""
 msgid ""
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "directory are parsed in alphanumeric ascending order and need to obey the "
 "directory are parsed in alphanumeric ascending order and need to obey the "
-"following naming convention: The files have either no or \"<literal>pref</"
-"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"following naming convention: The files have no or \"<literal>pref</literal>"
+"\" as filename extension and which only contain alphanumeric, hyphen (-), "
 "underscore (_) and period (.) characters.  Otherwise APT will print a notice "
 "underscore (_) and period (.) characters.  Otherwise APT will print a notice "
 "that it has ignored a file if the file doesn't match a pattern in the "
 "that it has ignored a file if the file doesn't match a pattern in the "
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
@@ -8337,7 +8353,7 @@ msgid ""
 "APT also supports pinning by glob() expressions and regular expressions "
 "APT also supports pinning by glob() expressions and regular expressions "
 "surrounded by /. For example, the following example assigns the priority 500 "
 "surrounded by /. For example, the following example assigns the priority 500 "
 "to all packages from experimental where the name starts with gnome (as a glob"
 "to all packages from experimental where the name starts with gnome (as a glob"
-"()-like expression) or contains the word kde (as a POSIX extended regular "
+"()-like expression or contains the word kde (as a POSIX extended regular "
 "expression surrounded by slashes)."
 "expression surrounded by slashes)."
 msgstr ""
 msgstr ""
 
 
@@ -8363,7 +8379,7 @@ msgstr ""
 #: apt_preferences.5.xml:279
 #: apt_preferences.5.xml:279
 msgid ""
 msgid ""
 "The rule for those expressions is that they can occur anywhere where a "
 "The rule for those expressions is that they can occur anywhere where a "
-"string can occur. Thus, the following pin assigns the priority 990 to all "
+"string can occur. Those, the following pin assigns the priority 990 to all "
 "packages from a release starting with karmic."
 "packages from a release starting with karmic."
 msgstr ""
 msgstr ""
 
 

+ 50 - 79
doc/po/pl.po

@@ -10,7 +10,7 @@
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt 0.7.25.3\n"
 "Project-Id-Version: apt 0.7.25.3\n"
-"POT-Creation-Date: 2011-06-28 16:42+0200\n"
+"POT-Creation-Date: 2011-06-08 16:54+0300\n"
 "PO-Revision-Date: 2010-03-18 22:00+0100\n"
 "PO-Revision-Date: 2010-03-18 22:00+0100\n"
 "Last-Translator: Robert Luberda <robert@debian.org>\n"
 "Last-Translator: Robert Luberda <robert@debian.org>\n"
 "Language-Team: <debian-l10n-polish@lists.debian.org>\n"
 "Language-Team: <debian-l10n-polish@lists.debian.org>\n"
@@ -1363,7 +1363,7 @@ msgstr ""
 "<literal>Dir::Cache::pkgcache</literal>."
 "<literal>Dir::Cache::pkgcache</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:288 apt-ftparchive.1.xml:572 apt-get.8.xml:393
+#: apt-cache.8.xml:288 apt-ftparchive.1.xml:571 apt-get.8.xml:393
 #: apt-sortpkgs.1.xml:61
 #: apt-sortpkgs.1.xml:61
 msgid "<option>-s</option>"
 msgid "<option>-s</option>"
 msgstr "<option>-s</option>"
 msgstr "<option>-s</option>"
@@ -1391,12 +1391,12 @@ msgstr ""
 "Cache::srcpkgcache</literal>."
 "Cache::srcpkgcache</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:296 apt-ftparchive.1.xml:546 apt-get.8.xml:383
+#: apt-cache.8.xml:296 apt-ftparchive.1.xml:545 apt-get.8.xml:383
 msgid "<option>-q</option>"
 msgid "<option>-q</option>"
 msgstr "<option>-q</option>"
 msgstr "<option>-q</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:296 apt-ftparchive.1.xml:546 apt-get.8.xml:383
+#: apt-cache.8.xml:296 apt-ftparchive.1.xml:545 apt-get.8.xml:383
 msgid "<option>--quiet</option>"
 msgid "<option>--quiet</option>"
 msgstr "<option>--quiet</option>"
 msgstr "<option>--quiet</option>"
 
 
@@ -1503,7 +1503,7 @@ msgstr "<option>--no-act</option>"
 #| "<literal>APT::Cache::RecurseDepends</literal>."
 #| "<literal>APT::Cache::RecurseDepends</literal>."
 msgid ""
 msgid ""
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
 "Per default the <literal>depends</literal> and <literal>rdepends</literal> "
-"print all dependencies. This can be tweaked with these flags which will omit "
+"print all dependencies. This can be twicked with these flags which will omit "
 "the specified dependency type.  Configuration Item: <literal>APT::Cache::"
 "the specified dependency type.  Configuration Item: <literal>APT::Cache::"
 "Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
 "Show<replaceable>DependencyType</replaceable></literal> e.g. <literal>APT::"
 "Cache::ShowRecommends</literal>."
 "Cache::ShowRecommends</literal>."
@@ -1534,7 +1534,7 @@ msgstr ""
 "konfiguracyjnym: <literal>APT::Cache::ShowFull</literal>."
 "konfiguracyjnym: <literal>APT::Cache::ShowFull</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cache.8.xml:328 apt-cdrom.8.xml:134 apt-ftparchive.1.xml:584
+#: apt-cache.8.xml:328 apt-cdrom.8.xml:134 apt-ftparchive.1.xml:583
 msgid "<option>-a</option>"
 msgid "<option>-a</option>"
 msgstr "<option>-a</option>"
 msgstr "<option>-a</option>"
 
 
@@ -1660,7 +1660,7 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist>
 #. type: Content of: <refentry><refsect1><variablelist>
 #: apt-cache.8.xml:367 apt-cdrom.8.xml:153 apt-config.8.xml:101
 #: apt-cache.8.xml:367 apt-cdrom.8.xml:153 apt-config.8.xml:101
-#: apt-extracttemplates.1.xml:70 apt-ftparchive.1.xml:612 apt-get.8.xml:570
+#: apt-extracttemplates.1.xml:70 apt-ftparchive.1.xml:611 apt-get.8.xml:570
 #: apt-mark.8.xml:140 apt-sortpkgs.1.xml:67
 #: apt-mark.8.xml:140 apt-sortpkgs.1.xml:67
 msgid "&apt-commonoptions;"
 msgid "&apt-commonoptions;"
 msgstr "&apt-commonoptions;"
 msgstr "&apt-commonoptions;"
@@ -1678,7 +1678,7 @@ msgstr "&file-sourceslist; &file-statelists;"
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #: apt-cache.8.xml:379 apt-cdrom.8.xml:158 apt-config.8.xml:106
 #: apt-cache.8.xml:379 apt-cdrom.8.xml:158 apt-config.8.xml:106
-#: apt-extracttemplates.1.xml:77 apt-ftparchive.1.xml:628 apt-get.8.xml:585
+#: apt-extracttemplates.1.xml:77 apt-ftparchive.1.xml:627 apt-get.8.xml:585
 #: apt-key.8.xml:193 apt-mark.8.xml:150 apt-secure.8.xml:185
 #: apt-key.8.xml:193 apt-mark.8.xml:150 apt-secure.8.xml:185
 #: apt-sortpkgs.1.xml:72 apt.conf.5.xml:1099 apt_preferences.5.xml:704
 #: apt-sortpkgs.1.xml:72 apt.conf.5.xml:1099 apt_preferences.5.xml:704
 #: sources.list.5.xml:234
 #: sources.list.5.xml:234
@@ -1693,7 +1693,7 @@ msgstr "&apt-conf;, &sources-list;, &apt-get;"
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
 #: apt-cache.8.xml:384 apt-cdrom.8.xml:163 apt-config.8.xml:111
 #: apt-cache.8.xml:384 apt-cdrom.8.xml:163 apt-config.8.xml:111
-#: apt-extracttemplates.1.xml:81 apt-ftparchive.1.xml:632 apt-get.8.xml:591
+#: apt-extracttemplates.1.xml:81 apt-ftparchive.1.xml:631 apt-get.8.xml:591
 #: apt-mark.8.xml:154 apt-sortpkgs.1.xml:76
 #: apt-mark.8.xml:154 apt-sortpkgs.1.xml:76
 msgid "Diagnostics"
 msgid "Diagnostics"
 msgstr "Diagnostyka"
 msgstr "Diagnostyka"
@@ -1842,7 +1842,7 @@ msgid "Options"
 msgstr "Opcje"
 msgstr "Opcje"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-cdrom.8.xml:98 apt-ftparchive.1.xml:540 apt-get.8.xml:345
+#: apt-cdrom.8.xml:98 apt-ftparchive.1.xml:539 apt-get.8.xml:345
 msgid "<option>-d</option>"
 msgid "<option>-d</option>"
 msgstr "<option>-d</option>"
 msgstr "<option>-d</option>"
 
 
@@ -2105,7 +2105,7 @@ msgid "Just show the contents of the configuration space."
 msgstr "Wyświetla zawartość przestrzeni konfiguracji."
 msgstr "Wyświetla zawartość przestrzeni konfiguracji."
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-config.8.xml:107 apt-extracttemplates.1.xml:78 apt-ftparchive.1.xml:629
+#: apt-config.8.xml:107 apt-extracttemplates.1.xml:78 apt-ftparchive.1.xml:628
 #: apt-sortpkgs.1.xml:73
 #: apt-sortpkgs.1.xml:73
 msgid "&apt-conf;"
 msgid "&apt-conf;"
 msgstr "&apt-conf;"
 msgstr "&apt-conf;"
@@ -3106,20 +3106,20 @@ msgid ""
 "Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
 "Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</"
 "replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
 "replaceable></literal> and <literal>APT::FTPArchive::<replaceable>Index</"
 "replaceable>::<replaceable>Checksum</replaceable></literal> where "
 "replaceable>::<replaceable>Checksum</replaceable></literal> where "
-"<literal><replaceable>Index</replaceable></literal> can be "
-"<literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</"
-"literal> and <literal><replaceable>Checksum</replaceable></literal> can be "
-"<literal>MD5</literal>, <literal>SHA1</literal> or <literal>SHA256</literal>."
+"<literal>Index</literal> can be <literal>Packages</literal>, "
+"<literal>Sources</literal> or <literal>Release</literal> and "
+"<literal>Checksum</literal> can be <literal>MD5</literal>, <literal>SHA1</"
+"literal> or <literal>SHA256</literal>."
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:540
+#: apt-ftparchive.1.xml:539
 msgid "<option>--db</option>"
 msgid "<option>--db</option>"
 msgstr "<option>--db</option>"
 msgstr "<option>--db</option>"
 
 
 #
 #
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:542
+#: apt-ftparchive.1.xml:541
 #, fuzzy
 #, fuzzy
 msgid ""
 msgid ""
 "Use a binary caching DB. This has no effect on the generate command.  "
 "Use a binary caching DB. This has no effect on the generate command.  "
@@ -3130,7 +3130,7 @@ msgstr ""
 
 
 #
 #
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:548
+#: apt-ftparchive.1.xml:547
 msgid ""
 msgid ""
 "Quiet; produces output suitable for logging, omitting progress indicators.  "
 "Quiet; produces output suitable for logging, omitting progress indicators.  "
 "More q's will produce more quiet up to a maximum of 2. You can also use "
 "More q's will produce more quiet up to a maximum of 2. You can also use "
@@ -3144,13 +3144,13 @@ msgstr ""
 "pliku konfiguracyjnym: <literal>quiet</literal>."
 "pliku konfiguracyjnym: <literal>quiet</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:554
+#: apt-ftparchive.1.xml:553
 msgid "<option>--delink</option>"
 msgid "<option>--delink</option>"
 msgstr "<option>--delink</option>"
 msgstr "<option>--delink</option>"
 
 
 #
 #
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:556
+#: apt-ftparchive.1.xml:555
 #, fuzzy
 #, fuzzy
 msgid ""
 msgid ""
 "Perform Delinking. If the <literal>External-Links</literal> setting is used "
 "Perform Delinking. If the <literal>External-Links</literal> setting is used "
@@ -3164,12 +3164,12 @@ msgstr ""
 "<literal>APT::Cache::Generate</literal>."
 "<literal>APT::Cache::Generate</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:562
+#: apt-ftparchive.1.xml:561
 msgid "<option>--contents</option>"
 msgid "<option>--contents</option>"
 msgstr "<option>--contents</option>"
 msgstr "<option>--contents</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:564
+#: apt-ftparchive.1.xml:563
 msgid ""
 msgid ""
 "Perform contents generation. When this option is set and package indexes are "
 "Perform contents generation. When this option is set and package indexes are "
 "being generated with a cache DB then the file listing will also be extracted "
 "being generated with a cache DB then the file listing will also be extracted "
@@ -3179,13 +3179,13 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:572
+#: apt-ftparchive.1.xml:571
 msgid "<option>--source-override</option>"
 msgid "<option>--source-override</option>"
 msgstr "<option>--source-override</option>"
 msgstr "<option>--source-override</option>"
 
 
 #
 #
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:574
+#: apt-ftparchive.1.xml:573
 #, fuzzy
 #, fuzzy
 msgid ""
 msgid ""
 "Select the source override file to use with the <literal>sources</literal> "
 "Select the source override file to use with the <literal>sources</literal> "
@@ -3197,13 +3197,13 @@ msgstr ""
 "konfiguracyjnym: <literal>APT::Cache::Installed</literal>."
 "konfiguracyjnym: <literal>APT::Cache::Installed</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:578
+#: apt-ftparchive.1.xml:577
 msgid "<option>--readonly</option>"
 msgid "<option>--readonly</option>"
 msgstr "<option>--readonly</option>"
 msgstr "<option>--readonly</option>"
 
 
 #
 #
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:580
+#: apt-ftparchive.1.xml:579
 #, fuzzy
 #, fuzzy
 msgid ""
 msgid ""
 "Make the caching databases read only.  Configuration Item: <literal>APT::"
 "Make the caching databases read only.  Configuration Item: <literal>APT::"
@@ -3213,14 +3213,14 @@ msgstr ""
 "pliku konfiguracyjnym: <literal>APT::Cache::NamesOnly</literal>."
 "pliku konfiguracyjnym: <literal>APT::Cache::NamesOnly</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:584
+#: apt-ftparchive.1.xml:583
 #, fuzzy
 #, fuzzy
 #| msgid "<option>-a</option>"
 #| msgid "<option>-a</option>"
 msgid "<option>--arch</option>"
 msgid "<option>--arch</option>"
 msgstr "<option>-a</option>"
 msgstr "<option>-a</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:585
+#: apt-ftparchive.1.xml:584
 #, fuzzy
 #, fuzzy
 #| msgid ""
 #| msgid ""
 #| "If the command is either <literal>install</literal> or <literal>remove</"
 #| "If the command is either <literal>install</literal> or <literal>remove</"
@@ -3240,13 +3240,13 @@ msgstr ""
 "AutomaticRemove</literal>."
 "AutomaticRemove</literal>."
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:591
+#: apt-ftparchive.1.xml:590
 #, fuzzy
 #, fuzzy
 msgid "<option>APT::FTPArchive::AlwaysStat</option>"
 msgid "<option>APT::FTPArchive::AlwaysStat</option>"
 msgstr "<option>--version</option>"
 msgstr "<option>--version</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:593
+#: apt-ftparchive.1.xml:592
 msgid ""
 msgid ""
 "&apt-ftparchive; caches as much as possible of metadata in a cachedb. If "
 "&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 "
 "packages are recompiled and/or republished with the same version again, this "
@@ -3260,13 +3260,13 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
-#: apt-ftparchive.1.xml:603
+#: apt-ftparchive.1.xml:602
 #, fuzzy
 #, fuzzy
 msgid "<option>APT::FTPArchive::LongDescription</option>"
 msgid "<option>APT::FTPArchive::LongDescription</option>"
 msgstr "<option>--version</option>"
 msgstr "<option>--version</option>"
 
 
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
 #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
-#: apt-ftparchive.1.xml:605
+#: apt-ftparchive.1.xml:604
 msgid ""
 msgid ""
 "This configuration option defaults to \"<literal>true</literal>\" and should "
 "This configuration option defaults to \"<literal>true</literal>\" and should "
 "only be set to <literal>\"false\"</literal> if the Archive generated with "
 "only be set to <literal>\"false\"</literal> if the Archive generated with "
@@ -3276,19 +3276,19 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><title>
 #. type: Content of: <refentry><refsect1><title>
-#: apt-ftparchive.1.xml:617 apt.conf.5.xml:1087 apt_preferences.5.xml:544
+#: apt-ftparchive.1.xml:616 apt.conf.5.xml:1087 apt_preferences.5.xml:544
 #: sources.list.5.xml:198
 #: sources.list.5.xml:198
 msgid "Examples"
 msgid "Examples"
 msgstr "Przykłady"
 msgstr "Przykłady"
 
 
 #. type: Content of: <refentry><refsect1><para><programlisting>
 #. type: Content of: <refentry><refsect1><para><programlisting>
-#: apt-ftparchive.1.xml:623
+#: apt-ftparchive.1.xml:622
 #, no-wrap
 #, no-wrap
 msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgid "<command>apt-ftparchive</command> packages <replaceable>directory</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgstr "<command>apt-ftparchive</command> packages <replaceable>katalog</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 msgstr "<command>apt-ftparchive</command> packages <replaceable>katalog</replaceable> | <command>gzip</command> > <filename>Packages.gz</filename>\n"
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-ftparchive.1.xml:619
+#: apt-ftparchive.1.xml:618
 msgid ""
 msgid ""
 "To create a compressed Packages file for a directory containing binary "
 "To create a compressed Packages file for a directory containing binary "
 "packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
 "packages (.deb): <placeholder type=\"programlisting\" id=\"0\"/>"
@@ -3296,7 +3296,7 @@ msgstr ""
 
 
 #
 #
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
-#: apt-ftparchive.1.xml:633
+#: apt-ftparchive.1.xml:632
 msgid ""
 msgid ""
 "<command>apt-ftparchive</command> returns zero on normal operation, decimal "
 "<command>apt-ftparchive</command> returns zero on normal operation, decimal "
 "100 on error."
 "100 on error."
@@ -3833,7 +3833,7 @@ msgstr ""
 #: apt-get.8.xml:282
 #: apt-get.8.xml:282
 msgid ""
 msgid ""
 "<literal>download</literal> will download the given binary package into the "
 "<literal>download</literal> will download the given binary package into the "
-"current directory."
+"current directoy."
 msgstr ""
 msgstr ""
 
 
 #
 #
@@ -5456,29 +5456,14 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
 #. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
 #: apt.conf.5.xml:52
 #: apt.conf.5.xml:52
-#, fuzzy
-#| msgid ""
-#| "The <filename>/etc/apt/sources.list.d</filename> directory provides a way "
-#| "to add sources.list entries in separate files.  The format is the same as "
-#| "for the regular <filename>sources.list</filename> file.  File names need "
-#| "to end with <filename>.list</filename> and may only contain letters (a-z "
-#| "and A-Z), digits (0-9), underscore (_), hyphen (-) and period (.) "
-#| "characters.  Otherwise they will be silently ignored."
 msgid ""
 msgid ""
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
 "all files in <literal>Dir::Etc::Parts</literal> in alphanumeric ascending "
-"order which have either no or \"<literal>conf</literal>\" as filename "
-"extension and which only contain alphanumeric, hyphen (-), underscore (_) "
-"and period (.) characters.  Otherwise APT will print a notice that it has "
-"ignored a file if the file doesn't match a pattern in the <literal>Dir::"
-"Ignore-Files-Silently</literal> configuration list - in this case it will be "
-"silently ignored."
+"order which have no or \"<literal>conf</literal>\" as filename extension and "
+"which only contain alphanumeric, hyphen (-), underscore (_) and period (.) "
+"characters.  Otherwise APT will print a notice that it has ignored a file if "
+"the file doesn't match a pattern in the <literal>Dir::Ignore-Files-Silently</"
+"literal> configuration list - in this case it will be silently ignored."
 msgstr ""
 msgstr ""
-"Katalog <filename>/etc/apt/sources.list.d</filename>  umożliwia podzielenie "
-"pliku źródeł na osobne pliki. Format jest dokładnie taki sam, jak w "
-"przypadku zwykłego pliku <filename>sources.list</filename>. Nazwy plików w "
-"tym katalogu muszą się kończyć rozszerzeniem <filename>.list</filename> i "
-"mogą składać się tylko z liter (a-z i A-Z), cyfr (0-9), znaku podkreślenia "
-"(_), pauzy (-) i kropki (.). Inne pliki zostaną zignorowane."
 
 
 #. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
 #. type: Content of: <refentry><refsect1><orderedlist><listitem><para>
 #: apt.conf.5.xml:59
 #: apt.conf.5.xml:59
@@ -6183,9 +6168,9 @@ msgid ""
 "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
 "Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</"
 "replaceable></literal> will be checked: If this setting exists the method "
 "replaceable></literal> will be checked: If this setting exists the method "
 "will only be used if this file exists, e.g. for the bzip2 method (the "
 "will only be used if this file exists, e.g. for the bzip2 method (the "
-"inbuilt) setting is: <placeholder type=\"literallayout\" id=\"0\"/> Note "
-"also that list entries specified on the command line will be added at the "
-"end of the list specified in the configuration files, but before the default "
+"inbuilt) setting is <placeholder type=\"literallayout\" id=\"0\"/> Note also "
+"that list entries specified on the command line will be added at the end of "
+"the list specified in the configuration files, but before the default "
 "entries. To prefer a type in this case over the ones specified in the "
 "entries. To prefer a type in this case over the ones specified in the "
 "configuration files you can set the option direct - not in list style.  This "
 "configuration files you can set the option direct - not in list style.  This "
 "will not override the defined list, it will only prefix the list with this "
 "will not override the defined list, it will only prefix the list with this "
@@ -6196,7 +6181,7 @@ msgstr ""
 #: apt.conf.5.xml:449
 #: apt.conf.5.xml:449
 msgid ""
 msgid ""
 "The special type <literal>uncompressed</literal> can be used to give "
 "The special type <literal>uncompressed</literal> can be used to give "
-"uncompressed files a preference, but note that most archives don't provide "
+"uncompressed files a preference, but note that most archives doesn't provide "
 "uncompressed files so this is mostly only useable for local mirrors."
 "uncompressed files so this is mostly only useable for local mirrors."
 msgstr ""
 msgstr ""
 
 
@@ -7152,30 +7137,16 @@ msgstr ""
 
 
 #. type: Content of: <refentry><refsect1><para>
 #. type: Content of: <refentry><refsect1><para>
 #: apt_preferences.5.xml:70
 #: apt_preferences.5.xml:70
-#, fuzzy
-#| msgid ""
-#| "The <filename>/etc/apt/sources.list.d</filename> directory provides a way "
-#| "to add sources.list entries in separate files.  The format is the same as "
-#| "for the regular <filename>sources.list</filename> file.  File names need "
-#| "to end with <filename>.list</filename> and may only contain letters (a-z "
-#| "and A-Z), digits (0-9), underscore (_), hyphen (-) and period (.) "
-#| "characters.  Otherwise they will be silently ignored."
 msgid ""
 msgid ""
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "Note that the files in the <filename>/etc/apt/preferences.d</filename> "
 "directory are parsed in alphanumeric ascending order and need to obey the "
 "directory are parsed in alphanumeric ascending order and need to obey the "
-"following naming convention: The files have either no or \"<literal>pref</"
-"literal>\" as filename extension and only contain alphanumeric, hyphen (-), "
+"following naming convention: The files have no or \"<literal>pref</literal>"
+"\" as filename extension and which only contain alphanumeric, hyphen (-), "
 "underscore (_) and period (.) characters.  Otherwise APT will print a notice "
 "underscore (_) and period (.) characters.  Otherwise APT will print a notice "
 "that it has ignored a file if the file doesn't match a pattern in the "
 "that it has ignored a file if the file doesn't match a pattern in the "
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
 "<literal>Dir::Ignore-Files-Silently</literal> configuration list - in this "
 "case it will be silently ignored."
 "case it will be silently ignored."
 msgstr ""
 msgstr ""
-"Katalog <filename>/etc/apt/sources.list.d</filename>  umożliwia podzielenie "
-"pliku źródeł na osobne pliki. Format jest dokładnie taki sam, jak w "
-"przypadku zwykłego pliku <filename>sources.list</filename>. Nazwy plików w "
-"tym katalogu muszą się kończyć rozszerzeniem <filename>.list</filename> i "
-"mogą składać się tylko z liter (a-z i A-Z), cyfr (0-9), znaku podkreślenia "
-"(_), pauzy (-) i kropki (.). Inne pliki zostaną zignorowane."
 
 
 #. type: Content of: <refentry><refsect1><refsect2><title>
 #. type: Content of: <refentry><refsect1><refsect2><title>
 #: apt_preferences.5.xml:79
 #: apt_preferences.5.xml:79
@@ -7526,7 +7497,7 @@ msgid ""
 "APT also supports pinning by glob() expressions and regular expressions "
 "APT also supports pinning by glob() expressions and regular expressions "
 "surrounded by /. For example, the following example assigns the priority 500 "
 "surrounded by /. For example, the following example assigns the priority 500 "
 "to all packages from experimental where the name starts with gnome (as a glob"
 "to all packages from experimental where the name starts with gnome (as a glob"
-"()-like expression) or contains the word kde (as a POSIX extended regular "
+"()-like expression or contains the word kde (as a POSIX extended regular "
 "expression surrounded by slashes)."
 "expression surrounded by slashes)."
 msgstr ""
 msgstr ""
 
 
@@ -7550,7 +7521,7 @@ msgstr ""
 #: apt_preferences.5.xml:279
 #: apt_preferences.5.xml:279
 msgid ""
 msgid ""
 "The rule for those expressions is that they can occur anywhere where a "
 "The rule for those expressions is that they can occur anywhere where a "
-"string can occur. Thus, the following pin assigns the priority 990 to all "
+"string can occur. Those, the following pin assigns the priority 990 to all "
 "packages from a release starting with karmic."
 "packages from a release starting with karmic."
 msgstr ""
 msgstr ""
 
 

+ 0 - 0
doc/po/pt.po


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio