Просмотр исходного кода

Merge with Michael and resolve conflicts

bubulle@debian.org лет назад: 20
Родитель
Сommit
3784e34677
55 измененных файлов с 1753 добавлено и 880 удалено
  1. 2 1
      apt-inst/contrib/extracttar.cc
  2. 1 1
      apt-pkg/acquire-item.cc
  3. 1 0
      apt-pkg/contrib/hashes.cc
  4. 3 1
      apt-pkg/contrib/hashes.h
  5. 424 0
      apt-pkg/contrib/sha256.cc
  6. 75 0
      apt-pkg/contrib/sha256.h
  7. 7 1
      apt-pkg/deb/dpkgpm.cc
  8. 2 2
      apt-pkg/makefile
  9. 101 17
      apt-pkg/tagfile.cc
  10. 4 1
      apt-pkg/tagfile.h
  11. 75 57
      cmdline/apt-get.cc
  12. 1 1
      configure.in
  13. 67 11
      debian/changelog
  14. 1 1
      debian/control
  15. 1 1
      doc/apt-cache.8.xml
  16. 1 1
      doc/apt-get.8.xml
  17. 1 0
      doc/apt.ent
  18. 1 0
      doc/examples/configure-index
  19. 224 45
      ftparchive/cachedb.cc
  20. 30 10
      ftparchive/cachedb.h
  21. 60 44
      ftparchive/writer.cc
  22. 6 2
      ftparchive/writer.h
  23. 7 1
      methods/gpgv.cc
  24. 1 1
      methods/http.cc
  25. 93 82
      po/apt-all.pot
  26. 4 4
      po/bg.po
  27. 4 4
      po/bs.po
  28. 4 4
      po/ca.po
  29. 4 4
      po/cs.po
  30. 4 4
      po/cy.po
  31. 4 4
      po/da.po
  32. 4 4
      po/de.po
  33. 4 4
      po/el.po
  34. 4 4
      po/en_GB.po
  35. 4 4
      po/es.po
  36. 4 4
      po/fr.po
  37. 5 5
      po/gl.po
  38. 216 239
      po/hu.po
  39. 4 4
      po/it.po
  40. 4 4
      po/ja.po
  41. 194 232
      po/ko.po
  42. 4 4
      po/nb.po
  43. 4 4
      po/nl.po
  44. 4 4
      po/nn.po
  45. 4 4
      po/pl.po
  46. 4 4
      po/pt.po
  47. 4 4
      po/pt_BR.po
  48. 42 22
      po/ro.po
  49. 4 4
      po/ru.po
  50. 4 5
      po/sk.po
  51. 4 4
      po/sl.po
  52. 4 4
      po/tl.po
  53. 4 4
      po/zh_CN.po
  54. 4 4
      po/zh_TW.po
  55. 7 0
      test/hash.cc

+ 2 - 1
apt-inst/contrib/extracttar.cc

@@ -136,7 +136,8 @@ bool ExtractTar::StartGzip()
       
       
       const char *Args[3];
       const char *Args[3];
       string confvar = string("dir::bin::") + DecompressProg;
       string confvar = string("dir::bin::") + DecompressProg;
-      Args[0] = _config->Find(confvar.c_str(),DecompressProg.c_str()).c_str();
+      string argv0 = _config->Find(confvar.c_str(),DecompressProg.c_str());
+      Args[0] = argv0.c_str();
       Args[1] = "-d";
       Args[1] = "-d";
       Args[2] = 0;
       Args[2] = 0;
       execvp(Args[0],(char **)Args);
       execvp(Args[0],(char **)Args);

+ 1 - 1
apt-pkg/acquire-item.cc

@@ -149,7 +149,7 @@ pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner,
    if(comprExt.empty()) 
    if(comprExt.empty()) 
    {
    {
       // autoselect the compression method
       // autoselect the compression method
-      if(FileExists("/usr/bin/bzip2")) 
+      if(FileExists("/bin/bzip2")) 
 	 CompressionExtension = ".bz2";
 	 CompressionExtension = ".bz2";
       else 
       else 
 	 CompressionExtension = ".gz";
 	 CompressionExtension = ".gz";

+ 1 - 0
apt-pkg/contrib/hashes.cc

@@ -36,6 +36,7 @@ bool Hashes::AddFD(int Fd,unsigned long Size)
       Size -= Res;
       Size -= Res;
       MD5.Add(Buf,Res);
       MD5.Add(Buf,Res);
       SHA1.Add(Buf,Res);
       SHA1.Add(Buf,Res);
+      SHA256.Add(Buf,Res);
    }
    }
    return true;
    return true;
 }
 }

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

@@ -19,6 +19,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 <algorithm>
 #include <algorithm>
 
 
@@ -30,10 +31,11 @@ class Hashes
 
 
    MD5Summation MD5;
    MD5Summation MD5;
    SHA1Summation SHA1;
    SHA1Summation SHA1;
+   SHA256Summation SHA256;
    
    
    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);
+      return MD5.Add(Data,Size) && SHA1.Add(Data,Size) && SHA256.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);
    bool AddFD(int Fd,unsigned long Size);

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

@@ -0,0 +1,424 @@
+/*
+ * 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.
+ *
+ */
+#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;
+}
+                                                                       /*}}}*/
+

+ 75 - 0
apt-pkg/contrib/sha256.h

@@ -0,0 +1,75 @@
+// -*- 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
+#define APTPKG_SHA256_H
+
+#ifdef __GNUG__
+#pragma interface "apt-pkg/sha256.h"
+#endif 
+
+#include <string>
+#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:
+
+   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();
+};
+
+#endif

+ 7 - 1
apt-pkg/deb/dpkgpm.cc

@@ -624,7 +624,13 @@ bool pkgDPkgPM::Go(int OutStatusFd)
 	    
 	    
 	 */
 	 */
 	 char* list[5];
 	 char* list[5];
-	 TokSplitString(':', line, list, sizeof(list)/sizeof(list[0]));
+	 if(!TokSplitString(':', line, list, sizeof(list)/sizeof(list[0])))
+	    // FIXME: dpkg sends multiline error messages sometimes (see
+	    //        #374195 for a example. we should support this by
+	    //        either patching dpkg to not send multiline over the
+	    //        statusfd or by rewriting the code here to deal with
+	    //        it. for now we just ignore it and not crash
+	    continue;
 	 char *pkg = list[1];
 	 char *pkg = list[1];
 	 char *action = _strstrip(list[2]);
 	 char *action = _strstrip(list[2]);
 
 

+ 2 - 2
apt-pkg/makefile

@@ -21,11 +21,11 @@ APT_DOMAIN:=libapt-pkg$(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/hashes.cc \
+	 contrib/md5.cc contrib/sha1.cc contrib/sha256.cc contrib/hashes.cc \
 	 contrib/cdromutl.cc contrib/crc-16.cc \
 	 contrib/cdromutl.cc contrib/crc-16.cc \
 	 contrib/fileutl.cc 
 	 contrib/fileutl.cc 
 HEADERS = mmap.h error.h configuration.h fileutl.h  cmndline.h \
 HEADERS = mmap.h error.h configuration.h fileutl.h  cmndline.h \
-	  md5.h crc-16.h cdromutl.h strutl.h sptr.h sha1.h hashes.h
+	  md5.h crc-16.h cdromutl.h strutl.h sptr.h sha1.h sha256.h hashes.h
 
 
 # Source code for the core main library
 # Source code for the core main library
 SOURCE+= pkgcache.cc version.cc depcache.cc \
 SOURCE+= pkgcache.cc version.cc depcache.cc \

+ 101 - 17
apt-pkg/tagfile.cc

@@ -33,21 +33,32 @@ using std::string;
 /* */
 /* */
 pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) :
 pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) :
      Fd(*pFd),
      Fd(*pFd),
-     Size(Size)
+     Size(Size),
+     Map(NULL),
+     Buffer(0)
 {
 {
-   if (Fd.IsOpen() == false || Fd.Size() == 0)
+   if (Fd.IsOpen() == false)
    {
    {
-      Buffer = 0;
       Start = End = Buffer = 0;
       Start = End = Buffer = 0;
+      Done = true;
       iOffset = 0;
       iOffset = 0;
       Map = NULL;
       Map = NULL;
       return;
       return;
    }
    }
    
    
-   Map = new MMap (Fd, MMap::Public | MMap::ReadOnly);
-   Buffer = (char *) Map->Data ();
-   Start = Buffer;
-   End = Buffer + Map->Size ();
+   // check if we can MMap it
+   if(Fd.Size() == 0)
+   {
+      Buffer = new char[Size];
+      Start = End = Buffer;
+      Done = false;
+      Fill();
+   } else {
+      Map = new MMap (Fd, MMap::Public | MMap::ReadOnly);
+      Buffer = (char *) Map->Data ();
+      Start = Buffer;
+      End = Buffer + Map->Size ();
+   }
    iOffset = 0;
    iOffset = 0;
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -56,6 +67,7 @@ pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) :
 /* */
 /* */
 pkgTagFile::~pkgTagFile()
 pkgTagFile::~pkgTagFile()
 {
 {
+   if(!Map) delete [] Buffer;
    delete Map;
    delete Map;
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -64,18 +76,70 @@ 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)
+   if ((Map != NULL) && (Start == End))
       return false;
       return false;
 
 
    if (Tag.Scan(Start,End - Start) == false)
    if (Tag.Scan(Start,End - Start) == false)
    {
    {
-      return _error->Error(_("Unable to parse package file %s (1)"),
-	      Fd.Name().c_str());
+      if (Map != NULL)
+	 return _error->Error(_("Unable to parse package file %s (1)"),
+			      Fd.Name().c_str());
+
+      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());
    }
    }
    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;
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -94,12 +158,31 @@ bool pkgTagFile::Jump(pkgTagSection &Tag,unsigned long Offset)
       return Step(Tag);
       return Step(Tag);
    }
    }
 
 
-   // Reposition and reload..
    iOffset = Offset;
    iOffset = Offset;
-   Start = Buffer + iOffset;
+   if (Map != NULL)
+   {
+      Start = Buffer + iOffset;
+   } 
+   else 
+   {
+      // Reposition and reload..
+      Done = false;
+      if (Fd.Seek(Offset) == false)
+	 return false;
+      End = Start = Buffer;
    
    
-   // Start != End is a special case to not fail on empty TagFiles
-   if (Start != End && Tag.Scan(Start,End - Start) == false)
+      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;
+   }
+
+   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());
    
    
    return true;
    return true;
@@ -157,8 +240,8 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength)
 
 
    if ((Stop+1 >= End) && (End[-1] == '\n' || End[-1] == '\r'))
    if ((Stop+1 >= End) && (End[-1] == '\n' || End[-1] == '\r'))
    {
    {
-       Indexes[TagCount] = (End - 1) - Section;
-       return true;
+      Indexes[TagCount] = (End - 1) - Section;
+      return true;
    }
    }
 
 
    return false;
    return false;
@@ -343,7 +426,8 @@ static const char *iTFRewritePackageOrder[] = {
                           "Filename",
                           "Filename",
                           "Size",
                           "Size",
                           "MD5Sum",
                           "MD5Sum",
-                          "SHA1Sum",
+                          "SHA1",
+                          "SHA256",
                            "MSDOS-Filename",   // Obsolete
                            "MSDOS-Filename",   // Obsolete
                           "Description",
                           "Description",
                           0};
                           0};

+ 4 - 1
apt-pkg/tagfile.h

@@ -74,16 +74,19 @@ class pkgTagFile
    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);
    inline unsigned long Offset() {return iOffset;};
    inline unsigned long Offset() {return iOffset;};
    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 = 64*1024);
    ~pkgTagFile();
    ~pkgTagFile();
 };
 };
 
 

+ 75 - 57
cmdline/apt-get.cc

@@ -1609,68 +1609,86 @@ bool DoInstall(CommandLine &CmdL)
       string SuggestsVersions, RecommendsVersions;
       string SuggestsVersions, RecommendsVersions;
       for (unsigned J = 0; J < Cache->Head().PackageCount; J++)
       for (unsigned J = 0; J < Cache->Head().PackageCount; J++)
       {
       {
-	 pkgCache::PkgIterator I(Cache,Cache.List[J]);
+	 pkgCache::PkgIterator Pkg(Cache,Cache.List[J]);
 
 
 	 /* Just look at the ones we want to install */
 	 /* Just look at the ones we want to install */
-	 if ((*Cache)[I].Install() == false)
+	 if ((*Cache)[Pkg].Install() == false)
 	   continue;
 	   continue;
 
 
-	 for (pkgCache::VerIterator V = I.VersionList(); V.end() == false; V++)
-         {
-	     for (pkgCache::DepIterator D = V.DependsList(); D.end() == false; )
-             {
-		 pkgCache::DepIterator Start;
-		 pkgCache::DepIterator End;
-		 D.GlobOr(Start,End); // advances D
-
-		 /* 
-		  * If this is a virtual package, we need to check the list of
-		  * packages that provide it and see if any of those are
-		  * installed
-		  */
-		 
-		 bool providedBySomething = false;
-		 for (pkgCache::PrvIterator Prv = Start.TargetPkg().ProvidesList();
-                      Prv.end() != true;
-                      Prv++)
-		    if ((*Cache)[Prv.OwnerPkg()].InstVerIter(*Cache).end() == false)
-                    {
-		       providedBySomething = true;
-		       break;
-		    }
-
-		 if (providedBySomething) continue;
-            
-                 for(;;)
-                 {
-                     /* Skip if package is  installed already, or is about to be */
-                     string target = string(Start.TargetPkg().Name()) + " ";
-
-                     if ((*Start.TargetPkg()).SelectedState == pkgCache::State::Install
-                         || Cache[Start.TargetPkg()].Install())
-                       break;
-
-                     /* Skip if we already saw it */
-                     if (int(SuggestsList.find(target)) != -1 || int(RecommendsList.find(target)) != -1)
-                       break; 
-
-		     if (Start->Type == pkgCache::Dep::Suggests) {
-		       SuggestsList += target;
-		       SuggestsVersions += string(Cache[Start.TargetPkg()].CandVersion) + "\n";
-		     }
-		     
-		     if (Start->Type == pkgCache::Dep::Recommends) {
-		       RecommendsList += target;
-		       RecommendsVersions += string(Cache[Start.TargetPkg()].CandVersion) + "\n";
-		     }
-
-                     if (Start >= End)
-                        break;
-                     Start++;
-                 }
-             }
-         }
+	 // get the recommends/suggests for the candidate ver
+	 pkgCache::VerIterator CV = (*Cache)[Pkg].CandidateVerIter(*Cache);
+	 for (pkgCache::DepIterator D = CV.DependsList(); D.end() == false; )
+	 {
+	    pkgCache::DepIterator Start;
+	    pkgCache::DepIterator End;
+	    D.GlobOr(Start,End); // advances D
+
+	    // FIXME: we really should display a or-group as a or-group to the user
+	    //        the problem is that ShowList is incapable of doing this
+	    string RecommendsOrList,RecommendsOrVersions;
+	    string SuggestsOrList,SuggestsOrVersions;
+	    bool foundInstalledInOrGroup = false;
+	    for(;;)
+	    {
+	       /* Skip if package is  installed already, or is about to be */
+	       string target = string(Start.TargetPkg().Name()) + " ";
+	       
+	       if ((*Start.TargetPkg()).SelectedState == pkgCache::State::Install
+		   || Cache[Start.TargetPkg()].Install())
+	       {
+		  foundInstalledInOrGroup=true;
+		  break;
+	       }
+
+	       /* Skip if we already saw it */
+	       if (int(SuggestsList.find(target)) != -1 || int(RecommendsList.find(target)) != -1)
+	       {
+		  foundInstalledInOrGroup=true;
+		  break; 
+	       }
+
+	       // this is a dep on a virtual pkg, check if any package that provides it
+	       // should be installed
+	       if(Start.TargetPkg().ProvidesList() != 0)
+	       {
+		  pkgCache::PrvIterator I = Start.TargetPkg().ProvidesList();
+		  for (; I.end() == false; I++)
+		  {
+		     pkgCache::PkgIterator Pkg = I.OwnerPkg();
+		     if (Cache[Pkg].CandidateVerIter(Cache) == I.OwnerVer() && 
+			 Pkg.CurrentVer() != 0)
+			foundInstalledInOrGroup=true;
+		  }
+	       }
+
+	       if (Start->Type == pkgCache::Dep::Suggests) 
+	       {
+		  SuggestsOrList += target;
+		  SuggestsOrVersions += string(Cache[Start.TargetPkg()].CandVersion) + "\n";
+	       }
+	       
+	       if (Start->Type == pkgCache::Dep::Recommends) 
+	       {
+		  RecommendsOrList += target;
+		  RecommendsOrVersions += string(Cache[Start.TargetPkg()].CandVersion) + "\n";
+	       }
+
+	       if (Start >= End)
+		  break;
+	       Start++;
+	    }
+	    
+	    if(foundInstalledInOrGroup == false)
+	    {
+	       RecommendsList += RecommendsOrList;
+	       RecommendsVersions += RecommendsOrVersions;
+	       SuggestsList += SuggestsOrList;
+	       SuggestsVersions += SuggestsOrVersions;
+	    }
+	       
+	 }
       }
       }
