Kaynağa Gözat

Sync with Michael

bubulle@debian.org 20 yıl önce
ebeveyn
işleme
fa7733bcf5

+ 1 - 1
apt-inst/deb/dpkgdb.cc

@@ -383,7 +383,7 @@ bool debDpkgDB::ReadyFileList(OpProgress &Progress)
       return _error->Error(_("The pkg cache must be initialized first"));
       return _error->Error(_("The pkg cache must be initialized first"));
    if (FList != 0)
    if (FList != 0)
    {
    {
-      Progress.OverallProgress(1,1,1,_("Reading file list"));
+      Progress.OverallProgress(1,1,1,_("Reading file listing"));
       return true;
       return true;
    }
    }
    
    

+ 7 - 1
apt-pkg/acquire.cc

@@ -818,7 +818,13 @@ bool pkgAcquireStatus::Pulse(pkgAcquire *Owner)
       unsigned long ETA =
       unsigned long ETA =
 	 (unsigned long)((TotalBytes - CurrentBytes) / CurrentCPS);
 	 (unsigned long)((TotalBytes - CurrentBytes) / CurrentCPS);
 
 
-      snprintf(msg,sizeof(msg), _("Downloading file %li of %li (%s remaining)"), i, TotalItems, TimeToStr(ETA).c_str());
+      // only show the ETA if it makes sense
+      if (ETA > 0 && ETA < 172800 /* two days */ )
+	 snprintf(msg,sizeof(msg), _("Retrieving file %li of %li (%s remaining)"), i, TotalItems, TimeToStr(ETA).c_str());
+      else
+	 snprintf(msg,sizeof(msg), _("Retrieving file %li of %li"), i, TotalItems);
+	 
+
 
 
       // build the status str
       // build the status str
       status << "dlstatus:" << i
       status << "dlstatus:" << i

+ 22 - 1
apt-pkg/deb/debversion.cc

@@ -59,7 +59,7 @@ int debVersioningSystem::CmpFragment(const char *A,const char *AEnd,
    }
    }
 
 
    /* Iterate over the whole string
    /* Iterate over the whole string
-      What this does is to spilt the whole string into groups of
+      What this does is to split the whole string into groups of
       numeric and non numeric portions. For instance:
       numeric and non numeric portions. For instance:
          a67bhgs89
          a67bhgs89
       Has 4 portions 'a', '67', 'bhgs', '89'. A more normal:
       Has 4 portions 'a', '67', 'bhgs', '89'. A more normal:
@@ -140,6 +140,27 @@ int debVersioningSystem::DoCmpVersion(const char *A,const char *AEnd,
    if (rhs == BEnd)
    if (rhs == BEnd)
       rhs = B;
       rhs = B;
    
    
+   // Special case: a zero epoch is the same as no epoch,
+   // so remove it.
+   if (lhs != A)
+   {
+      for (; *A == '0'; ++A);
+      if (A == lhs)
+      {
+	 ++A;
+	 ++lhs;
+      }
+   }
+   if (rhs != B)
+   {
+      for (; *B == '0'; ++B);
+      if (B == rhs)
+      {
+	 ++B;
+	 ++rhs;
+      }
+   }
+
    // Compare the epoch
    // Compare the epoch
    int Res = CmpFragment(A,lhs,B,rhs);
    int Res = CmpFragment(A,lhs,B,rhs);
    if (Res != 0)
    if (Res != 0)

+ 4 - 4
apt-pkg/deb/dpkgpm.cc

@@ -375,8 +375,8 @@ bool pkgDPkgPM::Go(int OutStatusFd)
       },
       },
       // Purge operation
       // Purge operation
       { 
       { 
-	 {"config-files", _("Preparing for remove with config %s")},
-	 {"not-installed", _("Removed with config %s")},
+	 {"config-files", _("Preparing to completely remove %s")},
+	 {"not-installed", _("Completely removed %s")},
 	 {NULL, NULL}
 	 {NULL, NULL}
       },
       },
    };
    };
@@ -623,8 +623,8 @@ bool pkgDPkgPM::Go(int OutStatusFd)
 	    'status: conffile-prompt: conffile : 'current-conffile' 'new-conffile' useredited distedited
 	    'status: conffile-prompt: conffile : 'current-conffile' 'new-conffile' useredited distedited
 	    
 	    
 	 */
 	 */
-	 char* list[4];
-	 TokSplitString(':', line, list, 5);
+	 char* list[5];
+	 TokSplitString(':', line, list, sizeof(list)/sizeof(list[0]));
 	 char *pkg = list[1];
 	 char *pkg = list[1];
 	 char *action = _strstrip(list[2]);
 	 char *action = _strstrip(list[2]);
 
 

+ 20 - 72
apt-pkg/tagfile.cc

@@ -35,20 +35,20 @@ pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) :
      Fd(*pFd),
      Fd(*pFd),
      Size(Size)
      Size(Size)
 {
 {
-   if (Fd.IsOpen() == false)
+   if (Fd.IsOpen() == false || Fd.Size() == 0)
    {
    {
       Buffer = 0;
       Buffer = 0;
       Start = End = Buffer = 0;
       Start = End = Buffer = 0;
-      Done = true;
       iOffset = 0;
       iOffset = 0;
+      Map = NULL;
       return;
       return;
    }
    }
    
    
-   Buffer = new char[Size];
-   Start = End = Buffer;
-   Done = false;
+   Map = new MMap (Fd, MMap::Public | MMap::ReadOnly);
+   Buffer = (char *) Map->Data ();
+   Start = Buffer;
+   End = Buffer + Map->Size ();
    iOffset = 0;
    iOffset = 0;
-   Fill();
 }
 }
 									/*}}}*/
 									/*}}}*/
 // TagFile::~pkgTagFile - Destructor					/*{{{*/
 // TagFile::~pkgTagFile - Destructor					/*{{{*/
@@ -56,7 +56,7 @@ pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) :
 /* */
 /* */
 pkgTagFile::~pkgTagFile()
 pkgTagFile::~pkgTagFile()
 {
 {
-   delete [] Buffer;
+   delete Map;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // TagFile::Step - Advance to the next section				/*{{{*/
 // TagFile::Step - Advance to the next section				/*{{{*/
@@ -64,63 +64,18 @@ pkgTagFile::~pkgTagFile()
 /* If the Section Scanner fails we refill the buffer and try again. */
 /* If the Section Scanner fails we refill the buffer and try again. */
 bool pkgTagFile::Step(pkgTagSection &Tag)
 bool pkgTagFile::Step(pkgTagSection &Tag)
 {
 {
+   if (Start == End)
+      return false;
+
    if (Tag.Scan(Start,End - Start) == false)
    if (Tag.Scan(Start,End - Start) == false)
    {
    {
-      if (Fill() == false)
-	 return false;
-      
-      if (Tag.Scan(Start,End - Start) == false)
-	 return _error->Error(_("Unable to parse package file %s (1)"),
-			      Fd.Name().c_str());
+      return _error->Error(_("Unable to parse package file %s (1)"),
+	      Fd.Name().c_str());
    }
    }
    Start += Tag.size();
    Start += Tag.size();
    iOffset += Tag.size();
    iOffset += Tag.size();
 
 
    Tag.Trim();
    Tag.Trim();
-   return true;
-}
-									/*}}}*/
-// TagFile::Fill - Top up the buffer					/*{{{*/
-// ---------------------------------------------------------------------
-/* This takes the bit at the end of the buffer and puts it at the start
-   then fills the rest from the file */
-bool pkgTagFile::Fill()
-{
-   unsigned long EndSize = End - Start;
-   unsigned long Actual = 0;
-   
-   memmove(Buffer,Start,EndSize);
-   Start = Buffer;
-   End = Buffer + EndSize;
-   
-   if (Done == false)
-   {
-      // See if only a bit of the file is left
-      if (Fd.Read(End,Size - (End - Buffer),&Actual) == false)
-	 return false;
-      if (Actual != Size - (End - Buffer))
-	 Done = true;
-      End += Actual;
-   }
-   
-   if (Done == true)
-   {
-      if (EndSize <= 3 && Actual == 0)
-	 return false;
-      if (Size - (End - Buffer) < 4)
-	 return true;
-      
-      // Append a double new line if one does not exist
-      unsigned int LineCount = 0;
-      for (const char *E = End - 1; E - End < 6 && (*E == '\n' || *E == '\r'); E--)
-	 if (*E == '\n')
-	    LineCount++;
-      for (; LineCount < 2; LineCount++)
-	 *End++ = '\n';
-      
-      return true;
-   }
-   
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -141,20 +96,7 @@ bool pkgTagFile::Jump(pkgTagSection &Tag,unsigned long Offset)
 
 
    // Reposition and reload..
    // Reposition and reload..
    iOffset = Offset;
    iOffset = Offset;
-   Done = false;
-   if (Fd.Seek(Offset) == false)
-      return false;
-   End = Start = Buffer;
-   
-   if (Fill() == false)
-      return false;
-
-   if (Tag.Scan(Start,End - Start) == true)
-      return true;
-   
-   // This appends a double new line (for the real eof handling)
-   if (Fill() == false)
-      return false;
+   Start = Buffer + iOffset;
    
    
    if (Tag.Scan(Start,End - Start) == false)
    if (Tag.Scan(Start,End - Start) == false)
       return _error->Error(_("Unable to parse package file %s (2)"),Fd.Name().c_str());
       return _error->Error(_("Unable to parse package file %s (2)"),Fd.Name().c_str());
@@ -181,7 +123,7 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength)
    Stop = Section = Start;
    Stop = Section = Start;
    memset(AlphaIndexes,0,sizeof(AlphaIndexes));
    memset(AlphaIndexes,0,sizeof(AlphaIndexes));
 
 
-   if (Stop == 0)
+   if (Stop == 0 || MaxLength == 0)
       return false;
       return false;
    
    
    TagCount = 0;
    TagCount = 0;
@@ -212,6 +154,12 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength)
       Stop++;
       Stop++;
    }
    }
 
 
+   if ((Stop+1 >= End) && (End[-1] == '\n' || End[-1] == '\r'))
+   {
+       Indexes[TagCount] = (End - 1) - Section;
+       return true;
+   }
+
    return false;
    return false;
 }
 }
 									/*}}}*/
 									/*}}}*/

+ 2 - 3
apt-pkg/tagfile.h

@@ -25,6 +25,7 @@
 #endif 
 #endif 
 
 
 #include <apt-pkg/fileutl.h>
 #include <apt-pkg/fileutl.h>
+#include <apt-pkg/mmap.h>
 #include <stdio.h>
 #include <stdio.h>
     
     
 class pkgTagSection
 class pkgTagSection