+
       ShowList(c1out,_("Suggested packages:"),SuggestsList,SuggestsVersions);
       ShowList(c1out,_("Suggested packages:"),SuggestsList,SuggestsVersions);
       ShowList(c1out,_("Recommended packages:"),RecommendsList,RecommendsVersions);
       ShowList(c1out,_("Recommended packages:"),RecommendsList,RecommendsVersions);
 
 

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

+ 67 - 11
debian/changelog

@@ -1,18 +1,74 @@
-apt (0.6.44.2) unstable; urgency=low
+apt (0.6.45.1) unstable; urgency=low
 
 
-  * apt-pkg/depcache.cc:
-    - added Debug::pkgDepCache::AutoInstall (thanks to infinity)
-  * merged from 
-    http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main:
-  	* sk.po: Completed to 512t
-	* eu.po: Completed to 512t
-	* fr.po: Completed to 512t
-	* sv.po: Completed to 512t
-	* Update all PO and the POT. Gives 506t6f for formerly
-	  complete translations
+  * debian/control:
+    - switched to libdb4.4 for building (closes: #381019)
+  * cmdline/apt-get.cc:
+    - show only the recommends/suggests for the candidate-version, not for all
+      versions of the package (closes: #257054)
+    - properly handle recommends/suggests or-groups when printing the list of
+      suggested/recommends packages (closes: #311619)
+  * methods/http.cc:
+    - check more careful for incorrect proxy settings (closes: #378868)
 
 
  --
  --
 
 
+apt (0.6.45) unstable; urgency=low
+
+  * apt-pkg/contrib/sha256.cc:
+    - fixed the sha256 generation (closes: #378183)
+  * ftparchive/cachedb.cc:
+    - applied patch from Anthony Towns to fix Clean() function
+      (closes: #379576)
+  * doc/apt-get.8.xml:
+    - fix path to the apt user build (Closes: #375640)
+  * doc/apt-cache.8.xml:
+    - typo (Closes: #376408)
+  * apt-pkg/deb/dpkgpm.cc:
+    - make progress reporting more robust against multiline error
+      messages (first half of a fix for #374195)
+  * doc/examples/configure-index:
+    - document Debug::pkgAcquire::Auth     
+  * methods/gpgv.cc:
+    - deal with gpg error "NODATA". Closes: #296103, Thanks to 
+      Luis Rodrigo Gallardo Cruz for the patch
+  * apt-inst/contrib/extracttar.cc:
+    - fix for string mangling, closes: #373864
+  * apt-pkg/acquire-item.cc:
+    - check for bzip2 in /bin (closes: #377391)
+  * apt-pkg/tagfile.cc:
+    - make it work on non-mapable files again, thanks 
+      to James Troup for confirming the fix (closes: #376777)
+  * Merged from Christian Perrier bzr branch:
+    * ko.po: Updated to 512t. Closes: #378901
+    * hu.po: Updated to 512t. Closes: #376330
+    * km.po: New Khmer translation: 506t6f. Closes: #375068
+    * ne.po: New Nepali translation: 512t. Closes: #373729
+    * vi.po: Updated to 512t. Closes: #368038
+    * zh_TW.po: Remove an extra %s in one string. Closes: #370551
+    * dz.po: New Dzongkha translation: 512t
+    * ro.po: Updated to 512t
+    * eu.po: Updated
+
+ -- Michael Vogt <mvo@debian.org>  Thu, 27 Jul 2006 00:52:05 +0200
+
+apt  (0.6.44.2) unstable; urgency=low 
+  
+   * apt-pkg/depcache.cc:
+     - added Debug::pkgDepCache::AutoInstall (thanks to infinity)
+   * apt-pkg/acquire-item.cc:
+     - fix missing chmod() in the new aquire code
+       (thanks to Bastian Blank, Closes: #367425)
+   * merged from
+     http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main:
+     * sk.po: Completed to 512t
+     * eu.po: Completed to 512t
+     * fr.po: Completed to 512t
+     * sv.po: Completed to 512t
+     * Update all PO and the POT. Gives 506t6f for formerly
+       complete translations
+
+ -- Michael Vogt <mvo@debian.org>  Wed, 14 Jun 2006 12:00:57 +0200 
+
 apt (0.6.44.1-0.1) unstable; urgency=low
 apt (0.6.44.1-0.1) unstable; urgency=low
 
 
   * Non-maintainer upload.
   * Non-maintainer upload.

+ 1 - 1
debian/control

@@ -4,7 +4,7 @@ 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.2.2
 Standards-Version: 3.6.2.2
-Build-Depends: debhelper (>= 5.0), libdb4.3-dev, gettext (>= 0.12)
+Build-Depends: debhelper (>= 5.0), libdb4.4-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
doc/apt-cache.8.xml

@@ -277,7 +277,7 @@ Reverse Provides:
      <listitem><para>Select the file to store the source cache. The source is used only by
      <listitem><para>Select the file to store the source cache. The source is used only by
      <literal>gencaches</literal> and it stores a parsed version of the package 
      <literal>gencaches</literal> and it stores a parsed version of the package 
      information from remote sources. When building the package cache the 
      information from remote sources. When building the package cache the 
-     source cache is used to advoid reparsing all of the package files.
+     source cache is used to avoid reparsing all of the package files.
      Configuration Item: <literal>Dir::Cache::srcpkgcache</literal>.</para></listitem>
      Configuration Item: <literal>Dir::Cache::srcpkgcache</literal>.</para></listitem>
      </varlistentry>
      </varlistentry>
 
 

+ 1 - 1
doc/apt-get.8.xml

@@ -468,7 +468,7 @@
  <refsect1><title>See Also</title>
  <refsect1><title>See Also</title>
    <para>&apt-cache;, &apt-cdrom;, &dpkg;, &dselect;, &sources-list;,
    <para>&apt-cache;, &apt-cdrom;, &dpkg;, &dselect;, &sources-list;,
    &apt-conf;, &apt-config;,
    &apt-conf;, &apt-config;,
-   The APT User's guide in &docdir;, &apt-preferences;, the APT Howto.</para>
+   The APT User's guide in &guidesdir;, &apt-preferences;, the APT Howto.</para>
  </refsect1>
  </refsect1>
 
 
  <refsect1><title>Diagnostics</title>
  <refsect1><title>Diagnostics</title>

+ 1 - 0
doc/apt.ent

@@ -2,6 +2,7 @@
 
 
 <!-- Some common paths.. -->
 <!-- Some common paths.. -->
 <!ENTITY docdir "/usr/share/doc/apt/">
 <!ENTITY docdir "/usr/share/doc/apt/">
+<!ENTITY guidesdir "/usr/share/doc/apt-doc/">
 <!ENTITY configureindex "<filename>&docdir;examples/configure-index.gz</filename>">
 <!ENTITY configureindex "<filename>&docdir;examples/configure-index.gz</filename>">
 <!ENTITY aptconfdir "<filename>/etc/apt.conf</filename>">
 <!ENTITY aptconfdir "<filename>/etc/apt.conf</filename>">
 <!ENTITY statedir "/var/lib/apt">
 <!ENTITY statedir "/var/lib/apt">

+ 1 - 0
doc/examples/configure-index

@@ -247,6 +247,7 @@ Debug
   pkgDepCache::AutoInstall "false"; // what packages apt install to satify dependencies
   pkgDepCache::AutoInstall "false"; // what packages apt install to satify dependencies
   pkgAcquire "false";
   pkgAcquire "false";
   pkgAcquire::Worker "false";
   pkgAcquire::Worker "false";
+  pkgAcquire::Auth "false";
   pkgDPkgPM "false";
   pkgDPkgPM "false";
   pkgDPkgProgressReporting "false";
   pkgDPkgProgressReporting "false";
   pkgOrderList "false";
   pkgOrderList "false";

+ 224 - 45
ftparchive/cachedb.cc

@@ -19,6 +19,8 @@
 #include <apti18n.h>
 #include <apti18n.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/md5.h>
 #include <apt-pkg/md5.h>
+#include <apt-pkg/sha1.h>
+#include <apt-pkg/sha256.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/configuration.h>
     
     
@@ -54,7 +56,7 @@ bool CacheDB::ReadyDB(string DB)
       return true;
       return true;
 
 
    db_create(&Dbp, NULL, 0);
    db_create(&Dbp, NULL, 0);
-   if ((err = Dbp->open(Dbp, NULL, DB.c_str(), NULL, DB_HASH,
+   if ((err = Dbp->open(Dbp, NULL, DB.c_str(), NULL, DB_BTREE,
                         (ReadOnly?DB_RDONLY:DB_CREATE),
                         (ReadOnly?DB_RDONLY:DB_CREATE),
                         0644)) != 0)
                         0644)) != 0)
    {
    {
@@ -67,6 +69,12 @@ bool CacheDB::ReadyDB(string DB)
                             (ReadOnly?DB_RDONLY:DB_CREATE), 0644);
                             (ReadOnly?DB_RDONLY:DB_CREATE), 0644);
 
 
       }
       }
+      // the database format has changed from DB_HASH to DB_BTREE in 
+      // apt 0.6.44
+      if (err == EINVAL)
+      {
+	 _error->Error(_("DB format is invalid. If you upgraded from a older version of apt, please remove and re-create the database."));
+      }
       if (err)
       if (err)
       {
       {
           Dbp = 0;
           Dbp = 0;
@@ -79,48 +87,123 @@ bool CacheDB::ReadyDB(string DB)
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
-// CacheDB::SetFile - Select a file to be working with			/*{{{*/
+// CacheDB::OpenFile - Open the filei					/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool CacheDB::OpenFile()
+{
+	Fd = new FileFd(FileName,FileFd::ReadOnly);
+	if (_error->PendingError() == true)
+	{
+		delete Fd;
+		Fd = NULL;
+		return false;
+	}
+	return true;
+}
+									/*}}}*/
+// CacheDB::GetFileStat - Get stats from the file 			/*{{{*/
+// ---------------------------------------------------------------------
+/* This gets the size from the database if it's there.  If we need
+ * to look at the file, also get the mtime from the file. */
+bool CacheDB::GetFileStat()
+{
+	if ((CurStat.Flags & FlSize) == FlSize)
+	{
+		/* Already worked out the file size */
+	}
+	else
+	{
+		/* Get it from the file. */
+		if (Fd == NULL && OpenFile() == false)
+		{
+			return false;
+		}
+		// Stat the file
+		struct stat St;
+		if (fstat(Fd->Fd(),&St) != 0)
+		{
+			return _error->Errno("fstat",
+				_("Failed to stat %s"),FileName.c_str());
+		}
+		CurStat.FileSize = St.st_size;
+		CurStat.mtime = htonl(St.st_mtime);
+		CurStat.Flags |= FlSize;
+	}
+	return true;
+}
+									/*}}}*/
+// CacheDB::GetCurStat - Set the CurStat variable.			/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
-/* All future actions will be performed against this file */
-bool CacheDB::SetFile(string FileName,struct stat St,FileFd *Fd)
+/* Sets the CurStat variable.  Either to 0 if no database is used
+ * or to the value in the database if one is used */
+bool CacheDB::GetCurStat()
 {
 {
-   delete DebFile;
-   DebFile = 0;
-   this->FileName = FileName;
-   this->Fd = Fd;
-   this->FileStat = St;
-   FileStat = St;   
    memset(&CurStat,0,sizeof(CurStat));
    memset(&CurStat,0,sizeof(CurStat));
    
    
-   Stats.Bytes += St.st_size;
-   Stats.Packages++;
-   
-   if (DBLoaded == false)
-      return true;
+	if (DBLoaded)
+	{
+		/* First see if thre is anything about it
+		   in the database */
 
 
+		/* Get the flags (and mtime) */
    InitQuery("st");
    InitQuery("st");
-   
    // Ensure alignment of the returned structure
    // Ensure alignment of the returned structure
    Data.data = &CurStat;
    Data.data = &CurStat;
    Data.ulen = sizeof(CurStat);
    Data.ulen = sizeof(CurStat);
    Data.flags = DB_DBT_USERMEM;
    Data.flags = DB_DBT_USERMEM;
-   // Lookup the stat info and confirm the file is unchanged
-   if (Get() == true)
-   {
-      if (CurStat.mtime != htonl(St.st_mtime))
+		if (Get() == false)
       {
       {
-	 CurStat.mtime = htonl(St.st_mtime);
 	 CurStat.Flags = 0;
 	 CurStat.Flags = 0;
-	 _error->Warning(_("File date has changed %s"),FileName.c_str());
       }      
       }      
+		CurStat.Flags = ntohl(CurStat.Flags);
+		CurStat.FileSize = ntohl(CurStat.FileSize);
    }      
    }      
-   else
+	return true;
+}
+									/*}}}*/
+// CacheDB::GetFileInfo - Get all the info about the file		/*{{{*/
+// ---------------------------------------------------------------------
+bool CacheDB::GetFileInfo(string FileName, bool DoControl, bool DoContents,
+				bool GenContentsOnly, 
+				bool DoMD5, bool DoSHA1, bool DoSHA256)
+{
+	this->FileName = FileName;
+
+	if (GetCurStat() == false)
    {
    {
-      CurStat.mtime = htonl(St.st_mtime);
-      CurStat.Flags = 0;
+		return false;
    }   
    }   
-   CurStat.Flags = ntohl(CurStat.Flags);
    OldStat = CurStat;
    OldStat = CurStat;
+	
+	if (GetFileStat() == false)
+	{
+		delete Fd;
+		Fd = NULL;
+		return false;	
+	}
+
+	Stats.Bytes += CurStat.FileSize;
+	Stats.Packages++;
+
+	if (DoControl && LoadControl() == false
+		|| DoContents && LoadContents(GenContentsOnly) == false
+		|| DoMD5 && GetMD5(false) == false
+		|| DoSHA1 && GetSHA1(false) == false
+		|| DoSHA256 && GetSHA256(false) == false)
+	{
+		delete Fd;
+		Fd = NULL;
+		delete DebFile;
+		DebFile = NULL;
+		return false;	
+	}
+
+	delete Fd;
+	Fd = NULL;
+	delete DebFile;
+	DebFile = NULL;
+
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -139,6 +222,10 @@ bool CacheDB::LoadControl()
       CurStat.Flags &= ~FlControl;
       CurStat.Flags &= ~FlControl;
    }
    }
    
    
+   if (Fd == NULL && OpenFile() == false)
+   {
+      return false;
+   }
    // Create a deb instance to read the archive
    // Create a deb instance to read the archive
    if (DebFile == 0)
    if (DebFile == 0)
    {
    {
@@ -183,6 +270,10 @@ bool CacheDB::LoadContents(bool GenOnly)
       CurStat.Flags &= ~FlContents;
       CurStat.Flags &= ~FlContents;
    }
    }
    
    
+   if (Fd == NULL && OpenFile() == false)
+   {
+      return false;
+   }
    // Create a deb instance to read the archive
    // Create a deb instance to read the archive
    if (DebFile == 0)
    if (DebFile == 0)
    {
    {
@@ -201,10 +292,37 @@ bool CacheDB::LoadContents(bool GenOnly)
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
+
+static string bytes2hex(uint8_t *bytes, size_t length) {
+   char space[65];
+   if (length * 2 > sizeof(space) - 1) length = (sizeof(space) - 1) / 2;
+   for (size_t i = 0; i < length; i++)
+      snprintf(&space[i*2], 3, "%02x", bytes[i]);
+   return string(space);
+}
+
+static inline unsigned char xdig2num(char dig) {
+   if (isdigit(dig)) return dig - '0';
+   if ('a' <= dig && dig <= 'f') return dig - 'a' + 10;
+   if ('A' <= dig && dig <= 'F') return dig - 'A' + 10;
+   return 0;
+}
+
+static void hex2bytes(uint8_t *bytes, const char *hex, int length) {
+   while (length-- > 0) {
+      *bytes = 0;
+      if (isxdigit(hex[0]) && isxdigit(hex[1])) {
+	  *bytes = xdig2num(hex[0]) * 16 + xdig2num(hex[1]);
+	  hex += 2;
+      }
+      bytes++;
+   } 
+}
+
 // CacheDB::GetMD5 - Get the MD5 hash					/*{{{*/
 // CacheDB::GetMD5 - Get the MD5 hash					/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
-bool CacheDB::GetMD5(string &MD5Res,bool GenOnly)
+bool CacheDB::GetMD5(bool GenOnly)
 {
 {
    // Try to read the control information out of the DB.
    // Try to read the control information out of the DB.
    if ((CurStat.Flags & FlMD5) == FlMD5)
    if ((CurStat.Flags & FlMD5) == FlMD5)
@@ -212,28 +330,88 @@ bool CacheDB::GetMD5(string &MD5Res,bool GenOnly)
       if (GenOnly == true)
       if (GenOnly == true)
 	 return true;
 	 return true;
       
       
-      InitQuery("m5");
-      if (Get() == true)
-      {
-	 MD5Res = string((char *)Data.data,Data.size);
+      MD5Res = bytes2hex(CurStat.MD5, sizeof(CurStat.MD5));
 	 return true;
 	 return true;
       }
       }
-      CurStat.Flags &= ~FlMD5;
-   }
    
    
-   Stats.MD5Bytes += FileStat.st_size;
+   Stats.MD5Bytes += CurStat.FileSize;
 	 
 	 
+   if (Fd == NULL && OpenFile() == false)
+   {
+      return false;
+   }
    MD5Summation MD5;
    MD5Summation MD5;
-   if (Fd->Seek(0) == false || MD5.AddFD(Fd->Fd(),FileStat.st_size) == false)
+   if (Fd->Seek(0) == false || MD5.AddFD(Fd->Fd(),CurStat.FileSize) == false)
       return false;
       return false;
    
    
    MD5Res = MD5.Result();
    MD5Res = MD5.Result();
-   InitQuery("m5");
-   if (Put(MD5Res.c_str(),MD5Res.length()) == true)
+   hex2bytes(CurStat.MD5, MD5Res.data(), sizeof(CurStat.MD5));
       CurStat.Flags |= FlMD5;
       CurStat.Flags |= FlMD5;
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
+// CacheDB::GetSHA1 - Get the SHA1 hash					/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool CacheDB::GetSHA1(bool GenOnly)
+{
+   // Try to read the control information out of the DB.
+   if ((CurStat.Flags & FlSHA1) == FlSHA1)
+   {
+      if (GenOnly == true)
+	 return true;
+
+      SHA1Res = bytes2hex(CurStat.SHA1, sizeof(CurStat.SHA1));
+      return true;
+   }
+   
+   Stats.SHA1Bytes += CurStat.FileSize;
+	 
+   if (Fd == NULL && OpenFile() == false)
+   {
+      return false;
+   }
+   SHA1Summation SHA1;
+   if (Fd->Seek(0) == false || SHA1.AddFD(Fd->Fd(),CurStat.FileSize) == false)
+      return false;
+   
+   SHA1Res = SHA1.Result();
+   hex2bytes(CurStat.SHA1, SHA1Res.data(), sizeof(CurStat.SHA1));
+   CurStat.Flags |= FlSHA1;
+   return true;
+}
+									/*}}}*/
+// CacheDB::GetSHA256 - Get the SHA256 hash				/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool CacheDB::GetSHA256(bool GenOnly)
+{
+   // Try to read the control information out of the DB.
+   if ((CurStat.Flags & FlSHA256) == FlSHA256)
+   {
+      if (GenOnly == true)
+	 return true;
+
+      SHA256Res = bytes2hex(CurStat.SHA256, sizeof(CurStat.SHA256));
+      return true;
+   }
+   
+   Stats.SHA256Bytes += CurStat.FileSize;
+	 
+   if (Fd == NULL && OpenFile() == false)
+   {
+      return false;
+   }
+   SHA256Summation SHA256;
+   if (Fd->Seek(0) == false || SHA256.AddFD(Fd->Fd(),CurStat.FileSize) == false)
+      return false;
+   
+   SHA256Res = SHA256.Result();
+   hex2bytes(CurStat.SHA256, SHA256Res.data(), sizeof(CurStat.SHA256));
+   CurStat.Flags |= FlSHA256;
+   return true;
+}
+									/*}}}*/
 // CacheDB::Finish - Write back the cache structure			/*{{{*/
 // CacheDB::Finish - Write back the cache structure			/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
@@ -246,9 +424,12 @@ bool CacheDB::Finish()
    
    
    // Write the stat information
    // Write the stat information
    CurStat.Flags = htonl(CurStat.Flags);
    CurStat.Flags = htonl(CurStat.Flags);
+   CurStat.FileSize = htonl(CurStat.FileSize);
    InitQuery("st");
    InitQuery("st");
    Put(&CurStat,sizeof(CurStat));
    Put(&CurStat,sizeof(CurStat));
    CurStat.Flags = ntohl(CurStat.Flags);
    CurStat.Flags = ntohl(CurStat.Flags);
+   CurStat.FileSize = ntohl(CurStat.FileSize);
+
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -272,16 +453,14 @@ bool CacheDB::Clean()
    memset(&Data,0,sizeof(Data));
    memset(&Data,0,sizeof(Data));
    while ((errno = Cursor->c_get(Cursor,&Key,&Data,DB_NEXT)) == 0)
    while ((errno = Cursor->c_get(Cursor,&Key,&Data,DB_NEXT)) == 0)
    {
    {
-      const char *Colon = (char *)Key.data;
-      for (; Colon != (char *)Key.data+Key.size && *Colon != ':'; Colon++);
-      if ((char *)Key.data+Key.size - Colon > 2)
+      const char *Colon = (char*)memrchr(Key.data, ':', Key.size);
+      if (Colon)
       {
       {
-	 if (stringcmp((char *)Key.data,Colon,"st") == 0 ||
-	     stringcmp((char *)Key.data,Colon,"cn") == 0 ||
-	     stringcmp((char *)Key.data,Colon,"m5") == 0 ||
-	     stringcmp((char *)Key.data,Colon,"cl") == 0)
+         if (stringcmp(Colon + 1, (char *)Key.data+Key.size,"st") == 0 ||
+             stringcmp(Colon + 1, (char *)Key.data+Key.size,"cl") == 0 ||
+             stringcmp(Colon + 1, (char *)Key.data+Key.size,"cn") == 0)
 	 {
 	 {
-	    if (FileExists(string(Colon+1,(const char *)Key.data+Key.size)) == true)
+            if (FileExists(string((const char *)Key.data,Colon)) == true)
 		continue;	     
 		continue;	     
 	 }
 	 }
       }
       }

+ 30 - 10
ftparchive/cachedb.h

@@ -44,7 +44,7 @@ class CacheDB
       memset(&Key,0,sizeof(Key));
       memset(&Key,0,sizeof(Key));
       memset(&Data,0,sizeof(Data));
       memset(&Data,0,sizeof(Data));
       Key.data = TmpKey;
       Key.data = TmpKey;
-      Key.size = snprintf(TmpKey,sizeof(TmpKey),"%s:%s",Type,FileName.c_str());
+      Key.size = snprintf(TmpKey,sizeof(TmpKey),"%s:%s",FileName.c_str(), Type);
    }
    }
    
    
    inline bool Get() 
    inline bool Get() 
@@ -64,19 +64,31 @@ class CacheDB
       }
       }
       return true;
       return true;
    }
    }
+   bool OpenFile();
+   bool GetFileStat();
+   bool GetCurStat();
+   bool LoadControl();
+   bool LoadContents(bool GenOnly);
+   bool GetMD5(bool GenOnly);
+   bool GetSHA1(bool GenOnly);
+   bool GetSHA256(bool GenOnly);
    
    
    // Stat info stored in the DB, Fixed types since it is written to disk.
    // Stat info stored in the DB, Fixed types since it is written to disk.
-   enum FlagList {FlControl = (1<<0),FlMD5=(1<<1),FlContents=(1<<2)};
+   enum FlagList {FlControl = (1<<0),FlMD5=(1<<1),FlContents=(1<<2),
+   	FlSize=(1<<3), FlSHA1=(1<<4), FlSHA256=(1<<5)};
    struct StatStore
    struct StatStore
    {
    {
-      time_t   mtime;          
       uint32_t Flags;
       uint32_t Flags;
+      uint32_t mtime;          
+      uint32_t FileSize;
+      uint8_t  MD5[16];
+      uint8_t  SHA1[20];
+      uint8_t  SHA256[32];
    } CurStat;
    } CurStat;
    struct StatStore OldStat;
    struct StatStore OldStat;
    
    
    // 'set' state
    // 'set' state
    string FileName;
    string FileName;
-   struct stat FileStat;
    FileFd *Fd;
    FileFd *Fd;
    debDebFile *DebFile;
    debDebFile *DebFile;
    
    
@@ -85,34 +97,42 @@ class CacheDB
    // Data collection helpers
    // Data collection helpers
    debDebFile::MemControlExtract Control;
    debDebFile::MemControlExtract Control;
    ContentsExtract Contents;
    ContentsExtract Contents;
+   string MD5Res;
+   string SHA1Res;
+   string SHA256Res;
    
    
    // Runtime statistics
    // Runtime statistics
    struct Stats
    struct Stats
    {
    {
       double Bytes;
       double Bytes;
       double MD5Bytes;
       double MD5Bytes;
+      double SHA1Bytes;
+      double SHA256Bytes;
       unsigned long Packages;
       unsigned long Packages;
       unsigned long Misses;  
       unsigned long Misses;  
       unsigned long DeLinkBytes;
       unsigned long DeLinkBytes;
       
       
-      inline void Add(const Stats &S) {Bytes += S.Bytes; MD5Bytes += S.MD5Bytes;
+      inline void Add(const Stats &S) {
+	 Bytes += S.Bytes; MD5Bytes += S.MD5Bytes; SHA1Bytes += S.SHA1Bytes; 
+	 SHA256Bytes += S.SHA256Bytes;
 	 Packages += S.Packages; Misses += S.Misses; DeLinkBytes += S.DeLinkBytes;};
 	 Packages += S.Packages; Misses += S.Misses; DeLinkBytes += S.DeLinkBytes;};
-      Stats() : Bytes(0), MD5Bytes(0), Packages(0), Misses(0), DeLinkBytes(0) {};
+      Stats() : Bytes(0), MD5Bytes(0), SHA1Bytes(0), SHA256Bytes(0), Packages(0), Misses(0), DeLinkBytes(0) {};
    } Stats;
    } Stats;
    
    
    bool ReadyDB(string DB);
    bool ReadyDB(string DB);
    inline bool DBFailed() {return Dbp != 0 && DBLoaded == false;};
    inline bool DBFailed() {return Dbp != 0 && DBLoaded == false;};
    inline bool Loaded() {return DBLoaded == true;};
    inline bool Loaded() {return DBLoaded == true;};
    
    
+   inline off_t GetFileSize(void) {return CurStat.FileSize;}
+   
    bool SetFile(string FileName,struct stat St,FileFd *Fd);
    bool SetFile(string FileName,struct stat St,FileFd *Fd);
-   bool LoadControl();
-   bool LoadContents(bool GenOnly);
-   bool GetMD5(string &MD5Res,bool GenOnly);
+   bool GetFileInfo(string FileName, bool DoControl, bool DoContents,
+		   bool GenContentsOnly, bool DoMD5, bool DoSHA1, bool DoSHA256);
    bool Finish();   
    bool Finish();   
    
    
    bool Clean();
    bool Clean();
    
    
-   CacheDB(string DB) : Dbp(0), DebFile(0) {ReadyDB(DB);};
+   CacheDB(string DB) : Dbp(0), Fd(NULL), DebFile(0) {ReadyDB(DB);};
    ~CacheDB() {ReadyDB(string()); delete DebFile;};
    ~CacheDB() {ReadyDB(string()); delete DebFile;};
 };
 };
     
     

+ 60 - 44
ftparchive/writer.cc

@@ -23,6 +23,7 @@
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/configuration.h>
 #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/deblistparser.h>
 #include <apt-pkg/deblistparser.h>
 
 
 #include <sys/types.h>
 #include <sys/types.h>
@@ -70,7 +71,7 @@ FTWScanner::FTWScanner()
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* This is the FTW scanner, it processes each directory element in the 
 /* This is the FTW scanner, it processes each directory element in the 
    directory tree. */
    directory tree. */
-int FTWScanner::Scanner(const char *File,const struct stat *sb,int Flag)
+int FTWScanner::ScannerFTW(const char *File,const struct stat *sb,int Flag)
 {
 {
    if (Flag == FTW_DNR)
    if (Flag == FTW_DNR)
    {
    {
@@ -85,6 +86,14 @@ int FTWScanner::Scanner(const char *File,const struct stat *sb,int Flag)
    if (Flag != FTW_F)
    if (Flag != FTW_F)
       return 0;
       return 0;
 
 
+   return ScannerFile(File, true);
+}
+									/*}}}*/
+// FTWScanner::ScannerFile - File Scanner				/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+int FTWScanner::ScannerFile(const char *File, bool ReadLink)
+{
    const char *LastComponent = strrchr(File, '/');
    const char *LastComponent = strrchr(File, '/');
    if (LastComponent == NULL)
    if (LastComponent == NULL)
       LastComponent = File;
       LastComponent = File;
@@ -105,7 +114,8 @@ int FTWScanner::Scanner(const char *File,const struct stat *sb,int Flag)
       given are not links themselves. */
       given are not links themselves. */
    char Jnk[2];
    char Jnk[2];
    Owner->OriginalPath = File;
    Owner->OriginalPath = File;
-   if (Owner->RealPath != 0 && readlink(File,Jnk,sizeof(Jnk)) != -1 &&
+   if (ReadLink && Owner->RealPath != 0 &&
+       readlink(File,Jnk,sizeof(Jnk)) != -1 &&
        realpath(File,Owner->RealPath) != 0)
        realpath(File,Owner->RealPath) != 0)
       Owner->DoPackage(Owner->RealPath);
       Owner->DoPackage(Owner->RealPath);
    else
    else
@@ -154,7 +164,7 @@ bool FTWScanner::RecursiveScan(string Dir)
    
    
    // Do recursive directory searching
    // Do recursive directory searching
    Owner = this;
    Owner = this;
-   int Res = ftw(Dir.c_str(),Scanner,30);
+   int Res = ftw(Dir.c_str(),ScannerFTW,30);
    
    
    // Error treewalking?
    // Error treewalking?
    if (Res != 0)
    if (Res != 0)
@@ -209,12 +219,14 @@ bool FTWScanner::LoadFileList(string Dir,string File)
 	 FileName = Line;
 	 FileName = Line;
       }
       }
       
       
+#if 0
       struct stat St;
       struct stat St;
       int Flag = FTW_F;
       int Flag = FTW_F;
       if (stat(FileName,&St) != 0)
       if (stat(FileName,&St) != 0)
 	 Flag = FTW_NS;
 	 Flag = FTW_NS;
+#endif
 
 
-      if (Scanner(FileName,&St,Flag) != 0)
+      if (ScannerFile(FileName, false) != 0)
 	 break;
 	 break;
    }
    }
   
   
@@ -227,7 +239,7 @@ bool FTWScanner::LoadFileList(string Dir,string File)
 /* */
 /* */
 bool FTWScanner::Delink(string &FileName,const char *OriginalPath,
 bool FTWScanner::Delink(string &FileName,const char *OriginalPath,
 			unsigned long &DeLinkBytes,
 			unsigned long &DeLinkBytes,
-			struct stat &St)
+			off_t FileSize)
 {
 {
    // See if this isn't an internaly prefix'd file name.
    // See if this isn't an internaly prefix'd file name.
    if (InternalPrefix.empty() == false &&
    if (InternalPrefix.empty() == false &&
@@ -243,7 +255,7 @@ bool FTWScanner::Delink(string &FileName,const char *OriginalPath,
 	 
 	 
 	 NewLine(1);
 	 NewLine(1);
 	 ioprintf(c1out, _(" DeLink %s [%s]\n"), (OriginalPath + InternalPrefix.length()),
 	 ioprintf(c1out, _(" DeLink %s [%s]\n"), (OriginalPath + InternalPrefix.length()),
-		    SizeToStr(St.st_size).c_str());
+		    SizeToStr(FileSize).c_str());
 	 c1out << flush;
 	 c1out << flush;
 	 
 	 
 	 if (NoLinkAct == false)
 	 if (NoLinkAct == false)
@@ -269,7 +281,7 @@ bool FTWScanner::Delink(string &FileName,const char *OriginalPath,
 	    }	    
 	    }	    
 	 }
 	 }
 	 
 	 
-	 DeLinkBytes += St.st_size;
+	 DeLinkBytes += FileSize;
 	 if (DeLinkBytes/1024 >= DeLinkLimit)
 	 if (DeLinkBytes/1024 >= DeLinkLimit)
 	    ioprintf(c1out, _(" DeLink limit of %sB hit.\n"), SizeToStr(DeLinkBytes).c_str());      
 	    ioprintf(c1out, _(" DeLink limit of %sB hit.\n"), SizeToStr(DeLinkBytes).c_str());      
       }
       }
@@ -295,6 +307,8 @@ PackagesWriter::PackagesWriter(string DB,string Overrides,string ExtOverrides,
    
    
    // Process the command line options
    // Process the command line options
    DoMD5 = _config->FindB("APT::FTPArchive::MD5",true);
    DoMD5 = _config->FindB("APT::FTPArchive::MD5",true);
+   DoSHA1 = _config->FindB("APT::FTPArchive::SHA1",true);
+   DoSHA256 = _config->FindB("APT::FTPArchive::SHA256",true);
    DoContents = _config->FindB("APT::FTPArchive::Contents",true);
    DoContents = _config->FindB("APT::FTPArchive::Contents",true);
    NoOverride = _config->FindB("APT::FTPArchive::NoOverrideMsg",false);
    NoOverride = _config->FindB("APT::FTPArchive::NoOverrideMsg",false);
 
 
@@ -343,29 +357,19 @@ bool FTWScanner::SetExts(string Vals)
 // PackagesWriter::DoPackage - Process a single package			/*{{{*/
 // PackagesWriter::DoPackage - Process a single package			/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* This method takes a package and gets its control information and 
 /* This method takes a package and gets its control information and 
-   MD5 then writes out a control record with the proper fields rewritten
-   and the path/size/hash appended. */
+   MD5, SHA1 and SHA256 then writes out a control record with the proper fields 
+   rewritten and the path/size/hash appended. */
 bool PackagesWriter::DoPackage(string FileName)
 bool PackagesWriter::DoPackage(string FileName)
 {      
 {      
-   // Open the archive
-   FileFd F(FileName,FileFd::ReadOnly);
-   if (_error->PendingError() == true)
-      return false;
-   
-   // Stat the file for later
-   struct stat St;
-   if (fstat(F.Fd(),&St) != 0)
-      return _error->Errno("fstat",_("Failed to stat %s"),FileName.c_str());
-
    // Pull all the data we need form the DB
    // Pull all the data we need form the DB
-   string MD5Res;
-   if (Db.SetFile(FileName,St,&F) == false ||
-       Db.LoadControl() == false ||
-       (DoContents == true && Db.LoadContents(true) == false) ||
-       (DoMD5 == true && Db.GetMD5(MD5Res,false) == false))
+   if (Db.GetFileInfo(FileName, true, DoContents, true, DoMD5, DoSHA1, DoSHA256) 
+		  == false)
+   {
       return false;
       return false;
+   }
 
 
-   if (Delink(FileName,OriginalPath,Stats.DeLinkBytes,St) == false)
+   off_t FileSize = Db.GetFileSize();
+   if (Delink(FileName,OriginalPath,Stats.DeLinkBytes,FileSize) == false)
       return false;
       return false;
    
    
    // Lookup the overide information
    // Lookup the overide information
@@ -400,7 +404,7 @@ bool PackagesWriter::DoPackage(string FileName)
    }
    }
 
 
    char Size[40];
    char Size[40];
-   sprintf(Size,"%lu",St.st_size);
+   sprintf(Size,"%lu", (unsigned long) FileSize);
    
    
    // Strip the DirStrip prefix from the FileName and add the PathPrefix
    // Strip the DirStrip prefix from the FileName and add the PathPrefix
    string NewFileName;
    string NewFileName;
@@ -420,7 +424,9 @@ bool PackagesWriter::DoPackage(string FileName)
 
 
    unsigned int End = 0;
    unsigned int End = 0;
    SetTFRewriteData(Changes[End++], "Size", Size);
    SetTFRewriteData(Changes[End++], "Size", Size);
-   SetTFRewriteData(Changes[End++], "MD5sum", MD5Res.c_str());
+   SetTFRewriteData(Changes[End++], "MD5sum", Db.MD5Res.c_str());
+   SetTFRewriteData(Changes[End++], "SHA1", Db.SHA1Res.c_str());
+   SetTFRewriteData(Changes[End++], "SHA256", Db.SHA256Res.c_str());
    SetTFRewriteData(Changes[End++], "Filename", NewFileName.c_str());
    SetTFRewriteData(Changes[End++], "Filename", NewFileName.c_str());
    SetTFRewriteData(Changes[End++], "Priority", OverItem->Priority.c_str());
    SetTFRewriteData(Changes[End++], "Priority", OverItem->Priority.c_str());
    SetTFRewriteData(Changes[End++], "Status", 0);
    SetTFRewriteData(Changes[End++], "Status", 0);
@@ -491,6 +497,10 @@ SourcesWriter::SourcesWriter(string BOverrides,string SOverrides,
    else
    else
       NoOverride = true;
       NoOverride = true;
 
 
+   // WTF?? The logic above: if we can't read binary overrides, don't even try
+   // reading source overrides. if we can read binary overrides, then say there
+   // are no overrides. THIS MAKES NO SENSE! -- ajt@d.o, 2006/02/28
+
    if (ExtOverrides.empty() == false)
    if (ExtOverrides.empty() == false)
       SOver.ReadExtraOverride(ExtOverrides);
       SOver.ReadExtraOverride(ExtOverrides);
    
    
@@ -607,12 +617,14 @@ bool SourcesWriter::DoPackage(string FileName)
    }
    }
    
    
    auto_ptr<Override::Item> SOverItem(SOver.GetItem(Tags.FindS("Source")));
    auto_ptr<Override::Item> SOverItem(SOver.GetItem(Tags.FindS("Source")));
-   const auto_ptr<Override::Item> autoSOverItem(SOverItem);
+   // const auto_ptr<Override::Item> autoSOverItem(SOverItem);
    if (SOverItem.get() == 0)
    if (SOverItem.get() == 0)
    {
    {
+      ioprintf(c1out, _("  %s has no source override entry\n"), Tags.FindS("Source").c_str());
       SOverItem = auto_ptr<Override::Item>(BOver.GetItem(Tags.FindS("Source")));
       SOverItem = auto_ptr<Override::Item>(BOver.GetItem(Tags.FindS("Source")));
       if (SOverItem.get() == 0)
       if (SOverItem.get() == 0)
       {
       {
+        ioprintf(c1out, _("  %s has no binary override entry either\n"), Tags.FindS("Source").c_str());
 	 SOverItem = auto_ptr<Override::Item>(new Override::Item);
 	 SOverItem = auto_ptr<Override::Item>(new Override::Item);
 	 *SOverItem = *OverItem;
 	 *SOverItem = *OverItem;
       }
       }
@@ -657,7 +669,7 @@ bool SourcesWriter::DoPackage(string FileName)
 	  realpath(OriginalPath.c_str(),RealPath) != 0)
 	  realpath(OriginalPath.c_str(),RealPath) != 0)
       {
       {
 	 string RP = RealPath;
 	 string RP = RealPath;
-	 if (Delink(RP,OriginalPath.c_str(),Stats.DeLinkBytes,St) == false)
+	 if (Delink(RP,OriginalPath.c_str(),Stats.DeLinkBytes,St.st_size) == false)
 	    return false;
 	    return false;
       }
       }
    }
    }
@@ -727,26 +739,14 @@ ContentsWriter::ContentsWriter(string DB) :
    determine what the package name is. */
    determine what the package name is. */
 bool ContentsWriter::DoPackage(string FileName,string Package)
 bool ContentsWriter::DoPackage(string FileName,string Package)
 {
 {
-   // Open the archive
-   FileFd F(FileName,FileFd::ReadOnly);
-   if (_error->PendingError() == true)
-      return false;
-   
-   // Stat the file for later
-   struct stat St;
-   if (fstat(F.Fd(),&St) != 0)
-      return _error->Errno("fstat","Failed too stat %s",FileName.c_str());
-
-   // Ready the DB
-   if (Db.SetFile(FileName,St,&F) == false || 
-       Db.LoadContents(false) == false)
+   if (!Db.GetFileInfo(FileName, Package.empty(), true, false, false, false, false))
+   {
       return false;
       return false;
+   }
 
 
    // Parse the package name
    // Parse the package name
    if (Package.empty() == true)
    if (Package.empty() == true)
    {
    {
-      if (Db.LoadControl() == false)
-	 return false;
       Package = Db.Control.Section.FindS("Package");
       Package = Db.Control.Section.FindS("Package");
    }
    }
 
 
@@ -896,6 +896,11 @@ bool ReleaseWriter::DoPackage(string FileName)
    SHA1.AddFD(fd.Fd(), fd.Size());
    SHA1.AddFD(fd.Fd(), fd.Size());
    CheckSums[NewFileName].SHA1 = SHA1.Result();
    CheckSums[NewFileName].SHA1 = SHA1.Result();
 
 
+   fd.Seek(0);
+   SHA256Summation SHA256;
+   SHA256.AddFD(fd.Fd(), fd.Size());
+   CheckSums[NewFileName].SHA256 = SHA256.Result();
+
    fd.Close();
    fd.Close();
    
    
    return true;
    return true;
@@ -927,5 +932,16 @@ void ReleaseWriter::Finish()
               (*I).second.size,
               (*I).second.size,
               (*I).first.c_str());
               (*I).first.c_str());
    }
    }
+
+   fprintf(Output, "SHA256:\n");
+   for(map<string,struct CheckSum>::iterator I = CheckSums.begin();
+       I != CheckSums.end();
+       ++I)
+   {
+      fprintf(Output, " %s %16ld %s\n",
+              (*I).second.SHA256.c_str(),
+              (*I).second.size,
+              (*I).first.c_str());
+   }
 }
 }
 
 

+ 6 - 2
ftparchive/writer.h

@@ -45,10 +45,11 @@ class FTWScanner
    bool NoLinkAct;
    bool NoLinkAct;
    
    
    static FTWScanner *Owner;
    static FTWScanner *Owner;
-   static int Scanner(const char *File,const struct stat *sb,int Flag);
+   static int ScannerFTW(const char *File,const struct stat *sb,int Flag);
+   static int ScannerFile(const char *File, bool ReadLink);
 
 
    bool Delink(string &FileName,const char *OriginalPath,
    bool Delink(string &FileName,const char *OriginalPath,
-	       unsigned long &Bytes,struct stat &St);
+	       unsigned long &Bytes,off_t FileSize);
 
 
    inline void NewLine(unsigned Priority)
    inline void NewLine(unsigned Priority)
    {
    {
@@ -84,6 +85,8 @@ class PackagesWriter : public FTWScanner
 
 
    // Some flags
    // Some flags
    bool DoMD5;
    bool DoMD5;
+   bool DoSHA1;
+   bool DoSHA256;
    bool NoOverride;
    bool NoOverride;
    bool DoContents;
    bool DoContents;
 
 
@@ -170,6 +173,7 @@ protected:
    {
    {
       string MD5;
       string MD5;
       string SHA1;
       string SHA1;
+      string SHA256;
       // Limited by FileFd::Size()
       // Limited by FileFd::Size()
       unsigned long size;
       unsigned long size;
       ~CheckSum() {};
       ~CheckSum() {};

+ 7 - 1
methods/gpgv.cc

@@ -17,6 +17,7 @@
 #define GNUPGBADSIG "[GNUPG:] BADSIG"
 #define GNUPGBADSIG "[GNUPG:] BADSIG"
 #define GNUPGNOPUBKEY "[GNUPG:] NO_PUBKEY"
 #define GNUPGNOPUBKEY "[GNUPG:] NO_PUBKEY"
 #define GNUPGVALIDSIG "[GNUPG:] VALIDSIG"
 #define GNUPGVALIDSIG "[GNUPG:] VALIDSIG"
+#define GNUPGNODATA "[GNUPG:] NODATA"
 
 
 class GPGVMethod : public pkgAcqMethod
 class GPGVMethod : public pkgAcqMethod
 {
 {
@@ -171,7 +172,12 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile,
             std::cerr << "Got NO_PUBKEY " << std::endl;
             std::cerr << "Got NO_PUBKEY " << std::endl;
          NoPubKeySigners.push_back(string(buffer+sizeof(GNUPGPREFIX)));
          NoPubKeySigners.push_back(string(buffer+sizeof(GNUPGPREFIX)));
       }
       }
-
+      if (strncmp(buffer, GNUPGNODATA, sizeof(GNUPGBADSIG)-1) == 0)
+      {
+         if (_config->FindB("Debug::Acquire::gpgv", false))
+            std::cerr << "Got NODATA! " << std::endl;
+         BadSigners.push_back(string(buffer+sizeof(GNUPGPREFIX)));
+      }
       if (strncmp(buffer, GNUPGVALIDSIG, sizeof(GNUPGVALIDSIG)-1) == 0)
       if (strncmp(buffer, GNUPGVALIDSIG, sizeof(GNUPGVALIDSIG)-1) == 0)
       {
       {
          char *sig = buffer + sizeof(GNUPGPREFIX);
          char *sig = buffer + sizeof(GNUPGPREFIX);

+ 1 - 1
methods/http.cc

@@ -657,7 +657,7 @@ void HttpMethod::SendReq(FetchItem *Itm,CircleBuf &Out)
       will glitch HTTP/1.0 proxies because they do not filter it out and 
       will glitch HTTP/1.0 proxies because they do not filter it out and 
       pass it on, HTTP/1.1 says the connection should default to keep alive
       pass it on, HTTP/1.1 says the connection should default to keep alive
       and we expect the proxy to do this */
       and we expect the proxy to do this */
-   if (Proxy.empty() == true)
+   if (Proxy.empty() == true || Proxy.Host.empty())
       sprintf(Buf,"GET %s HTTP/1.1\r\nHost: %s\r\nConnection: keep-alive\r\n",
       sprintf(Buf,"GET %s HTTP/1.1\r\nHost: %s\r\nConnection: keep-alive\r\n",
 	      QuoteString(Uri.Path,"~").c_str(),ProperHost.c_str());
 	      QuoteString(Uri.Path,"~").c_str(),ProperHost.c_str());
    else
    else

+ 93 - 82
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-05-27 13:46+0200\n"
+"POT-Creation-Date: 2006-08-09 16:17+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"
@@ -148,7 +148,7 @@ msgstr ""
 
 
 #: cmdline/apt-cache.cc:1652 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:2369 cmdline/apt-sortpkgs.cc:144
+#: cmdline/apt-get.cc:2380 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 ""
@@ -327,115 +327,126 @@ msgstr ""
 msgid "Some files are missing in the package file group `%s'"
 msgid "Some files are missing in the package file group `%s'"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/cachedb.cc:45
+#: ftparchive/cachedb.cc:47
 #, c-format
 #, c-format
 msgid "DB was corrupted, file renamed to %s.old"
 msgid "DB was corrupted, file renamed to %s.old"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/cachedb.cc:63
+#: ftparchive/cachedb.cc:65
 #, c-format
 #, c-format
 msgid "DB is old, attempting to upgrade %s"
 msgid "DB is old, attempting to upgrade %s"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/cachedb.cc:73
+#: ftparchive/cachedb.cc:76
+msgid ""
+"DB format is invalid. If you upgraded from a older version of apt, please "
+"remove and re-create the database."
+msgstr ""
+
+#: ftparchive/cachedb.cc:81
 #, c-format
 #, c-format
 msgid "Unable to open DB file %s: %s"
 msgid "Unable to open DB file %s: %s"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/cachedb.cc:114
+#: ftparchive/cachedb.cc:127 apt-inst/extract.cc:181 apt-inst/extract.cc:193
+#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 methods/gpgv.cc:272
 #, c-format
 #, c-format
-msgid "File date has changed %s"
+msgid "Failed to stat %s"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/cachedb.cc:155
+#: ftparchive/cachedb.cc:242
 msgid "Archive has no control record"
 msgid "Archive has no control record"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/cachedb.cc:267
+#: ftparchive/cachedb.cc:448
 msgid "Unable to get a cursor"
 msgid "Unable to get a cursor"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:78
+#: ftparchive/writer.cc:79
 #, c-format
 #, c-format
 msgid "W: Unable to read directory %s\n"
 msgid "W: Unable to read directory %s\n"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:83
+#: ftparchive/writer.cc:84
 #, c-format
 #, c-format
 msgid "W: Unable to stat %s\n"
 msgid "W: Unable to stat %s\n"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:125
+#: ftparchive/writer.cc:135
 msgid "E: "
 msgid "E: "
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:127
+#: ftparchive/writer.cc:137
 msgid "W: "
 msgid "W: "
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:134
+#: ftparchive/writer.cc:144
 msgid "E: Errors apply to file "
 msgid "E: Errors apply to file "
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:151 ftparchive/writer.cc:181
+#: ftparchive/writer.cc:161 ftparchive/writer.cc:191
 #, c-format
 #, c-format
 msgid "Failed to resolve %s"
 msgid "Failed to resolve %s"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:163
+#: ftparchive/writer.cc:173
 msgid "Tree walking failed"
 msgid "Tree walking failed"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:188
+#: ftparchive/writer.cc:198
 #, c-format
 #, c-format
 msgid "Failed to open %s"
 msgid "Failed to open %s"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:245
+#: ftparchive/writer.cc:257
 #, c-format
 #, c-format
 msgid " DeLink %s [%s]\n"
 msgid " DeLink %s [%s]\n"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:253
+#: ftparchive/writer.cc:265
 #, c-format
 #, c-format
 msgid "Failed to readlink %s"
 msgid "Failed to readlink %s"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:257
+#: ftparchive/writer.cc:269
 #, c-format
 #, c-format
 msgid "Failed to unlink %s"
 msgid "Failed to unlink %s"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:264
+#: ftparchive/writer.cc:276
 #, c-format
 #, c-format
 msgid "*** Failed to link %s to %s"
 msgid "*** Failed to link %s to %s"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:274
+#: ftparchive/writer.cc:286
 #, c-format
 #, c-format
 msgid " DeLink limit of %sB hit.\n"
 msgid " DeLink limit of %sB hit.\n"
 msgstr ""
 msgstr ""
 
 
-#: 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:266
-#, c-format
-msgid "Failed to stat %s"
-msgstr ""
-
-#: ftparchive/writer.cc:386
+#: ftparchive/writer.cc:390
 msgid "Archive had no package field"
 msgid "Archive had no package field"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:394 ftparchive/writer.cc:603
+#: ftparchive/writer.cc:398 ftparchive/writer.cc:613
 #, c-format
 #, c-format
 msgid "  %s has no override entry\n"
 msgid "  %s has no override entry\n"
 msgstr ""
 msgstr ""
 
 
-#: ftparchive/writer.cc:437 ftparchive/writer.cc:689
+#: ftparchive/writer.cc:443 ftparchive/writer.cc:701
 #, c-format
 #, c-format
 msgid "  %s maintainer is %s not %s\n"
 msgid "  %s maintainer is %s not %s\n"
 msgstr ""
 msgstr ""
 
 
+#: ftparchive/writer.cc:623
+#, c-format
+msgid "  %s has no source override entry\n"
+msgstr ""
+
+#: ftparchive/writer.cc:627
+#, c-format
+msgid "  %s has no binary override entry either\n"
+msgstr ""
+
 #: ftparchive/contents.cc:317
 #: ftparchive/contents.cc:317
 #, c-format
 #, c-format
 msgid "Internal error, could not locate member %s"
 msgid "Internal error, could not locate member %s"
@@ -694,11 +705,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:1800 cmdline/apt-get.cc:1833
+#: cmdline/apt-get.cc:791 cmdline/apt-get.cc:1811 cmdline/apt-get.cc:1844
 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:1881 cmdline/apt-get.cc:2117
+#: cmdline/apt-get.cc:801 cmdline/apt-get.cc:1892 cmdline/apt-get.cc:2128
 #: 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 +738,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:1971
+#: cmdline/apt-get.cc:846 cmdline/apt-get.cc:1982
 #, c-format
 #, c-format
 msgid "Couldn't determine free space in %s"
 msgid "Couldn't determine free space in %s"
 msgstr ""
 msgstr ""
@@ -761,7 +772,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:2014
+#: cmdline/apt-get.cc:961 cmdline/apt-get.cc:1365 cmdline/apt-get.cc:2025
 #, c-format
 #, c-format
 msgid "Failed to fetch %s  %s\n"
 msgid "Failed to fetch %s  %s\n"
 msgstr ""
 msgstr ""
@@ -770,7 +781,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:2023
+#: cmdline/apt-get.cc:980 cmdline/apt-get.cc:2034
 msgid "Download complete and in download only mode"
 msgid "Download complete and in download only mode"
 msgstr ""
 msgstr ""
 
 
@@ -927,144 +938,144 @@ msgstr ""
 msgid "The following extra packages will be installed:"
 msgid "The following extra packages will be installed:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1674
+#: cmdline/apt-get.cc:1685
 msgid "Suggested packages:"
 msgid "Suggested packages:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1675
+#: cmdline/apt-get.cc:1686
 msgid "Recommended packages:"
 msgid "Recommended packages:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1695
+#: cmdline/apt-get.cc:1706
 msgid "Calculating upgrade... "
 msgid "Calculating upgrade... "
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1698 methods/ftp.cc:702 methods/connect.cc:101
+#: cmdline/apt-get.cc:1709 methods/ftp.cc:702 methods/connect.cc:101
 msgid "Failed"
 msgid "Failed"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1703
+#: cmdline/apt-get.cc:1714
 msgid "Done"
 msgid "Done"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1768 cmdline/apt-get.cc:1776
+#: cmdline/apt-get.cc:1779 cmdline/apt-get.cc:1787
 msgid "Internal error, problem resolver broke stuff"
 msgid "Internal error, problem resolver broke stuff"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1876
+#: cmdline/apt-get.cc:1887
 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:1906 cmdline/apt-get.cc:2135
+#: cmdline/apt-get.cc:1917 cmdline/apt-get.cc:2146
 #, 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:1950
+#: cmdline/apt-get.cc:1961
 #, c-format
 #, c-format
 msgid "Skipping already downloaded file '%s'\n"
 msgid "Skipping already downloaded file '%s'\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1974
+#: cmdline/apt-get.cc:1985
 #, 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:1979
+#: cmdline/apt-get.cc:1990
 #, 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:1982
+#: cmdline/apt-get.cc:1993
 #, 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:1988
+#: cmdline/apt-get.cc:1999
 #, c-format
 #, c-format
 msgid "Fetch source %s\n"
 msgid "Fetch source %s\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2019
+#: cmdline/apt-get.cc:2030
 msgid "Failed to fetch some archives."
 msgid "Failed to fetch some archives."
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2047
+#: cmdline/apt-get.cc:2058
 #, 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:2059
+#: cmdline/apt-get.cc:2070
 #, c-format
 #, c-format
 msgid "Unpack command '%s' failed.\n"
 msgid "Unpack command '%s' failed.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2060
+#: cmdline/apt-get.cc:2071
 #, 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:2077
+#: cmdline/apt-get.cc:2088
 #, c-format
 #, c-format
 msgid "Build command '%s' failed.\n"
 msgid "Build command '%s' failed.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2096
+#: cmdline/apt-get.cc:2107
 msgid "Child process failed"
 msgid "Child process failed"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2112
+#: cmdline/apt-get.cc:2123
 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:2140
+#: cmdline/apt-get.cc:2151
 #, 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:2160
+#: cmdline/apt-get.cc:2171
 #, c-format
 #, c-format
 msgid "%s has no build depends.\n"
 msgid "%s has no build depends.\n"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2212
+#: cmdline/apt-get.cc:2223
 #, 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:2264
+#: cmdline/apt-get.cc:2275
 #, 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:2299
+#: cmdline/apt-get.cc:2310
 #, 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:2324
+#: cmdline/apt-get.cc:2335
 #, 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:2338
+#: cmdline/apt-get.cc:2349
 #, 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:2342
+#: cmdline/apt-get.cc:2353
 msgid "Failed to process build dependencies"
 msgid "Failed to process build dependencies"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2374
+#: cmdline/apt-get.cc:2385
 msgid "Supported modules:"
 msgid "Supported modules:"
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:2415
+#: cmdline/apt-get.cc:2426
 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"
@@ -1192,19 +1203,19 @@ msgstr ""
 msgid "Failed to create pipes"
 msgid "Failed to create pipes"
 msgstr ""
 msgstr ""
 
 
-#: apt-inst/contrib/extracttar.cc:143
+#: apt-inst/contrib/extracttar.cc:144
 msgid "Failed to exec gzip "
 msgid "Failed to exec gzip "
 msgstr ""
 msgstr ""
 
 
-#: apt-inst/contrib/extracttar.cc:180 apt-inst/contrib/extracttar.cc:206
+#: apt-inst/contrib/extracttar.cc:181 apt-inst/contrib/extracttar.cc:207
 msgid "Corrupted archive"
 msgid "Corrupted archive"
 msgstr ""
 msgstr ""
 
 
-#: apt-inst/contrib/extracttar.cc:195
+#: apt-inst/contrib/extracttar.cc:196
 msgid "Tar checksum failed, archive corrupted"
 msgid "Tar checksum failed, archive corrupted"
 msgstr ""
 msgstr ""
 
 
-#: apt-inst/contrib/extracttar.cc:298
+#: apt-inst/contrib/extracttar.cc:299
 #, c-format
 #, c-format
 msgid "Unknown TAR header type %u, member %s"
 msgid "Unknown TAR header type %u, member %s"
 msgstr ""
 msgstr ""
@@ -1479,12 +1490,12 @@ msgstr ""
 msgid "File not found"
 msgid "File not found"
 msgstr ""
 msgstr ""
 
 
-#: methods/copy.cc:42 methods/gpgv.cc:275 methods/gzip.cc:133
+#: methods/copy.cc:42 methods/gpgv.cc:281 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:272 methods/gzip.cc:139
+#: methods/copy.cc:79 methods/gpgv.cc:278 methods/gzip.cc:139
 msgid "Failed to set modification time"
 msgid "Failed to set modification time"
 msgstr ""
 msgstr ""
 
 
@@ -1694,38 +1705,38 @@ msgstr ""
 msgid "Unable to connect to %s %s:"
 msgid "Unable to connect to %s %s:"
 msgstr ""
 msgstr ""
 
 
-#: methods/gpgv.cc:64
+#: methods/gpgv.cc:65
 #, c-format
 #, c-format
 msgid "Couldn't access keyring: '%s'"
 msgid "Couldn't access keyring: '%s'"
 msgstr ""
 msgstr ""
 
 
-#: methods/gpgv.cc:99
+#: methods/gpgv.cc:100
 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:198
+#: methods/gpgv.cc:204
 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:203
+#: methods/gpgv.cc:209
 msgid "At least one invalid signature was encountered."
 msgid "At least one invalid signature was encountered."
 msgstr ""
 msgstr ""
 
 
-#: methods/gpgv.cc:207
+#: methods/gpgv.cc:213
 #, c-format
 #, c-format
 msgid "Could not execute '%s' to verify signature (is gnupg installed?)"
 msgid "Could not execute '%s' to verify signature (is gnupg installed?)"
 msgstr ""
 msgstr ""
 
 
-#: methods/gpgv.cc:212
+#: methods/gpgv.cc:218
 msgid "Unknown error executing gpgv"
 msgid "Unknown error executing gpgv"
 msgstr ""
 msgstr ""
 
 
-#: methods/gpgv.cc:243
+#: methods/gpgv.cc:249
 msgid "The following signatures were invalid:\n"
 msgid "The following signatures were invalid:\n"
 msgstr ""
 msgstr ""
 
 
-#: methods/gpgv.cc:250
+#: methods/gpgv.cc:256
 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"
@@ -2101,12 +2112,12 @@ msgstr ""
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/tagfile.cc:72
+#: apt-pkg/tagfile.cc:85 apt-pkg/tagfile.cc:92
 #, 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:102
+#: apt-pkg/tagfile.cc:186
 #, c-format
 #, c-format
 msgid "Unable to parse package file %s (2)"
 msgid "Unable to parse package file %s (2)"
 msgstr ""
 msgstr ""

+ 4 - 4
po/bg.po

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt 0.6\n"
 "Project-Id-Version: apt 0.6\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-03-31 22:05+0300\n"
 "PO-Revision-Date: 2006-03-31 22:05+0300\n"
 "Last-Translator: Yavor Doganov <yavor@doganov.org>\n"
 "Last-Translator: Yavor Doganov <yavor@doganov.org>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
@@ -2306,15 +2306,15 @@ msgstr "незадължителен"
 msgid "extra"
 msgid "extra"
 msgstr "допълнителен"
 msgstr "допълнителен"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Изграждане на дървото със зависимости"
 msgstr "Изграждане на дървото със зависимости"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Версии кандидати"
 msgstr "Версии кандидати"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Генериране на зависимости"
 msgstr "Генериране на зависимости"
 
 

+ 4 - 4
po/bs.po

@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt 0.5.26\n"
 "Project-Id-Version: apt 0.5.26\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2004-05-06 15:25+0100\n"
 "PO-Revision-Date: 2004-05-06 15:25+0100\n"
 "Last-Translator: Safir Šećerović <sapphire@linux.org.ba>\n"
 "Last-Translator: Safir Šećerović <sapphire@linux.org.ba>\n"
 "Language-Team: Bosnian <lokal@lugbih.org>\n"
 "Language-Team: Bosnian <lokal@lugbih.org>\n"
@@ -2109,15 +2109,15 @@ msgstr "opcionalno"
 msgid "extra"
 msgid "extra"
 msgstr "extra"
 msgstr "extra"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Gradim stablo zavisnosti"
 msgstr "Gradim stablo zavisnosti"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Verzije kandidata"
 msgstr "Verzije kandidata"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Stvaranje zavisnosti"
 msgstr "Stvaranje zavisnosti"
 
 

+ 4 - 4
po/ca.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt 0.6\n"
 "Project-Id-Version: apt 0.6\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-02-05 22:00+0100\n"
 "PO-Revision-Date: 2006-02-05 22:00+0100\n"
 "Last-Translator: Jordi Mallach <jordi@debian.org>\n"
 "Last-Translator: Jordi Mallach <jordi@debian.org>\n"
 "Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n"
 "Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n"
@@ -2298,15 +2298,15 @@ msgstr "opcional"
 msgid "extra"
 msgid "extra"
 msgstr "extra"
 msgstr "extra"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "S'està construint l'arbre de dependències"
 msgstr "S'està construint l'arbre de dependències"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Versions candidates"
 msgstr "Versions candidates"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Dependències que genera"
 msgstr "Dependències que genera"
 
 

+ 4 - 4
po/cs.po

@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt\n"
 "Project-Id-Version: apt\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-08 11:02+0200\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-05-14 18:36+0200\n"
 "PO-Revision-Date: 2006-05-14 18:36+0200\n"
 "Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
 "Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
 "Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
 "Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
@@ -2269,15 +2269,15 @@ msgstr "volitelný"
 msgid "extra"
 msgid "extra"
 msgstr "extra"
 msgstr "extra"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Vytvářím strom závislostí"
 msgstr "Vytvářím strom závislostí"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Kandidátské verze"
 msgstr "Kandidátské verze"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Generování závislostí"
 msgstr "Generování závislostí"
 
 

+ 4 - 4
po/cy.po

@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: APT\n"
 "Project-Id-Version: APT\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2005-06-06 13:46+0100\n"
 "PO-Revision-Date: 2005-06-06 13:46+0100\n"
 "Last-Translator: Dafydd Harries <daf@muse.19inch.net>\n"
 "Last-Translator: Dafydd Harries <daf@muse.19inch.net>\n"
 "Language-Team: Welsh <cy@pengwyn.linux.org.uk>\n"
 "Language-Team: Welsh <cy@pengwyn.linux.org.uk>\n"
@@ -2363,17 +2363,17 @@ msgstr "opsiynnol"
 msgid "extra"
 msgid "extra"
 msgstr "ychwanegol"
 msgstr "ychwanegol"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 #, fuzzy
 #, fuzzy
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Yn Aideladu Coeden Dibyniaeth"
 msgstr "Yn Aideladu Coeden Dibyniaeth"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 #, fuzzy
 #, fuzzy
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Fersiynau Posib"
 msgstr "Fersiynau Posib"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 #, fuzzy
 #, fuzzy
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Cynhyrchaid Dibyniaeth"
 msgstr "Cynhyrchaid Dibyniaeth"

+ 4 - 4
po/da.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt-da\n"
 "Project-Id-Version: apt-da\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-01-20 22:23+0100\n"
 "PO-Revision-Date: 2006-01-20 22:23+0100\n"
 "Last-Translator: Claus Hindsgaul <claus_h@image.dk>\n"
 "Last-Translator: Claus Hindsgaul <claus_h@image.dk>\n"
 "Language-Team: Danish <dansk@klid.dk>\n"
 "Language-Team: Danish <dansk@klid.dk>\n"
@@ -2283,15 +2283,15 @@ msgstr "frivillig"
 msgid "extra"
 msgid "extra"
 msgstr "ekstra"
 msgstr "ekstra"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Opbygger afhængighedstræ"
 msgstr "Opbygger afhængighedstræ"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Kandidatversioner"
 msgstr "Kandidatversioner"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Afhængighedsgenerering"
 msgstr "Afhængighedsgenerering"
 
 

+ 4 - 4
po/de.po

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt 0.5.26\n"
 "Project-Id-Version: apt 0.5.26\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2005-06-15 18:22+0200\n"
 "PO-Revision-Date: 2005-06-15 18:22+0200\n"
 "Last-Translator: Michael Piefel <piefel@debian.org>\n"
 "Last-Translator: Michael Piefel <piefel@debian.org>\n"
 "Language-Team:  <de@li.org>\n"
 "Language-Team:  <de@li.org>\n"
@@ -2322,15 +2322,15 @@ msgstr "optional"
 msgid "extra"
 msgid "extra"
 msgstr "extra"
 msgstr "extra"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Abhängigkeitsbaum wird aufgebaut"
 msgstr "Abhängigkeitsbaum wird aufgebaut"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Mögliche Versionen"
 msgstr "Mögliche Versionen"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Abhängigkeits-Generierung"
 msgstr "Abhängigkeits-Generierung"
 
 

+ 4 - 4
po/el.po

@@ -18,7 +18,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt_po_el_new\n"
 "Project-Id-Version: apt_po_el_new\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-01-18 15:16+0200\n"
 "PO-Revision-Date: 2006-01-18 15:16+0200\n"
 "Last-Translator: Konstantinos Margaritis <markos@debian.org>\n"
 "Last-Translator: Konstantinos Margaritis <markos@debian.org>\n"
 "Language-Team: Greek <debian-l10n-greek@lists.debian.org>\n"
 "Language-Team: Greek <debian-l10n-greek@lists.debian.org>\n"
@@ -2320,15 +2320,15 @@ msgstr "προαιρετικό"
 msgid "extra"
 msgid "extra"
 msgstr "επιπλέον"
 msgstr "επιπλέον"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Κατασκευή Δένδρου Εξαρτήσεων"
 msgstr "Κατασκευή Δένδρου Εξαρτήσεων"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Υποψήφιες Εκδόσεις"
 msgstr "Υποψήφιες Εκδόσεις"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Παραγωγή Εξαρτήσεων"
 msgstr "Παραγωγή Εξαρτήσεων"
 
 

+ 4 - 4
po/en_GB.po

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt 0.5.5\n"
 "Project-Id-Version: apt 0.5.5\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2002-11-10 20:56+0100\n"
 "PO-Revision-Date: 2002-11-10 20:56+0100\n"
 "Last-Translator: Neil Williams <linux@codehelp.co.uk>\n"
 "Last-Translator: Neil Williams <linux@codehelp.co.uk>\n"
 "Language-Team: en_GB <en@li.org>\n"
 "Language-Team: en_GB <en@li.org>\n"
@@ -2272,15 +2272,15 @@ msgstr "optional"
 msgid "extra"
 msgid "extra"
 msgstr "extra"
 msgstr "extra"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Building dependency tree"
 msgstr "Building dependency tree"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Candidate versions"
 msgstr "Candidate versions"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Dependency generation"
 msgstr "Dependency generation"
 
 

+ 4 - 4
po/es.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt 0.6.42.3exp1\n"
 "Project-Id-Version: apt 0.6.42.3exp1\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2005-11-16 17:37+0100\n"
 "PO-Revision-Date: 2005-11-16 17:37+0100\n"
 "Last-Translator: Rubén Porras Campo <nahoo@inicia.es>\n"
 "Last-Translator: Rubén Porras Campo <nahoo@inicia.es>\n"
 "Language-Team: Spanish <debian-l10n-spanish@lists.debian.org>\n"
 "Language-Team: Spanish <debian-l10n-spanish@lists.debian.org>\n"
@@ -2307,15 +2307,15 @@ msgstr "opcional"
 msgid "extra"
 msgid "extra"
 msgstr "extra"
 msgstr "extra"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Creando árbol de dependencias"
 msgstr "Creando árbol de dependencias"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Versiones candidatas"
 msgstr "Versiones candidatas"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Generación de dependencias"
 msgstr "Generación de dependencias"
 
 

+ 4 - 4
po/fr.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: fr\n"
 "Project-Id-Version: fr\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-05-18 09:31-0500\n"
 "PO-Revision-Date: 2006-05-18 09:31-0500\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"
@@ -2327,15 +2327,15 @@ msgstr "optionnel"
 msgid "extra"
 msgid "extra"
 msgstr "supplémentaire"
 msgstr "supplémentaire"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Construction de l'arbre des dépendances"
 msgstr "Construction de l'arbre des dépendances"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Versions possibles"
 msgstr "Versions possibles"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Génération des dépendances"
 msgstr "Génération des dépendances"
 
 

+ 5 - 5
po/gl.po

@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt\n"
 "Project-Id-Version: apt\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-05-11 18:09+0200\n"
 "PO-Revision-Date: 2006-05-11 18:09+0200\n"
 "Last-Translator: Jacobo Tarrío <jtarrio@debian.org>\n"
 "Last-Translator: Jacobo Tarrío <jtarrio@debian.org>\n"
 "Language-Team: Galician <trasno@ceu.fi.udc.es>\n"
 "Language-Team: Galician <trasno@ceu.fi.udc.es>\n"
@@ -15,7 +15,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 
 #: cmdline/apt-cache.cc:135
 #: cmdline/apt-cache.cc:135
-#, c-format 
+#, c-format
 msgid "Package %s version %s has an unmet dep:\n"
 msgid "Package %s version %s has an unmet dep:\n"
 msgstr "O paquete %s versión %s ten unha dependencia incumprida:\n"
 msgstr "O paquete %s versión %s ten unha dependencia incumprida:\n"
 
 
@@ -2297,15 +2297,15 @@ msgstr "opcional"
 msgid "extra"
 msgid "extra"
 msgstr "extra"
 msgstr "extra"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "A construír a árbore de dependencias"
 msgstr "A construír a árbore de dependencias"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Versións candidatas"
 msgstr "Versións candidatas"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Xeración de dependencias"
 msgstr "Xeración de dependencias"
 
 

Разница между файлами не показана из-за своего большого размера
+ 216 - 239
po/hu.po


+ 4 - 4
po/it.po

@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt 0.5.5\n"
 "Project-Id-Version: apt 0.5.5\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-02-14 11:41+0100\n"
 "PO-Revision-Date: 2006-02-14 11:41+0100\n"
 "Last-Translator: Samuele Giovanni Tonon <samu@debian.org>\n"
 "Last-Translator: Samuele Giovanni Tonon <samu@debian.org>\n"
 "Language-Team: Italian <it@li.org>\n"
 "Language-Team: Italian <it@li.org>\n"
@@ -2309,15 +2309,15 @@ msgstr "opzionale"
 msgid "extra"
 msgid "extra"
 msgstr "extra"
 msgstr "extra"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Generazione dell'albero delle dipendenze in corso"
 msgstr "Generazione dell'albero delle dipendenze in corso"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Versioni candidate"
 msgstr "Versioni candidate"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Generazione delle dipendenze"
 msgstr "Generazione delle dipendenze"
 
 

+ 4 - 4
po/ja.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt 0.6\n"
 "Project-Id-Version: apt 0.6\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-01-25 20:55+0900\n"
 "PO-Revision-Date: 2006-01-25 20:55+0900\n"
 "Last-Translator: Kenshi Muto <kmuto@debian.org>\n"
 "Last-Translator: Kenshi Muto <kmuto@debian.org>\n"
 "Language-Team: Debian Japanese List <debian-japanese@lists.debian.org>\n"
 "Language-Team: Debian Japanese List <debian-japanese@lists.debian.org>\n"
@@ -2289,15 +2289,15 @@ msgstr "任意"
 msgid "extra"
 msgid "extra"
 msgstr "特別"
 msgstr "特別"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "依存関係ツリーを作成しています"
 msgstr "依存関係ツリーを作成しています"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "候補バージョン"
 msgstr "候補バージョン"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "依存関係の生成"
 msgstr "依存関係の生成"
 
 

Разница между файлами не показана из-за своего большого размера
+ 194 - 232
po/ko.po


+ 4 - 4
po/nb.po

@@ -19,7 +19,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt\n"
 "Project-Id-Version: apt\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2005-02-09 10:45+0100\n"
 "PO-Revision-Date: 2005-02-09 10:45+0100\n"
 "Last-Translator: Hans Fredrik Nordhaug <hans@nordhaug.priv.no>\n"
 "Last-Translator: Hans Fredrik Nordhaug <hans@nordhaug.priv.no>\n"
 "Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.ui.no>\n"
 "Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.ui.no>\n"
@@ -2304,15 +2304,15 @@ msgstr "valgfri"
 msgid "extra"
 msgid "extra"
 msgstr "tillegg"
 msgstr "tillegg"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Skaper oversikt over avhengighetsforhold"
 msgstr "Skaper oversikt over avhengighetsforhold"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Versjons-kandidater"
 msgstr "Versjons-kandidater"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Oppretter avhengighetsforhold"
 msgstr "Oppretter avhengighetsforhold"
 
 

+ 4 - 4
po/nl.po

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt\n"
 "Project-Id-Version: apt\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2005-02-10 17:35+0100\n"
 "PO-Revision-Date: 2005-02-10 17:35+0100\n"
 "Last-Translator: Bart Cornelis <cobaco@linux.be>\n"
 "Last-Translator: Bart Cornelis <cobaco@linux.be>\n"
 "Language-Team: debian-l10n-dutch <debian-l10n-dutch@lists.debian.org>\n"
 "Language-Team: debian-l10n-dutch <debian-l10n-dutch@lists.debian.org>\n"
@@ -2322,15 +2322,15 @@ msgstr "optioneel"
 msgid "extra"
 msgid "extra"
 msgstr "extra"
 msgstr "extra"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Boom van vereisten wordt opgebouwd"
 msgstr "Boom van vereisten wordt opgebouwd"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Kandidaat-versies"
 msgstr "Kandidaat-versies"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Generatie vereisten"
 msgstr "Generatie vereisten"
 
 

+ 4 - 4
po/nn.po

@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt_nn\n"
 "Project-Id-Version: apt_nn\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2005-02-14 23:30+0100\n"
 "PO-Revision-Date: 2005-02-14 23:30+0100\n"
 "Last-Translator: Håvard Korsvoll <korsvoll@skulelinux.no>\n"
 "Last-Translator: Håvard Korsvoll <korsvoll@skulelinux.no>\n"
 "Language-Team: Norwegian nynorsk <i18n-nn@lister.ping.uio.no>\n"
 "Language-Team: Norwegian nynorsk <i18n-nn@lister.ping.uio.no>\n"
@@ -2287,15 +2287,15 @@ msgstr "valfri"
 msgid "extra"
 msgid "extra"
 msgstr "tillegg"
 msgstr "tillegg"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Byggjer kravtre"
 msgstr "Byggjer kravtre"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Kandidatversjonar"
 msgstr "Kandidatversjonar"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Genererer kravforhold"
 msgstr "Genererer kravforhold"
 
 

+ 4 - 4
po/pl.po

@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt 0.5.5\n"
 "Project-Id-Version: apt 0.5.5\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-01-23 15:32+0100\n"
 "PO-Revision-Date: 2006-01-23 15:32+0100\n"
 "Last-Translator: Bartosz Fenski <fenio@debian.org>\n"
 "Last-Translator: Bartosz Fenski <fenio@debian.org>\n"
 "Language-Team: Polish <pddp@debian.linux.org.pl>\n"
 "Language-Team: Polish <pddp@debian.linux.org.pl>\n"
@@ -2292,15 +2292,15 @@ msgstr "opcjonalny"
 msgid "extra"
 msgid "extra"
 msgstr "dodatkowy"
 msgstr "dodatkowy"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Budowanie drzewa zale¿no¶ci"
 msgstr "Budowanie drzewa zale¿no¶ci"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Kandyduj±ce wersje"
 msgstr "Kandyduj±ce wersje"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Generowanie zale¿no¶ci"
 msgstr "Generowanie zale¿no¶ci"
 
 

+ 4 - 4
po/pt.po

@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt\n"
 "Project-Id-Version: apt\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2005-03-07 22:20+0000\n"
 "PO-Revision-Date: 2005-03-07 22:20+0000\n"
 "Last-Translator: Rui Az. <astronomy@mail.pt>\n"
 "Last-Translator: Rui Az. <astronomy@mail.pt>\n"
 "Language-Team: Portuguese <traduz@debianpt.org>\n"
 "Language-Team: Portuguese <traduz@debianpt.org>\n"
@@ -2293,15 +2293,15 @@ msgstr "opcional"
 msgid "extra"
 msgid "extra"
 msgstr "extra"
 msgstr "extra"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Construindo Árvore de Dependências"
 msgstr "Construindo Árvore de Dependências"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Versões Candidatas"
 msgstr "Versões Candidatas"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Geração de Dependência"
 msgstr "Geração de Dependência"
 
 

+ 4 - 4
po/pt_BR.po

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt\n"
 "Project-Id-Version: apt\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-02-11 17:57-0200\n"
 "PO-Revision-Date: 2006-02-11 17:57-0200\n"
 "Last-Translator: André Luís Lopes <andrelop@debian.org>\n"
 "Last-Translator: André Luís Lopes <andrelop@debian.org>\n"
 "Language-Team: Debian-BR Project <debian-l10n-portuguese@lists.debian.org>\n"
 "Language-Team: Debian-BR Project <debian-l10n-portuguese@lists.debian.org>\n"
@@ -2294,15 +2294,15 @@ msgstr "opcional"
 msgid "extra"
 msgid "extra"
 msgstr "extra"
 msgstr "extra"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Construindo Árvore de Dependências"
 msgstr "Construindo Árvore de Dependências"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Versões Candidatas"
 msgstr "Versões Candidatas"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Geração de Dependência"
 msgstr "Geração de Dependência"
 
 

+ 42 - 22
po/ro.po

@@ -230,7 +230,8 @@ msgstr ""
 
 
 #: cmdline/apt-cdrom.cc:78
 #: cmdline/apt-cdrom.cc:78
 msgid "Please provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'"
 msgid "Please provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'"
-msgstr "Vă rog furnizaţi un nume pentru acest disc, cum ar fi 'Debian 2.1r1 Disk 1'"
+msgstr ""
+"Vă rog furnizaţi un nume pentru acest disc, cum ar fi 'Debian 2.1r1 Disk 1'"
 
 
 #: cmdline/apt-cdrom.cc:93
 #: cmdline/apt-cdrom.cc:93
 msgid "Please insert a Disc in the drive and press enter"
 msgid "Please insert a Disc in the drive and press enter"
@@ -812,7 +813,8 @@ msgstr "Lista surselor nu poate fi citită."
 
 
 #: cmdline/apt-get.cc:816
 #: cmdline/apt-get.cc:816
 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org"
 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org"
-msgstr "Ce ciudat.. Dimensiunile nu se potrivesc, scrieţi la apt@packages.debian.org"
+msgstr ""
+"Ce ciudat.. Dimensiunile nu se potrivesc, scrieţi la apt@packages.debian.org"
 
 
 #: cmdline/apt-get.cc:821
 #: cmdline/apt-get.cc:821
 #, c-format
 #, c-format
@@ -846,7 +848,8 @@ msgstr "Nu aveţi suficient spaţiu în %s."
 
 
 #: cmdline/apt-get.cc:864 cmdline/apt-get.cc:884
 #: cmdline/apt-get.cc:864 cmdline/apt-get.cc:884
 msgid "Trivial Only specified but this is not a trivial operation."
 msgid "Trivial Only specified but this is not a trivial operation."
-msgstr "A fost specificat 'doar neimportant' dar nu este o operaţiune neimportantă."
+msgstr ""
+"A fost specificat 'doar neimportant' dar nu este o operaţiune neimportantă."
 
 
 #: cmdline/apt-get.cc:866
 #: cmdline/apt-get.cc:866
 msgid "Yes, do as I say!"
 msgid "Yes, do as I say!"
@@ -1076,7 +1079,8 @@ msgstr "Terminat"
 
 
 #: cmdline/apt-get.cc:1768 cmdline/apt-get.cc:1776
 #: 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 "Eroare internă, rezolvatorul de probleme a deteriorat diverse chestiuni"
+msgstr ""
+"Eroare internă, rezolvatorul de probleme a deteriorat diverse chestiuni"
 
 
 #: cmdline/apt-get.cc:1876
 #: 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"
@@ -1362,14 +1366,17 @@ msgstr "S-au produs unele erori în timpul despachetării. Voi configura"
 
 
 #: dselect/install:101
 #: dselect/install:101
 msgid "packages that were installed. This may result in duplicate errors"
 msgid "packages that were installed. This may result in duplicate errors"
-msgstr "pachetele care au fost instalate. Aceasta ar putea rezulta erori dublate"
+msgstr ""
+"pachetele care au fost instalate. Aceasta ar putea rezulta erori dublate"
 
 
 #: dselect/install:102
 #: dselect/install:102
 msgid "or errors caused by missing dependencies. This is OK, only the errors"
 msgid "or errors caused by missing dependencies. This is OK, only the errors"
-msgstr "sau erori cauzate de dependenţe lipsă. Aceasta este normal, doar erorile"
+msgstr ""
+"sau erori cauzate de dependenţe lipsă. Aceasta este normal, doar erorile"
 
 
 #: dselect/install:103
 #: dselect/install:103
-msgid "above this message are important. Please fix them and run [I]nstall again"
+msgid ""
+"above this message are important. Please fix them and run [I]nstall again"
 msgstr ""
 msgstr ""
 "de deasupra acestui mesaj sunt importante. Vă rog corectaţi-le şi porniţi "
 "de deasupra acestui mesaj sunt importante. Vă rog corectaţi-le şi porniţi "
 "din nou [I]nstalarea"
 "din nou [I]nstalarea"
@@ -1903,7 +1910,8 @@ msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
 msgstr "E: Listă de argumente din Acquire::gpgv::Options prea lungă. Ies."
 msgstr "E: Listă de argumente din Acquire::gpgv::Options prea lungă. Ies."
 
 
 #: methods/gpgv.cc:198
 #: methods/gpgv.cc:198
-msgid "Internal error: Good signature, but could not determine key fingerprint?!"
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
 msgstr ""
 msgstr ""
 "Eroare internă: Semnătură corespunzătoare, dar n-am putut determina cheia "
 "Eroare internă: Semnătură corespunzătoare, dar n-am putut determina cheia "
 "amprentei digitale?!"
 "amprentei digitale?!"
@@ -1915,7 +1923,8 @@ msgstr "Cel puţin o semnătură invalidă a fost întâlnită."
 #: methods/gpgv.cc:207
 #: methods/gpgv.cc:207
 #, c-format
 #, c-format
 msgid "Could not execute '%s' to verify signature (is gnupg installed?)"
 msgid "Could not execute '%s' to verify signature (is gnupg installed?)"
-msgstr "Nu pot executa '%s' pentru verificarea semnăturii (este instalat gnupg?)"
+msgstr ""
+"Nu pot executa '%s' pentru verificarea semnăturii (este instalat gnupg?)"
 
 
 #: methods/gpgv.cc:212
 #: methods/gpgv.cc:212
 msgid "Unknown error executing gpgv"
 msgid "Unknown error executing gpgv"
@@ -1998,7 +2007,8 @@ msgstr "Eroare la scrierea în fişierul"
 
 
 #: methods/http.cc:874
 #: methods/http.cc:874
 msgid "Error reading from server. Remote end closed connection"
 msgid "Error reading from server. Remote end closed connection"
-msgstr "Eroare la citirea de pe server, conexiunea a fost închisă de la distanţă"
+msgstr ""
+"Eroare la citirea de pe server, conexiunea a fost închisă de la distanţă"
 
 
 #: methods/http.cc:876
 #: methods/http.cc:876
 msgid "Error reading from server"
 msgid "Error reading from server"
@@ -2063,7 +2073,8 @@ msgstr "Eroare de sintaxă %s:%u: mizerii suplimentare după valoare"
 #: apt-pkg/contrib/configuration.cc:684
 #: apt-pkg/contrib/configuration.cc:684
 #, c-format
 #, c-format
 msgid "Syntax error %s:%u: Directives can only be done at the top level"
 msgid "Syntax error %s:%u: Directives can only be done at the top level"
-msgstr "Eroare de sintaxă %s:%u: directivele pot fi date doar la nivelul superior"
+msgstr ""
+"Eroare de sintaxă %s:%u: directivele pot fi date doar la nivelul superior"
 
 
 #: apt-pkg/contrib/configuration.cc:691
 #: apt-pkg/contrib/configuration.cc:691
 #, c-format
 #, c-format
@@ -2119,7 +2130,8 @@ msgstr "Opţiunea %s necesită un argument"
 #: apt-pkg/contrib/cmndline.cc:201 apt-pkg/contrib/cmndline.cc:207
 #: apt-pkg/contrib/cmndline.cc:201 apt-pkg/contrib/cmndline.cc:207
 #, c-format
 #, c-format
 msgid "Option %s: Configuration item specification must have an =<val>."
 msgid "Option %s: Configuration item specification must have an =<val>."
-msgstr "Opţiunea %s: Specificaţia configurării articolului trebuie să aibă o =<val>."
+msgstr ""
+"Opţiunea %s: Specificaţia configurării articolului trebuie să aibă o =<val>."
 
 
 #: apt-pkg/contrib/cmndline.cc:237
 #: apt-pkg/contrib/cmndline.cc:237
 #, c-format
 #, c-format
@@ -2382,8 +2394,10 @@ msgstr "Tipul de fişier index '%s' nu este suportat"
 
 
 #: apt-pkg/algorithms.cc:241
 #: apt-pkg/algorithms.cc:241
 #, c-format
 #, c-format
-msgid "The package %s needs to be reinstalled, but I can't find an archive for it."
-msgstr "Pachetul %s are nevoie să fie reinstalat, dar nu pot găsi o arhivă pentru el."
+msgid ""
+"The package %s needs to be reinstalled, but I can't find an archive for it."
+msgstr ""
+"Pachetul %s are nevoie să fie reinstalat, dar nu pot găsi o arhivă pentru el."
 
 
 #: apt-pkg/algorithms.cc:1059
 #: apt-pkg/algorithms.cc:1059
 msgid ""
 msgid ""
@@ -2432,7 +2446,8 @@ msgstr "Metoda %s nu s-a lansat corect"
 #: apt-pkg/acquire-worker.cc:377
 #: apt-pkg/acquire-worker.cc:377
 #, c-format
 #, c-format
 msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter."
 msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter."
-msgstr "Vă rog introduceţi discul numit: '%s' în unitatea '%s' şi apăsaţi Enter."
+msgstr ""
+"Vă rog introduceţi discul numit: '%s' în unitatea '%s' şi apăsaţi Enter."
 
 
 #: apt-pkg/init.cc:120
 #: apt-pkg/init.cc:120
 #, c-format
 #, c-format
@@ -2460,7 +2475,8 @@ msgstr ""
 
 
 #: apt-pkg/cachefile.cc:77
 #: apt-pkg/cachefile.cc:77
 msgid "You may want to run apt-get update to correct these problems"
 msgid "You may want to run apt-get update to correct these problems"
-msgstr "Aţi putea vrea să porniţi 'apt-get update' pentru a corecta aceste probleme."
+msgstr ""
+"Aţi putea vrea să porniţi 'apt-get update' pentru a corecta aceste probleme."
 
 
 #: apt-pkg/policy.cc:269
 #: apt-pkg/policy.cc:269
 msgid "Invalid record in the preferences file, no Package header"
 msgid "Invalid record in the preferences file, no Package header"
@@ -2522,11 +2538,13 @@ msgstr ""
 
 
 #: apt-pkg/pkgcachegen.cc:210
 #: apt-pkg/pkgcachegen.cc:210
 msgid "Wow, you exceeded the number of versions this APT is capable of."
 msgid "Wow, you exceeded the number of versions this APT is capable of."
-msgstr "Mamăăă, aţi depăşit numărul de versiuni de care este capabil acest APT."
+msgstr ""
+"Mamăăă, aţi depăşit numărul de versiuni de care este capabil acest APT."
 
 
 #: apt-pkg/pkgcachegen.cc:213
 #: apt-pkg/pkgcachegen.cc:213
 msgid "Wow, you exceeded the number of dependencies this APT is capable of."
 msgid "Wow, you exceeded the number of dependencies this APT is capable of."
-msgstr "Mamăăă, aţi depăşit numărul de dependenţe de care este capabil acest APT."
+msgstr ""
+"Mamăăă, aţi depăşit numărul de dependenţe de care este capabil acest APT."
 
 
 #: apt-pkg/pkgcachegen.cc:241
 #: apt-pkg/pkgcachegen.cc:241
 #, c-format
 #, c-format
@@ -2541,7 +2559,8 @@ msgstr "Eroare apărută în timpul procesării %s (CollectFileProvides)"
 #: apt-pkg/pkgcachegen.cc:260
 #: apt-pkg/pkgcachegen.cc:260
 #, c-format
 #, c-format
 msgid "Package %s %s was not found while processing file dependencies"
 msgid "Package %s %s was not found while processing file dependencies"
-msgstr "Nu s-a găsit pachetul %s %s în timpul procesării dependenţelor de fişiere"
+msgstr ""
+"Nu s-a găsit pachetul %s %s în timpul procesării dependenţelor de fişiere"
 
 
 #: apt-pkg/pkgcachegen.cc:574
 #: apt-pkg/pkgcachegen.cc:574
 #, c-format
 #, c-format
@@ -2591,7 +2610,8 @@ msgstr ""
 
 
 #: apt-pkg/acquire-item.cc:848
 #: apt-pkg/acquire-item.cc:848
 #, c-format
 #, c-format
-msgid "The package index files are corrupted. No Filename: field for package %s."
+msgid ""
+"The package index files are corrupted. No Filename: field for package %s."
 msgstr ""
 msgstr ""
 "Fişierele index de pachete sunt deteriorate. Fără câmpul 'nume fişier:' la "
 "Fişierele index de pachete sunt deteriorate. Fără câmpul 'nume fişier:' la "
 "pachetul %s."
 "pachetul %s."
@@ -2697,7 +2717,8 @@ msgstr "S-au scris %i înregistrări cu %i fişiere nepotrivite\n"
 #: apt-pkg/indexcopy.cc:269
 #: apt-pkg/indexcopy.cc:269
 #, c-format
 #, c-format
 msgid "Wrote %i records with %i missing files and %i mismatched files\n"
 msgid "Wrote %i records with %i missing files and %i mismatched files\n"
-msgstr "S-au scris %i înregistrări cu %i fişiere lipsă şi %i fişiere nepotrivite\n"
+msgstr ""
+"S-au scris %i înregistrări cu %i fişiere lipsă şi %i fişiere nepotrivite\n"
 
 
 #: apt-pkg/deb/dpkgpm.cc:358
 #: apt-pkg/deb/dpkgpm.cc:358
 #, c-format
 #, c-format
@@ -2752,4 +2773,3 @@ msgstr "Şters complet %s"
 #: methods/rsh.cc:330
 #: methods/rsh.cc:330
 msgid "Connection closed prematurely"
 msgid "Connection closed prematurely"
 msgstr "Conexiune închisă prematur"
 msgstr "Conexiune închisă prematur"
-

+ 4 - 4
po/ru.po

@@ -12,7 +12,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt_po_ru\n"
 "Project-Id-Version: apt_po_ru\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-01-21 14:55+0300\n"
 "PO-Revision-Date: 2006-01-21 14:55+0300\n"
 "Last-Translator: Yuri Kozlov <kozlov.y@gmail.com>\n"
 "Last-Translator: Yuri Kozlov <kozlov.y@gmail.com>\n"
 "Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n"
 "Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n"
@@ -2326,15 +2326,15 @@ msgstr "необязательный"
 msgid "extra"
 msgid "extra"
 msgstr "дополнительный"
 msgstr "дополнительный"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Построение дерева зависимостей"
 msgstr "Построение дерева зависимостей"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Версии-кандидаты"
 msgstr "Версии-кандидаты"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Генерирование зависимостей"
 msgstr "Генерирование зависимостей"
 
 

+ 4 - 5
po/sk.po

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt\n"
 "Project-Id-Version: apt\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-05-29 15:33+0200\n"
 "PO-Revision-Date: 2006-05-29 15:33+0200\n"
 "Last-Translator: Peter Mann <Peter.Mann@tuke.sk>\n"
 "Last-Translator: Peter Mann <Peter.Mann@tuke.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
@@ -2275,15 +2275,15 @@ msgstr "voliteľný"
 msgid "extra"
 msgid "extra"
 msgstr "extra"
 msgstr "extra"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Vytvára sa strom závislostí"
 msgstr "Vytvára sa strom závislostí"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Kandidátske verzie"
 msgstr "Kandidátske verzie"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Generovanie závislostí"
 msgstr "Generovanie závislostí"
 
 
@@ -2732,4 +2732,3 @@ msgstr "Balík '%s' je úplne odstránený"
 #: methods/rsh.cc:330
 #: methods/rsh.cc:330
 msgid "Connection closed prematurely"
 msgid "Connection closed prematurely"
 msgstr "Spojenie bolo predčasne ukončené"
 msgstr "Spojenie bolo predčasne ukončené"
-

+ 4 - 4
po/sl.po

@@ -4,7 +4,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt 0.5.5\n"
 "Project-Id-Version: apt 0.5.5\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2005-02-16 22:18+0100\n"
 "PO-Revision-Date: 2005-02-16 22:18+0100\n"
 "Last-Translator: Jure Èuhalev <gandalf@owca.info>\n"
 "Last-Translator: Jure Èuhalev <gandalf@owca.info>\n"
 "Language-Team: Slovenian <sl@li.org>\n"
 "Language-Team: Slovenian <sl@li.org>\n"
@@ -2278,15 +2278,15 @@ msgstr "izbirno"
 msgid "extra"
 msgid "extra"
 msgstr "dodatno"
 msgstr "dodatno"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Gradnja drevesa odvisnosti"
 msgstr "Gradnja drevesa odvisnosti"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Razlièice kandidatov"
 msgstr "Razlièice kandidatov"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Ustvarjanje odvisnosti"
 msgstr "Ustvarjanje odvisnosti"
 
 

+ 4 - 4
po/tl.po

@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt\n"
 "Project-Id-Version: apt\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-03-16 15:53+0800\n"
 "PO-Revision-Date: 2006-03-16 15:53+0800\n"
 "Last-Translator: Eric Pareja <xenos@upm.edu.ph>\n"
 "Last-Translator: Eric Pareja <xenos@upm.edu.ph>\n"
 "Language-Team: Tagalog <debian-tl@banwa.upm.edu.ph>\n"
 "Language-Team: Tagalog <debian-tl@banwa.upm.edu.ph>\n"
@@ -2307,15 +2307,15 @@ msgstr "optional"
 msgid "extra"
 msgid "extra"
 msgstr "extra"
 msgstr "extra"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "Ginagawa ang puno ng mga dependensiya"
 msgstr "Ginagawa ang puno ng mga dependensiya"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "Bersyong Kandidato"
 msgstr "Bersyong Kandidato"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "Pagbuo ng Dependensiya"
 msgstr "Pagbuo ng Dependensiya"
 
 

+ 4 - 4
po/zh_CN.po

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: apt 0.5.23\n"
 "Project-Id-Version: apt 0.5.23\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2006-02-22 14:20+1300\n"
 "PO-Revision-Date: 2006-02-22 14:20+1300\n"
 "Last-Translator: Carlos Z.F. Liu <carlosliu@users.sourceforge.net>\n"
 "Last-Translator: Carlos Z.F. Liu <carlosliu@users.sourceforge.net>\n"
 "Language-Team: Debian Chinese [GB] <debian-chinese-gb@lists.debian.org>\n"
 "Language-Team: Debian Chinese [GB] <debian-chinese-gb@lists.debian.org>\n"
@@ -2258,15 +2258,15 @@ msgstr "可选"
 msgid "extra"
 msgid "extra"
 msgstr "额外"
 msgstr "额外"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "正在分析软件包的依赖关系树"
 msgstr "正在分析软件包的依赖关系树"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "候选版本"
 msgstr "候选版本"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "生成依赖关系"
 msgstr "生成依赖关系"
 
 

+ 4 - 4
po/zh_TW.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: 0.5.4\n"
 "Project-Id-Version: 0.5.4\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-05-16 07:33-0500\n"
+"POT-Creation-Date: 2006-05-27 13:46+0200\n"
 "PO-Revision-Date: 2005-02-19 22:24+0800\n"
 "PO-Revision-Date: 2005-02-19 22:24+0800\n"
 "Last-Translator: Asho Yeh <asho@debian.org.tw>\n"
 "Last-Translator: Asho Yeh <asho@debian.org.tw>\n"
 "Language-Team: Chinese/Traditional <zh-l10n@linux.org.tw>\n"
 "Language-Team: Chinese/Traditional <zh-l10n@linux.org.tw>\n"
@@ -2270,15 +2270,15 @@ msgstr "次要"
 msgid "extra"
 msgid "extra"
 msgstr "添加"
 msgstr "添加"
 
 
-#: apt-pkg/depcache.cc:60 apt-pkg/depcache.cc:89
+#: apt-pkg/depcache.cc:61 apt-pkg/depcache.cc:90
 msgid "Building dependency tree"
 msgid "Building dependency tree"
 msgstr "了解套件依存關係中"
 msgstr "了解套件依存關係中"
 
 
-#: apt-pkg/depcache.cc:61
+#: apt-pkg/depcache.cc:62
 msgid "Candidate versions"
 msgid "Candidate versions"
 msgstr "候選版本"
 msgstr "候選版本"
 
 
-#: apt-pkg/depcache.cc:90
+#: apt-pkg/depcache.cc:91
 msgid "Dependency generation"
 msgid "Dependency generation"
 msgstr "產生套件依存關係"
 msgstr "產生套件依存關係"
 
 

+ 7 - 0
test/hash.cc

@@ -1,5 +1,6 @@
 #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/strutl.h>
 #include <apt-pkg/strutl.h>
 #include <iostream>
 #include <iostream>
 
 
@@ -57,6 +58,12 @@ int main()
 		      "d174ab98d277d9f5a5611c2c9f419d9f");
 		      "d174ab98d277d9f5a5611c2c9f419d9f");
    Test<MD5Summation>("12345678901234567890123456789012345678901234567890123456789012345678901234567890",
    Test<MD5Summation>("12345678901234567890123456789012345678901234567890123456789012345678901234567890",
 		      "57edf4a22be3c955ac49da2e2107b67a");
 		      "57edf4a22be3c955ac49da2e2107b67a");
+
+   // SHA-256, From FIPS 180-2
+   Test<SHA256Summation>("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 
+			 "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1");
+   
+
    return 0; 
    return 0; 
 }
 }