@@ -69,15 +70,13 @@ class pkgTagSection
 class pkgTagFile
 class pkgTagFile
 {
 {
    FileFd &Fd;
    FileFd &Fd;
+   MMap *Map;
    char *Buffer;
    char *Buffer;
    char *Start;
    char *Start;
    char *End;
    char *End;
-   bool Done;
    unsigned long iOffset;
    unsigned long iOffset;
    unsigned long Size;
    unsigned long Size;
    
    
-   bool Fill();
-   
    public:
    public:
 
 
    bool Step(pkgTagSection &Section);
    bool Step(pkgTagSection &Section);

+ 9 - 8
buildlib/defaults.mak

@@ -174,11 +174,12 @@ ifeq ($(NUM_PROCS),1)
   PARALLEL_RUN=no
   PARALLEL_RUN=no
 endif
 endif
 
 
-ifndef PARALLEL_RUN
- PARALLEL_RUN=yes
- .EXPORT: PARALLEL_RUN
- # handle recursion
- ifneq ($(NUM_PROCS),)
-  MAKEFLAGS += -j $(NUM_PROCS)
- endif
-endif
+# mvo: commented out, lead to build failures in the arch-build target
+#ifndef PARALLEL_RUN
+# PARALLEL_RUN=yes
+# .EXPORT: PARALLEL_RUN
+# # handle recursion
+# ifneq ($(NUM_PROCS),)
+#  MAKEFLAGS += -j $(NUM_PROCS)
+# endif
+#endif

+ 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.6.43.3")
+AC_DEFINE_UNQUOTED(VERSION,"0.6.44")
 PACKAGE="apt"
 PACKAGE="apt"
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_SUBST(PACKAGE)
 AC_SUBST(PACKAGE)

+ 31 - 0
debian/changelog

@@ -1,3 +1,34 @@
+apt (0.6.44) unstable; urgency=low
+
+  * apt-pkg/acquire.cc: don't show ETA if it is 0 or absurdely large
+  * apt-pkg/deb/dpkgpm.cc: 
+    - wording fixes (thanks to Matt Zimmerman)
+    - fix error in dpkg interaction (closes: #364513, 
+      thanks to Martin Dickopp)
+  * apt-pkg/tagfile.{cc,h}:
+    - use MMap to read the entries (thanks to Zephaniah E. Hull for the
+      patch) Closes: #350025
+  * Merge from http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main:
+  	* bg.po: Added, complete to 512t. Closes: #360262
+  * doc/apt-ftparchive.1.xml:
+    - fix documentation for "SrcPackages" -> "Sources" 
+      (thanks to Bart Martens for the patch, closes: #307756)
+  * debian/libapt-pkg-doc.doc-base.cache:
+    - remove broken charackter from description (closes: #361129)
+  * apt-inst/deb/dpkgdb.cc, methods/gpgv.cc: 
+    - i18n fixes (closes: #349298)
+  * debian/postinst: dont fail on not available
+    /usr/share/doc/apt/examples/sources.list (closes: #361130)
+  * methods/ftp.cc:
+    - unlink empty file in partial if the download failed because
+      the file is missing on the server (closes: #316337)
+  * apt-pkg/deb/debversion.cc:
+    - treats a version string with explicit zero epoch equal
+      than the same without epoch (Policy 5.6.12, closes: #363358)
+      Thanks to Lionel Elie Mamane for the patch
+  
+ --
+
 apt (0.6.43.3) unstable; urgency=low
 apt (0.6.43.3) unstable; urgency=low
 
 
   * Merge bubulle@debian.org--2005/apt--main--0 up to patch-186:
   * Merge bubulle@debian.org--2005/apt--main--0 up to patch-186:

+ 1 - 1
debian/compat

@@ -1 +1 @@
-3
+5

+ 2 - 2
debian/control

@@ -3,8 +3,8 @@ Section: admin
 Priority: important
 Priority: important
 Maintainer: APT Development Team <deity@lists.debian.org>
 Maintainer: APT Development Team <deity@lists.debian.org>
 Uploaders: Jason Gunthorpe <jgg@debian.org>, Adam Heath <doogie@debian.org>, Matt Zimmerman <mdz@debian.org>, Michael Vogt <mvo@debian.org>
 Uploaders: Jason Gunthorpe <jgg@debian.org>, Adam Heath <doogie@debian.org>, Matt Zimmerman <mdz@debian.org>, Michael Vogt <mvo@debian.org>
-Standards-Version: 3.6.1
-Build-Depends: debhelper (>= 4.1.62), libdb4.3-dev, gettext (>= 0.12)
+Standards-Version: 3.6.2.2
+Build-Depends: debhelper (>= 5.0), libdb4.3-dev, gettext (>= 0.12)
 Build-Depends-Indep: debiandoc-sgml, docbook-utils (>= 0.6.12-1)
 Build-Depends-Indep: debiandoc-sgml, docbook-utils (>= 0.6.12-1)
 
 
 Package: apt
 Package: apt

+ 1 - 1
debian/libapt-pkg-doc.doc-base.cache

@@ -4,7 +4,7 @@ Author: Jason Gunthorpe
 Abstract: The APT Cache Specification describes the complete implementation
 Abstract: The APT Cache Specification describes the complete implementation
  and format of the APT Cache file. The APT Cache file is a way for APT to
  and format of the APT Cache file. The APT Cache file is a way for APT to
  parse and store a large number of package files for display in the UI.
  parse and store a large number of package files for display in the UI.
- It's primaryã design goal is to make display of a single package in the
+ It's primary design goal is to make display of a single package in the
  tree very fast by pre-linking important things like dependencies and
  tree very fast by pre-linking important things like dependencies and
  provides. The specification doubles as documentation for one of the
  provides. The specification doubles as documentation for one of the
  in-memory structures used by the package library and the APT GUI.
  in-memory structures used by the package library and the APT GUI.

+ 4 - 1
debian/postinst

@@ -12,7 +12,10 @@ set -e
 
 
 create_apt_conf ()
 create_apt_conf ()
 {
 {
- cp /usr/share/doc/apt/examples/sources.list /etc/apt/sources.list
+ EXAMPLE_SOURCE=/usr/share/doc/apt/examples/sources.list
+ if [ -f $EXAMPLE_SOURCE ]; then
+     cp $EXAMPLE_SOURCE /etc/apt/sources.list
+ fi
 }
 }
  
  
 check_apt_conf ()
 check_apt_conf ()

+ 2 - 1
debian/rules

@@ -36,6 +36,7 @@ endif
 # Default rule
 # Default rule
 build:
 build:
 
 
+PKG=apt
 DEB_BUILD_PROG:=debuild --preserve-envvar PATH --preserve-envvar CCACHE_DIR -us -uc $(DEB_BUILD_PROG_OPTS)
 DEB_BUILD_PROG:=debuild --preserve-envvar PATH --preserve-envvar CCACHE_DIR -us -uc $(DEB_BUILD_PROG_OPTS)
 APT_DEBVER=$(shell dpkg-parsechangelog |sed -n -e '/^Version:/s/^Version: //p')
 APT_DEBVER=$(shell dpkg-parsechangelog |sed -n -e '/^Version:/s/^Version: //p')
 APT_CONFVER=$(shell sed -n -e 's/^AC_DEFINE_UNQUOTED(VERSION,"\(.*\)")/\1/p' configure.in)
 APT_CONFVER=$(shell sed -n -e 's/^AC_DEFINE_UNQUOTED(VERSION,"\(.*\)")/\1/p' configure.in)
@@ -335,6 +336,6 @@ cvs-mkul:
 arch-build:
 arch-build:
 	rm -rf debian/arch-build
 	rm -rf debian/arch-build
 	mkdir -p debian/arch-build/apt-$(APT_DEBVER)
 	mkdir -p debian/arch-build/apt-$(APT_DEBVER)
-	baz inventory -s | xargs cp -a --parents --target=debian/arch-build/apt-$(APT_DEBVER)
+	tar -c --exclude=arch-build --no-recursion -f - `bzr inventory` | (cd debian/arch-build/$(PKG)-$(APT_DEBVER);tar xf -)
 	$(MAKE) -C debian/arch-build/apt-$(APT_DEBVER) startup doc
 	$(MAKE) -C debian/arch-build/apt-$(APT_DEBVER) startup doc
 	(cd debian/arch-build/apt-$(APT_DEBVER); $(DEB_BUILD_PROG))
 	(cd debian/arch-build/apt-$(APT_DEBVER); $(DEB_BUILD_PROG))

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

@@ -407,10 +407,10 @@ for i in Sections do
       Sets the Packages file output.</para></listitem>
       Sets the Packages file output.</para></listitem>
       </varlistentry>
       </varlistentry>
       
       
-      <varlistentry><term>SrcPackages</term>
+      <varlistentry><term>Sources</term>
       <listitem><para>
       <listitem><para>
       Sets the Sources file output. At least one of
       Sets the Sources file output. At least one of
-      <literal>Packages</literal> or <literal>SrcPackages</literal> is required.</para></listitem>
+      <literal>Packages</literal> or <literal>Sources</literal> is required.</para></listitem>
       </varlistentry>
       </varlistentry>
       
       
       <varlistentry><term>Contents</term>
       <varlistentry><term>Contents</term>

+ 3 - 3
doc/examples/apt-ftparchive.conf

@@ -20,21 +20,21 @@ Default {
 // Contents file for these in the main section of the sid release
 // Contents file for these in the main section of the sid release
 BinDirectory "pool/main" {
 BinDirectory "pool/main" {
 	Packages "dists/sid/main/binary-i386/Packages";
 	Packages "dists/sid/main/binary-i386/Packages";
-	SrcPackages "dists/sid/main/source/Sources";
+	Sources "dists/sid/main/source/Sources";
 	Contents "dists/sid/Contents-i386";
 	Contents "dists/sid/Contents-i386";
 }
 }
 
 
 // This is the same for the contrib section
 // This is the same for the contrib section
 BinDirectory "pool/contrib" {
 BinDirectory "pool/contrib" {
 	Packages "dists/sid/contrib/binary-i386/Packages";
 	Packages "dists/sid/contrib/binary-i386/Packages";
-	SrcPackages "dists/sid/contrib/source/Sources";
+	Sources "dists/sid/contrib/source/Sources";
 	Contents "dists/sid/Contents-i386";
 	Contents "dists/sid/Contents-i386";
 }
 }
 
 
 // This is the same for the non-free section
 // This is the same for the non-free section
 BinDirectory "pool/non-free" {
 BinDirectory "pool/non-free" {
 	Packages "dists/sid/non-free/binary-i386/Packages";
 	Packages "dists/sid/non-free/binary-i386/Packages";
-	SrcPackages "dists/sid/non-free/source/Sources";
+	Sources "dists/sid/non-free/source/Sources";
 	Contents "dists/sid/Contents-i386";
 	Contents "dists/sid/Contents-i386";
 };
 };
 
 

+ 3 - 3
doc/fr/apt-ftparchive.fr.1.xml

@@ -451,10 +451,10 @@ Indique le fichier 
       </para></listitem>
       </para></listitem>
 </varlistentry>
 </varlistentry>
 
 
-<varlistentry><term>SrcPackages</term>
+<varlistentry><term>Sources</term>
 <listitem><para>
 <listitem><para>
 Indique le fichier «&nbsp;Sources&nbsp;» créé. L'un des deux fichiers, 
 Indique le fichier «&nbsp;Sources&nbsp;» créé. L'un des deux fichiers, 
-<literal>Packages</literal> ou <literal>SrcPackages</literal> est nécessaire.
+<literal>Packages</literal> ou <literal>Sources</literal> est nécessaire.
       </para></listitem>
       </para></listitem>
 </varlistentry>
 </varlistentry>
 
 
@@ -628,4 +628,4 @@ d
 &manbugs;
 &manbugs;
 &traducteur;
 &traducteur;
 
 
-</refentry>
+</refentry>

+ 5 - 2
methods/ftp.cc

@@ -1055,9 +1055,12 @@ bool FtpMethod::Fetch(FetchItem *Itm)
 	 UBuf.modtime = FailTime;
 	 UBuf.modtime = FailTime;
 	 utime(FailFile.c_str(),&UBuf);
 	 utime(FailFile.c_str(),&UBuf);
 	 
 	 
-	 // If the file is missing we hard fail otherwise transient fail
-	 if (Missing == true)
+	 // If the file is missing we hard fail and delete the destfile
+	 // otherwise transient fail
+	 if (Missing == true) {
+	    unlink(FailFile.c_str());
 	    return false;
 	    return false;
+	 }
 	 Fail(true);
 	 Fail(true);
 	 return true;
 	 return true;
       }
       }

+ 18 - 12
methods/gpgv.cc

@@ -11,6 +11,7 @@
 #include <errno.h>
 #include <errno.h>
 #include <sys/wait.h>
 #include <sys/wait.h>
 #include <iostream>
 #include <iostream>
+#include <sstream>
 
 
 #define GNUPGPREFIX "[GNUPG:]"
 #define GNUPGPREFIX "[GNUPG:]"
 #define GNUPGBADSIG "[GNUPG:] BADSIG"
 #define GNUPGBADSIG "[GNUPG:] BADSIG"
@@ -20,7 +21,7 @@
 class GPGVMethod : public pkgAcqMethod
 class GPGVMethod : public pkgAcqMethod
 {
 {
    private:
    private:
-   const char *VerifyGetSigners(const char *file, const char *outfile,
+   string VerifyGetSigners(const char *file, const char *outfile,
 				vector<string> &GoodSigners, vector<string> &BadSigners,
 				vector<string> &GoodSigners, vector<string> &BadSigners,
 				vector<string> &NoPubKeySigners);
 				vector<string> &NoPubKeySigners);
    
    
@@ -32,11 +33,15 @@ class GPGVMethod : public pkgAcqMethod
    GPGVMethod() : pkgAcqMethod("1.0",SingleInstance | SendConfig) {};
    GPGVMethod() : pkgAcqMethod("1.0",SingleInstance | SendConfig) {};
 };
 };
 
 
-const char *GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
+string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
 					 vector<string> &GoodSigners,
 					 vector<string> &GoodSigners,
 					 vector<string> &BadSigners,
 					 vector<string> &BadSigners,
 					 vector<string> &NoPubKeySigners)
 					 vector<string> &NoPubKeySigners)
 {
 {
+   // setup a (empty) stringstream for formating the return value
+   std::stringstream ret;
+   ret.str("");
+
    if (_config->FindB("Debug::Acquire::gpgv", false))
    if (_config->FindB("Debug::Acquire::gpgv", false))
    {
    {
       std::cerr << "inside VerifyGetSigners" << std::endl;
       std::cerr << "inside VerifyGetSigners" << std::endl;
@@ -54,9 +59,11 @@ const char *GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
       std::cerr << "Keyring path: " << pubringpath << std::endl;
       std::cerr << "Keyring path: " << pubringpath << std::endl;
    }
    }
 
 
-   if (stat(pubringpath.c_str(), &buff) != 0)
-      return (string("Couldn't access keyring: ") + strerror(errno)).c_str();
-
+   if (stat(pubringpath.c_str(), &buff) != 0) 
+   {
+      ioprintf(ret, _("Couldn't access keyring: '%s'"), strerror(errno)); 
+      return ret.str();
+   }
    if (pipe(fd) < 0)
    if (pipe(fd) < 0)
    {
    {
       return "Couldn't create pipe";
       return "Couldn't create pipe";
@@ -65,7 +72,7 @@ const char *GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
    pid = fork();
    pid = fork();
    if (pid < 0)
    if (pid < 0)
    {
    {
-      return (string("Couldn't spawn new process") + strerror(errno)).c_str();
+      return string("Couldn't spawn new process") + strerror(errno);
    }
    }
    else if (pid == 0)
    else if (pid == 0)
    {
    {
@@ -189,7 +196,7 @@ const char *GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
    {
    {
       if (GoodSigners.empty())
       if (GoodSigners.empty())
          return _("Internal error: Good signature, but could not determine key fingerprint?!");
          return _("Internal error: Good signature, but could not determine key fingerprint?!");
-      return NULL;
+      return "";
    }
    }
    else if (WEXITSTATUS(status) == 1)
    else if (WEXITSTATUS(status) == 1)
    {
    {
@@ -197,9 +204,8 @@ const char *GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
    }
    }
    else if (WEXITSTATUS(status) == 111)
    else if (WEXITSTATUS(status) == 111)
    {
    {
-      // FIXME String concatenation considered harmful.
-      return (string(_("Could not execute ")) + gpgvpath +
-	      string(_(" to verify signature (is gnupg installed?)"))).c_str();
+      ioprintf(ret, _("Could not execute '%s' to verify signature (is gnupg installed?)"), gpgvpath.c_str());
+      return ret.str();
    }
    }
    else
    else
    {
    {
@@ -221,8 +227,8 @@ bool GPGVMethod::Fetch(FetchItem *Itm)
    URIStart(Res);
    URIStart(Res);
 
 
    // Run gpgv on file, extract contents and get the key ID of the signer
    // Run gpgv on file, extract contents and get the key ID of the signer
-   const char *msg = VerifyGetSigners(Path.c_str(), Itm->DestFile.c_str(),
-				      GoodSigners, BadSigners, NoPubKeySigners);
+   string msg = VerifyGetSigners(Path.c_str(), Itm->DestFile.c_str(),
+			      GoodSigners, BadSigners, NoPubKeySigners);
    if (GoodSigners.empty() || !BadSigners.empty() || !NoPubKeySigners.empty())
    if (GoodSigners.empty() || !BadSigners.empty() || !NoPubKeySigners.empty())
    {
    {
       string errmsg;
       string errmsg;

+ 94 - 90
po/apt-all.pot

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-01-20 14:06+0100\n"
+"POT-Creation-Date: 2006-05-08 11:02+0200\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"
@@ -146,14 +146,14 @@ msgstr ""
 msgid "       %4i %s\n"
 msgid "       %4i %s\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-cache.cc:1651 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70
+#: cmdline/apt-cache.cc:1652 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70
 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550
 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550
-#: cmdline/apt-get.cc:2378 cmdline/apt-sortpkgs.cc:144
+#: cmdline/apt-get.cc:2369 cmdline/apt-sortpkgs.cc:144
 #, c-format
 #, c-format
 msgid "%s %s for %s %s compiled on %s %s\n"
 msgid "%s %s for %s %s compiled on %s %s\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-cache.cc:1658
+#: cmdline/apt-cache.cc:1659
 msgid ""
 msgid ""
 "Usage: apt-cache [options] command\n"
 "Usage: apt-cache [options] command\n"
 "       apt-cache [options] add file1 [file2 ...]\n"
 "       apt-cache [options] add file1 [file2 ...]\n"
@@ -417,7 +417,7 @@ msgid " DeLink limit of %sB hit.\n"
 msgstr ""
 msgstr ""
 
 
 #: ftparchive/writer.cc:358 apt-inst/extract.cc:181 apt-inst/extract.cc:193
 #: ftparchive/writer.cc:358 apt-inst/extract.cc:181 apt-inst/extract.cc:193
-#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 methods/gpgv.cc:260
+#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 methods/gpgv.cc:266
 #, c-format
 #, c-format
 msgid "Failed to stat %s"
 msgid "Failed to stat %s"
 msgstr ""
 msgstr ""
@@ -535,7 +535,7 @@ msgstr ""
 msgid "Y"
 msgid "Y"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:142 cmdline/apt-get.cc:1515
+#: cmdline/apt-get.cc:142 cmdline/apt-get.cc:1506
 #, c-format
 #, c-format
 msgid "Regex compilation error - %s"
 msgid "Regex compilation error - %s"
 msgstr ""
 msgstr ""
@@ -694,11 +694,11 @@ msgstr ""
 msgid "Internal error, Ordering didn't finish"
 msgid "Internal error, Ordering didn't finish"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1809 cmdline/apt-get.cc:1842
+#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1800 cmdline/apt-get.cc:1833
 msgid "Unable to lock the download directory"
 msgid "Unable to lock the download directory"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1890 cmdline/apt-get.cc:2126
+#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1881 cmdline/apt-get.cc:2117
 #: apt-pkg/cachefile.cc:67
 #: apt-pkg/cachefile.cc:67
 msgid "The list of sources could not be read."
 msgid "The list of sources could not be read."
 msgstr ""
 msgstr ""
@@ -727,7 +727,7 @@ msgstr ""
 msgid "After unpacking %sB disk space will be freed.\n"
 msgid "After unpacking %sB disk space will be freed.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1980
+#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1971
 #, c-format
 #, c-format
 msgid "Couldn't determine free space in %s"
 msgid "Couldn't determine free space in %s"
 msgstr ""
 msgstr ""
@@ -761,7 +761,7 @@ msgstr ""
 msgid "Do you want to continue [Y/n]? "
 msgid "Do you want to continue [Y/n]? "
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2023
+#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2014
 #, c-format
 #, c-format
 msgid "Failed to fetch %s  %s\n"
 msgid "Failed to fetch %s  %s\n"
 msgstr ""
 msgstr ""
@@ -770,7 +770,7 @@ msgstr ""
 msgid "Some files failed to download"
 msgid "Some files failed to download"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2032
+#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2023
 msgid "Download complete and in download only mode"
 msgid "Download complete and in download only mode"
 msgstr ""
 msgstr ""
 
 
@@ -866,7 +866,7 @@ msgstr ""
 msgid "The update command takes no arguments"
 msgid "The update command takes no arguments"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1326 cmdline/apt-get.cc:1420
+#: cmdline/apt-get.cc:1326
 msgid "Unable to lock the list directory"
 msgid "Unable to lock the list directory"
 msgstr ""
 msgstr ""
 
 
@@ -880,27 +880,27 @@ msgstr ""
 msgid "Internal error, AllUpgrade broke stuff"
 msgid "Internal error, AllUpgrade broke stuff"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1502 cmdline/apt-get.cc:1538
+#: cmdline/apt-get.cc:1493 cmdline/apt-get.cc:1529
 #, c-format
 #, c-format
 msgid "Couldn't find package %s"
 msgid "Couldn't find package %s"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1525
+#: cmdline/apt-get.cc:1516
 #, c-format
 #, c-format
 msgid "Note, selecting %s for regex '%s'\n"
 msgid "Note, selecting %s for regex '%s'\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1555
+#: cmdline/apt-get.cc:1546
 msgid "You might want to run `apt-get -f install' to correct these:"
 msgid "You might want to run `apt-get -f install' to correct these:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1558
+#: cmdline/apt-get.cc:1549
 msgid ""
 msgid ""
 "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a "
 "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a "
 "solution)."
 "solution)."
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1570
+#: cmdline/apt-get.cc:1561
 msgid ""
 msgid ""
 "Some packages could not be installed. This may mean that you have\n"
 "Some packages could not be installed. This may mean that you have\n"
 "requested an impossible situation or if you are using the unstable\n"
 "requested an impossible situation or if you are using the unstable\n"
@@ -908,163 +908,163 @@ msgid ""
 "or been moved out of Incoming."
 "or been moved out of Incoming."
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1578
+#: cmdline/apt-get.cc:1569
 msgid ""
 msgid ""
 "Since you only requested a single operation it is extremely likely that\n"
 "Since you only requested a single operation it is extremely likely that\n"
 "the package is simply not installable and a bug report against\n"
 "the package is simply not installable and a bug report against\n"
 "that package should be filed."
 "that package should be filed."
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1583
+#: cmdline/apt-get.cc:1574
 msgid "The following information may help to resolve the situation:"
 msgid "The following information may help to resolve the situation:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1586
+#: cmdline/apt-get.cc:1577
 msgid "Broken packages"
 msgid "Broken packages"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1612
+#: cmdline/apt-get.cc:1603
 msgid "The following extra packages will be installed:"
 msgid "The following extra packages will be installed:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1683
+#: cmdline/apt-get.cc:1674
 msgid "Suggested packages:"
 msgid "Suggested packages:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1684
+#: cmdline/apt-get.cc:1675
 msgid "Recommended packages:"
 msgid "Recommended packages:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1704
+#: cmdline/apt-get.cc:1695
 msgid "Calculating upgrade... "
 msgid "Calculating upgrade... "
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1707 methods/ftp.cc:702 methods/connect.cc:101
+#: cmdline/apt-get.cc:1698 methods/ftp.cc:702 methods/connect.cc:101
 msgid "Failed"
 msgid "Failed"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1712
+#: cmdline/apt-get.cc:1703
 msgid "Done"
 msgid "Done"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1777 cmdline/apt-get.cc:1785
+#: cmdline/apt-get.cc:1768 cmdline/apt-get.cc:1776
 msgid "Internal error, problem resolver broke stuff"
 msgid "Internal error, problem resolver broke stuff"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1885
+#: cmdline/apt-get.cc:1876
 msgid "Must specify at least one package to fetch source for"
 msgid "Must specify at least one package to fetch source for"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1915 cmdline/apt-get.cc:2144
+#: cmdline/apt-get.cc:1906 cmdline/apt-get.cc:2135
 #, c-format
 #, c-format
 msgid "Unable to find a source package for %s"
 msgid "Unable to find a source package for %s"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1959
+#: cmdline/apt-get.cc:1950
 #, c-format
 #, c-format
 msgid "Skipping already downloaded file '%s'\n"
 msgid "Skipping already downloaded file '%s'\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1983
+#: cmdline/apt-get.cc:1974
 #, c-format
 #, c-format
 msgid "You don't have enough free space in %s"
 msgid "You don't have enough free space in %s"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1988
+#: cmdline/apt-get.cc:1979
 #, c-format
 #, c-format
 msgid "Need to get %sB/%sB of source archives.\n"
 msgid "Need to get %sB/%sB of source archives.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1991
+#: cmdline/apt-get.cc:1982
 #, c-format
 #, c-format
 msgid "Need to get %sB of source archives.\n"
 msgid "Need to get %sB of source archives.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1997
+#: cmdline/apt-get.cc:1988
 #, c-format
 #, c-format
 msgid "Fetch source %s\n"
 msgid "Fetch source %s\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2028
+#: cmdline/apt-get.cc:2019
 msgid "Failed to fetch some archives."
 msgid "Failed to fetch some archives."
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2056
+#: cmdline/apt-get.cc:2047
 #, c-format
 #, c-format
 msgid "Skipping unpack of already unpacked source in %s\n"
 msgid "Skipping unpack of already unpacked source in %s\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2068
+#: cmdline/apt-get.cc:2059
 #, c-format
 #, c-format
 msgid "Unpack command '%s' failed.\n"
 msgid "Unpack command '%s' failed.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2069
+#: cmdline/apt-get.cc:2060
 #, c-format
 #, c-format
 msgid "Check if the 'dpkg-dev' package is installed.\n"
 msgid "Check if the 'dpkg-dev' package is installed.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2086
+#: cmdline/apt-get.cc:2077
 #, c-format
 #, c-format
 msgid "Build command '%s' failed.\n"
 msgid "Build command '%s' failed.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2105
+#: cmdline/apt-get.cc:2096
 msgid "Child process failed"
 msgid "Child process failed"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2121
+#: cmdline/apt-get.cc:2112
 msgid "Must specify at least one package to check builddeps for"
 msgid "Must specify at least one package to check builddeps for"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2149
+#: cmdline/apt-get.cc:2140
 #, c-format
 #, c-format
 msgid "Unable to get build-dependency information for %s"
 msgid "Unable to get build-dependency information for %s"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2169
+#: cmdline/apt-get.cc:2160
 #, c-format
 #, c-format
 msgid "%s has no build depends.\n"
 msgid "%s has no build depends.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2221
+#: cmdline/apt-get.cc:2212
 #, c-format
 #, c-format
 msgid ""
 msgid ""
 "%s dependency for %s cannot be satisfied because the package %s cannot be "
 "%s dependency for %s cannot be satisfied because the package %s cannot be "
 "found"
 "found"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2273
+#: cmdline/apt-get.cc:2264
 #, c-format
 #, c-format
 msgid ""
 msgid ""
 "%s dependency for %s cannot be satisfied because no available versions of "
 "%s dependency for %s cannot be satisfied because no available versions of "
 "package %s can satisfy version requirements"
 "package %s can satisfy version requirements"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2308
+#: cmdline/apt-get.cc:2299
 #, c-format
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
 msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2333
+#: cmdline/apt-get.cc:2324
 #, c-format
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: %s"
 msgid "Failed to satisfy %s dependency for %s: %s"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2347
+#: cmdline/apt-get.cc:2338
 #, c-format
 #, c-format
 msgid "Build-dependencies for %s could not be satisfied."
 msgid "Build-dependencies for %s could not be satisfied."
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2351
+#: cmdline/apt-get.cc:2342
 msgid "Failed to process build dependencies"
 msgid "Failed to process build dependencies"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2383
+#: cmdline/apt-get.cc:2374
 msgid "Supported modules:"
 msgid "Supported modules:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2424
+#: cmdline/apt-get.cc:2415
 msgid ""
 msgid ""
 "Usage: apt-get [options] command\n"
 "Usage: apt-get [options] command\n"
 "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
 "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
@@ -1365,7 +1365,7 @@ msgstr ""
 msgid "Internal error getting a package name"
 msgid "Internal error getting a package name"
 msgstr ""
 msgstr ""
 
 
-#: apt-inst/deb/dpkgdb.cc:205
+#: apt-inst/deb/dpkgdb.cc:205 apt-inst/deb/dpkgdb.cc:386
 msgid "Reading file listing"
 msgid "Reading file listing"
 msgstr ""
 msgstr ""
 
 
@@ -1409,10 +1409,6 @@ msgstr ""
 msgid "The pkg cache must be initialized first"
 msgid "The pkg cache must be initialized first"
 msgstr ""
 msgstr ""
 
 
-#: apt-inst/deb/dpkgdb.cc:386
-msgid "Reading file list"
-msgstr ""
-
 #: apt-inst/deb/dpkgdb.cc:443
 #: apt-inst/deb/dpkgdb.cc:443
 #, c-format
 #, c-format
 msgid "Failed to find a Package: header, offset %lu"
 msgid "Failed to find a Package: header, offset %lu"
@@ -1483,12 +1479,12 @@ msgstr ""
 msgid "File not found"
 msgid "File not found"
 msgstr ""
 msgstr ""
 
 
-#: methods/copy.cc:42 methods/gpgv.cc:269 methods/gzip.cc:133
+#: methods/copy.cc:42 methods/gpgv.cc:275 methods/gzip.cc:133
 #: methods/gzip.cc:142
 #: methods/gzip.cc:142
 msgid "Failed to stat"
 msgid "Failed to stat"
 msgstr ""
 msgstr ""
 
 
-#: methods/copy.cc:79 methods/gpgv.cc:266 methods/gzip.cc:139
+#: methods/copy.cc:79 methods/gpgv.cc:272 methods/gzip.cc:139
 msgid "Failed to set modification time"
 msgid "Failed to set modification time"
 msgstr ""
 msgstr ""
 
 
@@ -1637,7 +1633,7 @@ msgstr ""
 msgid "Query"
 msgid "Query"
 msgstr ""
 msgstr ""
 
 
-#: methods/ftp.cc:1106
+#: methods/ftp.cc:1109
 msgid "Unable to invoke "
 msgid "Unable to invoke "
 msgstr ""
 msgstr ""
 
 
@@ -1666,69 +1662,70 @@ msgstr ""
 msgid "Could not connect to %s:%s (%s), connection timed out"
 msgid "Could not connect to %s:%s (%s), connection timed out"
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:106
+#: methods/connect.cc:108
 #, c-format
 #, c-format
 msgid "Could not connect to %s:%s (%s)."
 msgid "Could not connect to %s:%s (%s)."
 msgstr ""
 msgstr ""
 
 
 #. We say this mainly because the pause here is for the
 #. We say this mainly because the pause here is for the
 #. ssh connection that is still going
 #. ssh connection that is still going
-#: methods/connect.cc:134 methods/rsh.cc:425
+#: methods/connect.cc:136 methods/rsh.cc:425
 #, c-format
 #, c-format
 msgid "Connecting to %s"
 msgid "Connecting to %s"
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:165
+#: methods/connect.cc:167
 #, c-format
 #, c-format
 msgid "Could not resolve '%s'"
 msgid "Could not resolve '%s'"
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:171
+#: methods/connect.cc:173
 #, c-format
 #, c-format
 msgid "Temporary failure resolving '%s'"
 msgid "Temporary failure resolving '%s'"
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:174
+#: methods/connect.cc:176
 #, c-format
 #, c-format
 msgid "Something wicked happened resolving '%s:%s' (%i)"
 msgid "Something wicked happened resolving '%s:%s' (%i)"
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:221
+#: methods/connect.cc:223
 #, c-format
 #, c-format
 msgid "Unable to connect to %s %s:"
 msgid "Unable to connect to %s %s:"
 msgstr ""
 msgstr ""
 
 
-#: methods/gpgv.cc:92
+#: methods/gpgv.cc:64
+#, c-format
+msgid "Couldn't access keyring: '%s'"
+msgstr ""
+
+#: methods/gpgv.cc:99
 msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
 msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
 msgstr ""
 msgstr ""
 
 
-#: methods/gpgv.cc:191
+#: methods/gpgv.cc:198
 msgid ""
 msgid ""
 "Internal error: Good signature, but could not determine key fingerprint?!"
 "Internal error: Good signature, but could not determine key fingerprint?!"
 msgstr ""
 msgstr ""
 
 
-#: methods/gpgv.cc:196
+#: methods/gpgv.cc:203
 msgid "At least one invalid signature was encountered."
 msgid "At least one invalid signature was encountered."
 msgstr ""
 msgstr ""
 
 
-#. FIXME String concatenation considered harmful.
-#: methods/gpgv.cc:201
-msgid "Could not execute "
-msgstr ""
-
-#: methods/gpgv.cc:202
-msgid " to verify signature (is gnupg installed?)"
+#: methods/gpgv.cc:207
+#, c-format
+msgid "Could not execute '%s' to verify signature (is gnupg installed?)"
 msgstr ""
 msgstr ""
 
 
-#: methods/gpgv.cc:206
+#: methods/gpgv.cc:212
 msgid "Unknown error executing gpgv"
 msgid "Unknown error executing gpgv"
 msgstr ""
 msgstr ""
 
 
-#: methods/gpgv.cc:237
+#: methods/gpgv.cc:243
 msgid "The following signatures were invalid:\n"
 msgid "The following signatures were invalid:\n"
 msgstr ""
 msgstr ""
 
 
-#: methods/gpgv.cc:244
+#: methods/gpgv.cc:250
 msgid ""
 msgid ""
 "The following signatures couldn't be verified because the public key is not "
 "The following signatures couldn't be verified because the public key is not "
 "available:\n"
 "available:\n"
@@ -2104,12 +2101,12 @@ msgstr ""
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/tagfile.cc:73
+#: apt-pkg/tagfile.cc:72
 #, c-format
 #, c-format
 msgid "Unable to parse package file %s (1)"
 msgid "Unable to parse package file %s (1)"
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/tagfile.cc:160
+#: apt-pkg/tagfile.cc:102
 #, c-format
 #, c-format
 msgid "Unable to parse package file %s (2)"
 msgid "Unable to parse package file %s (2)"
 msgstr ""
 msgstr ""
@@ -2203,9 +2200,16 @@ msgstr ""
 msgid "Archive directory %spartial is missing."
 msgid "Archive directory %spartial is missing."
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/acquire.cc:821
+#. only show the ETA if it makes sense
+#. two days
+#: apt-pkg/acquire.cc:823
+#, c-format
+msgid "Retrieving file %li of %li (%s remaining)"
+msgstr ""
+
+#: apt-pkg/acquire.cc:825
 #, c-format
 #, c-format
-msgid "Downloading file %li of %li (%s remaining)"
+msgid "Retrieving file %li of %li"
 msgstr ""
 msgstr ""
 
 
 #: apt-pkg/acquire-worker.cc:113
 #: apt-pkg/acquire-worker.cc:113
@@ -2346,35 +2350,35 @@ msgstr ""
 msgid "rename failed, %s (%s -> %s)."
 msgid "rename failed, %s (%s -> %s)."
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:950
+#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:945
 msgid "MD5Sum mismatch"
 msgid "MD5Sum mismatch"
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/acquire-item.cc:645
+#: apt-pkg/acquire-item.cc:640
 msgid "There are no public key available for the following key IDs:\n"
 msgid "There are no public key available for the following key IDs:\n"
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/acquire-item.cc:758
+#: apt-pkg/acquire-item.cc:753
 #, c-format
 #, c-format
 msgid ""
 msgid ""
 "I wasn't able to locate a file for the %s package. This might mean you need "
 "I wasn't able to locate a file for the %s package. This might mean you need "
 "to manually fix this package. (due to missing arch)"
 "to manually fix this package. (due to missing arch)"
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/acquire-item.cc:817
+#: apt-pkg/acquire-item.cc:812
 #, c-format
 #, c-format
 msgid ""
 msgid ""
 "I wasn't able to locate file for the %s package. This might mean you need to "
 "I wasn't able to locate file for the %s package. This might mean you need to "
 "manually fix this package."
 "manually fix this package."
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/acquire-item.cc:853
+#: apt-pkg/acquire-item.cc:848
 #, c-format
 #, c-format
 msgid ""
 msgid ""
 "The package index files are corrupted. No Filename: field for package %s."
 "The package index files are corrupted. No Filename: field for package %s."
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/acquire-item.cc:940
+#: apt-pkg/acquire-item.cc:935
 msgid "Size mismatch"
 msgid "Size mismatch"
 msgstr ""
 msgstr ""
 
 
@@ -2515,12 +2519,12 @@ msgstr ""
 
 
 #: apt-pkg/deb/dpkgpm.cc:378
 #: apt-pkg/deb/dpkgpm.cc:378
 #, c-format
 #, c-format
-msgid "Preparing for remove with config %s"
+msgid "Preparing to completely remove %s"
 msgstr ""
 msgstr ""
 
 
 #: apt-pkg/deb/dpkgpm.cc:379
 #: apt-pkg/deb/dpkgpm.cc:379
 #, c-format
 #, c-format
-msgid "Removed with config %s"
+msgid "Completely removed %s"
 msgstr ""
 msgstr ""
 
 
 #: methods/rsh.cc:330
 #: methods/rsh.cc:330

+ 1 - 1
test/testdeb.cc

@@ -23,7 +23,7 @@ bool Test(const char *File)
       return false;
       return false;
       
       
    // Extract it.
    // Extract it.
-   ExtractTar Tar(Deb.GetFile(),Member->Size);
+   ExtractTar Tar(Deb.GetFile(),Member->Size, "gzip");
    NullStream Dir;
    NullStream Dir;
    if (Tar.Go(Dir) == false)
    if (Tar.Go(Dir) == false)
       return false;   
       return false;   

+ 7 - 0
test/versions.lst

@@ -20,6 +20,13 @@ z . -1
 # Epochs
 # Epochs
 1:0.4 10.3 1
 1:0.4 10.3 1
 1:1.25-4 1:1.25-8 -1
 1:1.25-4 1:1.25-8 -1
+0:1.18.36 1.18.36 0
+
+# Funky, but allowed, characters in upstream version
+9:1.18.36:5.4-20 10:0.5.1-22 -1
+9:1.18.36:5.4-20 9:1.18.36:5.5-1 -1
+9:1.18.36:5.4-20 9:1.18.37:4.3-22 -1
+1.18.36-0.17.35-18 1.18.36-19 1
 
 
 # Junk
 # Junk
 1:1.2.13-3 1:1.2.13-3.1 -1
 1:1.2.13-3 1:1.2.13-3.1 -1