From 54ce88fd2669a729c89c940be3abc9456d19d542 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 22 Feb 2011 21:53:23 +0100 Subject: add sha512 interface based on sha2 by aaron gifford --- test/hash.cc | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'test') diff --git a/test/hash.cc b/test/hash.cc index cfdb4ea9d..259aa4e9a 100644 --- a/test/hash.cc +++ b/test/hash.cc @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -10,9 +11,17 @@ template void Test(const char *In,const char *Out) { T Sum; Sum.Add(In); - cout << Sum.Result().Value() << endl; - if (stringcasecmp(Sum.Result().Value(),Out) != 0) + + cout << "expected: '" << Out << "'" << endl; + cout << "got : '" << Sum.Result().Value() << "'" << endl; + cout << "got : '" << Sum.Result().Value() << "'" << endl; + cout << "got : '" << Sum.Result().Value() << "'" << endl; + if (stringcasecmp(Sum.Result().Value(), Out) != 0) { + cout << "FAIL" << endl << endl; abort(); + } else { + cout << "PASS" << endl << endl; + } } template void TestMill(const char *Out) @@ -34,9 +43,8 @@ template void TestMill(const char *Out) Count = 0; } } - - cout << Sum.Result().Value() << endl; - if (stringcasecmp(Sum.Result().Value(),Out) != 0) + + if (stringcasecmp(Sum.Result().Value(), Out) != 0) abort(); } @@ -62,8 +70,13 @@ int main() // SHA-256, From FIPS 180-2 Test("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"); - + // SHA-512, From + Test( + "abc", + "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" + "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"); + return 0; } -- cgit v1.2.3-70-g09d2 From 84a0890e6ef49b5d41a0b9ff0b5a5fe95cca6f3e Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 25 Feb 2011 14:16:35 +0100 Subject: move sha512,256 into apt-pkg/sha2.{cc,h}, move gifford implementation to sha2_internal.{cc,h} --- apt-pkg/contrib/hashes.h | 3 +- apt-pkg/contrib/sha2.cc | 1283 +++++++------------------------------- apt-pkg/contrib/sha2.h | 304 ++++----- apt-pkg/contrib/sha256.cc | 424 ------------- apt-pkg/contrib/sha256.h | 68 +- apt-pkg/contrib/sha2_internal.cc | 1065 +++++++++++++++++++++++++++++++ apt-pkg/contrib/sha2_internal.h | 197 ++++++ apt-pkg/contrib/sha512.cc | 128 ---- apt-pkg/contrib/sha512.h | 68 -- apt-pkg/makefile | 8 +- ftparchive/cachedb.cc | 3 +- ftparchive/writer.cc | 3 +- test/hash.cc | 3 +- 13 files changed, 1607 insertions(+), 1950 deletions(-) delete mode 100644 apt-pkg/contrib/sha256.cc create mode 100644 apt-pkg/contrib/sha2_internal.cc create mode 100644 apt-pkg/contrib/sha2_internal.h delete mode 100644 apt-pkg/contrib/sha512.cc delete mode 100644 apt-pkg/contrib/sha512.h (limited to 'test') diff --git a/apt-pkg/contrib/hashes.h b/apt-pkg/contrib/hashes.h index b3587e02a..4b6a08b1f 100644 --- a/apt-pkg/contrib/hashes.h +++ b/apt-pkg/contrib/hashes.h @@ -16,8 +16,7 @@ #include #include -#include -#include +#include #include #include diff --git a/apt-pkg/contrib/sha2.cc b/apt-pkg/contrib/sha2.cc index 810eb8317..00d90d6ba 100644 --- a/apt-pkg/contrib/sha2.cc +++ b/apt-pkg/contrib/sha2.cc @@ -1,1065 +1,234 @@ /* - * FILE: sha2.c - * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/ - * - * Copyright (c) 2000-2001, Aaron D. Gifford - * All rights reserved. + * Cryptographic API. {{{ * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the names of contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. + * SHA-512, as specified in + * http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf * - * $Id: sha2.c,v 1.1 2001/11/08 00:01:51 adg Exp adg $ - */ - -#include /* memcpy()/memset() or bcopy()/bzero() */ -#include /* assert() */ -#include "sha2.h" - -/* - * ASSERT NOTE: - * Some sanity checking code is included using assert(). On my FreeBSD - * system, this additional code can be removed by compiling with NDEBUG - * defined. Check your own systems manpage on assert() to see how to - * compile WITHOUT the sanity checking code on your system. - * - * UNROLLED TRANSFORM LOOP NOTE: - * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform - * loop version for the hash transform rounds (defined using macros - * later in this file). Either define on the command line, for example: - * - * cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c - * - * or define below: - * - * #define SHA2_UNROLL_TRANSFORM + * 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. * - */ + */ /*}}}*/ - -/*** SHA-256/384/512 Machine Architecture Definitions *****************/ -/* - * BYTE_ORDER NOTE: - * - * Please make sure that your system defines BYTE_ORDER. If your - * architecture is little-endian, make sure it also defines - * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are - * equivilent. - * - * If your system does not define the above, then you can do so by - * hand like this: - * - * #define LITTLE_ENDIAN 1234 - * #define BIG_ENDIAN 4321 - * - * And for little-endian machines, add: - * - * #define BYTE_ORDER LITTLE_ENDIAN - * - * Or for big-endian machines: - * - * #define BYTE_ORDER BIG_ENDIAN - * - * The FreeBSD machine this was written on defines BYTE_ORDER - * appropriately by including (which in turn includes - * where the appropriate definitions are actually - * made). - */ -#if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN) -#error Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN +#ifdef __GNUG__ +#pragma implementation "apt-pkg/2.h" #endif -/* - * Define the followingsha2_* types to types of the correct length on - * the native archtecture. Most BSD systems and Linux define u_intXX_t - * types. Machines with very recent ANSI C headers, can use the - * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H - * during compile or in the sha.h header file. - * - * Machines that support neither u_intXX_t nor inttypes.h's uintXX_t - * will need to define these three typedefs below (and the appropriate - * ones in sha.h too) by hand according to their system architecture. - * - * Thank you, Jun-ichiro itojun Hagino, for suggesting using u_intXX_t - * types and pointing out recent ANSI C support for uintXX_t in inttypes.h. - */ -#ifdef SHA2_USE_INTTYPES_H - -typedef uint8_t sha2_byte; /* Exactly 1 byte */ -typedef uint32_t sha2_word32; /* Exactly 4 bytes */ -typedef uint64_t sha2_word64; /* Exactly 8 bytes */ - -#else /* SHA2_USE_INTTYPES_H */ - -typedef u_int8_t sha2_byte; /* Exactly 1 byte */ -typedef u_int32_t sha2_word32; /* Exactly 4 bytes */ -typedef u_int64_t sha2_word64; /* Exactly 8 bytes */ - -#endif /* SHA2_USE_INTTYPES_H */ - - -/*** SHA-256/384/512 Various Length Definitions ***********************/ -/* NOTE: Most of these are in sha2.h */ -#define SHA256_SHORT_BLOCK_LENGTH (SHA256_BLOCK_LENGTH - 8) -#define SHA384_SHORT_BLOCK_LENGTH (SHA384_BLOCK_LENGTH - 16) -#define SHA512_SHORT_BLOCK_LENGTH (SHA512_BLOCK_LENGTH - 16) - - -/*** ENDIAN REVERSAL MACROS *******************************************/ -#if BYTE_ORDER == LITTLE_ENDIAN -#define REVERSE32(w,x) { \ - sha2_word32 tmp = (w); \ - tmp = (tmp >> 16) | (tmp << 16); \ - (x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \ -} -#define REVERSE64(w,x) { \ - sha2_word64 tmp = (w); \ - tmp = (tmp >> 32) | (tmp << 32); \ - tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \ - ((tmp & 0x00ff00ff00ff00ffULL) << 8); \ - (x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \ - ((tmp & 0x0000ffff0000ffffULL) << 16); \ -} -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - -/* - * Macro for incrementally adding the unsigned 64-bit integer n to the - * unsigned 128-bit integer (represented using a two-element array of - * 64-bit words): - */ -#define ADDINC128(w,n) { \ - (w)[0] += (sha2_word64)(n); \ - if ((w)[0] < (n)) { \ - (w)[1]++; \ - } \ -} - -/* - * Macros for copying blocks of memory and for zeroing out ranges - * of memory. Using these macros makes it easy to switch from - * using memset()/memcpy() and using bzero()/bcopy(). - * - * Please define either SHA2_USE_MEMSET_MEMCPY or define - * SHA2_USE_BZERO_BCOPY depending on which function set you - * choose to use: - */ -#if !defined(SHA2_USE_MEMSET_MEMCPY) && !defined(SHA2_USE_BZERO_BCOPY) -/* Default to memset()/memcpy() if no option is specified */ -#define SHA2_USE_MEMSET_MEMCPY 1 -#endif -#if defined(SHA2_USE_MEMSET_MEMCPY) && defined(SHA2_USE_BZERO_BCOPY) -/* Abort with an error if BOTH options are defined */ -#error Define either SHA2_USE_MEMSET_MEMCPY or SHA2_USE_BZERO_BCOPY, not both! -#endif - -#ifdef SHA2_USE_MEMSET_MEMCPY -#define MEMSET_BZERO(p,l) memset((p), 0, (l)) -#define MEMCPY_BCOPY(d,s,l) memcpy((d), (s), (l)) -#endif -#ifdef SHA2_USE_BZERO_BCOPY -#define MEMSET_BZERO(p,l) bzero((p), (l)) -#define MEMCPY_BCOPY(d,s,l) bcopy((s), (d), (l)) -#endif - - -/*** THE SIX LOGICAL FUNCTIONS ****************************************/ -/* - * Bit shifting and rotation (used by the six SHA-XYZ logical functions: - * - * NOTE: The naming of R and S appears backwards here (R is a SHIFT and - * S is a ROTATION) because the SHA-256/384/512 description document - * (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this - * same "backwards" definition. - */ -/* Shift-right (used in SHA-256, SHA-384, and SHA-512): */ -#define R(b,x) ((x) >> (b)) -/* 32-bit Rotate-right (used in SHA-256): */ -#define S32(b,x) (((x) >> (b)) | ((x) << (32 - (b)))) -/* 64-bit Rotate-right (used in SHA-384 and SHA-512): */ -#define S64(b,x) (((x) >> (b)) | ((x) << (64 - (b)))) - -/* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */ -#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) -#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) - -/* Four of six logical functions used in SHA-256: */ -#define Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x))) -#define Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x))) -#define sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x))) -#define sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x))) - -/* Four of six logical functions used in SHA-384 and SHA-512: */ -#define Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x))) -#define Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x))) -#define sigma0_512(x) (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x))) -#define sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x))) - -/*** INTERNAL FUNCTION PROTOTYPES *************************************/ -/* NOTE: These should not be accessed directly from outside this - * library -- they are intended for private internal visibility/use - * only. - */ -void SHA512_Last(SHA512_CTX*); -void SHA256_Transform(SHA256_CTX*, const sha2_word32*); -void SHA512_Transform(SHA512_CTX*, const sha2_word64*); - - -/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/ -/* Hash constant words K for SHA-256: */ -const static sha2_word32 K256[64] = { - 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, - 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, - 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL, - 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL, - 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, - 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, - 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, - 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL, - 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL, - 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, - 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, - 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, - 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL, - 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL, - 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, - 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL -}; - -/* Initial hash value H for SHA-256: */ -const static sha2_word32 sha256_initial_hash_value[8] = { - 0x6a09e667UL, - 0xbb67ae85UL, - 0x3c6ef372UL, - 0xa54ff53aUL, - 0x510e527fUL, - 0x9b05688cUL, - 0x1f83d9abUL, - 0x5be0cd19UL -}; - -/* Hash constant words K for SHA-384 and SHA-512: */ -const static sha2_word64 K512[80] = { - 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, - 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, - 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, - 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, - 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, - 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, - 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, - 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, - 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, - 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, - 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, - 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, - 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, - 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, - 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, - 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, - 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, - 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, - 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, - 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, - 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, - 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, - 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, - 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, - 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, - 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, - 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, - 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, - 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, - 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, - 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, - 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, - 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, - 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, - 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, - 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, - 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, - 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, - 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, - 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL -}; - -/* Initial hash value H for SHA-384 */ -const static sha2_word64 sha384_initial_hash_value[8] = { - 0xcbbb9d5dc1059ed8ULL, - 0x629a292a367cd507ULL, - 0x9159015a3070dd17ULL, - 0x152fecd8f70e5939ULL, - 0x67332667ffc00b31ULL, - 0x8eb44a8768581511ULL, - 0xdb0c2e0d64f98fa7ULL, - 0x47b5481dbefa4fa4ULL -}; - -/* Initial hash value H for SHA-512 */ -const static sha2_word64 sha512_initial_hash_value[8] = { - 0x6a09e667f3bcc908ULL, - 0xbb67ae8584caa73bULL, - 0x3c6ef372fe94f82bULL, - 0xa54ff53a5f1d36f1ULL, - 0x510e527fade682d1ULL, - 0x9b05688c2b3e6c1fULL, - 0x1f83d9abfb41bd6bULL, - 0x5be0cd19137e2179ULL -}; - -/* - * Constant used by SHA256/384/512_End() functions for converting the - * digest to a readable hexadecimal character string: - */ -static const char *sha2_hex_digits = "0123456789abcdef"; - - -/*** SHA-256: *********************************************************/ -void SHA256_Init(SHA256_CTX* context) { - if (context == (SHA256_CTX*)0) { - return; - } - MEMCPY_BCOPY(context->state, sha256_initial_hash_value, SHA256_DIGEST_LENGTH); - MEMSET_BZERO(context->buffer, SHA256_BLOCK_LENGTH); - context->bitcount = 0; -} - -#ifdef SHA2_UNROLL_TRANSFORM - -/* Unrolled SHA-256 round macros: */ - -#if BYTE_ORDER == LITTLE_ENDIAN - -#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \ - REVERSE32(*data++, W256[j]); \ - T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \ - K256[j] + W256[j]; \ - (d) += T1; \ - (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ - j++ - - -#else /* BYTE_ORDER == LITTLE_ENDIAN */ - -#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \ - T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \ - K256[j] + (W256[j] = *data++); \ - (d) += T1; \ - (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ - j++ - -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - -#define ROUND256(a,b,c,d,e,f,g,h) \ - s0 = W256[(j+1)&0x0f]; \ - s0 = sigma0_256(s0); \ - s1 = W256[(j+14)&0x0f]; \ - s1 = sigma1_256(s1); \ - T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + \ - (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); \ - (d) += T1; \ - (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ - j++ - -void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) { - sha2_word32 a, b, c, d, e, f, g, h, s0, s1; - sha2_word32 T1, *W256; - int j; - - W256 = (sha2_word32*)context->buffer; - - /* Initialize registers with the prev. intermediate value */ - a = context->state[0]; - b = context->state[1]; - c = context->state[2]; - d = context->state[3]; - e = context->state[4]; - f = context->state[5]; - g = context->state[6]; - h = context->state[7]; - - j = 0; - do { - /* Rounds 0 to 15 (unrolled): */ - ROUND256_0_TO_15(a,b,c,d,e,f,g,h); - ROUND256_0_TO_15(h,a,b,c,d,e,f,g); - ROUND256_0_TO_15(g,h,a,b,c,d,e,f); - ROUND256_0_TO_15(f,g,h,a,b,c,d,e); - ROUND256_0_TO_15(e,f,g,h,a,b,c,d); - ROUND256_0_TO_15(d,e,f,g,h,a,b,c); - ROUND256_0_TO_15(c,d,e,f,g,h,a,b); - ROUND256_0_TO_15(b,c,d,e,f,g,h,a); - } while (j < 16); - - /* Now for the remaining rounds to 64: */ - do { - ROUND256(a,b,c,d,e,f,g,h); - ROUND256(h,a,b,c,d,e,f,g); - ROUND256(g,h,a,b,c,d,e,f); - ROUND256(f,g,h,a,b,c,d,e); - ROUND256(e,f,g,h,a,b,c,d); - ROUND256(d,e,f,g,h,a,b,c); - ROUND256(c,d,e,f,g,h,a,b); - ROUND256(b,c,d,e,f,g,h,a); - } while (j < 64); - - /* Compute the current intermediate hash value */ - context->state[0] += a; - context->state[1] += b; - context->state[2] += c; - context->state[3] += d; - context->state[4] += e; - context->state[5] += f; - context->state[6] += g; - context->state[7] += h; - - /* Clean up */ - a = b = c = d = e = f = g = h = T1 = 0; -} - -#else /* SHA2_UNROLL_TRANSFORM */ - -void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) { - sha2_word32 a, b, c, d, e, f, g, h, s0, s1; - sha2_word32 T1, T2, *W256; - int j; - - W256 = (sha2_word32*)context->buffer; - - /* Initialize registers with the prev. intermediate value */ - a = context->state[0]; - b = context->state[1]; - c = context->state[2]; - d = context->state[3]; - e = context->state[4]; - f = context->state[5]; - g = context->state[6]; - h = context->state[7]; - - j = 0; - do { -#if BYTE_ORDER == LITTLE_ENDIAN - /* Copy data while converting to host byte order */ - REVERSE32(*data++,W256[j]); - /* Apply the SHA-256 compression function to update a..h */ - T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j]; -#else /* BYTE_ORDER == LITTLE_ENDIAN */ - /* Apply the SHA-256 compression function to update a..h with copy */ - T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] = *data++); -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - T2 = Sigma0_256(a) + Maj(a, b, c); - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - - j++; - } while (j < 16); - - do { - /* Part of the message block expansion: */ - s0 = W256[(j+1)&0x0f]; - s0 = sigma0_256(s0); - s1 = W256[(j+14)&0x0f]; - s1 = sigma1_256(s1); - - /* Apply the SHA-256 compression function to update a..h */ - T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + - (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); - T2 = Sigma0_256(a) + Maj(a, b, c); - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - - j++; - } while (j < 64); - - /* Compute the current intermediate hash value */ - context->state[0] += a; - context->state[1] += b; - context->state[2] += c; - context->state[3] += d; - context->state[4] += e; - context->state[5] += f; - context->state[6] += g; - context->state[7] += h; - - /* Clean up */ - a = b = c = d = e = f = g = h = T1 = T2 = 0; -} - -#endif /* SHA2_UNROLL_TRANSFORM */ - -void SHA256_Update(SHA256_CTX* context, const sha2_byte *data, size_t len) { - unsigned int freespace, usedspace; - - if (len == 0) { - /* Calling with no data is valid - we do nothing */ - return; - } - - /* Sanity check: */ - assert(context != (SHA256_CTX*)0 && data != (sha2_byte*)0); - - usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH; - if (usedspace > 0) { - /* Calculate how much free space is available in the buffer */ - freespace = SHA256_BLOCK_LENGTH - usedspace; - - if (len >= freespace) { - /* Fill the buffer completely and process it */ - MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace); - context->bitcount += freespace << 3; - len -= freespace; - data += freespace; - SHA256_Transform(context, (sha2_word32*)context->buffer); - } else { - /* The buffer is not yet full */ - MEMCPY_BCOPY(&context->buffer[usedspace], data, len); - context->bitcount += len << 3; - /* Clean up: */ - usedspace = freespace = 0; - return; - } - } - while (len >= SHA256_BLOCK_LENGTH) { - /* Process as many complete blocks as we can */ - SHA256_Transform(context, (sha2_word32*)data); - context->bitcount += SHA256_BLOCK_LENGTH << 3; - len -= SHA256_BLOCK_LENGTH; - data += SHA256_BLOCK_LENGTH; - } - if (len > 0) { - /* There's left-overs, so save 'em */ - MEMCPY_BCOPY(context->buffer, data, len); - context->bitcount += len << 3; - } - /* Clean up: */ - usedspace = freespace = 0; -} - -void SHA256_Final(sha2_byte digest[], SHA256_CTX* context) { - sha2_word32 *d = (sha2_word32*)digest; - unsigned int usedspace; - - /* Sanity check: */ - assert(context != (SHA256_CTX*)0); - - /* If no digest buffer is passed, we don't bother doing this: */ - if (digest != (sha2_byte*)0) { - usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH; -#if BYTE_ORDER == LITTLE_ENDIAN - /* Convert FROM host byte order */ - REVERSE64(context->bitcount,context->bitcount); -#endif - if (usedspace > 0) { - /* Begin padding with a 1 bit: */ - context->buffer[usedspace++] = 0x80; - - if (usedspace <= SHA256_SHORT_BLOCK_LENGTH) { - /* Set-up for the last transform: */ - MEMSET_BZERO(&context->buffer[usedspace], SHA256_SHORT_BLOCK_LENGTH - usedspace); - } else { - if (usedspace < SHA256_BLOCK_LENGTH) { - MEMSET_BZERO(&context->buffer[usedspace], SHA256_BLOCK_LENGTH - usedspace); - } - /* Do second-to-last transform: */ - SHA256_Transform(context, (sha2_word32*)context->buffer); - - /* And set-up for the last transform: */ - MEMSET_BZERO(context->buffer, SHA256_SHORT_BLOCK_LENGTH); - } - } else { - /* Set-up for the last transform: */ - MEMSET_BZERO(context->buffer, SHA256_SHORT_BLOCK_LENGTH); - - /* Begin padding with a 1 bit: */ - *context->buffer = 0x80; - } - /* Set the bit count: */ - *(sha2_word64*)&context->buffer[SHA256_SHORT_BLOCK_LENGTH] = context->bitcount; - - /* Final transform: */ - SHA256_Transform(context, (sha2_word32*)context->buffer); - -#if BYTE_ORDER == LITTLE_ENDIAN - { - /* Convert TO host byte order */ - int j; - for (j = 0; j < 8; j++) { - REVERSE32(context->state[j],context->state[j]); - *d++ = context->state[j]; - } - } -#else - MEMCPY_BCOPY(d, context->state, SHA256_DIGEST_LENGTH); -#endif - } - - /* Clean up state data: */ - MEMSET_BZERO(context, sizeof(context)); - usedspace = 0; -} - -char *SHA256_End(SHA256_CTX* context, char buffer[]) { - sha2_byte digest[SHA256_DIGEST_LENGTH], *d = digest; - int i; - - /* Sanity check: */ - assert(context != (SHA256_CTX*)0); - - if (buffer != (char*)0) { - SHA256_Final(digest, context); - - for (i = 0; i < SHA256_DIGEST_LENGTH; i++) { - *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4]; - *buffer++ = sha2_hex_digits[*d & 0x0f]; - d++; - } - *buffer = (char)0; - } else { - MEMSET_BZERO(context, sizeof(context)); - } - MEMSET_BZERO(digest, SHA256_DIGEST_LENGTH); - return buffer; -} - -char* SHA256_Data(const sha2_byte* data, size_t len, char digest[SHA256_DIGEST_STRING_LENGTH]) { - SHA256_CTX context; - - SHA256_Init(&context); - SHA256_Update(&context, data, len); - return SHA256_End(&context, digest); -} - - -/*** SHA-512: *********************************************************/ -void SHA512_Init(SHA512_CTX* context) { - if (context == (SHA512_CTX*)0) { - return; - } - MEMCPY_BCOPY(context->state, sha512_initial_hash_value, SHA512_DIGEST_LENGTH); - MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH); - context->bitcount[0] = context->bitcount[1] = 0; -} - -#ifdef SHA2_UNROLL_TRANSFORM - -/* Unrolled SHA-512 round macros: */ -#if BYTE_ORDER == LITTLE_ENDIAN - -#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \ - REVERSE64(*data++, W512[j]); \ - T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \ - K512[j] + W512[j]; \ - (d) += T1, \ - (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \ - j++ - - -#else /* BYTE_ORDER == LITTLE_ENDIAN */ - -#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \ - T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \ - K512[j] + (W512[j] = *data++); \ - (d) += T1; \ - (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \ - j++ - -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - -#define ROUND512(a,b,c,d,e,f,g,h) \ - s0 = W512[(j+1)&0x0f]; \ - s0 = sigma0_512(s0); \ - s1 = W512[(j+14)&0x0f]; \ - s1 = sigma1_512(s1); \ - T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \ - (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); \ - (d) += T1; \ - (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \ - j++ - -void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) { - sha2_word64 a, b, c, d, e, f, g, h, s0, s1; - sha2_word64 T1, *W512 = (sha2_word64*)context->buffer; - int j; - - /* Initialize registers with the prev. intermediate value */ - a = context->state[0]; - b = context->state[1]; - c = context->state[2]; - d = context->state[3]; - e = context->state[4]; - f = context->state[5]; - g = context->state[6]; - h = context->state[7]; - - j = 0; - do { - ROUND512_0_TO_15(a,b,c,d,e,f,g,h); - ROUND512_0_TO_15(h,a,b,c,d,e,f,g); - ROUND512_0_TO_15(g,h,a,b,c,d,e,f); - ROUND512_0_TO_15(f,g,h,a,b,c,d,e); - ROUND512_0_TO_15(e,f,g,h,a,b,c,d); - ROUND512_0_TO_15(d,e,f,g,h,a,b,c); - ROUND512_0_TO_15(c,d,e,f,g,h,a,b); - ROUND512_0_TO_15(b,c,d,e,f,g,h,a); - } while (j < 16); - - /* Now for the remaining rounds up to 79: */ - do { - ROUND512(a,b,c,d,e,f,g,h); - ROUND512(h,a,b,c,d,e,f,g); - ROUND512(g,h,a,b,c,d,e,f); - ROUND512(f,g,h,a,b,c,d,e); - ROUND512(e,f,g,h,a,b,c,d); - ROUND512(d,e,f,g,h,a,b,c); - ROUND512(c,d,e,f,g,h,a,b); - ROUND512(b,c,d,e,f,g,h,a); - } while (j < 80); - - /* Compute the current intermediate hash value */ - context->state[0] += a; - context->state[1] += b; - context->state[2] += c; - context->state[3] += d; - context->state[4] += e; - context->state[5] += f; - context->state[6] += g; - context->state[7] += h; - - /* Clean up */ - a = b = c = d = e = f = g = h = T1 = 0; -} - -#else /* SHA2_UNROLL_TRANSFORM */ - -void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) { - sha2_word64 a, b, c, d, e, f, g, h, s0, s1; - sha2_word64 T1, T2, *W512 = (sha2_word64*)context->buffer; - int j; - - /* Initialize registers with the prev. intermediate value */ - a = context->state[0]; - b = context->state[1]; - c = context->state[2]; - d = context->state[3]; - e = context->state[4]; - f = context->state[5]; - g = context->state[6]; - h = context->state[7]; - - j = 0; - do { -#if BYTE_ORDER == LITTLE_ENDIAN - /* Convert TO host byte order */ - REVERSE64(*data++, W512[j]); - /* Apply the SHA-512 compression function to update a..h */ - T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j]; -#else /* BYTE_ORDER == LITTLE_ENDIAN */ - /* Apply the SHA-512 compression function to update a..h with copy */ - T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] = *data++); -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - T2 = Sigma0_512(a) + Maj(a, b, c); - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - - j++; - } while (j < 16); - - do { - /* Part of the message block expansion: */ - s0 = W512[(j+1)&0x0f]; - s0 = sigma0_512(s0); - s1 = W512[(j+14)&0x0f]; - s1 = sigma1_512(s1); - - /* Apply the SHA-512 compression function to update a..h */ - T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + - (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); - T2 = Sigma0_512(a) + Maj(a, b, c); - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - - j++; - } while (j < 80); - - /* Compute the current intermediate hash value */ - context->state[0] += a; - context->state[1] += b; - context->state[2] += c; - context->state[3] += d; - context->state[4] += e; - context->state[5] += f; - context->state[6] += g; - context->state[7] += h; - - /* Clean up */ - a = b = c = d = e = f = g = h = T1 = T2 = 0; -} - -#endif /* SHA2_UNROLL_TRANSFORM */ - -void SHA512_Update(SHA512_CTX* context, const sha2_byte *data, size_t len) { - unsigned int freespace, usedspace; - - if (len == 0) { - /* Calling with no data is valid - we do nothing */ - return; - } - - /* Sanity check: */ - assert(context != (SHA512_CTX*)0 && data != (sha2_byte*)0); - - usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH; - if (usedspace > 0) { - /* Calculate how much free space is available in the buffer */ - freespace = SHA512_BLOCK_LENGTH - usedspace; - - if (len >= freespace) { - /* Fill the buffer completely and process it */ - MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace); - ADDINC128(context->bitcount, freespace << 3); - len -= freespace; - data += freespace; - SHA512_Transform(context, (sha2_word64*)context->buffer); - } else { - /* The buffer is not yet full */ - MEMCPY_BCOPY(&context->buffer[usedspace], data, len); - ADDINC128(context->bitcount, len << 3); - /* Clean up: */ - usedspace = freespace = 0; - return; - } - } - while (len >= SHA512_BLOCK_LENGTH) { - /* Process as many complete blocks as we can */ - SHA512_Transform(context, (sha2_word64*)data); - ADDINC128(context->bitcount, SHA512_BLOCK_LENGTH << 3); - len -= SHA512_BLOCK_LENGTH; - data += SHA512_BLOCK_LENGTH; - } - if (len > 0) { - /* There's left-overs, so save 'em */ - MEMCPY_BCOPY(context->buffer, data, len); - ADDINC128(context->bitcount, len << 3); - } - /* Clean up: */ - usedspace = freespace = 0; -} - -void SHA512_Last(SHA512_CTX* context) { - unsigned int usedspace; - - usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH; -#if BYTE_ORDER == LITTLE_ENDIAN - /* Convert FROM host byte order */ - REVERSE64(context->bitcount[0],context->bitcount[0]); - REVERSE64(context->bitcount[1],context->bitcount[1]); -#endif - if (usedspace > 0) { - /* Begin padding with a 1 bit: */ - context->buffer[usedspace++] = 0x80; - - if (usedspace <= SHA512_SHORT_BLOCK_LENGTH) { - /* Set-up for the last transform: */ - MEMSET_BZERO(&context->buffer[usedspace], SHA512_SHORT_BLOCK_LENGTH - usedspace); - } else { - if (usedspace < SHA512_BLOCK_LENGTH) { - MEMSET_BZERO(&context->buffer[usedspace], SHA512_BLOCK_LENGTH - usedspace); - } - /* Do second-to-last transform: */ - SHA512_Transform(context, (sha2_word64*)context->buffer); - - /* And set-up for the last transform: */ - MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH - 2); - } - } else { - /* Prepare for final transform: */ - MEMSET_BZERO(context->buffer, SHA512_SHORT_BLOCK_LENGTH); - - /* Begin padding with a 1 bit: */ - *context->buffer = 0x80; - } - /* Store the length of input data (in bits): */ - *(sha2_word64*)&context->buffer[SHA512_SHORT_BLOCK_LENGTH] = context->bitcount[1]; - *(sha2_word64*)&context->buffer[SHA512_SHORT_BLOCK_LENGTH+8] = context->bitcount[0]; - - /* Final transform: */ - SHA512_Transform(context, (sha2_word64*)context->buffer); -} - -void SHA512_Final(sha2_byte digest[], SHA512_CTX* context) { - sha2_word64 *d = (sha2_word64*)digest; - - /* Sanity check: */ - assert(context != (SHA512_CTX*)0); - - /* If no digest buffer is passed, we don't bother doing this: */ - if (digest != (sha2_byte*)0) { - SHA512_Last(context); - - /* Save the hash data for output: */ -#if BYTE_ORDER == LITTLE_ENDIAN - { - /* Convert TO host byte order */ - int j; - for (j = 0; j < 8; j++) { - REVERSE64(context->state[j],context->state[j]); - *d++ = context->state[j]; - } - } -#else - MEMCPY_BCOPY(d, context->state, SHA512_DIGEST_LENGTH); -#endif - } - - /* Zero out state data */ - MEMSET_BZERO(context, sizeof(context)); -} - -char *SHA512_End(SHA512_CTX* context, char buffer[]) { - sha2_byte digest[SHA512_DIGEST_LENGTH], *d = digest; - int i; - - /* Sanity check: */ - assert(context != (SHA512_CTX*)0); - - if (buffer != (char*)0) { - SHA512_Final(digest, context); - - for (i = 0; i < SHA512_DIGEST_LENGTH; i++) { - *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4]; - *buffer++ = sha2_hex_digits[*d & 0x0f]; - d++; - } - *buffer = (char)0; - } else { - MEMSET_BZERO(context, sizeof(context)); - } - MEMSET_BZERO(digest, SHA512_DIGEST_LENGTH); - return buffer; -} - -char* SHA512_Data(const sha2_byte* data, size_t len, char digest[SHA512_DIGEST_STRING_LENGTH]) { - SHA512_CTX context; - - SHA512_Init(&context); - SHA512_Update(&context, data, len); - return SHA512_End(&context, digest); -} - - -/*** SHA-384: *********************************************************/ -void SHA384_Init(SHA384_CTX* context) { - if (context == (SHA384_CTX*)0) { - return; - } - MEMCPY_BCOPY(context->state, sha384_initial_hash_value, SHA512_DIGEST_LENGTH); - MEMSET_BZERO(context->buffer, SHA384_BLOCK_LENGTH); - context->bitcount[0] = context->bitcount[1] = 0; -} - -void SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) { - SHA512_Update((SHA512_CTX*)context, data, len); -} - -void SHA384_Final(sha2_byte digest[], SHA384_CTX* context) { - sha2_word64 *d = (sha2_word64*)digest; - - /* Sanity check: */ - assert(context != (SHA384_CTX*)0); - - /* If no digest buffer is passed, we don't bother doing this: */ - if (digest != (sha2_byte*)0) { - SHA512_Last((SHA512_CTX*)context); - - /* Save the hash data for output: */ -#if BYTE_ORDER == LITTLE_ENDIAN - { - /* Convert TO host byte order */ - int j; - for (j = 0; j < 6; j++) { - REVERSE64(context->state[j],context->state[j]); - *d++ = context->state[j]; - } - } -#else - MEMCPY_BCOPY(d, context->state, SHA384_DIGEST_LENGTH); -#endif - } - - /* Zero out state data */ - MEMSET_BZERO(context, sizeof(context)); -} - -char *SHA384_End(SHA384_CTX* context, char buffer[]) { - sha2_byte digest[SHA384_DIGEST_LENGTH], *d = digest; - int i; - - /* Sanity check: */ - assert(context != (SHA384_CTX*)0); - - if (buffer != (char*)0) { - SHA384_Final(digest, context); - - for (i = 0; i < SHA384_DIGEST_LENGTH; i++) { - *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4]; - *buffer++ = sha2_hex_digits[*d & 0x0f]; - d++; - } - *buffer = (char)0; - } else { - MEMSET_BZERO(context, sizeof(context)); - } - MEMSET_BZERO(digest, SHA384_DIGEST_LENGTH); - return buffer; -} - -char* SHA384_Data(const sha2_byte* data, size_t len, char digest[SHA384_DIGEST_STRING_LENGTH]) { - SHA384_CTX context; - - SHA384_Init(&context); - SHA384_Update(&context, data, len); - return SHA384_End(&context, digest); -} +#include +#include + +SHA512Summation::SHA512Summation() /*{{{*/ +{ + SHA512_Init(&ctx); + Done = false; +} + /*}}}*/ +bool SHA512Summation::Add(const unsigned char *inbuf,unsigned long len) /*{{{*/ +{ + if (Done) + return false; + SHA512_Update(&ctx, inbuf, len); + return true; +} + /*}}}*/ +SHA512SumValue SHA512Summation::Result() /*{{{*/ +{ + if (!Done) { + SHA512_Final(Sum, &ctx); + Done = true; + } + + SHA512SumValue res; + res.Set(Sum); + return res; +} + /*}}}*/ +// SHA512SumValue::SHA512SumValue - Constructs the sum from a string /*{{{*/ +// --------------------------------------------------------------------- +/* The string form of a SHA512 is a 64 character hex number */ +SHA512SumValue::SHA512SumValue(string Str) +{ + memset(Sum,0,sizeof(Sum)); + Set(Str); +} + /*}}}*/ +// SHA512SumValue::SHA512SumValue - Default constructor /*{{{*/ +// --------------------------------------------------------------------- +/* Sets the value to 0 */ +SHA512SumValue::SHA512SumValue() +{ + memset(Sum,0,sizeof(Sum)); +} + /*}}}*/ +// SHA512SumValue::Set - Set the sum from a string /*{{{*/ +// --------------------------------------------------------------------- +/* Converts the hex string into a set of chars */ +bool SHA512SumValue::Set(string Str) +{ + return Hex2Num(Str,Sum,sizeof(Sum)); +} + /*}}}*/ +// SHA512SumValue::Value - Convert the number into a string /*{{{*/ +// --------------------------------------------------------------------- +/* Converts the set of chars into a hex string in lower case */ +string SHA512SumValue::Value() const +{ + char Conv[16] = + { '0','1','2','3','4','5','6','7','8','9','a','b', + 'c','d','e','f' + }; + char Result[129]; + Result[128] = 0; + + // Convert each char into two letters + int J = 0; + int I = 0; + for (; I != 128; J++,I += 2) + { + Result[I] = Conv[Sum[J] >> 4]; + Result[I + 1] = Conv[Sum[J] & 0xF]; + } + + return string(Result); +} + /*}}}*/ +// SHA512SumValue::operator == - Comparator /*{{{*/ +// --------------------------------------------------------------------- +/* Call memcmp on the buffer */ +bool SHA512SumValue::operator == (const SHA512SumValue & rhs) const +{ + return memcmp(Sum,rhs.Sum,sizeof(Sum)) == 0; +} + /*}}}*/ +// SHA512Summation::AddFD - Add content of file into the checksum /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool SHA512Summation::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; +} + /*}}}*/ + +SHA256Summation::SHA256Summation() /*{{{*/ +{ + SHA256_Init(&ctx); + Done = false; +} + /*}}}*/ +bool SHA256Summation::Add(const unsigned char *inbuf,unsigned long len) /*{{{*/ +{ + if (Done) + return false; + SHA256_Update(&ctx, inbuf, len); + return true; +} + /*}}}*/ +SHA256SumValue SHA256Summation::Result() /*{{{*/ +{ + if (!Done) { + SHA256_Final(Sum, &ctx); + Done = true; + } + + SHA256SumValue res; + res.Set(Sum); + return res; +} + /*}}}*/ +// SHA256SumValue::SHA256SumValue - Constructs the sum from a string /*{{{*/ +// --------------------------------------------------------------------- +/* The string form of a SHA512 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[129]; + Result[128] = 0; + + // Convert each char into two letters + int J = 0; + int I = 0; + for (; I != 128; 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; +} + /*}}}*/ diff --git a/apt-pkg/contrib/sha2.h b/apt-pkg/contrib/sha2.h index bf759ad45..5148b05c3 100644 --- a/apt-pkg/contrib/sha2.h +++ b/apt-pkg/contrib/sha2.h @@ -1,197 +1,111 @@ -/* - * FILE: sha2.h - * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/ - * - * Copyright (c) 2000-2001, Aaron D. Gifford - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the names of contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $ - */ - -#ifndef __SHA2_H__ -#define __SHA2_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - -/* - * Import u_intXX_t size_t type definitions from system headers. You - * may need to change this, or define these things yourself in this - * file. - */ -#include - -#ifdef SHA2_USE_INTTYPES_H - -#include +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +// $Id: sha512.h,v 1.3 2001/05/07 05:05:47 jgg Exp $ +/* ###################################################################### + + SHA{512,256}SumValue - Storage for a SHA-{512,256} hash. + SHA{512,256}Summation - SHA-{512,256} Secure Hash Algorithm. + + This is a C++ interface to a set of SHA{512,256}Sum functions, that mirrors + the equivalent MD5 & SHA1 classes. + + ##################################################################### */ + /*}}}*/ +#ifndef APTPKG_SHA2_H +#define APTPKG_SHA2_H + +#include +#include +#include +#include + +#include "sha2_internal.h" + +using std::string; +using std::min; + +// SHA512 +class SHA512Summation; + +class SHA512SumValue +{ + friend class SHA512Summation; + unsigned char Sum[64]; + + public: + + // Accessors + bool operator ==(const SHA512SumValue &rhs) const; + string Value() const; + inline void Value(unsigned char S[64]) + {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[64]) + {for (int I = 0; I != sizeof(Sum); I++) Sum[I] = S[I];}; + + SHA512SumValue(string Str); + SHA512SumValue(); +}; + +class SHA512Summation +{ + SHA512_CTX ctx; + unsigned char Sum[64]; + 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);}; + SHA512SumValue Result(); + + SHA512Summation(); +}; + +// SHA256 +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(); +}; + +class SHA256Summation +{ + SHA256_CTX ctx; + unsigned char Sum[32]; + 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 /* SHA2_USE_INTTYPES_H */ - - -/*** SHA-256/384/512 Various Length Definitions ***********************/ -#define SHA256_BLOCK_LENGTH 64 -#define SHA256_DIGEST_LENGTH 32 -#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1) -#define SHA384_BLOCK_LENGTH 128 -#define SHA384_DIGEST_LENGTH 48 -#define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1) -#define SHA512_BLOCK_LENGTH 128 -#define SHA512_DIGEST_LENGTH 64 -#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1) - - -/*** SHA-256/384/512 Context Structures *******************************/ -/* NOTE: If your architecture does not define either u_intXX_t types or - * uintXX_t (from inttypes.h), you may need to define things by hand - * for your system: - */ -#if 0 -typedef unsigned char u_int8_t; /* 1-byte (8-bits) */ -typedef unsigned int u_int32_t; /* 4-bytes (32-bits) */ -typedef unsigned long long u_int64_t; /* 8-bytes (64-bits) */ #endif -/* - * Most BSD systems already define u_intXX_t types, as does Linux. - * Some systems, however, like Compaq's Tru64 Unix instead can use - * uintXX_t types defined by very recent ANSI C standards and included - * in the file: - * - * #include - * - * If you choose to use then please define: - * - * #define SHA2_USE_INTTYPES_H - * - * Or on the command line during compile: - * - * cc -DSHA2_USE_INTTYPES_H ... - */ -#ifdef SHA2_USE_INTTYPES_H - -typedef struct _SHA256_CTX { - uint32_t state[8]; - uint64_t bitcount; - uint8_t buffer[SHA256_BLOCK_LENGTH]; -} SHA256_CTX; -typedef struct _SHA512_CTX { - uint64_t state[8]; - uint64_t bitcount[2]; - uint8_t buffer[SHA512_BLOCK_LENGTH]; -} SHA512_CTX; - -#else /* SHA2_USE_INTTYPES_H */ - -typedef struct _SHA256_CTX { - u_int32_t state[8]; - u_int64_t bitcount; - u_int8_t buffer[SHA256_BLOCK_LENGTH]; -} SHA256_CTX; -typedef struct _SHA512_CTX { - u_int64_t state[8]; - u_int64_t bitcount[2]; - u_int8_t buffer[SHA512_BLOCK_LENGTH]; -} SHA512_CTX; - -#endif /* SHA2_USE_INTTYPES_H */ - -typedef SHA512_CTX SHA384_CTX; - - -/*** SHA-256/384/512 Function Prototypes ******************************/ -#ifndef NOPROTO -#ifdef SHA2_USE_INTTYPES_H - -void SHA256_Init(SHA256_CTX *); -void SHA256_Update(SHA256_CTX*, const uint8_t*, size_t); -void SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*); -char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]); -char* SHA256_Data(const uint8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]); - -void SHA384_Init(SHA384_CTX*); -void SHA384_Update(SHA384_CTX*, const uint8_t*, size_t); -void SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*); -char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]); -char* SHA384_Data(const uint8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]); - -void SHA512_Init(SHA512_CTX*); -void SHA512_Update(SHA512_CTX*, const uint8_t*, size_t); -void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); -char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]); -char* SHA512_Data(const uint8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]); - -#else /* SHA2_USE_INTTYPES_H */ - -void SHA256_Init(SHA256_CTX *); -void SHA256_Update(SHA256_CTX*, const u_int8_t*, size_t); -void SHA256_Final(u_int8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*); -char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]); -char* SHA256_Data(const u_int8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]); - -void SHA384_Init(SHA384_CTX*); -void SHA384_Update(SHA384_CTX*, const u_int8_t*, size_t); -void SHA384_Final(u_int8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*); -char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]); -char* SHA384_Data(const u_int8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]); - -void SHA512_Init(SHA512_CTX*); -void SHA512_Update(SHA512_CTX*, const u_int8_t*, size_t); -void SHA512_Final(u_int8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); -char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]); -char* SHA512_Data(const u_int8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]); - -#endif /* SHA2_USE_INTTYPES_H */ - -#else /* NOPROTO */ - -void SHA256_Init(); -void SHA256_Update(); -void SHA256_Final(); -char* SHA256_End(); -char* SHA256_Data(); - -void SHA384_Init(); -void SHA384_Update(); -void SHA384_Final(); -char* SHA384_End(); -char* SHA384_Data(); - -void SHA512_Init(); -void SHA512_Update(); -void SHA512_Final(); -char* SHA512_End(); -char* SHA512_Data(); - -#endif /* NOPROTO */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __SHA2_H__ */ - diff --git a/apt-pkg/contrib/sha256.cc b/apt-pkg/contrib/sha256.cc deleted file mode 100644 index e380c13ae..000000000 --- a/apt-pkg/contrib/sha256.cc +++ /dev/null @@ -1,424 +0,0 @@ -/* - * Cryptographic API. {{{ - * - * SHA-256, as specified in - * http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf - * - * SHA-256 code by Jean-Luc Cooke . - * - * Copyright (c) Jean-Luc Cooke - * Copyright (c) Andrew McDonald - * Copyright (c) 2002 James Morris - * - * Ported from the Linux kernel to Apt by Anthony Towns - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - */ /*}}}*/ - -#ifdef __GNUG__ -#pragma implementation "apt-pkg/sha256.h" -#endif - - -#define SHA256_DIGEST_SIZE 32 -#define SHA256_HMAC_BLOCK_SIZE 64 - -#define ror32(value,bits) (((value) >> (bits)) | ((value) << (32 - (bits)))) - -#include -#include -#include -#include -#include -#include -#include -#include - -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 = ∑ - 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 = ∑ - 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; -} - /*}}}*/ - diff --git a/apt-pkg/contrib/sha256.h b/apt-pkg/contrib/sha256.h index 5934b5641..fe2b30ac2 100644 --- a/apt-pkg/contrib/sha256.h +++ b/apt-pkg/contrib/sha256.h @@ -1,72 +1,8 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -// $Id: sha1.h,v 1.3 2001/05/07 05:05:47 jgg Exp $ -/* ###################################################################### - - SHA256SumValue - Storage for a SHA-256 hash. - SHA256Summation - SHA-256 Secure Hash Algorithm. - - This is a C++ interface to a set of SHA256Sum functions, that mirrors - the equivalent MD5 & SHA1 classes. - - ##################################################################### */ - /*}}}*/ #ifndef APTPKG_SHA256_H #define APTPKG_SHA256_H -#include -#include -#include -#include - -using std::string; -using std::min; - -class SHA256Summation; - -class SHA256SumValue -{ - friend class SHA256Summation; - unsigned char Sum[32]; - - public: - - // Accessors - bool operator ==(const SHA256SumValue &rhs) const; - string Value() const; - inline void Value(unsigned char S[32]) - {for (int I = 0; I != sizeof(Sum); I++) S[I] = Sum[I];}; - inline operator string() const {return Value();}; - bool Set(string Str); - inline void Set(unsigned char S[32]) - {for (int I = 0; I != sizeof(Sum); I++) Sum[I] = S[I];}; - - SHA256SumValue(string Str); - SHA256SumValue(); -}; - -struct sha256_ctx { - uint32_t count[2]; - uint32_t state[8]; - uint8_t buf[128]; -}; - -class SHA256Summation -{ - struct sha256_ctx Sum; - - bool Done; - - public: +#include "sha2.h" - bool Add(const unsigned char *inbuf,unsigned long inlen); - inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));}; - bool AddFD(int Fd,unsigned long Size); - inline bool Add(const unsigned char *Beg,const unsigned char *End) - {return Add(Beg,End-Beg);}; - SHA256SumValue Result(); - - SHA256Summation(); -}; +#warn "This header is deprecated, please include sha2.h instead" #endif diff --git a/apt-pkg/contrib/sha2_internal.cc b/apt-pkg/contrib/sha2_internal.cc new file mode 100644 index 000000000..10b82dec4 --- /dev/null +++ b/apt-pkg/contrib/sha2_internal.cc @@ -0,0 +1,1065 @@ +/* + * FILE: sha2.c + * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/ + * + * Copyright (c) 2000-2001, Aaron D. Gifford + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id: sha2.c,v 1.1 2001/11/08 00:01:51 adg Exp adg $ + */ + +#include /* memcpy()/memset() or bcopy()/bzero() */ +#include /* assert() */ +#include "sha2_internal.h" + +/* + * ASSERT NOTE: + * Some sanity checking code is included using assert(). On my FreeBSD + * system, this additional code can be removed by compiling with NDEBUG + * defined. Check your own systems manpage on assert() to see how to + * compile WITHOUT the sanity checking code on your system. + * + * UNROLLED TRANSFORM LOOP NOTE: + * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform + * loop version for the hash transform rounds (defined using macros + * later in this file). Either define on the command line, for example: + * + * cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c + * + * or define below: + * + * #define SHA2_UNROLL_TRANSFORM + * + */ + + +/*** SHA-256/384/512 Machine Architecture Definitions *****************/ +/* + * BYTE_ORDER NOTE: + * + * Please make sure that your system defines BYTE_ORDER. If your + * architecture is little-endian, make sure it also defines + * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are + * equivilent. + * + * If your system does not define the above, then you can do so by + * hand like this: + * + * #define LITTLE_ENDIAN 1234 + * #define BIG_ENDIAN 4321 + * + * And for little-endian machines, add: + * + * #define BYTE_ORDER LITTLE_ENDIAN + * + * Or for big-endian machines: + * + * #define BYTE_ORDER BIG_ENDIAN + * + * The FreeBSD machine this was written on defines BYTE_ORDER + * appropriately by including (which in turn includes + * where the appropriate definitions are actually + * made). + */ +#if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN) +#error Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN +#endif + +/* + * Define the followingsha2_* types to types of the correct length on + * the native archtecture. Most BSD systems and Linux define u_intXX_t + * types. Machines with very recent ANSI C headers, can use the + * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H + * during compile or in the sha.h header file. + * + * Machines that support neither u_intXX_t nor inttypes.h's uintXX_t + * will need to define these three typedefs below (and the appropriate + * ones in sha.h too) by hand according to their system architecture. + * + * Thank you, Jun-ichiro itojun Hagino, for suggesting using u_intXX_t + * types and pointing out recent ANSI C support for uintXX_t in inttypes.h. + */ +#ifdef SHA2_USE_INTTYPES_H + +typedef uint8_t sha2_byte; /* Exactly 1 byte */ +typedef uint32_t sha2_word32; /* Exactly 4 bytes */ +typedef uint64_t sha2_word64; /* Exactly 8 bytes */ + +#else /* SHA2_USE_INTTYPES_H */ + +typedef u_int8_t sha2_byte; /* Exactly 1 byte */ +typedef u_int32_t sha2_word32; /* Exactly 4 bytes */ +typedef u_int64_t sha2_word64; /* Exactly 8 bytes */ + +#endif /* SHA2_USE_INTTYPES_H */ + + +/*** SHA-256/384/512 Various Length Definitions ***********************/ +/* NOTE: Most of these are in sha2.h */ +#define SHA256_SHORT_BLOCK_LENGTH (SHA256_BLOCK_LENGTH - 8) +#define SHA384_SHORT_BLOCK_LENGTH (SHA384_BLOCK_LENGTH - 16) +#define SHA512_SHORT_BLOCK_LENGTH (SHA512_BLOCK_LENGTH - 16) + + +/*** ENDIAN REVERSAL MACROS *******************************************/ +#if BYTE_ORDER == LITTLE_ENDIAN +#define REVERSE32(w,x) { \ + sha2_word32 tmp = (w); \ + tmp = (tmp >> 16) | (tmp << 16); \ + (x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \ +} +#define REVERSE64(w,x) { \ + sha2_word64 tmp = (w); \ + tmp = (tmp >> 32) | (tmp << 32); \ + tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \ + ((tmp & 0x00ff00ff00ff00ffULL) << 8); \ + (x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \ + ((tmp & 0x0000ffff0000ffffULL) << 16); \ +} +#endif /* BYTE_ORDER == LITTLE_ENDIAN */ + +/* + * Macro for incrementally adding the unsigned 64-bit integer n to the + * unsigned 128-bit integer (represented using a two-element array of + * 64-bit words): + */ +#define ADDINC128(w,n) { \ + (w)[0] += (sha2_word64)(n); \ + if ((w)[0] < (n)) { \ + (w)[1]++; \ + } \ +} + +/* + * Macros for copying blocks of memory and for zeroing out ranges + * of memory. Using these macros makes it easy to switch from + * using memset()/memcpy() and using bzero()/bcopy(). + * + * Please define either SHA2_USE_MEMSET_MEMCPY or define + * SHA2_USE_BZERO_BCOPY depending on which function set you + * choose to use: + */ +#if !defined(SHA2_USE_MEMSET_MEMCPY) && !defined(SHA2_USE_BZERO_BCOPY) +/* Default to memset()/memcpy() if no option is specified */ +#define SHA2_USE_MEMSET_MEMCPY 1 +#endif +#if defined(SHA2_USE_MEMSET_MEMCPY) && defined(SHA2_USE_BZERO_BCOPY) +/* Abort with an error if BOTH options are defined */ +#error Define either SHA2_USE_MEMSET_MEMCPY or SHA2_USE_BZERO_BCOPY, not both! +#endif + +#ifdef SHA2_USE_MEMSET_MEMCPY +#define MEMSET_BZERO(p,l) memset((p), 0, (l)) +#define MEMCPY_BCOPY(d,s,l) memcpy((d), (s), (l)) +#endif +#ifdef SHA2_USE_BZERO_BCOPY +#define MEMSET_BZERO(p,l) bzero((p), (l)) +#define MEMCPY_BCOPY(d,s,l) bcopy((s), (d), (l)) +#endif + + +/*** THE SIX LOGICAL FUNCTIONS ****************************************/ +/* + * Bit shifting and rotation (used by the six SHA-XYZ logical functions: + * + * NOTE: The naming of R and S appears backwards here (R is a SHIFT and + * S is a ROTATION) because the SHA-256/384/512 description document + * (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this + * same "backwards" definition. + */ +/* Shift-right (used in SHA-256, SHA-384, and SHA-512): */ +#define R(b,x) ((x) >> (b)) +/* 32-bit Rotate-right (used in SHA-256): */ +#define S32(b,x) (((x) >> (b)) | ((x) << (32 - (b)))) +/* 64-bit Rotate-right (used in SHA-384 and SHA-512): */ +#define S64(b,x) (((x) >> (b)) | ((x) << (64 - (b)))) + +/* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */ +#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) +#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) + +/* Four of six logical functions used in SHA-256: */ +#define Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x))) +#define Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x))) +#define sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x))) +#define sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x))) + +/* Four of six logical functions used in SHA-384 and SHA-512: */ +#define Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x))) +#define Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x))) +#define sigma0_512(x) (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x))) +#define sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x))) + +/*** INTERNAL FUNCTION PROTOTYPES *************************************/ +/* NOTE: These should not be accessed directly from outside this + * library -- they are intended for private internal visibility/use + * only. + */ +void SHA512_Last(SHA512_CTX*); +void SHA256_Transform(SHA256_CTX*, const sha2_word32*); +void SHA512_Transform(SHA512_CTX*, const sha2_word64*); + + +/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/ +/* Hash constant words K for SHA-256: */ +const static sha2_word32 K256[64] = { + 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, + 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, + 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL, + 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL, + 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, + 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, + 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, + 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL, + 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL, + 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, + 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, + 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, + 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL, + 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL, + 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, + 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL +}; + +/* Initial hash value H for SHA-256: */ +const static sha2_word32 sha256_initial_hash_value[8] = { + 0x6a09e667UL, + 0xbb67ae85UL, + 0x3c6ef372UL, + 0xa54ff53aUL, + 0x510e527fUL, + 0x9b05688cUL, + 0x1f83d9abUL, + 0x5be0cd19UL +}; + +/* Hash constant words K for SHA-384 and SHA-512: */ +const static sha2_word64 K512[80] = { + 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, + 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, + 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, + 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, + 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, + 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, + 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, + 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, + 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, + 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, + 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, + 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, + 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, + 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, + 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, + 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, + 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, + 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, + 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, + 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, + 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, + 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, + 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, + 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, + 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, + 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, + 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, + 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, + 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, + 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, + 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, + 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, + 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, + 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, + 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, + 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, + 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, + 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, + 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, + 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL +}; + +/* Initial hash value H for SHA-384 */ +const static sha2_word64 sha384_initial_hash_value[8] = { + 0xcbbb9d5dc1059ed8ULL, + 0x629a292a367cd507ULL, + 0x9159015a3070dd17ULL, + 0x152fecd8f70e5939ULL, + 0x67332667ffc00b31ULL, + 0x8eb44a8768581511ULL, + 0xdb0c2e0d64f98fa7ULL, + 0x47b5481dbefa4fa4ULL +}; + +/* Initial hash value H for SHA-512 */ +const static sha2_word64 sha512_initial_hash_value[8] = { + 0x6a09e667f3bcc908ULL, + 0xbb67ae8584caa73bULL, + 0x3c6ef372fe94f82bULL, + 0xa54ff53a5f1d36f1ULL, + 0x510e527fade682d1ULL, + 0x9b05688c2b3e6c1fULL, + 0x1f83d9abfb41bd6bULL, + 0x5be0cd19137e2179ULL +}; + +/* + * Constant used by SHA256/384/512_End() functions for converting the + * digest to a readable hexadecimal character string: + */ +static const char *sha2_hex_digits = "0123456789abcdef"; + + +/*** SHA-256: *********************************************************/ +void SHA256_Init(SHA256_CTX* context) { + if (context == (SHA256_CTX*)0) { + return; + } + MEMCPY_BCOPY(context->state, sha256_initial_hash_value, SHA256_DIGEST_LENGTH); + MEMSET_BZERO(context->buffer, SHA256_BLOCK_LENGTH); + context->bitcount = 0; +} + +#ifdef SHA2_UNROLL_TRANSFORM + +/* Unrolled SHA-256 round macros: */ + +#if BYTE_ORDER == LITTLE_ENDIAN + +#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \ + REVERSE32(*data++, W256[j]); \ + T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \ + K256[j] + W256[j]; \ + (d) += T1; \ + (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ + j++ + + +#else /* BYTE_ORDER == LITTLE_ENDIAN */ + +#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \ + T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \ + K256[j] + (W256[j] = *data++); \ + (d) += T1; \ + (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ + j++ + +#endif /* BYTE_ORDER == LITTLE_ENDIAN */ + +#define ROUND256(a,b,c,d,e,f,g,h) \ + s0 = W256[(j+1)&0x0f]; \ + s0 = sigma0_256(s0); \ + s1 = W256[(j+14)&0x0f]; \ + s1 = sigma1_256(s1); \ + T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + \ + (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); \ + (d) += T1; \ + (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ + j++ + +void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) { + sha2_word32 a, b, c, d, e, f, g, h, s0, s1; + sha2_word32 T1, *W256; + int j; + + W256 = (sha2_word32*)context->buffer; + + /* Initialize registers with the prev. intermediate value */ + a = context->state[0]; + b = context->state[1]; + c = context->state[2]; + d = context->state[3]; + e = context->state[4]; + f = context->state[5]; + g = context->state[6]; + h = context->state[7]; + + j = 0; + do { + /* Rounds 0 to 15 (unrolled): */ + ROUND256_0_TO_15(a,b,c,d,e,f,g,h); + ROUND256_0_TO_15(h,a,b,c,d,e,f,g); + ROUND256_0_TO_15(g,h,a,b,c,d,e,f); + ROUND256_0_TO_15(f,g,h,a,b,c,d,e); + ROUND256_0_TO_15(e,f,g,h,a,b,c,d); + ROUND256_0_TO_15(d,e,f,g,h,a,b,c); + ROUND256_0_TO_15(c,d,e,f,g,h,a,b); + ROUND256_0_TO_15(b,c,d,e,f,g,h,a); + } while (j < 16); + + /* Now for the remaining rounds to 64: */ + do { + ROUND256(a,b,c,d,e,f,g,h); + ROUND256(h,a,b,c,d,e,f,g); + ROUND256(g,h,a,b,c,d,e,f); + ROUND256(f,g,h,a,b,c,d,e); + ROUND256(e,f,g,h,a,b,c,d); + ROUND256(d,e,f,g,h,a,b,c); + ROUND256(c,d,e,f,g,h,a,b); + ROUND256(b,c,d,e,f,g,h,a); + } while (j < 64); + + /* Compute the current intermediate hash value */ + context->state[0] += a; + context->state[1] += b; + context->state[2] += c; + context->state[3] += d; + context->state[4] += e; + context->state[5] += f; + context->state[6] += g; + context->state[7] += h; + + /* Clean up */ + a = b = c = d = e = f = g = h = T1 = 0; +} + +#else /* SHA2_UNROLL_TRANSFORM */ + +void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) { + sha2_word32 a, b, c, d, e, f, g, h, s0, s1; + sha2_word32 T1, T2, *W256; + int j; + + W256 = (sha2_word32*)context->buffer; + + /* Initialize registers with the prev. intermediate value */ + a = context->state[0]; + b = context->state[1]; + c = context->state[2]; + d = context->state[3]; + e = context->state[4]; + f = context->state[5]; + g = context->state[6]; + h = context->state[7]; + + j = 0; + do { +#if BYTE_ORDER == LITTLE_ENDIAN + /* Copy data while converting to host byte order */ + REVERSE32(*data++,W256[j]); + /* Apply the SHA-256 compression function to update a..h */ + T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j]; +#else /* BYTE_ORDER == LITTLE_ENDIAN */ + /* Apply the SHA-256 compression function to update a..h with copy */ + T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] = *data++); +#endif /* BYTE_ORDER == LITTLE_ENDIAN */ + T2 = Sigma0_256(a) + Maj(a, b, c); + h = g; + g = f; + f = e; + e = d + T1; + d = c; + c = b; + b = a; + a = T1 + T2; + + j++; + } while (j < 16); + + do { + /* Part of the message block expansion: */ + s0 = W256[(j+1)&0x0f]; + s0 = sigma0_256(s0); + s1 = W256[(j+14)&0x0f]; + s1 = sigma1_256(s1); + + /* Apply the SHA-256 compression function to update a..h */ + T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + + (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); + T2 = Sigma0_256(a) + Maj(a, b, c); + h = g; + g = f; + f = e; + e = d + T1; + d = c; + c = b; + b = a; + a = T1 + T2; + + j++; + } while (j < 64); + + /* Compute the current intermediate hash value */ + context->state[0] += a; + context->state[1] += b; + context->state[2] += c; + context->state[3] += d; + context->state[4] += e; + context->state[5] += f; + context->state[6] += g; + context->state[7] += h; + + /* Clean up */ + a = b = c = d = e = f = g = h = T1 = T2 = 0; +} + +#endif /* SHA2_UNROLL_TRANSFORM */ + +void SHA256_Update(SHA256_CTX* context, const sha2_byte *data, size_t len) { + unsigned int freespace, usedspace; + + if (len == 0) { + /* Calling with no data is valid - we do nothing */ + return; + } + + /* Sanity check: */ + assert(context != (SHA256_CTX*)0 && data != (sha2_byte*)0); + + usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH; + if (usedspace > 0) { + /* Calculate how much free space is available in the buffer */ + freespace = SHA256_BLOCK_LENGTH - usedspace; + + if (len >= freespace) { + /* Fill the buffer completely and process it */ + MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace); + context->bitcount += freespace << 3; + len -= freespace; + data += freespace; + SHA256_Transform(context, (sha2_word32*)context->buffer); + } else { + /* The buffer is not yet full */ + MEMCPY_BCOPY(&context->buffer[usedspace], data, len); + context->bitcount += len << 3; + /* Clean up: */ + usedspace = freespace = 0; + return; + } + } + while (len >= SHA256_BLOCK_LENGTH) { + /* Process as many complete blocks as we can */ + SHA256_Transform(context, (sha2_word32*)data); + context->bitcount += SHA256_BLOCK_LENGTH << 3; + len -= SHA256_BLOCK_LENGTH; + data += SHA256_BLOCK_LENGTH; + } + if (len > 0) { + /* There's left-overs, so save 'em */ + MEMCPY_BCOPY(context->buffer, data, len); + context->bitcount += len << 3; + } + /* Clean up: */ + usedspace = freespace = 0; +} + +void SHA256_Final(sha2_byte digest[], SHA256_CTX* context) { + sha2_word32 *d = (sha2_word32*)digest; + unsigned int usedspace; + + /* Sanity check: */ + assert(context != (SHA256_CTX*)0); + + /* If no digest buffer is passed, we don't bother doing this: */ + if (digest != (sha2_byte*)0) { + usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH; +#if BYTE_ORDER == LITTLE_ENDIAN + /* Convert FROM host byte order */ + REVERSE64(context->bitcount,context->bitcount); +#endif + if (usedspace > 0) { + /* Begin padding with a 1 bit: */ + context->buffer[usedspace++] = 0x80; + + if (usedspace <= SHA256_SHORT_BLOCK_LENGTH) { + /* Set-up for the last transform: */ + MEMSET_BZERO(&context->buffer[usedspace], SHA256_SHORT_BLOCK_LENGTH - usedspace); + } else { + if (usedspace < SHA256_BLOCK_LENGTH) { + MEMSET_BZERO(&context->buffer[usedspace], SHA256_BLOCK_LENGTH - usedspace); + } + /* Do second-to-last transform: */ + SHA256_Transform(context, (sha2_word32*)context->buffer); + + /* And set-up for the last transform: */ + MEMSET_BZERO(context->buffer, SHA256_SHORT_BLOCK_LENGTH); + } + } else { + /* Set-up for the last transform: */ + MEMSET_BZERO(context->buffer, SHA256_SHORT_BLOCK_LENGTH); + + /* Begin padding with a 1 bit: */ + *context->buffer = 0x80; + } + /* Set the bit count: */ + *(sha2_word64*)&context->buffer[SHA256_SHORT_BLOCK_LENGTH] = context->bitcount; + + /* Final transform: */ + SHA256_Transform(context, (sha2_word32*)context->buffer); + +#if BYTE_ORDER == LITTLE_ENDIAN + { + /* Convert TO host byte order */ + int j; + for (j = 0; j < 8; j++) { + REVERSE32(context->state[j],context->state[j]); + *d++ = context->state[j]; + } + } +#else + MEMCPY_BCOPY(d, context->state, SHA256_DIGEST_LENGTH); +#endif + } + + /* Clean up state data: */ + MEMSET_BZERO(context, sizeof(context)); + usedspace = 0; +} + +char *SHA256_End(SHA256_CTX* context, char buffer[]) { + sha2_byte digest[SHA256_DIGEST_LENGTH], *d = digest; + int i; + + /* Sanity check: */ + assert(context != (SHA256_CTX*)0); + + if (buffer != (char*)0) { + SHA256_Final(digest, context); + + for (i = 0; i < SHA256_DIGEST_LENGTH; i++) { + *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4]; + *buffer++ = sha2_hex_digits[*d & 0x0f]; + d++; + } + *buffer = (char)0; + } else { + MEMSET_BZERO(context, sizeof(context)); + } + MEMSET_BZERO(digest, SHA256_DIGEST_LENGTH); + return buffer; +} + +char* SHA256_Data(const sha2_byte* data, size_t len, char digest[SHA256_DIGEST_STRING_LENGTH]) { + SHA256_CTX context; + + SHA256_Init(&context); + SHA256_Update(&context, data, len); + return SHA256_End(&context, digest); +} + + +/*** SHA-512: *********************************************************/ +void SHA512_Init(SHA512_CTX* context) { + if (context == (SHA512_CTX*)0) { + return; + } + MEMCPY_BCOPY(context->state, sha512_initial_hash_value, SHA512_DIGEST_LENGTH); + MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH); + context->bitcount[0] = context->bitcount[1] = 0; +} + +#ifdef SHA2_UNROLL_TRANSFORM + +/* Unrolled SHA-512 round macros: */ +#if BYTE_ORDER == LITTLE_ENDIAN + +#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \ + REVERSE64(*data++, W512[j]); \ + T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \ + K512[j] + W512[j]; \ + (d) += T1, \ + (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \ + j++ + + +#else /* BYTE_ORDER == LITTLE_ENDIAN */ + +#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \ + T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \ + K512[j] + (W512[j] = *data++); \ + (d) += T1; \ + (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \ + j++ + +#endif /* BYTE_ORDER == LITTLE_ENDIAN */ + +#define ROUND512(a,b,c,d,e,f,g,h) \ + s0 = W512[(j+1)&0x0f]; \ + s0 = sigma0_512(s0); \ + s1 = W512[(j+14)&0x0f]; \ + s1 = sigma1_512(s1); \ + T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \ + (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); \ + (d) += T1; \ + (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \ + j++ + +void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) { + sha2_word64 a, b, c, d, e, f, g, h, s0, s1; + sha2_word64 T1, *W512 = (sha2_word64*)context->buffer; + int j; + + /* Initialize registers with the prev. intermediate value */ + a = context->state[0]; + b = context->state[1]; + c = context->state[2]; + d = context->state[3]; + e = context->state[4]; + f = context->state[5]; + g = context->state[6]; + h = context->state[7]; + + j = 0; + do { + ROUND512_0_TO_15(a,b,c,d,e,f,g,h); + ROUND512_0_TO_15(h,a,b,c,d,e,f,g); + ROUND512_0_TO_15(g,h,a,b,c,d,e,f); + ROUND512_0_TO_15(f,g,h,a,b,c,d,e); + ROUND512_0_TO_15(e,f,g,h,a,b,c,d); + ROUND512_0_TO_15(d,e,f,g,h,a,b,c); + ROUND512_0_TO_15(c,d,e,f,g,h,a,b); + ROUND512_0_TO_15(b,c,d,e,f,g,h,a); + } while (j < 16); + + /* Now for the remaining rounds up to 79: */ + do { + ROUND512(a,b,c,d,e,f,g,h); + ROUND512(h,a,b,c,d,e,f,g); + ROUND512(g,h,a,b,c,d,e,f); + ROUND512(f,g,h,a,b,c,d,e); + ROUND512(e,f,g,h,a,b,c,d); + ROUND512(d,e,f,g,h,a,b,c); + ROUND512(c,d,e,f,g,h,a,b); + ROUND512(b,c,d,e,f,g,h,a); + } while (j < 80); + + /* Compute the current intermediate hash value */ + context->state[0] += a; + context->state[1] += b; + context->state[2] += c; + context->state[3] += d; + context->state[4] += e; + context->state[5] += f; + context->state[6] += g; + context->state[7] += h; + + /* Clean up */ + a = b = c = d = e = f = g = h = T1 = 0; +} + +#else /* SHA2_UNROLL_TRANSFORM */ + +void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) { + sha2_word64 a, b, c, d, e, f, g, h, s0, s1; + sha2_word64 T1, T2, *W512 = (sha2_word64*)context->buffer; + int j; + + /* Initialize registers with the prev. intermediate value */ + a = context->state[0]; + b = context->state[1]; + c = context->state[2]; + d = context->state[3]; + e = context->state[4]; + f = context->state[5]; + g = context->state[6]; + h = context->state[7]; + + j = 0; + do { +#if BYTE_ORDER == LITTLE_ENDIAN + /* Convert TO host byte order */ + REVERSE64(*data++, W512[j]); + /* Apply the SHA-512 compression function to update a..h */ + T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j]; +#else /* BYTE_ORDER == LITTLE_ENDIAN */ + /* Apply the SHA-512 compression function to update a..h with copy */ + T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] = *data++); +#endif /* BYTE_ORDER == LITTLE_ENDIAN */ + T2 = Sigma0_512(a) + Maj(a, b, c); + h = g; + g = f; + f = e; + e = d + T1; + d = c; + c = b; + b = a; + a = T1 + T2; + + j++; + } while (j < 16); + + do { + /* Part of the message block expansion: */ + s0 = W512[(j+1)&0x0f]; + s0 = sigma0_512(s0); + s1 = W512[(j+14)&0x0f]; + s1 = sigma1_512(s1); + + /* Apply the SHA-512 compression function to update a..h */ + T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + + (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); + T2 = Sigma0_512(a) + Maj(a, b, c); + h = g; + g = f; + f = e; + e = d + T1; + d = c; + c = b; + b = a; + a = T1 + T2; + + j++; + } while (j < 80); + + /* Compute the current intermediate hash value */ + context->state[0] += a; + context->state[1] += b; + context->state[2] += c; + context->state[3] += d; + context->state[4] += e; + context->state[5] += f; + context->state[6] += g; + context->state[7] += h; + + /* Clean up */ + a = b = c = d = e = f = g = h = T1 = T2 = 0; +} + +#endif /* SHA2_UNROLL_TRANSFORM */ + +void SHA512_Update(SHA512_CTX* context, const sha2_byte *data, size_t len) { + unsigned int freespace, usedspace; + + if (len == 0) { + /* Calling with no data is valid - we do nothing */ + return; + } + + /* Sanity check: */ + assert(context != (SHA512_CTX*)0 && data != (sha2_byte*)0); + + usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH; + if (usedspace > 0) { + /* Calculate how much free space is available in the buffer */ + freespace = SHA512_BLOCK_LENGTH - usedspace; + + if (len >= freespace) { + /* Fill the buffer completely and process it */ + MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace); + ADDINC128(context->bitcount, freespace << 3); + len -= freespace; + data += freespace; + SHA512_Transform(context, (sha2_word64*)context->buffer); + } else { + /* The buffer is not yet full */ + MEMCPY_BCOPY(&context->buffer[usedspace], data, len); + ADDINC128(context->bitcount, len << 3); + /* Clean up: */ + usedspace = freespace = 0; + return; + } + } + while (len >= SHA512_BLOCK_LENGTH) { + /* Process as many complete blocks as we can */ + SHA512_Transform(context, (sha2_word64*)data); + ADDINC128(context->bitcount, SHA512_BLOCK_LENGTH << 3); + len -= SHA512_BLOCK_LENGTH; + data += SHA512_BLOCK_LENGTH; + } + if (len > 0) { + /* There's left-overs, so save 'em */ + MEMCPY_BCOPY(context->buffer, data, len); + ADDINC128(context->bitcount, len << 3); + } + /* Clean up: */ + usedspace = freespace = 0; +} + +void SHA512_Last(SHA512_CTX* context) { + unsigned int usedspace; + + usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH; +#if BYTE_ORDER == LITTLE_ENDIAN + /* Convert FROM host byte order */ + REVERSE64(context->bitcount[0],context->bitcount[0]); + REVERSE64(context->bitcount[1],context->bitcount[1]); +#endif + if (usedspace > 0) { + /* Begin padding with a 1 bit: */ + context->buffer[usedspace++] = 0x80; + + if (usedspace <= SHA512_SHORT_BLOCK_LENGTH) { + /* Set-up for the last transform: */ + MEMSET_BZERO(&context->buffer[usedspace], SHA512_SHORT_BLOCK_LENGTH - usedspace); + } else { + if (usedspace < SHA512_BLOCK_LENGTH) { + MEMSET_BZERO(&context->buffer[usedspace], SHA512_BLOCK_LENGTH - usedspace); + } + /* Do second-to-last transform: */ + SHA512_Transform(context, (sha2_word64*)context->buffer); + + /* And set-up for the last transform: */ + MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH - 2); + } + } else { + /* Prepare for final transform: */ + MEMSET_BZERO(context->buffer, SHA512_SHORT_BLOCK_LENGTH); + + /* Begin padding with a 1 bit: */ + *context->buffer = 0x80; + } + /* Store the length of input data (in bits): */ + *(sha2_word64*)&context->buffer[SHA512_SHORT_BLOCK_LENGTH] = context->bitcount[1]; + *(sha2_word64*)&context->buffer[SHA512_SHORT_BLOCK_LENGTH+8] = context->bitcount[0]; + + /* Final transform: */ + SHA512_Transform(context, (sha2_word64*)context->buffer); +} + +void SHA512_Final(sha2_byte digest[], SHA512_CTX* context) { + sha2_word64 *d = (sha2_word64*)digest; + + /* Sanity check: */ + assert(context != (SHA512_CTX*)0); + + /* If no digest buffer is passed, we don't bother doing this: */ + if (digest != (sha2_byte*)0) { + SHA512_Last(context); + + /* Save the hash data for output: */ +#if BYTE_ORDER == LITTLE_ENDIAN + { + /* Convert TO host byte order */ + int j; + for (j = 0; j < 8; j++) { + REVERSE64(context->state[j],context->state[j]); + *d++ = context->state[j]; + } + } +#else + MEMCPY_BCOPY(d, context->state, SHA512_DIGEST_LENGTH); +#endif + } + + /* Zero out state data */ + MEMSET_BZERO(context, sizeof(context)); +} + +char *SHA512_End(SHA512_CTX* context, char buffer[]) { + sha2_byte digest[SHA512_DIGEST_LENGTH], *d = digest; + int i; + + /* Sanity check: */ + assert(context != (SHA512_CTX*)0); + + if (buffer != (char*)0) { + SHA512_Final(digest, context); + + for (i = 0; i < SHA512_DIGEST_LENGTH; i++) { + *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4]; + *buffer++ = sha2_hex_digits[*d & 0x0f]; + d++; + } + *buffer = (char)0; + } else { + MEMSET_BZERO(context, sizeof(context)); + } + MEMSET_BZERO(digest, SHA512_DIGEST_LENGTH); + return buffer; +} + +char* SHA512_Data(const sha2_byte* data, size_t len, char digest[SHA512_DIGEST_STRING_LENGTH]) { + SHA512_CTX context; + + SHA512_Init(&context); + SHA512_Update(&context, data, len); + return SHA512_End(&context, digest); +} + + +/*** SHA-384: *********************************************************/ +void SHA384_Init(SHA384_CTX* context) { + if (context == (SHA384_CTX*)0) { + return; + } + MEMCPY_BCOPY(context->state, sha384_initial_hash_value, SHA512_DIGEST_LENGTH); + MEMSET_BZERO(context->buffer, SHA384_BLOCK_LENGTH); + context->bitcount[0] = context->bitcount[1] = 0; +} + +void SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) { + SHA512_Update((SHA512_CTX*)context, data, len); +} + +void SHA384_Final(sha2_byte digest[], SHA384_CTX* context) { + sha2_word64 *d = (sha2_word64*)digest; + + /* Sanity check: */ + assert(context != (SHA384_CTX*)0); + + /* If no digest buffer is passed, we don't bother doing this: */ + if (digest != (sha2_byte*)0) { + SHA512_Last((SHA512_CTX*)context); + + /* Save the hash data for output: */ +#if BYTE_ORDER == LITTLE_ENDIAN + { + /* Convert TO host byte order */ + int j; + for (j = 0; j < 6; j++) { + REVERSE64(context->state[j],context->state[j]); + *d++ = context->state[j]; + } + } +#else + MEMCPY_BCOPY(d, context->state, SHA384_DIGEST_LENGTH); +#endif + } + + /* Zero out state data */ + MEMSET_BZERO(context, sizeof(context)); +} + +char *SHA384_End(SHA384_CTX* context, char buffer[]) { + sha2_byte digest[SHA384_DIGEST_LENGTH], *d = digest; + int i; + + /* Sanity check: */ + assert(context != (SHA384_CTX*)0); + + if (buffer != (char*)0) { + SHA384_Final(digest, context); + + for (i = 0; i < SHA384_DIGEST_LENGTH; i++) { + *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4]; + *buffer++ = sha2_hex_digits[*d & 0x0f]; + d++; + } + *buffer = (char)0; + } else { + MEMSET_BZERO(context, sizeof(context)); + } + MEMSET_BZERO(digest, SHA384_DIGEST_LENGTH); + return buffer; +} + +char* SHA384_Data(const sha2_byte* data, size_t len, char digest[SHA384_DIGEST_STRING_LENGTH]) { + SHA384_CTX context; + + SHA384_Init(&context); + SHA384_Update(&context, data, len); + return SHA384_End(&context, digest); +} + diff --git a/apt-pkg/contrib/sha2_internal.h b/apt-pkg/contrib/sha2_internal.h new file mode 100644 index 000000000..bf759ad45 --- /dev/null +++ b/apt-pkg/contrib/sha2_internal.h @@ -0,0 +1,197 @@ +/* + * FILE: sha2.h + * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/ + * + * Copyright (c) 2000-2001, Aaron D. Gifford + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the names of contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $ + */ + +#ifndef __SHA2_H__ +#define __SHA2_H__ + +#ifdef __cplusplus +extern "C" { +#endif + + +/* + * Import u_intXX_t size_t type definitions from system headers. You + * may need to change this, or define these things yourself in this + * file. + */ +#include + +#ifdef SHA2_USE_INTTYPES_H + +#include + +#endif /* SHA2_USE_INTTYPES_H */ + + +/*** SHA-256/384/512 Various Length Definitions ***********************/ +#define SHA256_BLOCK_LENGTH 64 +#define SHA256_DIGEST_LENGTH 32 +#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1) +#define SHA384_BLOCK_LENGTH 128 +#define SHA384_DIGEST_LENGTH 48 +#define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1) +#define SHA512_BLOCK_LENGTH 128 +#define SHA512_DIGEST_LENGTH 64 +#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1) + + +/*** SHA-256/384/512 Context Structures *******************************/ +/* NOTE: If your architecture does not define either u_intXX_t types or + * uintXX_t (from inttypes.h), you may need to define things by hand + * for your system: + */ +#if 0 +typedef unsigned char u_int8_t; /* 1-byte (8-bits) */ +typedef unsigned int u_int32_t; /* 4-bytes (32-bits) */ +typedef unsigned long long u_int64_t; /* 8-bytes (64-bits) */ +#endif +/* + * Most BSD systems already define u_intXX_t types, as does Linux. + * Some systems, however, like Compaq's Tru64 Unix instead can use + * uintXX_t types defined by very recent ANSI C standards and included + * in the file: + * + * #include + * + * If you choose to use then please define: + * + * #define SHA2_USE_INTTYPES_H + * + * Or on the command line during compile: + * + * cc -DSHA2_USE_INTTYPES_H ... + */ +#ifdef SHA2_USE_INTTYPES_H + +typedef struct _SHA256_CTX { + uint32_t state[8]; + uint64_t bitcount; + uint8_t buffer[SHA256_BLOCK_LENGTH]; +} SHA256_CTX; +typedef struct _SHA512_CTX { + uint64_t state[8]; + uint64_t bitcount[2]; + uint8_t buffer[SHA512_BLOCK_LENGTH]; +} SHA512_CTX; + +#else /* SHA2_USE_INTTYPES_H */ + +typedef struct _SHA256_CTX { + u_int32_t state[8]; + u_int64_t bitcount; + u_int8_t buffer[SHA256_BLOCK_LENGTH]; +} SHA256_CTX; +typedef struct _SHA512_CTX { + u_int64_t state[8]; + u_int64_t bitcount[2]; + u_int8_t buffer[SHA512_BLOCK_LENGTH]; +} SHA512_CTX; + +#endif /* SHA2_USE_INTTYPES_H */ + +typedef SHA512_CTX SHA384_CTX; + + +/*** SHA-256/384/512 Function Prototypes ******************************/ +#ifndef NOPROTO +#ifdef SHA2_USE_INTTYPES_H + +void SHA256_Init(SHA256_CTX *); +void SHA256_Update(SHA256_CTX*, const uint8_t*, size_t); +void SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*); +char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]); +char* SHA256_Data(const uint8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]); + +void SHA384_Init(SHA384_CTX*); +void SHA384_Update(SHA384_CTX*, const uint8_t*, size_t); +void SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*); +char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]); +char* SHA384_Data(const uint8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]); + +void SHA512_Init(SHA512_CTX*); +void SHA512_Update(SHA512_CTX*, const uint8_t*, size_t); +void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); +char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]); +char* SHA512_Data(const uint8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]); + +#else /* SHA2_USE_INTTYPES_H */ + +void SHA256_Init(SHA256_CTX *); +void SHA256_Update(SHA256_CTX*, const u_int8_t*, size_t); +void SHA256_Final(u_int8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*); +char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]); +char* SHA256_Data(const u_int8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]); + +void SHA384_Init(SHA384_CTX*); +void SHA384_Update(SHA384_CTX*, const u_int8_t*, size_t); +void SHA384_Final(u_int8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*); +char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]); +char* SHA384_Data(const u_int8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]); + +void SHA512_Init(SHA512_CTX*); +void SHA512_Update(SHA512_CTX*, const u_int8_t*, size_t); +void SHA512_Final(u_int8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); +char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]); +char* SHA512_Data(const u_int8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]); + +#endif /* SHA2_USE_INTTYPES_H */ + +#else /* NOPROTO */ + +void SHA256_Init(); +void SHA256_Update(); +void SHA256_Final(); +char* SHA256_End(); +char* SHA256_Data(); + +void SHA384_Init(); +void SHA384_Update(); +void SHA384_Final(); +char* SHA384_End(); +char* SHA384_Data(); + +void SHA512_Init(); +void SHA512_Update(); +void SHA512_Final(); +char* SHA512_End(); +char* SHA512_Data(); + +#endif /* NOPROTO */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __SHA2_H__ */ + diff --git a/apt-pkg/contrib/sha512.cc b/apt-pkg/contrib/sha512.cc deleted file mode 100644 index 752e039a7..000000000 --- a/apt-pkg/contrib/sha512.cc +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Cryptographic API. {{{ - * - * SHA-512, as specified in - * http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 2 of the License, or (at your option) - * any later version. - * - */ /*}}}*/ - -#ifdef __GNUG__ -#pragma implementation "apt-pkg/sha512.h" -#endif - -#include -#include -#include - -SHA512Summation::SHA512Summation() /*{{{*/ -{ - SHA512_Init(&ctx); - Done = false; -} - /*}}}*/ -bool SHA512Summation::Add(const unsigned char *inbuf,unsigned long len) /*{{{*/ -{ - if (Done) - return false; - SHA512_Update(&ctx, inbuf, len); - return true; -} - /*}}}*/ -SHA512SumValue SHA512Summation::Result() /*{{{*/ -{ - if (!Done) { - SHA512_Final(Sum, &ctx); - Done = true; - } - - SHA512SumValue res; - res.Set(Sum); - return res; -} - /*}}}*/ -// SHA512SumValue::SHA512SumValue - Constructs the sum from a string /*{{{*/ -// --------------------------------------------------------------------- -/* The string form of a SHA512 is a 64 character hex number */ -SHA512SumValue::SHA512SumValue(string Str) -{ - memset(Sum,0,sizeof(Sum)); - Set(Str); -} - /*}}}*/ -// SHA512SumValue::SHA512SumValue - Default constructor /*{{{*/ -// --------------------------------------------------------------------- -/* Sets the value to 0 */ -SHA512SumValue::SHA512SumValue() -{ - memset(Sum,0,sizeof(Sum)); -} - /*}}}*/ -// SHA512SumValue::Set - Set the sum from a string /*{{{*/ -// --------------------------------------------------------------------- -/* Converts the hex string into a set of chars */ -bool SHA512SumValue::Set(string Str) -{ - return Hex2Num(Str,Sum,sizeof(Sum)); -} - /*}}}*/ -// SHA512SumValue::Value - Convert the number into a string /*{{{*/ -// --------------------------------------------------------------------- -/* Converts the set of chars into a hex string in lower case */ -string SHA512SumValue::Value() const -{ - char Conv[16] = - { '0','1','2','3','4','5','6','7','8','9','a','b', - 'c','d','e','f' - }; - char Result[129]; - Result[128] = 0; - - // Convert each char into two letters - int J = 0; - int I = 0; - for (; I != 128; J++,I += 2) - { - Result[I] = Conv[Sum[J] >> 4]; - Result[I + 1] = Conv[Sum[J] & 0xF]; - } - - return string(Result); -} - /*}}}*/ -// SHA512SumValue::operator == - Comparator /*{{{*/ -// --------------------------------------------------------------------- -/* Call memcmp on the buffer */ -bool SHA512SumValue::operator == (const SHA512SumValue & rhs) const -{ - return memcmp(Sum,rhs.Sum,sizeof(Sum)) == 0; -} - /*}}}*/ -// SHA512Summation::AddFD - Add content of file into the checksum /*{{{*/ -// --------------------------------------------------------------------- -/* */ -bool SHA512Summation::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; -} - /*}}}*/ - diff --git a/apt-pkg/contrib/sha512.h b/apt-pkg/contrib/sha512.h deleted file mode 100644 index 960ff1f46..000000000 --- a/apt-pkg/contrib/sha512.h +++ /dev/null @@ -1,68 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -// $Id: sha512.h,v 1.3 2001/05/07 05:05:47 jgg Exp $ -/* ###################################################################### - - SHA512SumValue - Storage for a SHA-512 hash. - SHA512Summation - SHA-512 Secure Hash Algorithm. - - This is a C++ interface to a set of SHA512Sum functions, that mirrors - the equivalent MD5 & SHA1 classes. - - ##################################################################### */ - /*}}}*/ -#ifndef APTPKG_SHA512_H -#define APTPKG_SHA512_H - -#include -#include -#include -#include - -#include "sha2.h" - -using std::string; -using std::min; - -class SHA512Summation; - -class SHA512SumValue -{ - friend class SHA512Summation; - unsigned char Sum[64]; - - public: - - // Accessors - bool operator ==(const SHA512SumValue &rhs) const; - string Value() const; - inline void Value(unsigned char S[64]) - {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[64]) - {for (int I = 0; I != sizeof(Sum); I++) Sum[I] = S[I];}; - - SHA512SumValue(string Str); - SHA512SumValue(); -}; - -class SHA512Summation -{ - SHA512_CTX ctx; - unsigned char Sum[64]; - 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);}; - SHA512SumValue Result(); - - SHA512Summation(); -}; - -#endif diff --git a/apt-pkg/makefile b/apt-pkg/makefile index c7074943c..313aefe7d 100644 --- a/apt-pkg/makefile +++ b/apt-pkg/makefile @@ -20,14 +20,14 @@ APT_DOMAIN:=libapt-pkg$(LIBAPTPKG_MAJOR) # Source code for the contributed non-core things SOURCE = contrib/mmap.cc contrib/error.cc contrib/strutl.cc \ contrib/configuration.cc contrib/progress.cc contrib/cmndline.cc \ - contrib/md5.cc contrib/sha1.cc contrib/sha256.cc contrib/sha2.cc \ - contrib/sha512.cc \ + contrib/md5.cc contrib/sha1.cc contrib/sha2.cc \ + contrib/sha2_internal.cc\ contrib/hashes.cc \ contrib/cdromutl.cc contrib/crc-16.cc contrib/netrc.cc \ contrib/fileutl.cc HEADERS = mmap.h error.h configuration.h fileutl.h cmndline.h netrc.h\ - md5.h crc-16.h cdromutl.h strutl.h sptr.h sha1.h sha256.h sha2.h \ - sha512.h\ + md5.h crc-16.h cdromutl.h strutl.h sptr.h sha1.h sha2.h \ + sha2_internal.h \ hashes.h \ macros.h weakptr.h diff --git a/ftparchive/cachedb.cc b/ftparchive/cachedb.cc index 699718e57..7e4c2e9fe 100644 --- a/ftparchive/cachedb.cc +++ b/ftparchive/cachedb.cc @@ -16,8 +16,7 @@ #include #include #include -#include -#include +#include #include #include diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc index e7eff2045..98ab852ea 100644 --- a/ftparchive/writer.cc +++ b/ftparchive/writer.cc @@ -19,8 +19,7 @@ #include #include #include -#include -#include +#include #include #include diff --git a/test/hash.cc b/test/hash.cc index 259aa4e9a..88f09fca0 100644 --- a/test/hash.cc +++ b/test/hash.cc @@ -1,7 +1,6 @@ #include #include -#include -#include +#include #include #include -- cgit v1.2.3-70-g09d2 From d953d210bb54accb416f2144104b79dcd29198ba Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 17 May 2011 20:20:46 +0200 Subject: * cmdline/apt-get.cc: - do not discard the error messages from the resolver and instead only show the general 'Broken packages' message if nothing else --- cmdline/apt-get.cc | 10 ++++++---- debian/changelog | 5 ++++- test/integration/test-handling-broken-orgroups | 4 ++-- test/integration/test-release-candidate-switching | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) (limited to 'test') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index d48ca18f9..65eaef0d8 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1886,8 +1886,7 @@ bool DoInstall(CommandLine &CmdL) { // Call the scored problem resolver Fix->InstallProtect(); - if (Fix->Resolve(true) == false) - ; //FIXME: is there a valid reason for? _error->Discard(); + Fix->Resolve(true); delete Fix; } @@ -1913,8 +1912,11 @@ bool DoInstall(CommandLine &CmdL) c1out << _("The following information may help to resolve the situation:") << endl; c1out << endl; ShowBroken(c1out,Cache,false); - return _error->Error(_("Broken packages")); - } + if (_error->PendingError() == true) + return false; + else + return _error->Error(_("Broken packages")); + } } if (!DoAutomaticRemove(Cache)) return false; diff --git a/debian/changelog b/debian/changelog index 9fc6dc193..71f64dc23 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,12 +16,15 @@ apt (0.8.15) UNRELEASED; urgency=low - let the Mark methods return if their marking was successful - if a Breaks can't be upgraded, remove it. If it or a Conflict can't be removed the installation of the breaker fails. + * cmdline/apt-get.cc: + - do not discard the error messages from the resolver and instead + only show the general 'Broken packages' message if nothing else [ Stefano Zacchiroli ] * doc/external-dependency-solver-protocol.txt: - describe EDSP and the configuration interface around it - -- David Kalnischkies Tue, 17 May 2011 17:59:24 +0200 + -- David Kalnischkies Tue, 17 May 2011 18:43:21 +0200 apt (0.8.14.2) UNRELEASED; urgency=low diff --git a/test/integration/test-handling-broken-orgroups b/test/integration/test-handling-broken-orgroups index d88ad0000..20b314074 100755 --- a/test/integration/test-handling-broken-orgroups +++ b/test/integration/test-handling-broken-orgroups @@ -58,7 +58,7 @@ The following information may help to resolve the situation: The following packages have unmet dependencies: coolstuff-broken : Depends: cool2 but it is not installable or stuff2 but it is not installable -E: Broken packages' aptget install coolstuff-broken -s +E: Unable to correct problems, you have held broken packages.' aptget install coolstuff-broken -s testequal 'Reading package lists... Building dependency tree... @@ -105,4 +105,4 @@ The following information may help to resolve the situation: The following packages have unmet dependencies: coolstuff-provided-broken : Depends: cool2 but it is not installable or stuff-abi-2 -E: Broken packages' aptget install coolstuff-provided-broken -s +E: Unable to correct problems, you have held broken packages.' aptget install coolstuff-provided-broken -s diff --git a/test/integration/test-release-candidate-switching b/test/integration/test-release-candidate-switching index b6dbe99db..0970cb935 100755 --- a/test/integration/test-release-candidate-switching +++ b/test/integration/test-release-candidate-switching @@ -416,4 +416,4 @@ The following information may help to resolve the situation: The following packages have unmet dependencies: uninstallablepkg : Depends: libmtp8 (>= 10:0.20.1) but it is not going to be installed Depends: amarok-utils (= 2.3.2-2+exp) but 2.3.1-1+sid is to be installed -E: Broken packages" aptget install uninstallablepkg/experimental --trivial-only -V -q=0 +E: Unable to correct problems, you have held broken packages." aptget install uninstallablepkg/experimental --trivial-only -V -q=0 -- cgit v1.2.3-70-g09d2 From 4e9ccfb2ff599b7a65ecec3c2f1383636f068f0c Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Tue, 5 Jul 2011 11:30:35 +0100 Subject: Removed some debug stuff, corrected the VerifyConfigure calls to VerifyAndConfigure --- apt-pkg/packagemanager.cc | 13 +++---- test/integration/test-package-reinstallation | 17 +++++++++ test/integration/test-provides-gone-with-upgrade | 46 ++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 9 deletions(-) create mode 100755 test/integration/test-package-reinstallation create mode 100755 test/integration/test-provides-gone-with-upgrade (limited to 'test') diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index ab1b13de8..f0ad74ca8 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -278,7 +278,7 @@ bool pkgPackageManager::ConfigureAll() { PkgIterator Pkg(Cache,*I); - if (ConfigurePkgs == true && VerifyConfigure(Pkg,OList) == false) + if (ConfigurePkgs == true && VerifyAndConfigure(Pkg,OList) == false) return false; List->Flag(Pkg,pkgOrderList::Configured,pkgOrderList::States); @@ -313,7 +313,7 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg) { PkgIterator Pkg(Cache,*I); - if (ConfigurePkgs == true && VerifyConfigure(Pkg,OList) == false) + if (ConfigurePkgs == true && VerifyAndConfigure(Pkg,OList) == false) return false; List->Flag(Pkg,pkgOrderList::Configured,pkgOrderList::States); @@ -346,9 +346,6 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg) configured*/ bool pkgPackageManager::VerifyConfigure(PkgIterator Pkg, pkgOrderList &OList) { - if (Debug == true) - clog << "VerifyConfigure " << Pkg.Name() << endl; - // If this is true at the end, then the package should not be configured bool error=true; // This holds the the OR status of the previous dependancy @@ -419,7 +416,7 @@ bool pkgPackageManager::VerifyConfigure(PkgIterator Pkg, pkgOrderList &OList) configures it */ bool pkgPackageManager::VerifyAndConfigure(PkgIterator Pkg, pkgOrderList &OList) { - if (VerifyConfigure(Pkg, OList)) + if (VerifyConfigure(Pkg, OList)) return Configure(Pkg); else return false; @@ -472,15 +469,13 @@ bool pkgPackageManager::DepAdd(pkgOrderList &OList,PkgIterator Pkg,int Depth) PkgIterator Pkg = Ver.ParentPkg(); // See if the current version is ok - if (Pkg.CurrentVer() == Ver && List->IsNow(Pkg) == true && + if (Pkg.CurrentVer() == Ver && List->IsFlag(Pkg,pkgOrderList::Configured) == true && Pkg.State() == PkgIterator::NeedsNothing) { Bad = false; continue; } - std::clog << OutputInDepth(Depth) << Pkg.Name() << " NeedsNothing " << (Pkg.State() == PkgIterator::NeedsNothing) << " Unpacked " << List->IsFlag(Pkg,pkgOrderList::UnPacked) << std::endl; - // Not the install version if (Cache[Pkg].InstallVer != *I || (Cache[Pkg].Keep() == true && Pkg.State() == PkgIterator::NeedsNothing)) diff --git a/test/integration/test-package-reinstallation b/test/integration/test-package-reinstallation new file mode 100755 index 000000000..359f69284 --- /dev/null +++ b/test/integration/test-package-reinstallation @@ -0,0 +1,17 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture "i386" + +insertinstalledpackage 'libc-bin' 'i386' '2.13-8' 'Replaces: libc6' +insertpackage 'unstable' 'libc-bin' 'i386' '2.13-8' 'Replaces: libc6' +insertinstalledpackage 'libc6' 'i386' '2.13-8' 'Depends: libc-bin (= 2.13-8)' +insertpackage 'unstable' 'libc6' 'i386' '2.13-8' 'Depends: libc-bin (= 2.13-8)' +insertinstalledpackage 'apt' 'i386' '0.8.15' 'Depends: libc6' + +setupaptarchive + +aptget install --reinstall libc6 libc-bin -s -o Debug::pkgPackageManager=1 diff --git a/test/integration/test-provides-gone-with-upgrade b/test/integration/test-provides-gone-with-upgrade new file mode 100755 index 000000000..ece2eaa41 --- /dev/null +++ b/test/integration/test-provides-gone-with-upgrade @@ -0,0 +1,46 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture "i386" + +insertinstalledpackage 'apt' 'i386' '0.8.14' 'Provides: libapt-pkg4.10' +insertpackage 'unstable' 'apt' 'i386' '0.8.15' 'Depends: libapt-pkg4.10' +insertpackage 'unstable' 'libapt-pkg4.10' 'i386' '0.8.15' 'Breaks: apt (<< 0.8.15) +Replaces: apt (<< 0.8.15)' + +setupaptarchive + +#testequal 'Reading package lists... +#Building dependency tree... +#The following NEW packages will be installed: +# libapt-pkg4.10 +#The following packages will be upgraded: +# apt +#1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +#Inst libapt-pkg4.10 (0.8.15 unstable [i386]) [libapt-pkg4.10:i386 on apt:i386] [] +#Conf libapt-pkg4.10:i386 broken +# Breaks:apt:i386 +# [] +#Inst apt [0.8.14] (0.8.15 unstable [i386]) +#Conf apt (0.8.15 unstable [i386]) +#E: Conf Broken libapt-pkg4.10:i386' +aptget dist-upgrade -s -o Debug::pkgPackageManager=1 +# the solution by dpkg will be to deconfigure apt with the configuration of libapt-pkg4.10 + +exit 0 + +#FIXME: a good result would be this instead, but it requires that APT can delay his immediate configuration… +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libapt-pkg4.10 +The following packages will be upgraded: + apt +1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst libapt-pkg4.10 (0.8.15 unstable [i386]) +Conf libapt-pkg4.10 (0.8.15 unstable [i386]) +Inst apt [0.8.14] (0.8.15 unstable [i386]) +Conf apt (0.8.15 unstable [i386])' aptget dist-upgrade -s -- cgit v1.2.3-70-g09d2 From aaf991a8640da0d18f8e9bbea6d9bcda166fb60c Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Wed, 13 Jul 2011 10:50:41 +0100 Subject: Added test for conflicts loop --- test/integration/test-conflicts-loop | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100755 test/integration/test-conflicts-loop (limited to 'test') diff --git a/test/integration/test-conflicts-loop b/test/integration/test-conflicts-loop new file mode 100755 index 000000000..f76c016fb --- /dev/null +++ b/test/integration/test-conflicts-loop @@ -0,0 +1,18 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture "i386" + +insertinstalledpackage 'openjdk-6-jre' 'i386' '6b16-1.8-0ubuntu1' +insertpackage 'unstable' 'openjdk-6-jre' 'i386' '6b20-1.9.8-0ubuntu1~10.04.1' 'Conflicts: openjdk-6-jre-headless (<< 6b17~pre3-1), openjdk-6-jre-lib (<< 6b17~pre3-1)' +insertinstalledpackage 'openjdk-6-jre-lib' 'i386' '6b16-1.8-0ubuntu1' +insertpackage 'unstable' 'openjdk-6-jre-lib' 'i386' '6b20-1.9.8-0ubuntu1~10.04.1' 'Conflicts: openjdk-6-jre (<< 6b17~pre3-1), openjdk-6-jre-headless (<< 6b17~pre3-1)' +insertinstalledpackage 'openjdk-6-jre-headless' 'i386' '6b16-1.8-0ubuntu1' +insertpackage 'unstable' 'openjdk-6-jre-headless' 'i386' '6b20-1.9.8-0ubuntu1~10.04.1' 'Conflicts: openjdk-6-jre (<< 6b17~pre3-1), openjdk-6-jre-lib (<< 6b17~pre3-1)' + +setupaptarchive + +aptget dist-upgrade -s -o Debug::pkgPackageManager=true -o Debug::pkgDpkgPM=true -o APT::Immediate-Configure-All=true -- cgit v1.2.3-70-g09d2 From 67dc3830798e6b59a9fce03682c9802233b0a1fe Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 13 Jul 2011 19:34:11 +0200 Subject: move hash test to libapt-testcases and add a few more tests --- test/hash.cc | 82 ------------------------------ test/libapt/hashsums_test.cc | 116 +++++++++++++++++++++++++++++++++++++++++++ test/libapt/makefile | 6 +++ test/libapt/run-tests | 7 +++ 4 files changed, 129 insertions(+), 82 deletions(-) delete mode 100644 test/hash.cc create mode 100644 test/libapt/hashsums_test.cc (limited to 'test') diff --git a/test/hash.cc b/test/hash.cc deleted file mode 100644 index 88f09fca0..000000000 --- a/test/hash.cc +++ /dev/null @@ -1,82 +0,0 @@ -#include -#include -#include -#include -#include - -using namespace std; - -template void Test(const char *In,const char *Out) -{ - T Sum; - Sum.Add(In); - - cout << "expected: '" << Out << "'" << endl; - cout << "got : '" << Sum.Result().Value() << "'" << endl; - cout << "got : '" << Sum.Result().Value() << "'" << endl; - cout << "got : '" << Sum.Result().Value() << "'" << endl; - if (stringcasecmp(Sum.Result().Value(), Out) != 0) { - cout << "FAIL" << endl << endl; - abort(); - } else { - cout << "PASS" << endl << endl; - } -} - -template void TestMill(const char *Out) -{ - T Sum; - - const unsigned char As[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - unsigned Count = 1000000; - for (; Count != 0;) - { - if (Count >= 64) - { - Sum.Add(As,64); - Count -= 64; - } - else - { - Sum.Add(As,Count); - Count = 0; - } - } - - if (stringcasecmp(Sum.Result().Value(), Out) != 0) - abort(); -} - -int main() -{ - // From FIPS PUB 180-1 - Test("abc","A9993E364706816ABA3E25717850C26C9CD0D89D"); - Test("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - "84983E441C3BD26EBAAE4AA1F95129E5E54670F1"); - TestMill("34AA973CD4C4DAA4F61EEB2BDBAD27316534016F"); - - // MD5 tests from RFC 1321 - Test("","d41d8cd98f00b204e9800998ecf8427e"); - Test("a","0cc175b9c0f1b6a831c399e269772661"); - Test("abc","900150983cd24fb0d6963f7d28e17f72"); - Test("message digest","f96b697d7cb7938d525a2f31aaf161d0"); - Test("abcdefghijklmnopqrstuvwxyz","c3fcd3d76192e4007dfb496cca67e13b"); - Test("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", - "d174ab98d277d9f5a5611c2c9f419d9f"); - Test("12345678901234567890123456789012345678901234567890123456789012345678901234567890", - "57edf4a22be3c955ac49da2e2107b67a"); - - // SHA-256, From FIPS 180-2 - Test("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"); - - // SHA-512, From - Test( - "abc", - "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" - "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"); - - return 0; -} - - diff --git a/test/libapt/hashsums_test.cc b/test/libapt/hashsums_test.cc new file mode 100644 index 000000000..12096be15 --- /dev/null +++ b/test/libapt/hashsums_test.cc @@ -0,0 +1,116 @@ +#include +#include +#include +#include +#include +#include + +#include + +#include "assert.h" + +template void Test(const char *In,const char *Out) +{ + T Sum; + Sum.Add(In); + equals(Sum.Result().Value(), Out); +} + +template void TestMill(const char *Out) +{ + T Sum; + + const unsigned char As[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + unsigned Count = 1000000; + for (; Count != 0;) + { + if (Count >= 64) + { + Sum.Add(As,64); + Count -= 64; + } + else + { + Sum.Add(As,Count); + Count = 0; + } + } + + if (stringcasecmp(Sum.Result().Value(), Out) != 0) + abort(); +} + +int main(int argc, char** argv) +{ + // From FIPS PUB 180-1 + Test("","da39a3ee5e6b4b0d3255bfef95601890afd80709"); + Test("abc","a9993e364706816aba3e25717850c26c9cd0d89d"); + Test("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + "84983e441c3bd26ebaae4aa1f95129e5e54670f1"); + TestMill("34aa973cd4c4daa4f61eeb2bdbad27316534016f"); + + // MD5 tests from RFC 1321 + Test("","d41d8cd98f00b204e9800998ecf8427e"); + Test("a","0cc175b9c0f1b6a831c399e269772661"); + Test("abc","900150983cd24fb0d6963f7d28e17f72"); + Test("message digest","f96b697d7cb7938d525a2f31aaf161d0"); + Test("abcdefghijklmnopqrstuvwxyz","c3fcd3d76192e4007dfb496cca67e13b"); + Test("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", + "d174ab98d277d9f5a5611c2c9f419d9f"); + Test("12345678901234567890123456789012345678901234567890123456789012345678901234567890", + "57edf4a22be3c955ac49da2e2107b67a"); + + // SHA-256, From FIPS 180-2 + Test("", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); + Test("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"); + + // SHA-512 + Test("", + "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce" + "47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"); + Test( + "abc", + "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" + "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"); + + + Test("The quick brown fox jumps over the lazy dog", "9e107d9d372bb6826bd81d3542a419d6"); + Test("The quick brown fox jumps over the lazy dog.", "e4d909c290d0fb1ca068ffaddf22cbd0"); + Test("The quick brown fox jumps over the lazy dog", "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"); + Test("The quick brown fox jumps over the lazy cog", "de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3"); + Test("The quick brown fox jumps over the lazy dog", "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592"); + Test("The quick brown fox jumps over the lazy dog.", "ef537f25c895bfa782526529a9b63d97aa631564d5d789c2b765448c8635fb6c"); + Test("The quick brown fox jumps over the lazy dog", "07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb64" + "2e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6"); + Test("The quick brown fox jumps over the lazy dog.", "91ea1245f20d46ae9a037a989f54f1f790f0a47607eeb8a14d12890cea77a1bb" + "c6c7ed9cf205e67b7f2b8fd4c7dfd3a7a8617e45f3c463d481c7e586c39ac1ed"); + + FILE* fd = fopen(argv[1], "r"); + if (fd == NULL) { + std::cerr << "Can't open file for 1. testing: " << argv[1] << std::endl; + return 1; + } + Hashes hashes; + hashes.AddFD(fileno(fd)); + equals(argv[2], hashes.MD5.Result().Value()); + equals(argv[3], hashes.SHA1.Result().Value()); + equals(argv[4], hashes.SHA256.Result().Value()); + equals(argv[5], hashes.SHA512.Result().Value()); + + fseek(fd, 0L, SEEK_END); + unsigned long sz = ftell(fd); + fseek(fd, 0L, SEEK_SET); + + Hashes hashes2; + hashes2.AddFD(fileno(fd), sz); + fclose(fd); + equals(argv[2], hashes2.MD5.Result().Value()); + equals(argv[3], hashes2.SHA1.Result().Value()); + equals(argv[4], hashes2.SHA256.Result().Value()); + equals(argv[5], hashes2.SHA512.Result().Value()); + + return 0; +} + + diff --git a/test/libapt/makefile b/test/libapt/makefile index 50058262e..1d36f0c7c 100644 --- a/test/libapt/makefile +++ b/test/libapt/makefile @@ -46,3 +46,9 @@ PROGRAM = GlobalError${BASENAME} SLIBS = -lapt-pkg SOURCE = globalerror_test.cc include $(PROGRAM_H) + +# test the different Hashsum classes +PROGRAM = HashSums${BASENAME} +SLIBS = -lapt-pkg +SOURCE = hashsums_test.cc +include $(PROGRAM_H) diff --git a/test/libapt/run-tests b/test/libapt/run-tests index 4b71c2097..0eea6d4f8 100755 --- a/test/libapt/run-tests +++ b/test/libapt/run-tests @@ -53,6 +53,13 @@ do "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-pt" \ "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-se~" \ "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-st.bak" + elif [ $name = "HashSums${EXT}" ]; then + TMP="$(mktemp)" + dmesg > $TMP + echo -n "Testing with \033[1;35m${name}\033[0m ... " + LD_LIBRARY_PATH=${LDPATH} ${testapp} $TMP $(md5sum $TMP | cut -d' ' -f 1) $(sha1sum $TMP | cut -d' ' -f 1) $(sha256sum $TMP | cut -d' ' -f 1) $(sha512sum $TMP | cut -d' ' -f 1) && echo "\033[1;32mOKAY\033[0m" || echo "\033[1;31mFAILED\033[0m" + rm $TMP + continue fi echo -n "Testing with \033[1;35m${name}\033[0m ... " -- cgit v1.2.3-70-g09d2 From 96c9fb174df24fadcde516f26f89d1a64f42eea7 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 13 Jul 2011 22:29:37 +0200 Subject: test that AddFD for single summations works, too --- test/libapt/hashsums_test.cc | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) (limited to 'test') diff --git a/test/libapt/hashsums_test.cc b/test/libapt/hashsums_test.cc index 12096be15..ff1536718 100644 --- a/test/libapt/hashsums_test.cc +++ b/test/libapt/hashsums_test.cc @@ -91,25 +91,50 @@ int main(int argc, char** argv) std::cerr << "Can't open file for 1. testing: " << argv[1] << std::endl; return 1; } + { Hashes hashes; hashes.AddFD(fileno(fd)); equals(argv[2], hashes.MD5.Result().Value()); equals(argv[3], hashes.SHA1.Result().Value()); equals(argv[4], hashes.SHA256.Result().Value()); equals(argv[5], hashes.SHA512.Result().Value()); - + } fseek(fd, 0L, SEEK_END); unsigned long sz = ftell(fd); fseek(fd, 0L, SEEK_SET); - - Hashes hashes2; - hashes2.AddFD(fileno(fd), sz); + { + Hashes hashes; + hashes.AddFD(fileno(fd), sz); + equals(argv[2], hashes.MD5.Result().Value()); + equals(argv[3], hashes.SHA1.Result().Value()); + equals(argv[4], hashes.SHA256.Result().Value()); + equals(argv[5], hashes.SHA512.Result().Value()); + } + fseek(fd, 0L, SEEK_SET); + { + MD5Summation md5; + md5.AddFD(fileno(fd)); + equals(argv[2], md5.Result().Value()); + } + fseek(fd, 0L, SEEK_SET); + { + SHA1Summation sha1; + sha1.AddFD(fileno(fd)); + equals(argv[3], sha1.Result().Value()); + } + fseek(fd, 0L, SEEK_SET); + { + SHA256Summation sha2; + sha2.AddFD(fileno(fd)); + equals(argv[4], sha2.Result().Value()); + } + fseek(fd, 0L, SEEK_SET); + { + SHA512Summation sha2; + sha2.AddFD(fileno(fd)); + equals(argv[5], sha2.Result().Value()); + } fclose(fd); - equals(argv[2], hashes2.MD5.Result().Value()); - equals(argv[3], hashes2.SHA1.Result().Value()); - equals(argv[4], hashes2.SHA256.Result().Value()); - equals(argv[5], hashes2.SHA512.Result().Value()); - return 0; } -- cgit v1.2.3-70-g09d2 From 4b42f43bed369817398b6c8d538f08e5bf6dff76 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 14 Jul 2011 21:06:09 +0200 Subject: * apt-pkg/deb/debmetaindex.cc: - add trusted=yes option to mark unsigned (local) repository as trusted based on a patch from Ansgar Burchardt, thanks a lot! (Closes: #596498) Note that "apt-get update" still warns about unknown signatures even when [trusted=yes] is given for the source. --- apt-pkg/deb/debmetaindex.cc | 39 ++++++++++++++---- apt-pkg/deb/debmetaindex.h | 3 ++ apt-pkg/metaindex.h | 4 ++ debian/changelog | 5 ++- doc/sources.list.5.xml | 9 ++++- .../test-bug-596498-trusted-unsigned-repo | 47 ++++++++++++++++++++++ 6 files changed, 97 insertions(+), 10 deletions(-) create mode 100755 test/integration/test-bug-596498-trusted-unsigned-repo (limited to 'test') diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc index a91cc34e9..81afb22b6 100644 --- a/apt-pkg/deb/debmetaindex.cc +++ b/apt-pkg/deb/debmetaindex.cc @@ -142,11 +142,13 @@ string debReleaseIndex::TranslationIndexURI(const char *Type, const string &Sect return URI + "dists/" + Dist + "/" + TranslationIndexURISuffix(Type, Section); } -debReleaseIndex::debReleaseIndex(string const &URI, string const &Dist) { - this->URI = URI; - this->Dist = Dist; - this->Indexes = NULL; - this->Type = "deb"; +debReleaseIndex::debReleaseIndex(string const &URI, string const &Dist) : + metaIndex(URI, Dist, "deb"), Trusted(CHECK_TRUST) +{} + +debReleaseIndex::debReleaseIndex(string const &URI, string const &Dist, bool const Trusted) : + metaIndex(URI, Dist, "deb") { + SetTrusted(Trusted); } debReleaseIndex::~debReleaseIndex() { @@ -252,8 +254,22 @@ bool debReleaseIndex::GetIndexes(pkgAcquire *Owner, bool const &GetAll) const return true; } +void debReleaseIndex::SetTrusted(bool const Trusted) +{ + if (Trusted == true) + this->Trusted = ALWAYS_TRUSTED; + else + this->Trusted = NEVER_TRUSTED; +} + bool debReleaseIndex::IsTrusted() const { + if (Trusted == ALWAYS_TRUSTED) + return true; + else if (Trusted == NEVER_TRUSTED) + return false; + + if(_config->FindB("APT::Authentication::TrustCDROM", false)) if(URI.substr(0,strlen("cdrom:")) == "cdrom:") return true; @@ -349,6 +365,7 @@ class debSLTypeDebian : public pkgSourceList::Type vector const Archs = (arch != Options.end()) ? VectorizeString(arch->second, ',') : APT::Configuration::getArchitectures(); + map::const_iterator const trusted = Options.find("trusted"); for (vector::const_iterator I = List.begin(); I != List.end(); I++) @@ -358,6 +375,9 @@ class debSLTypeDebian : public pkgSourceList::Type continue; debReleaseIndex *Deb = (debReleaseIndex *) (*I); + if (trusted != Options.end()) + Deb->SetTrusted(StringToBool(trusted->second, false)); + /* This check insures that there will be only one Release file queued for all the Packages files and Sources files it corresponds to. */ @@ -375,9 +395,14 @@ class debSLTypeDebian : public pkgSourceList::Type return true; } } + // No currently created Release file indexes this entry, so we create a new one. - // XXX determine whether this release is trusted or not - debReleaseIndex *Deb = new debReleaseIndex(URI, Dist); + debReleaseIndex *Deb; + if (trusted != Options.end()) + Deb = new debReleaseIndex(URI, Dist, StringToBool(trusted->second, false)); + else + Deb = new debReleaseIndex(URI, Dist); + if (IsSrc == true) Deb->PushSectionEntry ("source", new debReleaseIndex::debSectionEntry(Section, IsSrc)); else diff --git a/apt-pkg/deb/debmetaindex.h b/apt-pkg/deb/debmetaindex.h index 0aaf7f14a..695cfa7cc 100644 --- a/apt-pkg/deb/debmetaindex.h +++ b/apt-pkg/deb/debmetaindex.h @@ -22,10 +22,12 @@ class debReleaseIndex : public metaIndex { /** \brief dpointer placeholder (for later in case we need it) */ void *d; std::map > ArchEntries; + enum { ALWAYS_TRUSTED, NEVER_TRUSTED, CHECK_TRUST } Trusted; public: debReleaseIndex(string const &URI, string const &Dist); + debReleaseIndex(string const &URI, string const &Dist, bool const Trusted); virtual ~debReleaseIndex(); virtual string ArchiveURI(string const &File) const {return URI + File;}; @@ -43,6 +45,7 @@ class debReleaseIndex : public metaIndex { string TranslationIndexURISuffix(const char *Type, const string &Section) const; virtual vector *GetIndexFiles(); + void SetTrusted(bool const Trusted); virtual bool IsTrusted() const; void PushSectionEntry(vector const &Archs, const debSectionEntry *Entry); diff --git a/apt-pkg/metaindex.h b/apt-pkg/metaindex.h index 1d2140799..f60235a5d 100644 --- a/apt-pkg/metaindex.h +++ b/apt-pkg/metaindex.h @@ -39,6 +39,10 @@ class metaIndex virtual vector *GetIndexFiles() = 0; virtual bool IsTrusted() const = 0; + metaIndex(string const &URI, string const &Dist, char const * const Type) : + Indexes(NULL), Type(Type), URI(URI), Dist(Dist) { + } + virtual ~metaIndex() { if (Indexes == 0) return; diff --git a/debian/changelog b/debian/changelog index 5686e02fa..d226d91c4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,13 +11,16 @@ apt (0.8.16~exp3) UNRELEASEDexperimental; urgency=low - generate all checksums in one run over the file for Release * cmdline/apt-get.cc: - add an --assume-no option for testing to say 'no' to everything + * apt-pkg/deb/debmetaindex.cc: + - add trusted=yes option to mark unsigned (local) repository as trusted + based on a patch from Ansgar Burchardt, thanks a lot! (Closes: #596498) [ Michael Vogt ] * merge fixes from the debian/unstable upload * merge lp:~mvo/apt/sha512-template to get fixes for the sha1/md5 verifiation (closes: #632520) - -- David Kalnischkies Thu, 14 Jul 2011 12:01:53 +0200 + -- David Kalnischkies Thu, 14 Jul 2011 20:56:45 +0200 apt (0.8.16~exp2) experimental; urgency=low diff --git a/doc/sources.list.5.xml b/doc/sources.list.5.xml index fab125b4e..bf8356348 100644 --- a/doc/sources.list.5.xml +++ b/doc/sources.list.5.xml @@ -117,8 +117,13 @@ arch=arch1,arch2,… can be used to specify for which architectures packages information should be downloaded. If this option is not set all architectures defined by the - APT::Architectures option will be downloaded. - + APT::Architectures option will be downloaded. + trusted=yes can be set to indicate that packages + from this source are always authenificated even if the Release file + is not signed or the signature can't be checked. This disables parts of &apt-secure; + and should therefore only be used in a local and trusted context. trusted=no + is the opposite which handles even correctly authenificated sources as not authenificated. + It is important to list sources in order of preference, with the most preferred source listed first. Typically this will result in sorting diff --git a/test/integration/test-bug-596498-trusted-unsigned-repo b/test/integration/test-bug-596498-trusted-unsigned-repo new file mode 100755 index 000000000..6ebc4a3bb --- /dev/null +++ b/test/integration/test-bug-596498-trusted-unsigned-repo @@ -0,0 +1,47 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'i386' + +buildsimplenativepackage 'cool' 'i386' '1.0' 'unstable' + +setupaptarchive + +aptgetupdate() { + rm -rf rootdir/var/lib/apt/ rootdir/var/cache/apt/*.bin + aptget update -qq +} + +PKGTEXT="$(aptget install cool --assume-no -d | head -n 7)" +DEBFILE='rootdir/etc/apt/sources.list.d/apt-test-unstable-deb.list' + +testequal "$PKGTEXT +Download complete and in download only mode" aptget install cool --assume-no -d + +sed -i -e 's#deb#deb [trusted=no]#' $DEBFILE +aptgetupdate + +testequal "$PKGTEXT +WARNING: The following packages cannot be authenticated! + cool +Install these packages without verification [y/N]? N +E: Some packages could not be authenticated" aptget install cool --assume-no -d + +find aptarchive/ \( -name 'Release.gpg' -o -name 'InRelease' \) -delete +sed -i -e 's#deb \[trusted=no\]#deb#' $DEBFILE +aptgetupdate + +testequal "$PKGTEXT +WARNING: The following packages cannot be authenticated! + cool +Install these packages without verification [y/N]? N +E: Some packages could not be authenticated" aptget install cool --assume-no -d + +sed -i -e 's#deb#deb [trusted=yes]#' $DEBFILE +aptgetupdate + +testequal "$PKGTEXT +Download complete and in download only mode" aptget install cool --assume-no -d -- cgit v1.2.3-70-g09d2 From e99a544c8c48d8067d008b5c7e4e1d5479529ce2 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 29 Jul 2011 16:33:20 +0200 Subject: test/libapt/hashsums_test.cc: add a test for HashString and VerifyFile --- test/libapt/hashsums_test.cc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'test') diff --git a/test/libapt/hashsums_test.cc b/test/libapt/hashsums_test.cc index ff1536718..2cb71cc38 100644 --- a/test/libapt/hashsums_test.cc +++ b/test/libapt/hashsums_test.cc @@ -135,6 +135,21 @@ int main(int argc, char** argv) equals(argv[5], sha2.Result().Value()); } fclose(fd); + + // test HashString code + { + HashString sha2("SHA256", argv[4]); + equals(sha2.VerifyFile(argv[1]), true); + } + { + HashString sha2("SHA512", argv[5]); + equals(sha2.VerifyFile(argv[1]), true); + } + { + HashString sha2("SHA256:"+string(argv[4])); + equals(sha2.VerifyFile(argv[1]), true); + } + return 0; } -- cgit v1.2.3-70-g09d2 From 8f3ba4e8708cb72be19dacc2af4f601ee5fea292 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 19 Sep 2011 13:31:29 +0200 Subject: do not pollute namespace in the headers with using (Closes: #500198) --- apt-inst/contrib/arfile.cc | 2 +- apt-inst/contrib/arfile.h | 2 +- apt-inst/contrib/extracttar.h | 6 +- apt-inst/database.cc | 2 +- apt-inst/database.h | 6 +- apt-inst/deb/debfile.cc | 6 +- apt-inst/deb/debfile.h | 4 +- apt-inst/deb/dpkgdb.h | 8 +-- apt-inst/extract.h | 2 +- apt-inst/filelist.h | 2 +- apt-pkg/acquire-method.h | 38 +++++------ apt-pkg/acquire-worker.h | 12 ++-- apt-pkg/acquire.h | 36 +++++----- apt-pkg/algorithms.h | 6 +- apt-pkg/aptconfiguration.cc | 10 +-- apt-pkg/cacheiterators.h | 6 +- apt-pkg/cdrom.h | 38 +++++------ apt-pkg/clean.cc | 10 +-- apt-pkg/clean.h | 4 +- apt-pkg/contrib/cdromutl.cc | 2 + apt-pkg/contrib/cdromutl.h | 12 ++-- apt-pkg/contrib/configuration.h | 46 ++++++------- apt-pkg/contrib/fileutl.h | 42 ++++++------ apt-pkg/contrib/hashes.cc | 26 +++---- apt-pkg/contrib/hashes.h | 17 ++--- apt-pkg/contrib/hashsum.cc | 2 +- apt-pkg/contrib/hashsum_template.h | 13 ++-- apt-pkg/contrib/md5.h | 3 - apt-pkg/contrib/mmap.h | 4 +- apt-pkg/contrib/netrc.cc | 1 + apt-pkg/contrib/netrc.h | 2 +- apt-pkg/contrib/progress.h | 18 +++-- apt-pkg/contrib/sha1.h | 3 - apt-pkg/contrib/strutl.h | 108 ++++++++++++++---------------- apt-pkg/deb/debindexfile.h | 68 +++++++++---------- apt-pkg/deb/deblistparser.cc | 2 + apt-pkg/deb/deblistparser.h | 24 +++---- apt-pkg/deb/debrecords.cc | 6 +- apt-pkg/deb/debrecords.h | 28 ++++---- apt-pkg/deb/debsrcrecords.cc | 6 +- apt-pkg/deb/debsrcrecords.h | 18 ++--- apt-pkg/deb/debsystem.cc | 4 +- apt-pkg/deb/debversion.cc | 4 +- apt-pkg/deb/debversion.h | 6 +- apt-pkg/deb/dpkgpm.h | 19 +++--- apt-pkg/depcache.cc | 3 + apt-pkg/depcache.h | 6 +- apt-pkg/edsp/edspindexfile.h | 2 +- apt-pkg/edsp/edsplistparser.cc | 8 +-- apt-pkg/edsp/edsplistparser.h | 8 +-- apt-pkg/edsp/edspsystem.cc | 2 +- apt-pkg/indexcopy.h | 41 ++++++------ apt-pkg/indexfile.cc | 10 +-- apt-pkg/indexfile.h | 12 ++-- apt-pkg/indexrecords.cc | 5 +- apt-pkg/indexrecords.h | 30 ++++----- apt-pkg/init.cc | 6 +- apt-pkg/metaindex.h | 20 +++--- apt-pkg/orderlist.h | 6 +- apt-pkg/packagemanager.h | 6 +- apt-pkg/pkgcache.cc | 4 +- apt-pkg/pkgcache.h | 16 ++--- apt-pkg/pkgcachegen.h | 38 +++++------ apt-pkg/pkgrecords.cc | 2 +- apt-pkg/pkgrecords.h | 26 +++---- apt-pkg/policy.h | 20 +++--- apt-pkg/srcrecords.h | 33 +++++---- apt-pkg/tagfile.h | 2 +- apt-pkg/vendor.cc | 6 +- apt-pkg/vendor.h | 22 +++--- apt-pkg/vendorlist.cc | 3 + apt-pkg/vendorlist.h | 14 ++-- apt-pkg/version.h | 4 +- apt-pkg/versionmatch.cc | 2 + apt-pkg/versionmatch.h | 26 ++++--- debian/changelog | 7 ++ ftparchive/cachedb.cc | 12 ++-- ftparchive/cachedb.h | 22 +++--- ftparchive/contents.cc | 2 +- ftparchive/contents.h | 2 +- ftparchive/multicompress.h | 6 +- methods/bzip2.cc | 6 +- methods/connect.cc | 14 ++-- methods/connect.h | 2 +- methods/copy.cc | 2 +- methods/file.cc | 6 +- methods/ftp.h | 10 +-- methods/gpgv.cc | 3 + methods/gzip.cc | 2 +- methods/http.h | 18 ++--- methods/rred.cc | 4 +- methods/rsh.cc | 18 ++--- methods/rsh.h | 10 +-- test/interactive-helper/test_udevcdrom.cc | 4 +- test/libapt/getlistoffilesindir_test.cc | 2 +- test/libapt/hashsums_test.cc | 2 +- test/libapt/parsedepends_test.cc | 4 +- test/libapt/strutil_test.cc | 2 +- 98 files changed, 598 insertions(+), 629 deletions(-) (limited to 'test') diff --git a/apt-inst/contrib/arfile.cc b/apt-inst/contrib/arfile.cc index 533c563f9..4e078349e 100644 --- a/apt-inst/contrib/arfile.cc +++ b/apt-inst/contrib/arfile.cc @@ -115,7 +115,7 @@ bool ARArchive::LoadHeaders() { unsigned int I = sizeof(Head.Name) - 1; for (; Head.Name[I] == ' ' || Head.Name[I] == '/'; I--); - Memb->Name = string(Head.Name,I+1); + Memb->Name = std::string(Head.Name,I+1); } // Account for the AR header alignment diff --git a/apt-inst/contrib/arfile.h b/apt-inst/contrib/arfile.h index e2063cd71..bfc128ace 100644 --- a/apt-inst/contrib/arfile.h +++ b/apt-inst/contrib/arfile.h @@ -49,7 +49,7 @@ class ARArchive struct ARArchive::Member { // Fields from the header - string Name; + std::string Name; unsigned long MTime; unsigned long UID; unsigned long GID; diff --git a/apt-inst/contrib/extracttar.h b/apt-inst/contrib/extracttar.h index 42f8ef534..27c453d0d 100644 --- a/apt-inst/contrib/extracttar.h +++ b/apt-inst/contrib/extracttar.h @@ -19,8 +19,6 @@ #include -using std::min; - class ExtractTar { protected: @@ -38,7 +36,7 @@ class ExtractTar int GZPid; FileFd InFd; bool Eof; - string DecompressProg; + std::string DecompressProg; // Fork and reap gzip bool StartGzip(); @@ -48,7 +46,7 @@ class ExtractTar bool Go(pkgDirStream &Stream); - ExtractTar(FileFd &Fd,unsigned long Max,string DecompressionProgram); + ExtractTar(FileFd &Fd,unsigned long Max,std::string DecompressionProgram); virtual ~ExtractTar(); }; diff --git a/apt-inst/database.cc b/apt-inst/database.cc index 0647959a9..1a94e1353 100644 --- a/apt-inst/database.cc +++ b/apt-inst/database.cc @@ -17,7 +17,7 @@ // --------------------------------------------------------------------- /* This re-initializes the meta temporary directory if it hasn't yet been inited for this cycle. The flag is the emptyness of MetaDir */ -bool pkgDataBase::GetMetaTmp(string &Dir) +bool pkgDataBase::GetMetaTmp(std::string &Dir) { if (MetaDir.empty() == true) if (InitMetaTmp(MetaDir) == false) diff --git a/apt-inst/database.h b/apt-inst/database.h index ef45bc2d6..cd0e310bc 100644 --- a/apt-inst/database.h +++ b/apt-inst/database.h @@ -30,8 +30,8 @@ class pkgDataBase pkgCacheGenerator *Cache; pkgFLCache *FList; - string MetaDir; - virtual bool InitMetaTmp(string &Dir) = 0; + std::string MetaDir; + virtual bool InitMetaTmp(std::string &Dir) = 0; public: @@ -40,7 +40,7 @@ class pkgDataBase inline pkgFLCache &GetFLCache() {return *FList;}; inline pkgCacheGenerator &GetGenerator() {return *Cache;}; - bool GetMetaTmp(string &Dir); + bool GetMetaTmp(std::string &Dir); virtual bool ReadyFileList(OpProgress &Progress) = 0; virtual bool ReadyPkgCache(OpProgress &Progress) = 0; virtual bool LoadChanges() = 0; diff --git a/apt-inst/deb/debfile.cc b/apt-inst/deb/debfile.cc index e80d8c735..8ade547f5 100644 --- a/apt-inst/deb/debfile.cc +++ b/apt-inst/deb/debfile.cc @@ -107,8 +107,8 @@ bool debDebFile::ExtractControl(pkgDataBase &DB) return false; // Get into the temporary directory - string Cwd = SafeGetCWD(); - string Tmp; + std::string Cwd = SafeGetCWD(); + std::string Tmp; if (DB.GetMetaTmp(Tmp) == false) return false; if (chdir(Tmp.c_str()) != 0) @@ -174,7 +174,7 @@ bool debDebFile::ExtractArchive(pkgDirStream &Stream) pkgCache::VerIterator debDebFile::MergeControl(pkgDataBase &DB) { // Open the control file - string Tmp; + std::string Tmp; if (DB.GetMetaTmp(Tmp) == false) return pkgCache::VerIterator(DB.GetCache()); FileFd Fd(Tmp + "control",FileFd::ReadOnly); diff --git a/apt-inst/deb/debfile.h b/apt-inst/deb/debfile.h index 6b9f8ffc8..e404d81db 100644 --- a/apt-inst/deb/debfile.h +++ b/apt-inst/deb/debfile.h @@ -68,7 +68,7 @@ class debDebFile::MemControlExtract : public pkgDirStream char *Control; pkgTagSection Section; unsigned long Length; - string Member; + std::string Member; // Members from DirStream virtual bool DoItem(Item &Itm,int &Fd); @@ -81,7 +81,7 @@ class debDebFile::MemControlExtract : public pkgDirStream bool TakeControl(const void *Data,unsigned long Size); MemControlExtract() : IsControl(false), Control(0), Length(0), Member("control") {}; - MemControlExtract(string Member) : IsControl(false), Control(0), Length(0), Member(Member) {}; + MemControlExtract(std::string Member) : IsControl(false), Control(0), Length(0), Member(Member) {}; ~MemControlExtract() {delete [] Control;}; }; /*}}}*/ diff --git a/apt-inst/deb/dpkgdb.h b/apt-inst/deb/dpkgdb.h index 125845f96..3656929aa 100644 --- a/apt-inst/deb/dpkgdb.h +++ b/apt-inst/deb/dpkgdb.h @@ -25,14 +25,14 @@ class debDpkgDB : public pkgDataBase { protected: - - string AdminDir; + + std::string AdminDir; DynamicMMap *CacheMap; DynamicMMap *FileMap; unsigned long DiverInode; signed long DiverTime; - - virtual bool InitMetaTmp(string &Dir); + + virtual bool InitMetaTmp(std::string &Dir); bool ReadFList(OpProgress &Progress); bool ReadDiversions(); bool ReadConfFiles(); diff --git a/apt-inst/extract.h b/apt-inst/extract.h index 71222983c..7143fa409 100644 --- a/apt-inst/extract.h +++ b/apt-inst/extract.h @@ -33,7 +33,7 @@ class pkgExtract : public pkgDirStream bool HandleOverwrites(pkgFLCache::NodeIterator Nde, bool DiverCheck = false); - bool CheckDirReplace(string Dir,unsigned int Depth = 0); + bool CheckDirReplace(std::string Dir,unsigned int Depth = 0); public: diff --git a/apt-inst/filelist.h b/apt-inst/filelist.h index c74a310e4..69c483e71 100644 --- a/apt-inst/filelist.h +++ b/apt-inst/filelist.h @@ -48,7 +48,7 @@ class pkgFLCache class DiverIterator; protected: - string CacheFile; + std::string CacheFile; DynamicMMap ⤅ map_ptrloc LastTreeLookup; unsigned long LastLookupSize; diff --git a/apt-pkg/acquire-method.h b/apt-pkg/acquire-method.h index 6551170c4..8acec82ed 100644 --- a/apt-pkg/acquire-method.h +++ b/apt-pkg/acquire-method.h @@ -34,8 +34,8 @@ class pkgAcqMethod { FetchItem *Next; - string Uri; - string DestFile; + std::string Uri; + std::string DestFile; time_t LastModified; bool IndexFile; bool FailIgnore; @@ -43,14 +43,14 @@ class pkgAcqMethod struct FetchResult { - string MD5Sum; - string SHA1Sum; - string SHA256Sum; - string SHA512Sum; - vector GPGVOutput; + std::string MD5Sum; + std::string SHA1Sum; + std::string SHA256Sum; + std::string SHA512Sum; + std::vector GPGVOutput; time_t LastModified; bool IMSHit; - string Filename; + std::string Filename; unsigned long long Size; unsigned long long ResumePoint; @@ -59,25 +59,25 @@ class pkgAcqMethod }; // State - vector Messages; + std::vector Messages; FetchItem *Queue; FetchItem *QueueBack; - string FailReason; - string UsedMirror; - string IP; + std::string FailReason; + std::string UsedMirror; + std::string IP; // Handlers for messages - virtual bool Configuration(string Message); + virtual bool Configuration(std::string Message); virtual bool Fetch(FetchItem * /*Item*/) {return true;}; // Outgoing messages void Fail(bool Transient = false); - inline void Fail(const char *Why, bool Transient = false) {Fail(string(Why),Transient);}; - virtual void Fail(string Why, bool Transient = false); + inline void Fail(const char *Why, bool Transient = false) {Fail(std::string(Why),Transient);}; + virtual void Fail(std::string Why, bool Transient = false); virtual void URIStart(FetchResult &Res); virtual void URIDone(FetchResult &Res,FetchResult *Alt = 0); - bool MediaFail(string Required,string Drive); + bool MediaFail(std::string Required,std::string Drive); virtual void Exit() {}; void PrintStatus(char const * const header, const char* Format, va_list &args) const; @@ -91,11 +91,11 @@ class pkgAcqMethod void Log(const char *Format,...); void Status(const char *Format,...); - void Redirect(const string &NewURI); + void Redirect(const std::string &NewURI); int Run(bool Single = false); - inline void SetFailReason(string Msg) {FailReason = Msg;}; - inline void SetIP(string aIP) {IP = aIP;}; + inline void SetFailReason(std::string Msg) {FailReason = Msg;}; + inline void SetIP(std::string aIP) {IP = aIP;}; pkgAcqMethod(const char *Ver,unsigned long Flags = 0); virtual ~pkgAcqMethod() {}; diff --git a/apt-pkg/acquire-worker.h b/apt-pkg/acquire-worker.h index ce19091e4..848a6bad7 100644 --- a/apt-pkg/acquire-worker.h +++ b/apt-pkg/acquire-worker.h @@ -79,7 +79,7 @@ class pkgAcquire::Worker : public WeakPointable * * \todo Doesn't this duplicate Config->Access? */ - string Access; + std::string Access; /** \brief The PID of the subprocess. */ pid_t Process; @@ -118,13 +118,13 @@ class pkgAcquire::Worker : public WeakPointable /** \brief The raw text values of messages received from the * worker, in sequence. */ - vector MessageQueue; + std::vector MessageQueue; /** \brief Buffers pending writes to the subprocess. * * \todo Wouldn't a std::dequeue be more appropriate? */ - string OutQueue; + std::string OutQueue; /** \brief Common code for the constructor. * @@ -183,7 +183,7 @@ class pkgAcquire::Worker : public WeakPointable * * \return \b true. */ - bool Capabilities(string Message); + bool Capabilities(std::string Message); /** \brief Send a 601 Configuration message (containing the APT * configuration) to the subprocess. @@ -214,7 +214,7 @@ class pkgAcquire::Worker : public WeakPointable * 603 Media Changed, with the Failed field set to \b true if the * user cancelled the media change). */ - bool MediaChange(string Message); + bool MediaChange(std::string Message); /** \brief Invoked when the worked process dies unexpectedly. * @@ -242,7 +242,7 @@ class pkgAcquire::Worker : public WeakPointable /** \brief The most recent status string received from the * subprocess. */ - string Status; + std::string Status; /** \brief How many bytes of the file have been downloaded. Zero * if the current progress of the file cannot be determined. diff --git a/apt-pkg/acquire.h b/apt-pkg/acquire.h index ae555df22..93772403d 100644 --- a/apt-pkg/acquire.h +++ b/apt-pkg/acquire.h @@ -72,10 +72,6 @@ #include #include -using std::vector; -using std::string; - - #include #include @@ -107,8 +103,8 @@ class pkgAcquire friend class Item; friend class Queue; - typedef vector::iterator ItemIterator; - typedef vector::const_iterator ItemCIterator; + typedef std::vector::iterator ItemIterator; + typedef std::vector::const_iterator ItemCIterator; protected: @@ -117,7 +113,7 @@ class pkgAcquire * This is built monotonically as items are created and only * emptied when the download shuts down. */ - vector Items; + std::vector Items; /** \brief The head of the list of active queues. * @@ -202,7 +198,7 @@ class pkgAcquire * \return the string-name of the queue in which a fetch request * for the given URI should be placed. */ - string QueueName(string URI,MethodConfig const *&Config); + std::string QueueName(std::string URI,MethodConfig const *&Config); /** \brief Build up the set of file descriptors upon which select() should * block. @@ -248,7 +244,7 @@ class pkgAcquire * * \return the method whose name is Access, or \b NULL if no such method exists. */ - MethodConfig *GetConfig(string Access); + MethodConfig *GetConfig(std::string Access); /** \brief Provides information on how a download terminated. */ enum RunResult { @@ -319,7 +315,7 @@ class pkgAcquire * * \return \b true if the directory exists and is readable. */ - bool Clean(string Dir); + bool Clean(std::string Dir); /** \return the total size in bytes of all the items included in * this download. @@ -347,7 +343,7 @@ class pkgAcquire * only one Acquire class is in action at the time or an empty string * if no lock file should be used. */ - bool Setup(pkgAcquireStatus *Progress = NULL, string const &Lock = ""); + bool Setup(pkgAcquireStatus *Progress = NULL, std::string const &Lock = ""); void SetLog(pkgAcquireStatus *Progress) { Log = Progress; } @@ -372,11 +368,11 @@ class pkgAcquire struct pkgAcquire::ItemDesc : public WeakPointable { /** \brief The URI from which to download this item. */ - string URI; + std::string URI; /** brief A description of this item. */ - string Description; + std::string Description; /** brief A shorter description of this item. */ - string ShortDesc; + std::string ShortDesc; /** brief The underlying item which is to be downloaded. */ Item *Owner; }; @@ -420,7 +416,7 @@ class pkgAcquire::Queue }; /** \brief The name of this queue. */ - string Name; + std::string Name; /** \brief The head of the list of items contained in this queue. * @@ -475,7 +471,7 @@ class pkgAcquire::Queue * \return the first item in the queue whose URI is #URI and that * is being downloaded by #Owner. */ - QItem *FindItem(string URI,pkgAcquire::Worker *Owner); + QItem *FindItem(std::string URI,pkgAcquire::Worker *Owner); /** Presumably this should start downloading an item? * @@ -538,7 +534,7 @@ class pkgAcquire::Queue * \param Name The name of the new queue. * \param Owner The download process that owns the new queue. */ - Queue(string Name,pkgAcquire *Owner); + Queue(std::string Name,pkgAcquire *Owner); /** Shut down all the worker processes associated with this queue * and empty the queue. @@ -603,10 +599,10 @@ struct pkgAcquire::MethodConfig MethodConfig *Next; /** \brief The name of this acquire method (e.g., http). */ - string Access; + std::string Access; /** \brief The implementation version of this acquire method. */ - string Version; + std::string Version; /** \brief If \b true, only one download queue should be created for this * method. @@ -748,7 +744,7 @@ class pkgAcquireStatus * \todo This is a horrible blocking monster; it should be CPSed * with prejudice. */ - virtual bool MediaChange(string Media,string Drive) = 0; + virtual bool MediaChange(std::string Media,std::string Drive) = 0; /** \brief Invoked when an item is confirmed to be up-to-date. diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h index 86d5fbd53..f299f8189 100644 --- a/apt-pkg/algorithms.h +++ b/apt-pkg/algorithms.h @@ -37,8 +37,6 @@ #include -using std::ostream; - class pkgSimulate : public pkgPackageManager /*{{{*/ { protected: @@ -63,13 +61,13 @@ class pkgSimulate : public pkgPackageManager /*{{{*/ pkgDepCache::ActionGroup group; // The Actuall installation implementation - virtual bool Install(PkgIterator Pkg,string File); + virtual bool Install(PkgIterator Pkg,std::string File); virtual bool Configure(PkgIterator Pkg); virtual bool Remove(PkgIterator Pkg,bool Purge); private: void ShortBreaks(); - void Describe(PkgIterator iPkg,ostream &out,bool Current,bool Candidate); + void Describe(PkgIterator iPkg,std::ostream &out,bool Current,bool Candidate); public: diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc index e1bc94f31..a0566e05e 100644 --- a/apt-pkg/aptconfiguration.cc +++ b/apt-pkg/aptconfiguration.cc @@ -59,10 +59,10 @@ const Configuration::getCompressionTypes(bool const &Cached) { if ((*o).empty() == true) continue; // ignore types we have no method ready to use - if (_config->Exists(string("Acquire::CompressionTypes::").append(*o)) == false) + if (_config->Exists(std::string("Acquire::CompressionTypes::").append(*o)) == false) continue; // ignore types we have no app ready to use - string const appsetting = string("Dir::Bin::").append(*o); + std::string const appsetting = std::string("Dir::Bin::").append(*o); if (_config->Exists(appsetting) == true) { std::string const app = _config->FindFile(appsetting.c_str(), ""); if (app.empty() == false && FileExists(app) == false) @@ -83,7 +83,7 @@ const Configuration::getCompressionTypes(bool const &Cached) { if (std::find(types.begin(),types.end(),Types->Tag) != types.end()) continue; // ignore types we have no app ready to use - string const appsetting = string("Dir::Bin::").append(Types->Value); + std::string const appsetting = std::string("Dir::Bin::").append(Types->Value); if (appsetting.empty() == false && _config->Exists(appsetting) == true) { std::string const app = _config->FindFile(appsetting.c_str(), ""); if (app.empty() == false && FileExists(app) == false) @@ -95,7 +95,7 @@ const Configuration::getCompressionTypes(bool const &Cached) { // add the special "uncompressed" type if (std::find(types.begin(), types.end(), "uncompressed") == types.end()) { - string const uncompr = _config->FindFile("Dir::Bin::uncompressed", ""); + std::string const uncompr = _config->FindFile("Dir::Bin::uncompressed", ""); if (uncompr.empty() == true || FileExists(uncompr) == true) types.push_back("uncompressed"); } @@ -441,7 +441,7 @@ Configuration::Compressor::Compressor(char const *name, char const *extension, char const *binary, char const *compressArg, char const *uncompressArg, unsigned short const cost) { - std::string const config = string("APT:Compressor::").append(name).append("::"); + std::string const config = std::string("APT:Compressor::").append(name).append("::"); Name = _config->Find(std::string(config).append("Name"), name); Extension = _config->Find(std::string(config).append("Extension"), extension); Binary = _config->Find(std::string(config).append("Binary"), binary); diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h index b97a1a589..464b2fdd8 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -111,7 +111,7 @@ class pkgCache::GrpIterator: public Iterator { inline const char *Name() const {return S->Name == 0?0:Owner->StrP + S->Name;}; inline PkgIterator PackageList() const; - PkgIterator FindPkg(string Arch = "any") const; + PkgIterator FindPkg(std::string Arch = "any") const; /** \brief find the package with the "best" architecture The best architecture is either the "native" or the first @@ -219,7 +219,7 @@ class pkgCache::VerIterator : public Iterator { inline VerFileIterator FileList() const; bool Downloadable() const; inline const char *PriorityType() const {return Owner->Priority(S->Priority);}; - string RelStr() const; + std::string RelStr() const; bool Automatic() const; VerFileIterator NewestFile() const; @@ -365,7 +365,7 @@ class pkgCache::PkgFileIterator : public Iterator inline const char *IndexType() const {return S->IndexType == 0?0:Owner->StrP + S->IndexType;}; bool IsOk(); - string RelStr(); + std::string RelStr(); // Constructors inline PkgFileIterator() : Iterator() {}; diff --git a/apt-pkg/cdrom.h b/apt-pkg/cdrom.h index 614062cbb..2241f1eba 100644 --- a/apt-pkg/cdrom.h +++ b/apt-pkg/cdrom.h @@ -6,8 +6,6 @@ #include -using namespace std; - class pkgCdromStatus /*{{{*/ { protected: @@ -20,12 +18,12 @@ class pkgCdromStatus /*{{{*/ // total steps virtual void SetTotal(int total) { totalSteps = total; }; // update steps, will be called regularly as a "pulse" - virtual void Update(string text="", int current=0) = 0; + virtual void Update(std::string text="", int current=0) = 0; // ask for cdrom insert virtual bool ChangeCdrom() = 0; // ask for cdrom name - virtual bool AskCdromName(string &Name) = 0; + virtual bool AskCdromName(std::string &Name) = 0; // Progress indicator for the Index rewriter virtual OpProgress* GetOpProgress() {return NULL; }; }; @@ -47,22 +45,22 @@ class pkgCdrom /*{{{*/ }; - bool FindPackages(string CD, - vector &List, - vector &SList, - vector &SigList, - vector &TransList, - string &InfoDir, pkgCdromStatus *log, + bool FindPackages(std::string CD, + std::vector &List, + std::vector &SList, + std::vector &SigList, + std::vector &TransList, + std::string &InfoDir, pkgCdromStatus *log, unsigned int Depth = 0); - bool DropBinaryArch(vector &List); - bool DropRepeats(vector &List,const char *Name); - void ReduceSourcelist(string CD,vector &List); + bool DropBinaryArch(std::vector &List); + bool DropRepeats(std::vector &List,const char *Name); + void ReduceSourcelist(std::string CD,std::vector &List); bool WriteDatabase(Configuration &Cnf); - bool WriteSourceList(string Name,vector &List,bool Source); - int Score(string Path); + bool WriteSourceList(std::string Name,std::vector &List,bool Source); + int Score(std::string Path); public: - bool Ident(string &ident, pkgCdromStatus *log); + bool Ident(std::string &ident, pkgCdromStatus *log); bool Add(pkgCdromStatus *log); }; /*}}}*/ @@ -71,9 +69,9 @@ class pkgCdrom /*{{{*/ // class that uses libudev to find cdrom/removable devices dynamically struct CdromDevice /*{{{*/ { - string DeviceName; + std::string DeviceName; bool Mounted; - string MountPath; + std::string MountPath; }; /*}}}*/ class pkgUdevCdromDevices /*{{{*/ @@ -104,9 +102,9 @@ class pkgUdevCdromDevices /*{{{*/ // convenience interface, this will just call ScanForRemovable // with "APT::cdrom::CdromOnly" - vector Scan(); + std::vector Scan(); - vector ScanForRemovable(bool CdromOnly); + std::vector ScanForRemovable(bool CdromOnly); }; /*}}}*/ diff --git a/apt-pkg/clean.cc b/apt-pkg/clean.cc index 1f96e941b..f5a939968 100644 --- a/apt-pkg/clean.cc +++ b/apt-pkg/clean.cc @@ -26,7 +26,7 @@ // --------------------------------------------------------------------- /* Scan the directory for files to erase, we check the version information against our database to see if it is interesting */ -bool pkgArchiveCleaner::Go(string Dir,pkgCache &Cache) +bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache) { bool CleanInstalled = _config->FindB("APT::Clean-Installed",true); @@ -34,7 +34,7 @@ bool pkgArchiveCleaner::Go(string Dir,pkgCache &Cache) if (D == 0) return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str()); - string StartDir = SafeGetCWD(); + std::string StartDir = SafeGetCWD(); if (chdir(Dir.c_str()) != 0) { closedir(D); @@ -63,21 +63,21 @@ bool pkgArchiveCleaner::Go(string Dir,pkgCache &Cache) for (; *I != 0 && *I != '_';I++); if (*I != '_') continue; - string Pkg = DeQuoteString(string(Dir->d_name,I-Dir->d_name)); + std::string Pkg = DeQuoteString(std::string(Dir->d_name,I-Dir->d_name)); // Grab the version const char *Start = I + 1; for (I = Start; *I != 0 && *I != '_';I++); if (*I != '_') continue; - string Ver = DeQuoteString(string(Start,I-Start)); + std::string Ver = DeQuoteString(std::string(Start,I-Start)); // Grab the arch Start = I + 1; for (I = Start; *I != 0 && *I != '.' ;I++); if (*I != '.') continue; - string const Arch = DeQuoteString(string(Start,I-Start)); + std::string const Arch = DeQuoteString(std::string(Start,I-Start)); if (APT::Configuration::checkArchitecture(Arch) == false) continue; diff --git a/apt-pkg/clean.h b/apt-pkg/clean.h index 1ebf68dc9..ad4049e83 100644 --- a/apt-pkg/clean.h +++ b/apt-pkg/clean.h @@ -20,11 +20,11 @@ class pkgArchiveCleaner protected: - virtual void Erase(const char * /*File*/,string /*Pkg*/,string /*Ver*/,struct stat & /*St*/) {}; + virtual void Erase(const char * /*File*/,std::string /*Pkg*/,std::string /*Ver*/,struct stat & /*St*/) {}; public: - bool Go(string Dir,pkgCache &Cache); + bool Go(std::string Dir,pkgCache &Cache); virtual ~pkgArchiveCleaner() {}; }; diff --git a/apt-pkg/contrib/cdromutl.cc b/apt-pkg/contrib/cdromutl.cc index 9de795b60..187f6bd59 100644 --- a/apt-pkg/contrib/cdromutl.cc +++ b/apt-pkg/contrib/cdromutl.cc @@ -30,6 +30,8 @@ #include /*}}}*/ +using std::string; + // IsMounted - Returns true if the mount point is mounted /*{{{*/ // --------------------------------------------------------------------- /* This is a simple algorithm that should always work, we stat the mount point diff --git a/apt-pkg/contrib/cdromutl.h b/apt-pkg/contrib/cdromutl.h index 38ed2996e..2c6afac0f 100644 --- a/apt-pkg/contrib/cdromutl.h +++ b/apt-pkg/contrib/cdromutl.h @@ -12,13 +12,11 @@ #include -using std::string; - // mount cdrom, DeviceName (e.g. /dev/sr0) is optional -bool MountCdrom(string Path, string DeviceName=""); -bool UnmountCdrom(string Path); -bool IdentCdrom(string CD,string &Res,unsigned int Version = 2); -bool IsMounted(string &Path); -string FindMountPointForDevice(const char *device); +bool MountCdrom(std::string Path, std::string DeviceName=""); +bool UnmountCdrom(std::string Path); +bool IdentCdrom(std::string CD,std::string &Res,unsigned int Version = 2); +bool IsMounted(std::string &Path); +std::string FindMountPointForDevice(const char *device); #endif diff --git a/apt-pkg/contrib/configuration.h b/apt-pkg/contrib/configuration.h index 2844ec097..f6f2a3c1d 100644 --- a/apt-pkg/contrib/configuration.h +++ b/apt-pkg/contrib/configuration.h @@ -34,21 +34,19 @@ #include #include -using std::string; - class Configuration { public: struct Item { - string Value; - string Tag; + std::string Value; + std::string Tag; Item *Parent; Item *Child; Item *Next; - string FullTag(const Item *Stop = 0) const; + std::string FullTag(const Item *Stop = 0) const; Item() : Parent(0), Child(0), Next(0) {}; }; @@ -67,35 +65,35 @@ class Configuration public: - string Find(const char *Name,const char *Default = 0) const; - string Find(string const &Name,const char *Default = 0) const {return Find(Name.c_str(),Default);}; - string Find(string const &Name, string const &Default) const {return Find(Name.c_str(),Default.c_str());}; - string FindFile(const char *Name,const char *Default = 0) const; - string FindDir(const char *Name,const char *Default = 0) const; - std::vector FindVector(const char *Name) const; - std::vector FindVector(string const &Name) const { return FindVector(Name.c_str()); }; + std::string Find(const char *Name,const char *Default = 0) const; + std::string Find(std::string const &Name,const char *Default = 0) const {return Find(Name.c_str(),Default);}; + std::string Find(std::string const &Name, std::string const &Default) const {return Find(Name.c_str(),Default.c_str());}; + std::string FindFile(const char *Name,const char *Default = 0) const; + std::string FindDir(const char *Name,const char *Default = 0) const; + std::vector FindVector(const char *Name) const; + std::vector FindVector(std::string const &Name) const { return FindVector(Name.c_str()); }; int FindI(const char *Name,int const &Default = 0) const; - int FindI(string const &Name,int const &Default = 0) const {return FindI(Name.c_str(),Default);}; + int FindI(std::string const &Name,int const &Default = 0) const {return FindI(Name.c_str(),Default);}; bool FindB(const char *Name,bool const &Default = false) const; - bool FindB(string const &Name,bool const &Default = false) const {return FindB(Name.c_str(),Default);}; - string FindAny(const char *Name,const char *Default = 0) const; + bool FindB(std::string const &Name,bool const &Default = false) const {return FindB(Name.c_str(),Default);}; + std::string FindAny(const char *Name,const char *Default = 0) const; - inline void Set(const string &Name,const string &Value) {Set(Name.c_str(),Value);}; - void CndSet(const char *Name,const string &Value); + inline void Set(const std::string &Name,const std::string &Value) {Set(Name.c_str(),Value);}; + void CndSet(const char *Name,const std::string &Value); void CndSet(const char *Name,const int Value); - void Set(const char *Name,const string &Value); + void Set(const char *Name,const std::string &Value); void Set(const char *Name,const int &Value); - inline bool Exists(const string &Name) const {return Exists(Name.c_str());}; + inline bool Exists(const std::string &Name) const {return Exists(Name.c_str());}; bool Exists(const char *Name) const; bool ExistsAny(const char *Name) const; // clear a whole tree - void Clear(const string &Name); + void Clear(const std::string &Name); // remove a certain value from a list (e.g. the list of "APT::Keep-Fds") - void Clear(string const &List, string const &Value); - void Clear(string const &List, int const &Value); + void Clear(std::string const &List, std::string const &Value); + void Clear(std::string const &List, int const &Value); inline const Item *Tree(const char *Name) const {return Lookup(Name);}; @@ -127,11 +125,11 @@ class Configuration extern Configuration *_config; -bool ReadConfigFile(Configuration &Conf,const string &FName, +bool ReadConfigFile(Configuration &Conf,const std::string &FName, bool const &AsSectional = false, unsigned const &Depth = 0); -bool ReadConfigDir(Configuration &Conf,const string &Dir, +bool ReadConfigDir(Configuration &Conf,const std::string &Dir, bool const &AsSectional = false, unsigned const &Depth = 0); diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h index 973a38cff..0d0451a46 100644 --- a/apt-pkg/contrib/fileutl.h +++ b/apt-pkg/contrib/fileutl.h @@ -31,8 +31,6 @@ /* Define this for python-apt */ #define APT_HAS_GZIP 1 -using std::string; - class FileFd { protected: @@ -41,8 +39,8 @@ class FileFd enum LocalFlags {AutoClose = (1<<0),Fail = (1<<1),DelOnFail = (1<<2), HitEof = (1<<3), Replace = (1<<4) }; unsigned long Flags; - string FileName; - string TemporaryFileName; + std::string FileName; + std::string TemporaryFileName; gzFile gz; public: @@ -79,7 +77,7 @@ class FileFd return T; } - bool Open(string FileName,OpenMode Mode,unsigned long Perms = 0666); + bool Open(std::string FileName,OpenMode Mode,unsigned long Perms = 0666); bool OpenDescriptor(int Fd, OpenMode Mode, bool AutoClose=false); bool Close(); bool Sync(); @@ -93,9 +91,9 @@ class FileFd inline void EraseOnFailure() {Flags |= DelOnFail;}; inline void OpFail() {Flags |= Fail;}; inline bool Eof() {return (Flags & HitEof) == HitEof;}; - inline string &Name() {return FileName;}; + inline std::string &Name() {return FileName;}; - FileFd(string FileName,OpenMode Mode,unsigned long Perms = 0666) : iFd(-1), + FileFd(std::string FileName,OpenMode Mode,unsigned long Perms = 0666) : iFd(-1), Flags(0), gz(NULL) { Open(FileName,Mode,Perms); @@ -107,12 +105,12 @@ class FileFd bool RunScripts(const char *Cnf); bool CopyFile(FileFd &From,FileFd &To); -int GetLock(string File,bool Errors = true); -bool FileExists(string File); -bool RealFileExists(string File); -bool DirectoryExists(string const &Path) __attrib_const; -bool CreateDirectory(string const &Parent, string const &Path); -time_t GetModificationTime(string const &Path); +int GetLock(std::string File,bool Errors = true); +bool FileExists(std::string File); +bool RealFileExists(std::string File); +bool DirectoryExists(std::string const &Path) __attrib_const; +bool CreateDirectory(std::string const &Parent, std::string const &Path); +time_t GetModificationTime(std::string const &Path); /** \brief Ensure the existence of the given Path * @@ -120,13 +118,13 @@ time_t GetModificationTime(string const &Path); * /apt/ will be removed before CreateDirectory call. * \param Path which should exist after (successful) call */ -bool CreateAPTDirectoryIfNeeded(string const &Parent, string const &Path); +bool CreateAPTDirectoryIfNeeded(std::string const &Parent, std::string const &Path); -std::vector GetListOfFilesInDir(string const &Dir, string const &Ext, +std::vector GetListOfFilesInDir(std::string const &Dir, std::string const &Ext, bool const &SortList, bool const &AllowNoExt=false); -std::vector GetListOfFilesInDir(string const &Dir, std::vector const &Ext, +std::vector GetListOfFilesInDir(std::string const &Dir, std::vector const &Ext, bool const &SortList); -string SafeGetCWD(); +std::string SafeGetCWD(); void SetCloseExec(int Fd,bool Close); void SetNonBlock(int Fd,bool Block); bool WaitFd(int Fd,bool write = false,unsigned long timeout = 0); @@ -134,10 +132,10 @@ pid_t ExecFork(); bool ExecWait(pid_t Pid,const char *Name,bool Reap = false); // File string manipulators -string flNotDir(string File); -string flNotFile(string File); -string flNoLink(string File); -string flExtension(string File); -string flCombine(string Dir,string File); +std::string flNotDir(std::string File); +std::string flNotFile(std::string File); +std::string flNoLink(std::string File); +std::string flExtension(std::string File); +std::string flCombine(std::string Dir,std::string File); #endif diff --git a/apt-pkg/contrib/hashes.cc b/apt-pkg/contrib/hashes.cc index fd76bf229..05001f042 100644 --- a/apt-pkg/contrib/hashes.cc +++ b/apt-pkg/contrib/hashes.cc @@ -32,20 +32,20 @@ HashString::HashString() { } -HashString::HashString(string Type, string Hash) : Type(Type), Hash(Hash) +HashString::HashString(std::string Type, std::string Hash) : Type(Type), Hash(Hash) { } -HashString::HashString(string StringedHash) /*{{{*/ +HashString::HashString(std::string StringedHash) /*{{{*/ { // legacy: md5sum without "MD5Sum:" prefix - if (StringedHash.find(":") == string::npos && StringedHash.size() == 32) + if (StringedHash.find(":") == std::string::npos && StringedHash.size() == 32) { Type = "MD5Sum"; Hash = StringedHash; return; } - string::size_type pos = StringedHash.find(":"); + std::string::size_type pos = StringedHash.find(":"); Type = StringedHash.substr(0,pos); Hash = StringedHash.substr(pos+1, StringedHash.size() - pos); @@ -53,34 +53,34 @@ HashString::HashString(string StringedHash) /*{{{*/ std::clog << "HashString(string): " << Type << " : " << Hash << std::endl; } /*}}}*/ -bool HashString::VerifyFile(string filename) const /*{{{*/ +bool HashString::VerifyFile(std::string filename) const /*{{{*/ { - string fileHash; + std::string fileHash; FileFd Fd(filename, FileFd::ReadOnly); if(Type == "MD5Sum") { MD5Summation MD5; MD5.AddFD(Fd.Fd(), Fd.Size()); - fileHash = (string)MD5.Result(); + fileHash = (std::string)MD5.Result(); } else if (Type == "SHA1") { SHA1Summation SHA1; SHA1.AddFD(Fd.Fd(), Fd.Size()); - fileHash = (string)SHA1.Result(); + fileHash = (std::string)SHA1.Result(); } else if (Type == "SHA256") { SHA256Summation SHA256; SHA256.AddFD(Fd.Fd(), Fd.Size()); - fileHash = (string)SHA256.Result(); + fileHash = (std::string)SHA256.Result(); } else if (Type == "SHA512") { SHA512Summation SHA512; SHA512.AddFD(Fd.Fd(), Fd.Size()); - fileHash = (string)SHA512.Result(); + fileHash = (std::string)SHA512.Result(); } Fd.Close(); @@ -100,9 +100,9 @@ bool HashString::empty() const return (Type.empty() || Hash.empty()); } -string HashString::toStr() const +std::string HashString::toStr() const { - return Type+string(":")+Hash; + return Type + std::string(":") + Hash; } // Hashes::AddFD - Add the contents of the FD /*{{{*/ @@ -117,7 +117,7 @@ bool Hashes::AddFD(int const Fd,unsigned long long Size, bool const addMD5, while (Size != 0 || ToEOF) { unsigned long long n = sizeof(Buf); - if (!ToEOF) n = min(Size, n); + if (!ToEOF) n = std::min(Size, n); Res = read(Fd,Buf,n); if (Res < 0 || (!ToEOF && Res != (ssize_t) n)) // error, or short read return false; diff --git a/apt-pkg/contrib/hashes.h b/apt-pkg/contrib/hashes.h index 40c2ad064..81851dede 100644 --- a/apt-pkg/contrib/hashes.h +++ b/apt-pkg/contrib/hashes.h @@ -22,31 +22,28 @@ #include #include -using std::min; -using std::vector; - // helper class that contains hash function name // and hash class HashString { protected: - string Type; - string Hash; + std::string Type; + std::string Hash; static const char * _SupportedHashes[10]; public: - HashString(string Type, string Hash); - HashString(string StringedHashString); // init from str as "type:hash" + HashString(std::string Type, std::string Hash); + HashString(std::string StringedHashString); // init from str as "type:hash" HashString(); // get hash type used - string HashType() { return Type; }; + std::string HashType() { return Type; }; // verify the given filename against the currently loaded hash - bool VerifyFile(string filename) const; + bool VerifyFile(std::string filename) const; // helper - string toStr() const; // convert to str as "type:hash" + std::string toStr() const; // convert to str as "type:hash" bool empty() const; // return the list of hashes we support diff --git a/apt-pkg/contrib/hashsum.cc b/apt-pkg/contrib/hashsum.cc index 0edcbb364..ff3b112bb 100644 --- a/apt-pkg/contrib/hashsum.cc +++ b/apt-pkg/contrib/hashsum.cc @@ -14,7 +14,7 @@ bool SummationImplementation::AddFD(int const Fd, unsigned long long Size) { while (Size != 0 || ToEOF) { unsigned long long n = sizeof(Buf); - if (!ToEOF) n = min(Size, n); + if (!ToEOF) n = std::min(Size, n); Res = read(Fd, Buf, n); if (Res < 0 || (!ToEOF && Res != (ssize_t) n)) // error, or short read return false; diff --git a/apt-pkg/contrib/hashsum_template.h b/apt-pkg/contrib/hashsum_template.h index 9157754e3..c109a8212 100644 --- a/apt-pkg/contrib/hashsum_template.h +++ b/apt-pkg/contrib/hashsum_template.h @@ -15,9 +15,6 @@ #include #include -using std::string; -using std::min; - template class HashSumValue { @@ -31,7 +28,7 @@ class HashSumValue return memcmp(Sum,rhs.Sum,sizeof(Sum)) == 0; }; - string Value() const + std::string Value() const { char Conv[16] = { '0','1','2','3','4','5','6','7','8','9','a','b', @@ -48,7 +45,7 @@ class HashSumValue Result[I] = Conv[Sum[J] >> 4]; Result[I + 1] = Conv[Sum[J] & 0xF]; } - return string(Result); + return std::string(Result); }; inline void Value(unsigned char S[N/8]) @@ -57,12 +54,12 @@ class HashSumValue S[I] = Sum[I]; }; - inline operator string() const + inline operator std::string() const { return Value(); }; - bool Set(string Str) + bool Set(std::string Str) { return Hex2Num(Str,Sum,sizeof(Sum)); }; @@ -73,7 +70,7 @@ class HashSumValue Sum[I] = S[I]; }; - HashSumValue(string Str) + HashSumValue(std::string Str) { memset(Sum,0,sizeof(Sum)); Set(Str); diff --git a/apt-pkg/contrib/md5.h b/apt-pkg/contrib/md5.h index 305cdb20d..a207da4e4 100644 --- a/apt-pkg/contrib/md5.h +++ b/apt-pkg/contrib/md5.h @@ -29,9 +29,6 @@ #include #include -using std::string; -using std::min; - #include "hashsum_template.h" typedef HashSumValue<128> MD5SumValue; diff --git a/apt-pkg/contrib/mmap.h b/apt-pkg/contrib/mmap.h index e0ff8db95..387e9a170 100644 --- a/apt-pkg/contrib/mmap.h +++ b/apt-pkg/contrib/mmap.h @@ -29,8 +29,6 @@ #include #include -using std::string; - /* This should be a 32 bit type, larger tyes use too much ram and smaller types are too small. Where ever possible 'unsigned long' should be used instead of this internal type */ @@ -102,7 +100,7 @@ class DynamicMMap : public MMap unsigned long RawAllocate(unsigned long long Size,unsigned long Aln = 0); unsigned long Allocate(unsigned long ItemSize); unsigned long WriteString(const char *String,unsigned long Len = (unsigned long)-1); - inline unsigned long WriteString(const string &S) {return WriteString(S.c_str(),S.length());}; + inline unsigned long WriteString(const std::string &S) {return WriteString(S.c_str(),S.length());}; void UsePools(Pool &P,unsigned int Count) {Pools = &P; PoolCount = Count;}; DynamicMMap(FileFd &F,unsigned long Flags,unsigned long const &WorkSpace = 2*1024*1024, diff --git a/apt-pkg/contrib/netrc.cc b/apt-pkg/contrib/netrc.cc index b9d0749e2..9aa1376dc 100644 --- a/apt-pkg/contrib/netrc.cc +++ b/apt-pkg/contrib/netrc.cc @@ -24,6 +24,7 @@ #include "netrc.h" +using std::string; /* Get user and password from .netrc when given a machine name */ diff --git a/apt-pkg/contrib/netrc.h b/apt-pkg/contrib/netrc.h index 02a5eb09f..86afa43d1 100644 --- a/apt-pkg/contrib/netrc.h +++ b/apt-pkg/contrib/netrc.h @@ -25,5 +25,5 @@ // If login[0] != 0, search for password within machine and login. int parsenetrc (char *host, char *login, char *password, char *filename); -void maybe_add_auth (URI &Uri, string NetRCFile); +void maybe_add_auth (URI &Uri, std::string NetRCFile); #endif diff --git a/apt-pkg/contrib/progress.h b/apt-pkg/contrib/progress.h index 5344323f6..7635719bc 100644 --- a/apt-pkg/contrib/progress.h +++ b/apt-pkg/contrib/progress.h @@ -25,8 +25,6 @@ #include #include -using std::string; - class Configuration; class OpProgress { @@ -38,13 +36,13 @@ class OpProgress // Change reduction code struct timeval LastTime; - string LastOp; - string LastSubOp; + std::string LastOp; + std::string LastSubOp; protected: - string Op; - string SubOp; + std::string Op; + std::string SubOp; float Percent; bool MajorChange; @@ -55,9 +53,9 @@ class OpProgress public: void Progress(unsigned long long Current); - void SubProgress(unsigned long long SubTotal, const string &Op = "", float const Percent = -1); + void SubProgress(unsigned long long SubTotal, const std::string &Op = "", float const Percent = -1); void OverallProgress(unsigned long long Current,unsigned long long Total, - unsigned long long Size,const string &Op); + unsigned long long Size,const std::string &Op); virtual void Done() {}; OpProgress(); @@ -67,8 +65,8 @@ class OpProgress class OpTextProgress : public OpProgress { protected: - - string OldOp; + + std::string OldOp; bool NoUpdate; bool NoDisplay; unsigned long LastLen; diff --git a/apt-pkg/contrib/sha1.h b/apt-pkg/contrib/sha1.h index 916faec1b..b4b139a22 100644 --- a/apt-pkg/contrib/sha1.h +++ b/apt-pkg/contrib/sha1.h @@ -18,9 +18,6 @@ #include #include -using std::string; -using std::min; - #include "hashsum_template.h" typedef HashSumValue<160> SHA1SumValue; diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h index ab4b54722..93f4bef4f 100644 --- a/apt-pkg/contrib/strutl.h +++ b/apt-pkg/contrib/strutl.h @@ -27,60 +27,56 @@ #include "macros.h" -using std::string; -using std::vector; -using std::ostream; - -bool UTF8ToCodeset(const char *codeset, const string &orig, string *dest); +bool UTF8ToCodeset(const char *codeset, const std::string &orig, std::string *dest); char *_strstrip(char *String); char *_strtabexpand(char *String,size_t Len); -bool ParseQuoteWord(const char *&String,string &Res); -bool ParseCWord(const char *&String,string &Res); -string QuoteString(const string &Str,const char *Bad); -string DeQuoteString(const string &Str); -string DeQuoteString(string::const_iterator const &begin, string::const_iterator const &end); +bool ParseQuoteWord(const char *&String,std::string &Res); +bool ParseCWord(const char *&String,std::string &Res); +std::string QuoteString(const std::string &Str,const char *Bad); +std::string DeQuoteString(const std::string &Str); +std::string DeQuoteString(std::string::const_iterator const &begin, std::string::const_iterator const &end); // unescape (\0XX and \xXX) from a string -string DeEscapeString(const string &input); - -string SizeToStr(double Bytes); -string TimeToStr(unsigned long Sec); -string Base64Encode(const string &Str); -string OutputInDepth(const unsigned long Depth, const char* Separator=" "); -string URItoFileName(const string &URI); -string TimeRFC1123(time_t Date); +std::string DeEscapeString(const std::string &input); + +std::string SizeToStr(double Bytes); +std::string TimeToStr(unsigned long Sec); +std::string Base64Encode(const std::string &Str); +std::string OutputInDepth(const unsigned long Depth, const char* Separator=" "); +std::string URItoFileName(const std::string &URI); +std::string TimeRFC1123(time_t Date); bool RFC1123StrToTime(const char* const str,time_t &time) __must_check; bool FTPMDTMStrToTime(const char* const str,time_t &time) __must_check; -__deprecated bool StrToTime(const string &Val,time_t &Result); -string LookupTag(const string &Message,const char *Tag,const char *Default = 0); -int StringToBool(const string &Text,int Default = -1); -bool ReadMessages(int Fd, vector &List); +__deprecated bool StrToTime(const std::string &Val,time_t &Result); +std::string LookupTag(const std::string &Message,const char *Tag,const char *Default = 0); +int StringToBool(const std::string &Text,int Default = -1); +bool ReadMessages(int Fd, std::vector &List); bool StrToNum(const char *Str,unsigned long &Res,unsigned Len,unsigned Base = 0); bool StrToNum(const char *Str,unsigned long long &Res,unsigned Len,unsigned Base = 0); bool Base256ToNum(const char *Str,unsigned long &Res,unsigned int Len); -bool Hex2Num(const string &Str,unsigned char *Num,unsigned int Length); +bool Hex2Num(const std::string &Str,unsigned char *Num,unsigned int Length); bool TokSplitString(char Tok,char *Input,char **List, unsigned long ListMax); -vector VectorizeString(string const &haystack, char const &split) __attrib_const; -void ioprintf(ostream &out,const char *format,...) __like_printf(2); -void strprintf(string &out,const char *format,...) __like_printf(2); +std::vector VectorizeString(std::string const &haystack, char const &split) __attrib_const; +void ioprintf(std::ostream &out,const char *format,...) __like_printf(2); +void strprintf(std::string &out,const char *format,...) __like_printf(2); char *safe_snprintf(char *Buffer,char *End,const char *Format,...) __like_printf(3); -bool CheckDomainList(const string &Host, const string &List); +bool CheckDomainList(const std::string &Host, const std::string &List); int tolower_ascii(int const c) __attrib_const __hot; -string StripEpoch(const string &VerStr); +std::string StripEpoch(const std::string &VerStr); #define APT_MKSTRCMP(name,func) \ inline int name(const char *A,const char *B) {return func(A,A+strlen(A),B,B+strlen(B));}; \ inline int name(const char *A,const char *AEnd,const char *B) {return func(A,AEnd,B,B+strlen(B));}; \ -inline int name(const string& A,const char *B) {return func(A.c_str(),A.c_str()+A.length(),B,B+strlen(B));}; \ -inline int name(const string& A,const string& B) {return func(A.c_str(),A.c_str()+A.length(),B.c_str(),B.c_str()+B.length());}; \ -inline int name(const string& A,const char *B,const char *BEnd) {return func(A.c_str(),A.c_str()+A.length(),B,BEnd);}; +inline int name(const std::string& A,const char *B) {return func(A.c_str(),A.c_str()+A.length(),B,B+strlen(B));}; \ +inline int name(const std::string& A,const std::string& B) {return func(A.c_str(),A.c_str()+A.length(),B.c_str(),B.c_str()+B.length());}; \ +inline int name(const std::string& A,const char *B,const char *BEnd) {return func(A.c_str(),A.c_str()+A.length(),B,BEnd);}; #define APT_MKSTRCMP2(name,func) \ inline int name(const char *A,const char *AEnd,const char *B) {return func(A,AEnd,B,B+strlen(B));}; \ -inline int name(const string& A,const char *B) {return func(A.begin(),A.end(),B,B+strlen(B));}; \ -inline int name(const string& A,const string& B) {return func(A.begin(),A.end(),B.begin(),B.end());}; \ -inline int name(const string& A,const char *B,const char *BEnd) {return func(A.begin(),A.end(),B,BEnd);}; +inline int name(const std::string& A,const char *B) {return func(A.begin(),A.end(),B,B+strlen(B));}; \ +inline int name(const std::string& A,const std::string& B) {return func(A.begin(),A.end(),B.begin(),B.end());}; \ +inline int name(const std::string& A,const char *B,const char *BEnd) {return func(A.begin(),A.end(),B,BEnd);}; int stringcmp(const char *A,const char *AEnd,const char *B,const char *BEnd); int stringcasecmp(const char *A,const char *AEnd,const char *B,const char *BEnd); @@ -89,17 +85,17 @@ int stringcasecmp(const char *A,const char *AEnd,const char *B,const char *BEnd) case the definition of string::const_iterator is not the same as const char * and we need these extra functions */ #if __GNUC__ >= 3 -int stringcmp(string::const_iterator A,string::const_iterator AEnd, +int stringcmp(std::string::const_iterator A,std::string::const_iterator AEnd, const char *B,const char *BEnd); -int stringcmp(string::const_iterator A,string::const_iterator AEnd, - string::const_iterator B,string::const_iterator BEnd); -int stringcasecmp(string::const_iterator A,string::const_iterator AEnd, +int stringcmp(std::string::const_iterator A,std::string::const_iterator AEnd, + std::string::const_iterator B,std::string::const_iterator BEnd); +int stringcasecmp(std::string::const_iterator A,std::string::const_iterator AEnd, const char *B,const char *BEnd); -int stringcasecmp(string::const_iterator A,string::const_iterator AEnd, - string::const_iterator B,string::const_iterator BEnd); +int stringcasecmp(std::string::const_iterator A,std::string::const_iterator AEnd, + std::string::const_iterator B,std::string::const_iterator BEnd); -inline int stringcmp(string::const_iterator A,string::const_iterator Aend,const char *B) {return stringcmp(A,Aend,B,B+strlen(B));}; -inline int stringcasecmp(string::const_iterator A,string::const_iterator Aend,const char *B) {return stringcasecmp(A,Aend,B,B+strlen(B));}; +inline int stringcmp(std::string::const_iterator A,std::string::const_iterator Aend,const char *B) {return stringcmp(A,Aend,B,B+strlen(B));}; +inline int stringcasecmp(std::string::const_iterator A,std::string::const_iterator Aend,const char *B) {return stringcasecmp(A,Aend,B,B+strlen(B));}; #endif APT_MKSTRCMP2(stringcmp,stringcmp); @@ -109,34 +105,34 @@ inline const char *DeNull(const char *s) {return (s == 0?"(null)":s);}; class URI { - void CopyFrom(const string &From); + void CopyFrom(const std::string &From); public: - string Access; - string User; - string Password; - string Host; - string Path; + std::string Access; + std::string User; + std::string Password; + std::string Host; + std::string Path; unsigned int Port; - operator string(); - inline void operator =(const string &From) {CopyFrom(From);}; + operator std::string(); + inline void operator =(const std::string &From) {CopyFrom(From);}; inline bool empty() {return Access.empty();}; - static string SiteOnly(const string &URI); - static string NoUserPassword(const string &URI); + static std::string SiteOnly(const std::string &URI); + static std::string NoUserPassword(const std::string &URI); - URI(string Path) {CopyFrom(Path);}; + URI(std::string Path) {CopyFrom(Path);}; URI() : Port(0) {}; }; struct SubstVar { const char *Subst; - const string *Contents; + const std::string *Contents; }; -string SubstVar(string Str,const struct SubstVar *Vars); -string SubstVar(const string &Str,const string &Subst,const string &Contents); +std::string SubstVar(std::string Str,const struct SubstVar *Vars); +std::string SubstVar(const std::string &Str,const std::string &Subst,const std::string &Contents); struct RxChoiceList { diff --git a/apt-pkg/deb/debindexfile.h b/apt-pkg/deb/debindexfile.h index 678c22473..9e64d4476 100644 --- a/apt-pkg/deb/debindexfile.h +++ b/apt-pkg/deb/debindexfile.h @@ -26,14 +26,14 @@ class debStatusIndex : public pkgIndexFile void *d; protected: - string File; + std::string File; public: virtual const Type *GetType() const; // Interface for acquire - virtual string Describe(bool Short) const {return File;}; + virtual std::string Describe(bool Short) const {return File;}; // Interface for the Cache Generator virtual bool Exists() const; @@ -43,7 +43,7 @@ class debStatusIndex : public pkgIndexFile bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog, unsigned long const Flag) const; virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const; - debStatusIndex(string File); + debStatusIndex(std::string File); virtual ~debStatusIndex() {}; }; @@ -52,25 +52,25 @@ class debPackagesIndex : public pkgIndexFile /** \brief dpointer placeholder (for later in case we need it) */ void *d; - string URI; - string Dist; - string Section; - string Architecture; + std::string URI; + std::string Dist; + std::string Section; + std::string Architecture; - string Info(const char *Type) const; - string IndexFile(const char *Type) const; - string IndexURI(const char *Type) const; + std::string Info(const char *Type) const; + std::string IndexFile(const char *Type) const; + std::string IndexURI(const char *Type) const; public: virtual const Type *GetType() const; // Stuff for accessing files on remote items - virtual string ArchiveInfo(pkgCache::VerIterator Ver) const; - virtual string ArchiveURI(string File) const {return URI + File;}; + virtual std::string ArchiveInfo(pkgCache::VerIterator Ver) const; + virtual std::string ArchiveURI(std::string File) const {return URI + File;}; // Interface for acquire - virtual string Describe(bool Short) const; + virtual std::string Describe(bool Short) const; // Interface for the Cache Generator virtual bool Exists() const; @@ -79,8 +79,8 @@ class debPackagesIndex : public pkgIndexFile virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const; virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const; - debPackagesIndex(string const &URI, string const &Dist, string const &Section, - bool const &Trusted, string const &Arch = "native"); + debPackagesIndex(std::string const &URI, std::string const &Dist, std::string const &Section, + bool const &Trusted, std::string const &Arch = "native"); virtual ~debPackagesIndex() {}; }; @@ -89,23 +89,23 @@ class debTranslationsIndex : public pkgIndexFile /** \brief dpointer placeholder (for later in case we need it) */ void *d; - string URI; - string Dist; - string Section; + std::string URI; + std::string Dist; + std::string Section; const char * const Language; - string Info(const char *Type) const; - string IndexFile(const char *Type) const; - string IndexURI(const char *Type) const; + std::string Info(const char *Type) const; + std::string IndexFile(const char *Type) const; + std::string IndexURI(const char *Type) const; - inline string TranslationFile() const {return string("Translation-").append(Language);}; + inline std::string TranslationFile() const {return std::string("Translation-").append(Language);}; public: virtual const Type *GetType() const; // Interface for acquire - virtual string Describe(bool Short) const; + virtual std::string Describe(bool Short) const; virtual bool GetIndexes(pkgAcquire *Owner) const; // Interface for the Cache Generator @@ -115,7 +115,7 @@ class debTranslationsIndex : public pkgIndexFile virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const; virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const; - debTranslationsIndex(string URI,string Dist,string Section, char const * const Language); + debTranslationsIndex(std::string URI,std::string Dist,std::string Section, char const * const Language); virtual ~debTranslationsIndex() {}; }; @@ -124,25 +124,25 @@ class debSourcesIndex : public pkgIndexFile /** \brief dpointer placeholder (for later in case we need it) */ void *d; - string URI; - string Dist; - string Section; + std::string URI; + std::string Dist; + std::string Section; - string Info(const char *Type) const; - string IndexFile(const char *Type) const; - string IndexURI(const char *Type) const; + std::string Info(const char *Type) const; + std::string IndexFile(const char *Type) const; + std::string IndexURI(const char *Type) const; public: virtual const Type *GetType() const; // Stuff for accessing files on remote items - virtual string SourceInfo(pkgSrcRecords::Parser const &Record, + virtual std::string SourceInfo(pkgSrcRecords::Parser const &Record, pkgSrcRecords::File const &File) const; - virtual string ArchiveURI(string File) const {return URI + File;}; + virtual std::string ArchiveURI(std::string File) const {return URI + File;}; // Interface for acquire - virtual string Describe(bool Short) const; + virtual std::string Describe(bool Short) const; // Interface for the record parsers virtual pkgSrcRecords::Parser *CreateSrcParser() const; @@ -152,7 +152,7 @@ class debSourcesIndex : public pkgIndexFile virtual bool HasPackages() const {return false;}; virtual unsigned long Size() const; - debSourcesIndex(string URI,string Dist,string Section,bool Trusted); + debSourcesIndex(std::string URI,std::string Dist,std::string Section,bool Trusted); virtual ~debSourcesIndex() {}; }; diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index a4a974897..95a2e6d47 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -25,6 +25,8 @@ #include /*}}}*/ +using std::string; + static debListParser::WordList PrioList[] = {{"important",pkgCache::State::Important}, {"required",pkgCache::State::Required}, {"standard",pkgCache::State::Standard}, diff --git a/apt-pkg/deb/deblistparser.h b/apt-pkg/deb/deblistparser.h index 41d712fbf..09858d991 100644 --- a/apt-pkg/deb/deblistparser.h +++ b/apt-pkg/deb/deblistparser.h @@ -34,7 +34,7 @@ class debListParser : public pkgCacheGenerator::ListParser pkgTagFile Tags; pkgTagSection Section; unsigned long iOffset; - string Arch; + std::string Arch; std::vector Architectures; bool MultiArchEnabled; @@ -43,21 +43,21 @@ class debListParser : public pkgCacheGenerator::ListParser bool ParseDepends(pkgCache::VerIterator &Ver,const char *Tag, unsigned int Type); bool ParseProvides(pkgCache::VerIterator &Ver); - bool NewProvidesAllArch(pkgCache::VerIterator &Ver, string const &Package, string const &Version); - static bool GrabWord(string Word,WordList *List,unsigned char &Out); + bool NewProvidesAllArch(pkgCache::VerIterator &Ver, std::string const &Package, std::string const &Version); + static bool GrabWord(std::string Word,WordList *List,unsigned char &Out); public: - static unsigned char GetPrio(string Str); + static unsigned char GetPrio(std::string Str); // These all operate against the current section - virtual string Package(); - virtual string Architecture(); + virtual std::string Package(); + virtual std::string Architecture(); virtual bool ArchitectureAll(); - virtual string Version(); + virtual std::string Version(); virtual bool NewVersion(pkgCache::VerIterator &Ver); - virtual string Description(); - virtual string DescriptionLanguage(); + virtual std::string Description(); + virtual std::string DescriptionLanguage(); virtual MD5SumValue Description_md5(); virtual unsigned short VersionHash(); virtual bool UsePackage(pkgCache::PkgIterator &Pkg, @@ -68,15 +68,15 @@ class debListParser : public pkgCacheGenerator::ListParser virtual bool Step(); bool LoadReleaseInfo(pkgCache::PkgFileIterator &FileI,FileFd &File, - string section); + std::string section); static const char *ParseDepends(const char *Start,const char *Stop, - string &Package,string &Ver,unsigned int &Op, + std::string &Package,std::string &Ver,unsigned int &Op, bool const &ParseArchFlags = false, bool const &StripMultiArch = true); static const char *ConvertRelation(const char *I,unsigned int &Op); - debListParser(FileFd *File, string const &Arch = ""); + debListParser(FileFd *File, std::string const &Arch = ""); virtual ~debListParser() {}; }; diff --git a/apt-pkg/deb/debrecords.cc b/apt-pkg/deb/debrecords.cc index 4dfc8b56a..ef6a7ca9d 100644 --- a/apt-pkg/deb/debrecords.cc +++ b/apt-pkg/deb/debrecords.cc @@ -17,6 +17,8 @@ #include /*}}}*/ +using std::string; + // RecordParser::debRecordParser - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -135,8 +137,8 @@ string debRecordParser::LongDesc() orig = Section.FindS("Description").c_str(); else { - vector const lang = APT::Configuration::getLanguages(); - for (vector::const_iterator l = lang.begin(); + std::vector const lang = APT::Configuration::getLanguages(); + for (std::vector::const_iterator l = lang.begin(); orig.empty() && l != lang.end(); ++l) orig = Section.FindS(string("Description-").append(*l).c_str()); } diff --git a/apt-pkg/deb/debrecords.h b/apt-pkg/deb/debrecords.h index 7868bfa3d..b75726859 100644 --- a/apt-pkg/deb/debrecords.h +++ b/apt-pkg/deb/debrecords.h @@ -35,27 +35,27 @@ class debRecordParser : public pkgRecords::Parser public: // These refer to the archive file for the Version - virtual string FileName(); - virtual string MD5Hash(); - virtual string SHA1Hash(); - virtual string SHA256Hash(); - virtual string SHA512Hash(); - virtual string SourcePkg(); - virtual string SourceVer(); + virtual std::string FileName(); + virtual std::string MD5Hash(); + virtual std::string SHA1Hash(); + virtual std::string SHA256Hash(); + virtual std::string SHA512Hash(); + virtual std::string SourcePkg(); + virtual std::string SourceVer(); // These are some general stats about the package - virtual string Maintainer(); - virtual string ShortDesc(); - virtual string LongDesc(); - virtual string Name(); - virtual string Homepage(); + virtual std::string Maintainer(); + virtual std::string ShortDesc(); + virtual std::string LongDesc(); + virtual std::string Name(); + virtual std::string Homepage(); // An arbitrary custom field - virtual string RecordField(const char *fieldName); + virtual std::string RecordField(const char *fieldName); virtual void GetRec(const char *&Start,const char *&Stop); - debRecordParser(string FileName,pkgCache &Cache); + debRecordParser(std::string FileName,pkgCache &Cache); virtual ~debRecordParser() {}; }; diff --git a/apt-pkg/deb/debsrcrecords.cc b/apt-pkg/deb/debsrcrecords.cc index c9c20267b..38389e624 100644 --- a/apt-pkg/deb/debsrcrecords.cc +++ b/apt-pkg/deb/debsrcrecords.cc @@ -21,6 +21,8 @@ using std::max; /*}}}*/ +using std::string; + // SrcRecordParser::Binaries - Return the binaries field /*{{{*/ // --------------------------------------------------------------------- /* This member parses the binaries field into a pair of class arrays and @@ -57,7 +59,7 @@ const char **debSrcRecordParser::Binaries() package/version records representing the build dependency. The returned array need not be freed and will be reused by the next call to this function */ -bool debSrcRecordParser::BuildDepends(vector &BuildDeps, +bool debSrcRecordParser::BuildDepends(std::vector &BuildDeps, bool const &ArchOnly, bool const &StripMultiArch) { unsigned int I; @@ -102,7 +104,7 @@ bool debSrcRecordParser::BuildDepends(vector // --------------------------------------------------------------------- /* This parses the list of files and returns it, each file is required to have a complete source package */ -bool debSrcRecordParser::Files(vector &List) +bool debSrcRecordParser::Files(std::vector &List) { List.erase(List.begin(),List.end()); diff --git a/apt-pkg/deb/debsrcrecords.h b/apt-pkg/deb/debsrcrecords.h index aa859b0e6..bb588e3d9 100644 --- a/apt-pkg/deb/debsrcrecords.h +++ b/apt-pkg/deb/debsrcrecords.h @@ -35,22 +35,22 @@ class debSrcRecordParser : public pkgSrcRecords::Parser virtual bool Step() {iOffset = Tags.Offset(); return Tags.Step(Sect);}; virtual bool Jump(unsigned long const &Off) {iOffset = Off; return Tags.Jump(Sect,Off);}; - virtual string Package() const {return Sect.FindS("Package");}; - virtual string Version() const {return Sect.FindS("Version");}; - virtual string Maintainer() const {return Sect.FindS("Maintainer");}; - virtual string Section() const {return Sect.FindS("Section");}; + virtual std::string Package() const {return Sect.FindS("Package");}; + virtual std::string Version() const {return Sect.FindS("Version");}; + virtual std::string Maintainer() const {return Sect.FindS("Maintainer");}; + virtual std::string Section() const {return Sect.FindS("Section");}; virtual const char **Binaries(); - virtual bool BuildDepends(vector &BuildDeps, bool const &ArchOnly, bool const &StripMultiArch = true); + virtual bool BuildDepends(std::vector &BuildDeps, bool const &ArchOnly, bool const &StripMultiArch = true); virtual unsigned long Offset() {return iOffset;}; - virtual string AsStr() + virtual std::string AsStr() { const char *Start=0,*Stop=0; Sect.GetSection(Start,Stop); - return string(Start,Stop); + return std::string(Start,Stop); }; - virtual bool Files(vector &F); + virtual bool Files(std::vector &F); - debSrcRecordParser(string const &File,pkgIndexFile const *Index) + debSrcRecordParser(std::string const &File,pkgIndexFile const *Index) : Parser(Index), Fd(File,FileFd::ReadOnlyGzip), Tags(&Fd,102400), Buffer(0), BufSize(0) {} virtual ~debSrcRecordParser(); diff --git a/apt-pkg/deb/debsystem.cc b/apt-pkg/deb/debsystem.cc index 080af5659..7ed6936c3 100644 --- a/apt-pkg/deb/debsystem.cc +++ b/apt-pkg/deb/debsystem.cc @@ -27,6 +27,8 @@ #include /*}}}*/ +using std::string; + debSystem debSys; class debSystemPrivate { @@ -219,7 +221,7 @@ signed debSystem::Score(Configuration const &Cnf) // System::AddStatusFiles - Register the status files /*{{{*/ // --------------------------------------------------------------------- /* */ -bool debSystem::AddStatusFiles(vector &List) +bool debSystem::AddStatusFiles(std::vector &List) { if (d->StatusFile == 0) d->StatusFile = new debStatusIndex(_config->FindFile("Dir::State::status")); diff --git a/apt-pkg/deb/debversion.cc b/apt-pkg/deb/debversion.cc index ba32b2dd4..859ff6b6d 100644 --- a/apt-pkg/deb/debversion.cc +++ b/apt-pkg/deb/debversion.cc @@ -263,7 +263,7 @@ bool debVersioningSystem::CheckDep(const char *PkgVer, // debVS::UpstreamVersion - Return the upstream version string /*{{{*/ // --------------------------------------------------------------------- /* This strips all the debian specific information from the version number */ -string debVersioningSystem::UpstreamVersion(const char *Ver) +std::string debVersioningSystem::UpstreamVersion(const char *Ver) { // Strip off the bit before the first colon const char *I = Ver; @@ -278,6 +278,6 @@ string debVersioningSystem::UpstreamVersion(const char *Ver) if (*I == '-') Last = I - Ver; - return string(Ver,Last); + return std::string(Ver,Last); } /*}}}*/ diff --git a/apt-pkg/deb/debversion.h b/apt-pkg/deb/debversion.h index 56fb67887..24ad73149 100644 --- a/apt-pkg/deb/debversion.h +++ b/apt-pkg/deb/debversion.h @@ -32,7 +32,7 @@ class debVersioningSystem : public pkgVersioningSystem { return DoCmpVersion(A,Aend,B,Bend); } - virtual string UpstreamVersion(const char *A); + virtual std::string UpstreamVersion(const char *A); debVersioningSystem(); }; @@ -53,7 +53,7 @@ inline int pkgVersionCompare(const char *A, const char *AEnd, { return debVS.DoCmpVersion(A,AEnd,B,BEnd); } -inline int pkgVersionCompare(string A,string B) +inline int pkgVersionCompare(std::string A,std::string B) { return debVS.CmpVersion(A,B); } @@ -61,7 +61,7 @@ inline bool pkgCheckDep(const char *DepVer,const char *PkgVer,int Op) { return debVS.CheckDep(PkgVer,Op,DepVer); } -inline string pkgBaseVersion(const char *Ver) +inline std::string pkgBaseVersion(const char *Ver) { return debVS.UpstreamVersion(Ver); } diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h index 3f95c51dc..6b62360b7 100644 --- a/apt-pkg/deb/dpkgpm.h +++ b/apt-pkg/deb/dpkgpm.h @@ -15,9 +15,6 @@ #include #include -using std::vector; -using std::map; - class pkgDPkgPMPrivate; class pkgDPkgPM : public pkgPackageManager @@ -38,7 +35,7 @@ class pkgDPkgPM : public pkgPackageManager needs to declare a Replaces on the disappeared package. \param pkgname Name of the package that disappeared */ - void handleDisappearAction(string const &pkgname); + void handleDisappearAction(std::string const &pkgname); protected: int pkgFailures; @@ -53,11 +50,11 @@ class pkgDPkgPM : public pkgPackageManager // the dpkg states that the pkg will run through, the string is // the package, the vector contains the dpkg states that the package // will go through - map > PackageOps; + std::map > PackageOps; // the dpkg states that are already done; the string is the package // the int is the state that is already done (e.g. a package that is // going to be install is already in state "half-installed") - map PackageOpsDone; + std::map PackageOpsDone; // progress reporting unsigned int PackagesDone; @@ -66,19 +63,19 @@ class pkgDPkgPM : public pkgPackageManager struct Item { enum Ops {Install, Configure, Remove, Purge, ConfigurePending, TriggersPending} Op; - string File; + std::string File; PkgIterator Pkg; - Item(Ops Op,PkgIterator Pkg,string File = "") : Op(Op), + Item(Ops Op,PkgIterator Pkg,std::string File = "") : Op(Op), File(File), Pkg(Pkg) {}; Item() {}; }; - vector List; + std::vector List; // Helpers bool RunScriptsWithPkgs(const char *Cnf); bool SendV2Pkgs(FILE *F); - void WriteHistoryTag(string const &tag, string value); + void WriteHistoryTag(std::string const &tag, std::string value); // apport integration void WriteApportReport(const char *pkgpath, const char *errormsg); @@ -94,7 +91,7 @@ class pkgDPkgPM : public pkgPackageManager void ProcessDpkgStatusLine(int OutStatusFd, char *line); // The Actuall installation implementation - virtual bool Install(PkgIterator Pkg,string File); + virtual bool Install(PkgIterator Pkg,std::string File); virtual bool Configure(PkgIterator Pkg); virtual bool Remove(PkgIterator Pkg,bool Purge = false); virtual bool Go(int StatusFd=-1); diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index f816630ae..529085b4a 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -32,6 +32,9 @@ #include /*}}}*/ + +using std::string; + // helper for Install-Recommends-Sections and Never-MarkAuto-Sections /*{{{*/ static bool ConfigValueInSubTree(const char* SubTree, const char *needle) diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h index 66cb7dbab..5798f0362 100644 --- a/apt-pkg/depcache.h +++ b/apt-pkg/depcache.h @@ -338,9 +338,9 @@ class pkgDepCache : protected pkgCache::Namespace inline Header &Head() {return *Cache->HeaderP;}; inline GrpIterator GrpBegin() {return Cache->GrpBegin();}; inline PkgIterator PkgBegin() {return Cache->PkgBegin();}; - inline GrpIterator FindGrp(string const &Name) {return Cache->FindGrp(Name);}; - inline PkgIterator FindPkg(string const &Name) {return Cache->FindPkg(Name);}; - inline PkgIterator FindPkg(string const &Name, string const &Arch) {return Cache->FindPkg(Name, Arch);}; + inline GrpIterator FindGrp(std::string const &Name) {return Cache->FindGrp(Name);}; + inline PkgIterator FindPkg(std::string const &Name) {return Cache->FindPkg(Name);}; + inline PkgIterator FindPkg(std::string const &Name, std::string const &Arch) {return Cache->FindPkg(Name, Arch);}; inline pkgCache &GetCache() {return *Cache;}; inline pkgVersioningSystem &VS() {return *Cache->VS;}; diff --git a/apt-pkg/edsp/edspindexfile.h b/apt-pkg/edsp/edspindexfile.h index 0053388eb..58a7f62a9 100644 --- a/apt-pkg/edsp/edspindexfile.h +++ b/apt-pkg/edsp/edspindexfile.h @@ -22,7 +22,7 @@ class edspIndex : public debStatusIndex virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const; - edspIndex(string File); + edspIndex(std::string File); }; #endif diff --git a/apt-pkg/edsp/edsplistparser.cc b/apt-pkg/edsp/edsplistparser.cc index e00abdbcc..bcfdb1017 100644 --- a/apt-pkg/edsp/edsplistparser.cc +++ b/apt-pkg/edsp/edsplistparser.cc @@ -20,7 +20,7 @@ /*}}}*/ // ListParser::edspListParser - Constructor /*{{{*/ -edspListParser::edspListParser(FileFd *File, string const &Arch) : debListParser(File, Arch) +edspListParser::edspListParser(FileFd *File, std::string const &Arch) : debListParser(File, Arch) {} /*}}}*/ // ListParser::NewVersion - Fill in the version structure /*{{{*/ @@ -33,11 +33,11 @@ bool edspListParser::NewVersion(pkgCache::VerIterator &Ver) // ListParser::Description - Return the description string /*{{{*/ // --------------------------------------------------------------------- /* Sorry, no description for the resolvers… */ -string edspListParser::Description() +std::string edspListParser::Description() { return ""; } -string edspListParser::DescriptionLanguage() +std::string edspListParser::DescriptionLanguage() { return ""; } @@ -85,7 +85,7 @@ bool edspListParser::ParseStatus(pkgCache::PkgIterator &Pkg, /*}}}*/ // ListParser::LoadReleaseInfo - Load the release information /*{{{*/ bool edspListParser::LoadReleaseInfo(pkgCache::PkgFileIterator &FileI, - FileFd &File, string component) + FileFd &File, std::string component) { return true; } diff --git a/apt-pkg/edsp/edsplistparser.h b/apt-pkg/edsp/edsplistparser.h index ec9f09905..3e196cb9a 100644 --- a/apt-pkg/edsp/edsplistparser.h +++ b/apt-pkg/edsp/edsplistparser.h @@ -20,15 +20,15 @@ class edspListParser : public debListParser { public: virtual bool NewVersion(pkgCache::VerIterator &Ver); - virtual string Description(); - virtual string DescriptionLanguage(); + virtual std::string Description(); + virtual std::string DescriptionLanguage(); virtual MD5SumValue Description_md5(); virtual unsigned short VersionHash(); bool LoadReleaseInfo(pkgCache::PkgFileIterator &FileI,FileFd &File, - string section); + std::string section); - edspListParser(FileFd *File, string const &Arch = ""); + edspListParser(FileFd *File, std::string const &Arch = ""); protected: virtual bool ParseStatus(pkgCache::PkgIterator &Pkg,pkgCache::VerIterator &Ver); diff --git a/apt-pkg/edsp/edspsystem.cc b/apt-pkg/edsp/edspsystem.cc index 10d75771a..6b9207451 100644 --- a/apt-pkg/edsp/edspsystem.cc +++ b/apt-pkg/edsp/edspsystem.cc @@ -97,7 +97,7 @@ signed edspSystem::Score(Configuration const &Cnf) } /*}}}*/ // System::AddStatusFiles - Register the status files /*{{{*/ -bool edspSystem::AddStatusFiles(vector &List) +bool edspSystem::AddStatusFiles(std::vector &List) { if (StatusFile == 0) { diff --git a/apt-pkg/indexcopy.h b/apt-pkg/indexcopy.h index 60c90dd4a..21294ae7e 100644 --- a/apt-pkg/indexcopy.h +++ b/apt-pkg/indexcopy.h @@ -14,9 +14,6 @@ #include #include -using std::string; -using std::vector; - class pkgTagSection; class FileFd; class indexRecords; @@ -31,20 +28,20 @@ class IndexCopy /*{{{*/ pkgTagSection *Section; - string ChopDirs(string Path,unsigned int Depth); - bool ReconstructPrefix(string &Prefix,string OrigPath,string CD, - string File); - bool ReconstructChop(unsigned long &Chop,string Dir,string File); - void ConvertToSourceList(string CD,string &Path); - bool GrabFirst(string Path,string &To,unsigned int Depth); - virtual bool GetFile(string &Filename,unsigned long long &Size) = 0; - virtual bool RewriteEntry(FILE *Target,string File) = 0; + std::string ChopDirs(std::string Path,unsigned int Depth); + bool ReconstructPrefix(std::string &Prefix,std::string OrigPath,std::string CD, + std::string File); + bool ReconstructChop(unsigned long &Chop,std::string Dir,std::string File); + void ConvertToSourceList(std::string CD,std::string &Path); + bool GrabFirst(std::string Path,std::string &To,unsigned int Depth); + virtual bool GetFile(std::string &Filename,unsigned long long &Size) = 0; + virtual bool RewriteEntry(FILE *Target,std::string File) = 0; virtual const char *GetFileName() = 0; virtual const char *Type() = 0; public: - bool CopyPackages(string CDROM,string Name,vector &List, + bool CopyPackages(std::string CDROM,std::string Name,std::vector &List, pkgCdromStatus *log); virtual ~IndexCopy() {}; }; @@ -53,8 +50,8 @@ class PackageCopy : public IndexCopy /*{{{*/ { protected: - virtual bool GetFile(string &Filename,unsigned long long &Size); - virtual bool RewriteEntry(FILE *Target,string File); + virtual bool GetFile(std::string &Filename,unsigned long long &Size); + virtual bool RewriteEntry(FILE *Target,std::string File); virtual const char *GetFileName() {return "Packages";}; virtual const char *Type() {return "Package";}; @@ -64,8 +61,8 @@ class SourceCopy : public IndexCopy /*{{{*/ { protected: - virtual bool GetFile(string &Filename,unsigned long long &Size); - virtual bool RewriteEntry(FILE *Target,string File); + virtual bool GetFile(std::string &Filename,unsigned long long &Size); + virtual bool RewriteEntry(FILE *Target,std::string File); virtual const char *GetFileName() {return "Sources";}; virtual const char *Type() {return "Source";}; @@ -77,7 +74,7 @@ class TranslationsCopy /*{{{*/ pkgTagSection *Section; public: - bool CopyTranslations(string CDROM,string Name,vector &List, + bool CopyTranslations(std::string CDROM,std::string Name,std::vector &List, pkgCdromStatus *log); }; /*}}}*/ @@ -86,13 +83,13 @@ class SigVerify /*{{{*/ /** \brief dpointer placeholder (for later in case we need it) */ void *d; - bool Verify(string prefix,string file, indexRecords *records); - bool CopyMetaIndex(string CDROM, string CDName, - string prefix, string file); + bool Verify(std::string prefix,std::string file, indexRecords *records); + bool CopyMetaIndex(std::string CDROM, std::string CDName, + std::string prefix, std::string file); public: - bool CopyAndVerify(string CDROM,string Name,vector &SigList, - vector PkgList,vector SrcList); + bool CopyAndVerify(std::string CDROM,std::string Name,std::vector &SigList, + std::vector PkgList,std::vector SrcList); /** \brief generates and run the command to verify a file with gpgv */ static bool RunGPGV(std::string const &File, std::string const &FileOut, diff --git a/apt-pkg/indexfile.cc b/apt-pkg/indexfile.cc index 68e9df4c8..642a750d4 100644 --- a/apt-pkg/indexfile.cc +++ b/apt-pkg/indexfile.cc @@ -47,9 +47,9 @@ pkgIndexFile::Type *pkgIndexFile::Type::GetType(const char *Type) // IndexFile::ArchiveInfo - Stub /*{{{*/ // --------------------------------------------------------------------- /* */ -string pkgIndexFile::ArchiveInfo(pkgCache::VerIterator Ver) const +std::string pkgIndexFile::ArchiveInfo(pkgCache::VerIterator Ver) const { - return string(); + return std::string(); } /*}}}*/ // IndexFile::FindInCache - Stub /*{{{*/ @@ -63,10 +63,10 @@ pkgCache::PkgFileIterator pkgIndexFile::FindInCache(pkgCache &Cache) const // IndexFile::SourceIndex - Stub /*{{{*/ // --------------------------------------------------------------------- /* */ -string pkgIndexFile::SourceInfo(pkgSrcRecords::Parser const &Record, +std::string pkgIndexFile::SourceInfo(pkgSrcRecords::Parser const &Record, pkgSrcRecords::File const &File) const { - return string(); + return std::string(); } /*}}}*/ // IndexFile::TranslationsAvailable - Check if will use Translation /*{{{*/ @@ -98,7 +98,7 @@ __attribute__ ((deprecated)) bool pkgIndexFile::CheckLanguageCode(const char *La /* As we have now possibly more than one LanguageCode this method is supersided by a) private classmembers or b) getLanguages(). TODO: Remove method with next API break */ -__attribute__ ((deprecated)) string pkgIndexFile::LanguageCode() { +__attribute__ ((deprecated)) std::string pkgIndexFile::LanguageCode() { if (TranslationsAvailable() == false) return ""; return APT::Configuration::getLanguages()[0]; diff --git a/apt-pkg/indexfile.h b/apt-pkg/indexfile.h index 2b5ae6342..68d53ad7e 100644 --- a/apt-pkg/indexfile.h +++ b/apt-pkg/indexfile.h @@ -27,8 +27,6 @@ #include #include #include - -using std::string; class pkgAcquire; class pkgCacheGenerator; @@ -59,13 +57,13 @@ class pkgIndexFile virtual const Type *GetType() const = 0; // Return descriptive strings of various sorts - virtual string ArchiveInfo(pkgCache::VerIterator Ver) const; - virtual string SourceInfo(pkgSrcRecords::Parser const &Record, + virtual std::string ArchiveInfo(pkgCache::VerIterator Ver) const; + virtual std::string SourceInfo(pkgSrcRecords::Parser const &Record, pkgSrcRecords::File const &File) const; - virtual string Describe(bool Short = false) const = 0; + virtual std::string Describe(bool Short = false) const = 0; // Interface for acquire - virtual string ArchiveURI(string /*File*/) const {return string();}; + virtual std::string ArchiveURI(std::string /*File*/) const {return std::string();}; // Interface for the record parsers virtual pkgSrcRecords::Parser *CreateSrcParser() const {return 0;}; @@ -84,7 +82,7 @@ class pkgIndexFile static bool TranslationsAvailable(); static bool CheckLanguageCode(const char *Lang); - static string LanguageCode(); + static std::string LanguageCode(); bool IsTrusted() const { return Trusted; }; diff --git a/apt-pkg/indexrecords.cc b/apt-pkg/indexrecords.cc index 448a76c27..7b48d659e 100644 --- a/apt-pkg/indexrecords.cc +++ b/apt-pkg/indexrecords.cc @@ -15,6 +15,9 @@ #include /*}}}*/ + +using std::string; + string indexRecords::GetDist() const { return this->Dist; @@ -146,7 +149,7 @@ bool indexRecords::Load(const string Filename) /*{{{*/ return true; } /*}}}*/ -vector indexRecords::MetaKeys() /*{{{*/ +std::vector indexRecords::MetaKeys() /*{{{*/ { std::vector keys; std::map::iterator I = Entries.begin(); diff --git a/apt-pkg/indexrecords.h b/apt-pkg/indexrecords.h index 0f933b93c..66b84f8bb 100644 --- a/apt-pkg/indexrecords.h +++ b/apt-pkg/indexrecords.h @@ -16,42 +16,42 @@ class indexRecords { - bool parseSumData(const char *&Start, const char *End, string &Name, - string &Hash, unsigned long long &Size); + bool parseSumData(const char *&Start, const char *End, std::string &Name, + std::string &Hash, unsigned long long &Size); public: struct checkSum; - string ErrorText; + std::string ErrorText; protected: - string Dist; - string Suite; - string ExpectedDist; + std::string Dist; + std::string Suite; + std::string ExpectedDist; time_t ValidUntil; - std::map Entries; + std::map Entries; public: indexRecords(); - indexRecords(const string ExpectedDist); + indexRecords(const std::string ExpectedDist); // Lookup function - virtual const checkSum *Lookup(const string MetaKey); + virtual const checkSum *Lookup(const std::string MetaKey); /** \brief tests if a checksum for this file is available */ - bool Exists(string const &MetaKey) const; + bool Exists(std::string const &MetaKey) const; std::vector MetaKeys(); - virtual bool Load(string Filename); - string GetDist() const; + virtual bool Load(std::string Filename); + std::string GetDist() const; time_t GetValidUntil() const; - virtual bool CheckDist(const string MaybeDist) const; - string GetExpectedDist() const; + virtual bool CheckDist(const std::string MaybeDist) const; + std::string GetExpectedDist() const; virtual ~indexRecords(){}; }; struct indexRecords::checkSum { - string MetaKeyFilename; + std::string MetaKeyFilename; HashString Hash; unsigned long long Size; }; diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc index 97a39e96e..a1cb05e38 100644 --- a/apt-pkg/init.cc +++ b/apt-pkg/init.cc @@ -108,14 +108,14 @@ bool pkgInitConfig(Configuration &Cnf) } // Read the configuration parts dir - string Parts = Cnf.FindDir("Dir::Etc::parts"); + std::string Parts = Cnf.FindDir("Dir::Etc::parts"); if (DirectoryExists(Parts) == true) Res &= ReadConfigDir(Cnf,Parts); else _error->WarningE("DirectoryExists",_("Unable to read %s"),Parts.c_str()); // Read the main config file - string FName = Cnf.FindFile("Dir::Etc::main"); + std::string FName = Cnf.FindFile("Dir::Etc::main"); if (RealFileExists(FName) == true) Res &= ReadConfigFile(Cnf,FName); @@ -142,7 +142,7 @@ bool pkgInitConfig(Configuration &Cnf) bool pkgInitSystem(Configuration &Cnf,pkgSystem *&Sys) { Sys = 0; - string Label = Cnf.Find("Apt::System",""); + std::string Label = Cnf.Find("Apt::System",""); if (Label.empty() == false) { Sys = pkgSystem::GetSystem(Label.c_str()); diff --git a/apt-pkg/metaindex.h b/apt-pkg/metaindex.h index f60235a5d..66c287c30 100644 --- a/apt-pkg/metaindex.h +++ b/apt-pkg/metaindex.h @@ -8,8 +8,6 @@ #include #include #include - -using std::string; class pkgAcquire; class pkgCacheGenerator; @@ -18,35 +16,35 @@ class OpProgress; class metaIndex { protected: - vector *Indexes; + std::vector *Indexes; const char *Type; - string URI; - string Dist; + std::string URI; + std::string Dist; bool Trusted; public: // Various accessors - virtual string GetURI() const {return URI;} - virtual string GetDist() const {return Dist;} + virtual std::string GetURI() const {return URI;} + virtual std::string GetDist() const {return Dist;} virtual const char* GetType() const {return Type;} // Interface for acquire - virtual string ArchiveURI(string const& /*File*/) const = 0; + virtual std::string ArchiveURI(std::string const& /*File*/) const = 0; virtual bool GetIndexes(pkgAcquire *Owner, bool const &GetAll=false) const = 0; - virtual vector *GetIndexFiles() = 0; + virtual std::vector *GetIndexFiles() = 0; virtual bool IsTrusted() const = 0; - metaIndex(string const &URI, string const &Dist, char const * const Type) : + metaIndex(std::string const &URI, std::string const &Dist, char const * const Type) : Indexes(NULL), Type(Type), URI(URI), Dist(Dist) { } virtual ~metaIndex() { if (Indexes == 0) return; - for (vector::iterator I = (*Indexes).begin(); I != (*Indexes).end(); ++I) + for (std::vector::iterator I = (*Indexes).begin(); I != (*Indexes).end(); ++I) delete *I; delete Indexes; } diff --git a/apt-pkg/orderlist.h b/apt-pkg/orderlist.h index 9588d30a5..a2d7b321b 100644 --- a/apt-pkg/orderlist.h +++ b/apt-pkg/orderlist.h @@ -38,7 +38,7 @@ class pkgOrderList : protected pkgCache::Namespace Package **End; Package **List; Package **AfterEnd; - string *FileList; + std::string *FileList; DepIterator Loops[20]; int LoopCount; int Depth; @@ -102,7 +102,7 @@ class pkgOrderList : protected pkgCache::Namespace inline bool IsNow(PkgIterator Pkg) {return (Flags[Pkg->ID] & (States & (~Removed))) == 0;}; bool IsMissing(PkgIterator Pkg); void WipeFlags(unsigned long F); - void SetFileList(string *FileList) {this->FileList = FileList;}; + void SetFileList(std::string *FileList) {this->FileList = FileList;}; // Accessors inline iterator begin() {return List;}; @@ -115,7 +115,7 @@ class pkgOrderList : protected pkgCache::Namespace // Ordering modes bool OrderCritical(); - bool OrderUnpack(string *FileList = 0); + bool OrderUnpack(std::string *FileList = 0); bool OrderConfigure(); int Score(PkgIterator Pkg); diff --git a/apt-pkg/packagemanager.h b/apt-pkg/packagemanager.h index 96dc5f236..7ee17942c 100644 --- a/apt-pkg/packagemanager.h +++ b/apt-pkg/packagemanager.h @@ -30,8 +30,6 @@ #include #include -using std::string; - class pkgAcquire; class pkgDepCache; class pkgSourceList; @@ -45,7 +43,7 @@ class pkgPackageManager : protected pkgCache::Namespace static bool SigINTStop; protected: - string *FileNames; + std::string *FileNames; pkgDepCache &Cache; pkgOrderList *List; bool Debug; @@ -78,7 +76,7 @@ class pkgPackageManager : protected pkgCache::Namespace bool EarlyRemove(PkgIterator Pkg); // The Actual installation implementation - virtual bool Install(PkgIterator /*Pkg*/,string /*File*/) {return false;}; + virtual bool Install(PkgIterator /*Pkg*/,std::string /*File*/) {return false;}; virtual bool Configure(PkgIterator /*Pkg*/) {return false;}; virtual bool Remove(PkgIterator /*Pkg*/,bool /*Purge*/=false) {return false;}; virtual bool Go(int statusFd=-1) {return true;}; diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index 089648271..40b99891a 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -490,7 +490,7 @@ pkgCache::PkgIterator::CurVersion() const if they provide no new information (e.g. there is no newer version than candidate) If no version and/or section can be found "none" is used. */ std::ostream& -operator<<(ostream& out, pkgCache::PkgIterator Pkg) +operator<<(std::ostream& out, pkgCache::PkgIterator Pkg) { if (Pkg.end() == true) return out << "invalid package"; @@ -685,7 +685,7 @@ void pkgCache::DepIterator::GlobOr(DepIterator &Start,DepIterator &End) // ostream operator to handle string representation of a dependecy /*{{{*/ // --------------------------------------------------------------------- /* */ -std::ostream& operator<<(ostream& out, pkgCache::DepIterator D) +std::ostream& operator<<(std::ostream& out, pkgCache::DepIterator D) { if (D.end() == true) return out << "invalid dependency"; diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h index 87912aead..7e32a3a96 100644 --- a/apt-pkg/pkgcache.h +++ b/apt-pkg/pkgcache.h @@ -79,8 +79,6 @@ #include #include -using std::string; - class pkgVersioningSystem; class pkgCache /*{{{*/ { @@ -152,10 +150,10 @@ class pkgCache /*{{{*/ protected: // Memory mapped cache file - string CacheFile; + std::string CacheFile; MMap ⤅ - unsigned long sHash(const string &S) const; + unsigned long sHash(const std::string &S) const; unsigned long sHash(const char *S) const; public: @@ -180,16 +178,16 @@ class pkgCache /*{{{*/ inline void *DataEnd() {return ((unsigned char *)Map.Data()) + Map.Size();}; // String hashing function (512 range) - inline unsigned long Hash(const string &S) const {return sHash(S);}; + inline unsigned long Hash(const std::string &S) const {return sHash(S);}; inline unsigned long Hash(const char *S) const {return sHash(S);}; // Useful transformation things const char *Priority(unsigned char Priority); // Accessors - GrpIterator FindGrp(const string &Name); - PkgIterator FindPkg(const string &Name); - PkgIterator FindPkg(const string &Name, const string &Arch); + GrpIterator FindGrp(const std::string &Name); + PkgIterator FindPkg(const std::string &Name); + PkgIterator FindPkg(const std::string &Name, const std::string &Arch); Header &Head() {return *HeaderP;}; inline GrpIterator GrpBegin(); @@ -214,7 +212,7 @@ class pkgCache /*{{{*/ private: bool MultiArchEnabled; - PkgIterator SingleArchFindPkg(const string &Name); + PkgIterator SingleArchFindPkg(const std::string &Name); inline char const * const NativeArch() const; }; /*}}}*/ diff --git a/apt-pkg/pkgcachegen.h b/apt-pkg/pkgcachegen.h index c26051182..af9c2bcb0 100644 --- a/apt-pkg/pkgcachegen.h +++ b/apt-pkg/pkgcachegen.h @@ -63,29 +63,29 @@ class pkgCacheGenerator /*{{{*/ pkgCache Cache; OpProgress *Progress; - string PkgFileName; + std::string PkgFileName; pkgCache::PackageFile *CurrentFile; // Flag file dependencies bool FoundFileDeps; - bool NewGroup(pkgCache::GrpIterator &Grp,const string &Name); - bool NewPackage(pkgCache::PkgIterator &Pkg,const string &Name, const string &Arch); + bool NewGroup(pkgCache::GrpIterator &Grp,const std::string &Name); + bool NewPackage(pkgCache::PkgIterator &Pkg,const std::string &Name, const std::string &Arch); bool NewFileVer(pkgCache::VerIterator &Ver,ListParser &List); bool NewFileDesc(pkgCache::DescIterator &Desc,ListParser &List); bool NewDepends(pkgCache::PkgIterator &Pkg, pkgCache::VerIterator &Ver, - string const &Version, unsigned int const &Op, + std::string const &Version, unsigned int const &Op, unsigned int const &Type, map_ptrloc* &OldDepLast); - unsigned long NewVersion(pkgCache::VerIterator &Ver,const string &VerStr,unsigned long Next); - map_ptrloc NewDescription(pkgCache::DescIterator &Desc,const string &Lang,const MD5SumValue &md5sum,map_ptrloc Next); + unsigned long NewVersion(pkgCache::VerIterator &Ver,const std::string &VerStr,unsigned long Next); + map_ptrloc NewDescription(pkgCache::DescIterator &Desc,const std::string &Lang,const MD5SumValue &md5sum,map_ptrloc Next); public: unsigned long WriteUniqString(const char *S,unsigned int Size); - inline unsigned long WriteUniqString(const string &S) {return WriteUniqString(S.c_str(),S.length());}; + inline unsigned long WriteUniqString(const std::string &S) {return WriteUniqString(S.c_str(),S.length());}; void DropProgress() {Progress = 0;}; - bool SelectFile(const string &File,const string &Site,pkgIndexFile const &Index, + bool SelectFile(const std::string &File,const std::string &Site,pkgIndexFile const &Index, unsigned long Flags = 0); bool MergeList(ListParser &List,pkgCache::VerIterator *Ver = 0); inline pkgCache &GetCache() {return Cache;}; @@ -122,26 +122,26 @@ class pkgCacheGenerator::ListParser protected: - inline unsigned long WriteUniqString(string S) {return Owner->WriteUniqString(S);}; + inline unsigned long WriteUniqString(std::string S) {return Owner->WriteUniqString(S);}; inline unsigned long WriteUniqString(const char *S,unsigned int Size) {return Owner->WriteUniqString(S,Size);}; - inline unsigned long WriteString(const string &S) {return Owner->WriteStringInMap(S);}; + inline unsigned long WriteString(const std::string &S) {return Owner->WriteStringInMap(S);}; inline unsigned long WriteString(const char *S,unsigned int Size) {return Owner->WriteStringInMap(S,Size);}; - bool NewDepends(pkgCache::VerIterator &Ver,const string &Package, const string &Arch, - const string &Version,unsigned int Op, + bool NewDepends(pkgCache::VerIterator &Ver,const std::string &Package, const std::string &Arch, + const std::string &Version,unsigned int Op, unsigned int Type); - bool NewProvides(pkgCache::VerIterator &Ver,const string &PkgName, - const string &PkgArch, const string &Version); + bool NewProvides(pkgCache::VerIterator &Ver,const std::string &PkgName, + const std::string &PkgArch, const std::string &Version); public: // These all operate against the current section - virtual string Package() = 0; - virtual string Architecture() = 0; + virtual std::string Package() = 0; + virtual std::string Architecture() = 0; virtual bool ArchitectureAll() = 0; - virtual string Version() = 0; + virtual std::string Version() = 0; virtual bool NewVersion(pkgCache::VerIterator &Ver) = 0; - virtual string Description() = 0; - virtual string DescriptionLanguage() = 0; + virtual std::string Description() = 0; + virtual std::string DescriptionLanguage() = 0; virtual MD5SumValue Description_md5() = 0; virtual unsigned short VersionHash() = 0; virtual bool UsePackage(pkgCache::PkgIterator &Pkg, diff --git a/apt-pkg/pkgrecords.cc b/apt-pkg/pkgrecords.cc index 7709f133a..c5b3bebd7 100644 --- a/apt-pkg/pkgrecords.cc +++ b/apt-pkg/pkgrecords.cc @@ -46,7 +46,7 @@ pkgRecords::pkgRecords(pkgCache &Cache) : Cache(Cache), /* */ pkgRecords::~pkgRecords() { - for ( vector::iterator it = Files.begin(); + for ( std::vector::iterator it = Files.begin(); it != Files.end(); ++it) { diff --git a/apt-pkg/pkgrecords.h b/apt-pkg/pkgrecords.h index 8741533b9..3658435e8 100644 --- a/apt-pkg/pkgrecords.h +++ b/apt-pkg/pkgrecords.h @@ -54,23 +54,23 @@ class pkgRecords::Parser /*{{{*/ friend class pkgRecords; // These refer to the archive file for the Version - virtual string FileName() {return string();}; - virtual string MD5Hash() {return string();}; - virtual string SHA1Hash() {return string();}; - virtual string SHA256Hash() {return string();}; - virtual string SHA512Hash() {return string();}; - virtual string SourcePkg() {return string();}; - virtual string SourceVer() {return string();}; + virtual std::string FileName() {return std::string();}; + virtual std::string MD5Hash() {return std::string();}; + virtual std::string SHA1Hash() {return std::string();}; + virtual std::string SHA256Hash() {return std::string();}; + virtual std::string SHA512Hash() {return std::string();}; + virtual std::string SourcePkg() {return std::string();}; + virtual std::string SourceVer() {return std::string();}; // These are some general stats about the package - virtual string Maintainer() {return string();}; - virtual string ShortDesc() {return string();}; - virtual string LongDesc() {return string();}; - virtual string Name() {return string();}; - virtual string Homepage() {return string();} + virtual std::string Maintainer() {return std::string();}; + virtual std::string ShortDesc() {return std::string();}; + virtual std::string LongDesc() {return std::string();}; + virtual std::string Name() {return std::string();}; + virtual std::string Homepage() {return std::string();} // An arbitrary custom field - virtual string RecordField(const char *fieldName) { return string();}; + virtual std::string RecordField(const char *fieldName) { return std::string();}; // The record in binary form virtual void GetRec(const char *&Start,const char *&Stop) {Start = Stop = 0;}; diff --git a/apt-pkg/policy.h b/apt-pkg/policy.h index 92d32728f..3c8246e3b 100644 --- a/apt-pkg/policy.h +++ b/apt-pkg/policy.h @@ -38,8 +38,6 @@ #include #include -using std::vector; - class pkgPolicy : public pkgDepCache::Policy { protected: @@ -47,29 +45,29 @@ class pkgPolicy : public pkgDepCache::Policy struct Pin { pkgVersionMatch::MatchType Type; - string Data; + std::string Data; signed short Priority; Pin() : Type(pkgVersionMatch::None), Priority(0) {}; }; struct PkgPin : Pin { - string Pkg; - PkgPin(string const &Pkg) : Pin(), Pkg(Pkg) {}; + std::string Pkg; + PkgPin(std::string const &Pkg) : Pin(), Pkg(Pkg) {}; }; Pin *Pins; signed short *PFPriority; - vector Defaults; - vector Unmatched; + std::vector Defaults; + std::vector Unmatched; pkgCache *Cache; bool StatusOverride; public: // Things for manipulating pins - void CreatePin(pkgVersionMatch::MatchType Type,string Pkg, - string Data,signed short Priority); + void CreatePin(pkgVersionMatch::MatchType Type,std::string Pkg, + std::string Data,signed short Priority); pkgCache::VerIterator GetMatch(pkgCache::PkgIterator const &Pkg); // Things for the cache interface. @@ -83,7 +81,7 @@ class pkgPolicy : public pkgDepCache::Policy virtual ~pkgPolicy() {delete [] PFPriority; delete [] Pins;}; }; -bool ReadPinFile(pkgPolicy &Plcy,string File = ""); -bool ReadPinDir(pkgPolicy &Plcy,string Dir = ""); +bool ReadPinFile(pkgPolicy &Plcy, std::string File = ""); +bool ReadPinDir(pkgPolicy &Plcy, std::string Dir = ""); #endif diff --git a/apt-pkg/srcrecords.h b/apt-pkg/srcrecords.h index 8a78d7711..a55bc74fa 100644 --- a/apt-pkg/srcrecords.h +++ b/apt-pkg/srcrecords.h @@ -15,10 +15,7 @@ #include -#include - -using std::string; -using std::vector; +#include class pkgSourceList; class pkgIndexFile; @@ -29,10 +26,10 @@ class pkgSrcRecords // Describes a single file struct File { - string MD5Hash; + std::string MD5Hash; unsigned long Size; - string Path; - string Type; + std::string Path; + std::string Type; }; // Abstract parser for each source record @@ -49,8 +46,8 @@ class pkgSrcRecords struct BuildDepRec { - string Package; - string Version; + std::string Package; + std::string Version; unsigned int Op; unsigned char Type; }; @@ -61,18 +58,18 @@ class pkgSrcRecords virtual bool Step() = 0; virtual bool Jump(unsigned long const &Off) = 0; virtual unsigned long Offset() = 0; - virtual string AsStr() = 0; + virtual std::string AsStr() = 0; - virtual string Package() const = 0; - virtual string Version() const = 0; - virtual string Maintainer() const = 0; - virtual string Section() const = 0; + virtual std::string Package() const = 0; + virtual std::string Version() const = 0; + virtual std::string Maintainer() const = 0; + virtual std::string Section() const = 0; virtual const char **Binaries() = 0; // Ownership does not transfer - virtual bool BuildDepends(vector &BuildDeps, bool const &ArchOnly, bool const &StripMultiArch = true) = 0; + virtual bool BuildDepends(std::vector &BuildDeps, bool const &ArchOnly, bool const &StripMultiArch = true) = 0; static const char *BuildDepType(unsigned char const &Type); - virtual bool Files(vector &F) = 0; + virtual bool Files(std::vector &F) = 0; Parser(const pkgIndexFile *Index) : iIndex(Index) {}; virtual ~Parser() {}; @@ -83,8 +80,8 @@ class pkgSrcRecords void *d; // The list of files and the current parser pointer - vector Files; - vector::iterator Current; + std::vector Files; + std::vector::iterator Current; public: diff --git a/apt-pkg/tagfile.h b/apt-pkg/tagfile.h index 28f7fcc24..e3034b628 100644 --- a/apt-pkg/tagfile.h +++ b/apt-pkg/tagfile.h @@ -54,7 +54,7 @@ class pkgTagSection bool Find(const char *Tag,const char *&Start, const char *&End) const; bool Find(const char *Tag,unsigned &Pos) const; - string FindS(const char *Tag) const; + std::string FindS(const char *Tag) const; signed int FindI(const char *Tag,signed long Default = 0) const ; unsigned long long FindULL(const char *Tag, unsigned long long const &Default = 0) const; bool FindFlag(const char *Tag,unsigned long &Flags, diff --git a/apt-pkg/vendor.cc b/apt-pkg/vendor.cc index eab6d448f..36fc25957 100644 --- a/apt-pkg/vendor.cc +++ b/apt-pkg/vendor.cc @@ -22,16 +22,16 @@ Vendor::Vendor(std::string VendorID, delete FingerprintList; } -const string Vendor::LookupFingerprint(string Print) const +const std::string Vendor::LookupFingerprint(std::string Print) const { - std::map::const_iterator Elt = Fingerprints.find(Print); + std::map::const_iterator Elt = Fingerprints.find(Print); if (Elt == Fingerprints.end()) return ""; else return (*Elt).second; } -bool Vendor::CheckDist(string Dist) +bool Vendor::CheckDist(std::string Dist) { return true; } diff --git a/apt-pkg/vendor.h b/apt-pkg/vendor.h index df229737a..9b157378c 100644 --- a/apt-pkg/vendor.h +++ b/apt-pkg/vendor.h @@ -6,29 +6,27 @@ #include -using std::string; - -// A class representing a particular software provider. +// A class representing a particular software provider. class __deprecated Vendor { public: struct Fingerprint { - string Print; - string Description; + std::string Print; + std::string Description; }; protected: - string VendorID; - string Origin; - std::map Fingerprints; + std::string VendorID; + std::string Origin; + std::map Fingerprints; public: - Vendor(string VendorID, string Origin, + Vendor(std::string VendorID, std::string Origin, std::vector *FingerprintList); - virtual const string& GetVendorID() const { return VendorID; }; - virtual const string LookupFingerprint(string Print) const; - virtual bool CheckDist(string Dist); + virtual const std::string& GetVendorID() const { return VendorID; }; + virtual const std::string LookupFingerprint(std::string Print) const; + virtual bool CheckDist(std::string Dist); virtual ~Vendor(){}; }; diff --git a/apt-pkg/vendorlist.cc b/apt-pkg/vendorlist.cc index 731f11acf..2ccb556ab 100644 --- a/apt-pkg/vendorlist.cc +++ b/apt-pkg/vendorlist.cc @@ -10,6 +10,9 @@ #include +using std::string; +using std::vector; + pkgVendorList::~pkgVendorList() { for (vector::const_iterator I = VendorList.begin(); diff --git a/apt-pkg/vendorlist.h b/apt-pkg/vendorlist.h index eaeecb173..62ab78a33 100644 --- a/apt-pkg/vendorlist.h +++ b/apt-pkg/vendorlist.h @@ -19,22 +19,18 @@ #include #include -using std::string; -using std::vector; - - class __deprecated pkgVendorList { protected: - vector VendorList; + std::vector VendorList; bool CreateList(Configuration& Cnf); - const Vendor* LookupFingerprint(string Fingerprint); + const Vendor* LookupFingerprint(std::string Fingerprint); public: - typedef vector::const_iterator const_iterator; + typedef std::vector::const_iterator const_iterator; bool ReadMainList(); - bool Read(string File); + bool Read(std::string File); // List accessors inline const_iterator begin() const {return VendorList.begin();}; @@ -42,7 +38,7 @@ class __deprecated pkgVendorList inline unsigned int size() const {return VendorList.size();}; inline bool empty() const {return VendorList.empty();}; - const Vendor* FindVendor(const vector GPGVOutput); + const Vendor* FindVendor(const std::vector GPGVOutput); ~pkgVendorList(); }; diff --git a/apt-pkg/version.h b/apt-pkg/version.h index 49c53a93a..c9257d116 100644 --- a/apt-pkg/version.h +++ b/apt-pkg/version.h @@ -24,8 +24,6 @@ #include #include -using std::string; - class pkgVersioningSystem { public: @@ -43,7 +41,7 @@ class pkgVersioningSystem virtual bool CheckDep(const char *PkgVer,int Op,const char *DepVer) = 0; virtual int DoCmpReleaseVer(const char *A,const char *Aend, const char *B,const char *Bend) = 0; - virtual string UpstreamVersion(const char *A) = 0; + virtual std::string UpstreamVersion(const char *A) = 0; // See if the given VS is compatible with this one.. virtual bool TestCompatibility(pkgVersioningSystem const &Against) diff --git a/apt-pkg/versionmatch.cc b/apt-pkg/versionmatch.cc index f336b3c35..e4fa0ea65 100644 --- a/apt-pkg/versionmatch.cc +++ b/apt-pkg/versionmatch.cc @@ -24,6 +24,8 @@ #include /*}}}*/ +using std::string; + // VersionMatch::pkgVersionMatch - Constructor /*{{{*/ // --------------------------------------------------------------------- /* Break up the data string according to the selected type */ diff --git a/apt-pkg/versionmatch.h b/apt-pkg/versionmatch.h index 39639a23d..da103fc5b 100644 --- a/apt-pkg/versionmatch.h +++ b/apt-pkg/versionmatch.h @@ -39,40 +39,38 @@ #include #include -using std::string; - class pkgVersionMatch { // Version Matching - string VerStr; + std::string VerStr; bool VerPrefixMatch; // Release Matching - string RelVerStr; + std::string RelVerStr; bool RelVerPrefixMatch; - string RelOrigin; - string RelRelease; - string RelCodename; - string RelArchive; - string RelLabel; - string RelComponent; - string RelArchitecture; + std::string RelOrigin; + std::string RelRelease; + std::string RelCodename; + std::string RelArchive; + std::string RelLabel; + std::string RelComponent; + std::string RelArchitecture; bool MatchAll; // Origin Matching - string OrSite; + std::string OrSite; public: enum MatchType {None = 0,Version,Release,Origin} Type; - bool MatchVer(const char *A,string B,bool Prefix); + bool MatchVer(const char *A,std::string B,bool Prefix); bool ExpressionMatches(const char *pattern, const char *string); bool ExpressionMatches(const std::string& pattern, const char *string); bool FileMatch(pkgCache::PkgFileIterator File); pkgCache::VerIterator Find(pkgCache::PkgIterator Pkg); - pkgVersionMatch(string Data,MatchType Type); + pkgVersionMatch(std::string Data,MatchType Type); }; #endif diff --git a/debian/changelog b/debian/changelog index 7e1ce4f4e..8a4994a32 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +apt (0.8.16~exp7) experimental; urgency=low + + [ David Kalnischkies ] + * do not pollute namespace in the headers with using (Closes: #500198) + + -- David Kalnischkies Mon, 19 Sep 2011 13:25:58 +0200 + apt (0.8.16~exp6) experimental; urgency=low [ Christopher Baines ] diff --git a/ftparchive/cachedb.cc b/ftparchive/cachedb.cc index a1d70f912..7d8718c56 100644 --- a/ftparchive/cachedb.cc +++ b/ftparchive/cachedb.cc @@ -28,7 +28,7 @@ // CacheDB::ReadyDB - Ready the DB2 /*{{{*/ // --------------------------------------------------------------------- /* This opens the DB2 file for caching package information */ -bool CacheDB::ReadyDB(string const &DB) +bool CacheDB::ReadyDB(std::string const &DB) { int err; @@ -48,7 +48,7 @@ bool CacheDB::ReadyDB(string const &DB) DBLoaded = false; Dbp = 0; - DBFile = string(); + DBFile = std::string(); if (DB.empty()) return true; @@ -162,7 +162,7 @@ bool CacheDB::GetCurStat() /*}}}*/ // CacheDB::GetFileInfo - Get all the info about the file /*{{{*/ // --------------------------------------------------------------------- -bool CacheDB::GetFileInfo(string const &FileName, bool const &DoControl, bool const &DoContents, +bool CacheDB::GetFileInfo(std::string const &FileName, bool const &DoControl, bool const &DoContents, bool const &GenContentsOnly, bool const &DoMD5, bool const &DoSHA1, bool const &DoSHA256, bool const &DoSHA512, bool const &checkMtime) @@ -298,12 +298,12 @@ bool CacheDB::LoadContents(bool const &GenOnly) } /*}}}*/ -static string bytes2hex(uint8_t *bytes, size_t length) { +static std::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); + return std::string(space); } static inline unsigned char xdig2num(char const &dig) { @@ -496,7 +496,7 @@ bool CacheDB::Clean() stringcmp(Colon + 1, (char *)Key.data+Key.size,"cl") == 0 || stringcmp(Colon + 1, (char *)Key.data+Key.size,"cn") == 0) { - if (FileExists(string((const char *)Key.data,Colon)) == true) + if (FileExists(std::string((const char *)Key.data,Colon)) == true) continue; } } diff --git a/ftparchive/cachedb.h b/ftparchive/cachedb.h index 6bd5aa36c..f2e1e19e4 100644 --- a/ftparchive/cachedb.h +++ b/ftparchive/cachedb.h @@ -34,7 +34,7 @@ class CacheDB DB *Dbp; bool DBLoaded; bool ReadOnly; - string DBFile; + std::string DBFile; // Generate a key for the DB of a given type inline void InitQuery(const char *Type) @@ -90,7 +90,7 @@ class CacheDB struct StatStore OldStat; // 'set' state - string FileName; + std::string FileName; FileFd *Fd; debDebFile *DebFile; @@ -99,10 +99,10 @@ class CacheDB // Data collection helpers debDebFile::MemControlExtract Control; ContentsExtract Contents; - string MD5Res; - string SHA1Res; - string SHA256Res; - string SHA512Res; + std::string MD5Res; + std::string SHA1Res; + std::string SHA256Res; + std::string SHA512Res; // Runtime statistics struct Stats @@ -129,21 +129,21 @@ class CacheDB Stats() : Bytes(0), MD5Bytes(0), SHA1Bytes(0), SHA256Bytes(0), Packages(0), Misses(0), DeLinkBytes(0) {}; } Stats; - bool ReadyDB(string const &DB); + bool ReadyDB(std::string const &DB); inline bool DBFailed() {return Dbp != 0 && DBLoaded == false;}; inline bool Loaded() {return DBLoaded == true;}; inline unsigned long long GetFileSize(void) {return CurStat.FileSize;} - bool SetFile(string const &FileName,struct stat St,FileFd *Fd); - bool GetFileInfo(string const &FileName, bool const &DoControl, bool const &DoContents, bool const &GenContentsOnly, + bool SetFile(std::string const &FileName,struct stat St,FileFd *Fd); + bool GetFileInfo(std::string const &FileName, bool const &DoControl, bool const &DoContents, bool const &GenContentsOnly, bool const &DoMD5, bool const &DoSHA1, bool const &DoSHA256, bool const &DoSHA512, bool const &checkMtime = false); bool Finish(); bool Clean(); - CacheDB(string const &DB) : Dbp(0), Fd(NULL), DebFile(0) {ReadyDB(DB);}; - ~CacheDB() {ReadyDB(string()); delete DebFile;}; + CacheDB(std::string const &DB) : Dbp(0), Fd(NULL), DebFile(0) {ReadyDB(DB);}; + ~CacheDB() {ReadyDB(std::string()); delete DebFile;}; }; #endif diff --git a/ftparchive/contents.cc b/ftparchive/contents.cc index 65d8dd1ce..bbc5a1e2b 100644 --- a/ftparchive/contents.cc +++ b/ftparchive/contents.cc @@ -380,7 +380,7 @@ bool ContentsExtract::TakeContents(const void *NewData,unsigned long long Length // ContentsExtract::Add - Read the contents data into the sorter /*{{{*/ // --------------------------------------------------------------------- /* */ -void ContentsExtract::Add(GenContents &Contents,string const &Package) +void ContentsExtract::Add(GenContents &Contents,std::string const &Package) { const char *Start = Data; char *Pkg = Contents.Mystrdup(Package.c_str()); diff --git a/ftparchive/contents.h b/ftparchive/contents.h index f549ce17f..cdd8abd5c 100644 --- a/ftparchive/contents.h +++ b/ftparchive/contents.h @@ -80,7 +80,7 @@ class ContentsExtract : public pkgDirStream virtual bool DoItem(Item &Itm,int &Fd); void Reset() {CurSize = 0;}; bool TakeContents(const void *Data,unsigned long long Length); - void Add(GenContents &Contents,string const &Package); + void Add(GenContents &Contents,std::string const &Package); ContentsExtract() : Data(0), MaxSize(0), CurSize(0) {}; virtual ~ContentsExtract() {delete [] Data;}; diff --git a/ftparchive/multicompress.h b/ftparchive/multicompress.h index 4839af47d..19e5065fa 100644 --- a/ftparchive/multicompress.h +++ b/ftparchive/multicompress.h @@ -29,7 +29,7 @@ class MultiCompress // An output file struct Files { - string Output; + std::string Output; APT::Configuration::Compressor CompressProg; Files *Next; FileFd TmpFile; @@ -57,9 +57,9 @@ class MultiCompress bool Finalize(unsigned long long &OutSize); bool OpenOld(int &Fd,pid_t &Proc); bool CloseOld(int Fd,pid_t Proc); - static bool GetStat(string const &Output,string const &Compress,struct stat &St); + static bool GetStat(std::string const &Output,std::string const &Compress,struct stat &St); - MultiCompress(string const &Output,string const &Compress, + MultiCompress(std::string const &Output,std::string const &Compress, mode_t const &Permissions, bool const &Write = true); ~MultiCompress(); }; diff --git a/methods/bzip2.cc b/methods/bzip2.cc index eff83bda7..ad5db6cfb 100644 --- a/methods/bzip2.cc +++ b/methods/bzip2.cc @@ -47,9 +47,9 @@ class Bzip2Method : public pkgAcqMethod bool Bzip2Method::Fetch(FetchItem *Itm) { URI Get = Itm->Uri; - string Path = Get.Host + Get.Path; // To account for relative paths + std::string Path = Get.Host + Get.Path; // To account for relative paths - string GzPathOption = "Dir::bin::"+string(Prog); + std::string GzPathOption = "Dir::bin::" + std::string(Prog); FetchResult Res; Res.Filename = Itm->DestFile; @@ -78,7 +78,7 @@ bool Bzip2Method::Fetch(FetchItem *Itm) SetCloseExec(STDOUT_FILENO,false); const char *Args[3]; - string Tmp = _config->Find(GzPathOption,Prog); + std::string Tmp = _config->Find(GzPathOption,Prog); Args[0] = Tmp.c_str(); Args[1] = "-d"; Args[2] = 0; diff --git a/methods/connect.cc b/methods/connect.cc index 16fb6e793..ba2264faa 100644 --- a/methods/connect.cc +++ b/methods/connect.cc @@ -35,13 +35,13 @@ #include /*}}}*/ -static string LastHost; +static std::string LastHost; static int LastPort = 0; static struct addrinfo *LastHostAddr = 0; static struct addrinfo *LastUsed = 0; // Set of IP/hostnames that we timed out before or couldn't resolve -static std::set bad_addr; +static std::set bad_addr; // RotateDNS - Select a new server from a DNS rotation /*{{{*/ // --------------------------------------------------------------------- @@ -58,7 +58,7 @@ void RotateDNS() // DoConnect - Attempt a connect operation /*{{{*/ // --------------------------------------------------------------------- /* This helper function attempts a connection to a single address. */ -static bool DoConnect(struct addrinfo *Addr,string Host, +static bool DoConnect(struct addrinfo *Addr,std::string Host, unsigned long TimeOut,int &Fd,pkgAcqMethod *Owner) { // Show a status indicator @@ -73,7 +73,7 @@ static bool DoConnect(struct addrinfo *Addr,string Host, Owner->Status(_("Connecting to %s (%s)"),Host.c_str(),Name); // if that addr did timeout before, we do not try it again - if(bad_addr.find(string(Name)) != bad_addr.end()) + if(bad_addr.find(std::string(Name)) != bad_addr.end()) return false; /* If this is an IP rotation store the IP we are using.. If something goes @@ -100,7 +100,7 @@ static bool DoConnect(struct addrinfo *Addr,string Host, /* This implements a timeout for connect by opening the connection nonblocking */ if (WaitFd(Fd,true,TimeOut) == false) { - bad_addr.insert(bad_addr.begin(), string(Name)); + bad_addr.insert(bad_addr.begin(), std::string(Name)); Owner->SetFailReason("Timeout"); return _error->Error(_("Could not connect to %s:%s (%s), " "connection timed out"),Host.c_str(),Service,Name); @@ -119,7 +119,7 @@ static bool DoConnect(struct addrinfo *Addr,string Host, Owner->SetFailReason("ConnectionRefused"); else if (errno == ETIMEDOUT) Owner->SetFailReason("ConnectionTimedOut"); - bad_addr.insert(bad_addr.begin(), string(Name)); + bad_addr.insert(bad_addr.begin(), std::string(Name)); return _error->Errno("connect",_("Could not connect to %s:%s (%s)."),Host.c_str(), Service,Name); } @@ -130,7 +130,7 @@ static bool DoConnect(struct addrinfo *Addr,string Host, // Connect - Connect to a server /*{{{*/ // --------------------------------------------------------------------- /* Performs a connection to the server */ -bool Connect(string Host,int Port,const char *Service,int DefPort,int &Fd, +bool Connect(std::string Host,int Port,const char *Service,int DefPort,int &Fd, unsigned long TimeOut,pkgAcqMethod *Owner) { if (_error->PendingError() == true) diff --git a/methods/connect.h b/methods/connect.h index 6f208e31d..0afa00919 100644 --- a/methods/connect.h +++ b/methods/connect.h @@ -13,7 +13,7 @@ #include #include -bool Connect(string To,int Port,const char *Service,int DefPort, +bool Connect(std::string To,int Port,const char *Service,int DefPort, int &Fd,unsigned long TimeOut,pkgAcqMethod *Owner); void RotateDNS(); diff --git a/methods/copy.cc b/methods/copy.cc index 94467e054..fe2918469 100644 --- a/methods/copy.cc +++ b/methods/copy.cc @@ -37,7 +37,7 @@ class CopyMethod : public pkgAcqMethod bool CopyMethod::Fetch(FetchItem *Itm) { URI Get = Itm->Uri; - string File = Get.Path; + std::string File = Get.Path; // Stat the file and send a start message struct stat Buf; diff --git a/methods/file.cc b/methods/file.cc index 9fc4cd76c..d58652e6e 100644 --- a/methods/file.cc +++ b/methods/file.cc @@ -40,7 +40,7 @@ class FileMethod : public pkgAcqMethod bool FileMethod::Fetch(FetchItem *Itm) { URI Get = Itm->Uri; - string File = Get.Path; + std::string File = Get.Path; FetchResult Res; if (Get.Host.empty() == false) return _error->Error(_("Invalid URI, local URIS must not start with //")); @@ -58,10 +58,10 @@ bool FileMethod::Fetch(FetchItem *Itm) } // See if we can compute a file without a .gz exentsion - string::size_type Pos = File.rfind(".gz"); + std::string::size_type Pos = File.rfind(".gz"); if (Pos + 3 == File.length()) { - File = string(File,0,Pos); + File = std::string(File,0,Pos); if (stat(File.c_str(),&Buf) == 0) { FetchResult AltRes; diff --git a/methods/ftp.h b/methods/ftp.h index b4913ca57..7088e0954 100644 --- a/methods/ftp.h +++ b/methods/ftp.h @@ -33,7 +33,7 @@ class FTPConn socklen_t ServerAddrLen; // Private helper functions - bool ReadLine(string &Text); + bool ReadLine(std::string &Text); bool Login(); bool CreateDataFd(); bool Finalize(); @@ -43,8 +43,8 @@ class FTPConn bool Comp(URI Other) {return Other.Host == ServerName.Host && Other.Port == ServerName.Port && Other.User == ServerName.User && Other.Password == ServerName.Password; }; // Raw connection IO - bool ReadResp(unsigned int &Ret,string &Text); - bool WriteMsg(unsigned int &Ret,string &Text,const char *Fmt,...); + bool ReadResp(unsigned int &Ret,std::string &Text); + bool WriteMsg(unsigned int &Ret,std::string &Text,const char *Fmt,...); // Connection control bool Open(pkgAcqMethod *Owner); @@ -65,11 +65,11 @@ class FTPConn class FtpMethod : public pkgAcqMethod { virtual bool Fetch(FetchItem *Itm); - virtual bool Configuration(string Message); + virtual bool Configuration(std::string Message); FTPConn *Server; - static string FailFile; + static std::string FailFile; static int FailFd; static time_t FailTime; static void SigTerm(int); diff --git a/methods/gpgv.cc b/methods/gpgv.cc index 251bcbc90..67cbd36a2 100644 --- a/methods/gpgv.cc +++ b/methods/gpgv.cc @@ -17,6 +17,9 @@ #include +using std::string; +using std::vector; + #define GNUPGPREFIX "[GNUPG:]" #define GNUPGBADSIG "[GNUPG:] BADSIG" #define GNUPGNOPUBKEY "[GNUPG:] NO_PUBKEY" diff --git a/methods/gzip.cc b/methods/gzip.cc index f4bb052e2..a51497948 100644 --- a/methods/gzip.cc +++ b/methods/gzip.cc @@ -41,7 +41,7 @@ class GzipMethod : public pkgAcqMethod bool GzipMethod::Fetch(FetchItem *Itm) { URI Get = Itm->Uri; - string Path = Get.Host + Get.Path; // To account for relative paths + std::string Path = Get.Host + Get.Path; // To account for relative paths FetchResult Res; Res.Filename = Itm->DestFile; diff --git a/methods/http.h b/methods/http.h index c47d7184a..08823d1b1 100644 --- a/methods/http.h +++ b/methods/http.h @@ -26,7 +26,7 @@ class CircleBuf unsigned long long Size; unsigned long long InP; unsigned long long OutP; - string OutQueue; + std::string OutQueue; unsigned long long StrPos; unsigned long long MaxGet; struct timeval Start; @@ -60,11 +60,11 @@ class CircleBuf // Read data in bool Read(int Fd); - bool Read(string Data); + bool Read(std::string Data); // Write data out bool Write(int Fd); - bool WriteTillEl(string &Data,bool Single = false); + bool WriteTillEl(std::string &Data,bool Single = false); // Control the write limit void Limit(long long Max) {if (Max == -1) MaxGet = 0-1; else MaxGet = OutP + Max;} @@ -99,7 +99,7 @@ struct ServerState enum {Chunked,Stream,Closes} Encoding; enum {Header, Data} State; bool Persistent; - string Location; + std::string Location; // This is a Persistent attribute of the server itself. bool Pipeline; @@ -112,7 +112,7 @@ struct ServerState int ServerFd; URI ServerName; - bool HeaderLine(string Line); + bool HeaderLine(std::string Line); bool Comp(URI Other) const {return Other.Host == ServerName.Host && Other.Port == ServerName.Port;}; void Reset() {Major = 0; Minor = 0; Result = 0; Size = 0; StartPos = 0; Encoding = Closes; time(&Date); ServerFd = -1; @@ -167,10 +167,10 @@ class HttpMethod : public pkgAcqMethod /** \brief Try to AutoDetect the proxy */ bool AutoDetectProxy(); - virtual bool Configuration(string Message); + virtual bool Configuration(std::string Message); // In the event of a fatal signal this file will be closed and timestamped. - static string FailFile; + static std::string FailFile; static int FailFd; static time_t FailTime; static void SigTerm(int); @@ -178,8 +178,8 @@ class HttpMethod : public pkgAcqMethod protected: virtual bool Fetch(FetchItem *); - string NextURI; - string AutoDetectProxyCmd; + std::string NextURI; + std::string AutoDetectProxyCmd; public: friend struct ServerState; diff --git a/methods/rred.cc b/methods/rred.cc index bc941ed04..2a05acce1 100644 --- a/methods/rred.cc +++ b/methods/rred.cc @@ -472,7 +472,7 @@ bool RredMethod::Fetch(FetchItem *Itm) /*{{{*/ { Debug = _config->FindB("Debug::pkgAcquire::RRed", false); URI Get = Itm->Uri; - string Path = Get.Host + Get.Path; // To account for relative paths + std::string Path = Get.Host + Get.Path; // To account for relative paths FetchResult Res; Res.Filename = Itm->DestFile; @@ -525,7 +525,7 @@ bool RredMethod::Fetch(FetchItem *Itm) /*{{{*/ and use the access time from the "old" file */ struct stat BufBase, BufPatch; if (stat(Path.c_str(),&BufBase) != 0 || - stat(string(Path+".ed").c_str(),&BufPatch) != 0) + stat(std::string(Path+".ed").c_str(),&BufPatch) != 0) return _error->Errno("stat",_("Failed to stat")); struct utimbuf TimeBuf; diff --git a/methods/rsh.cc b/methods/rsh.cc index c95a4d3eb..add128c49 100644 --- a/methods/rsh.cc +++ b/methods/rsh.cc @@ -32,7 +32,7 @@ const char *Prog; unsigned long TimeOut = 120; Configuration::Item const *RshOptions = 0; time_t RSHMethod::FailTime = 0; -string RSHMethod::FailFile; +std::string RSHMethod::FailFile; int RSHMethod::FailFd = -1; // RSHConn::RSHConn - Constructor /*{{{*/ @@ -85,7 +85,7 @@ bool RSHConn::Open() // RSHConn::Connect - Fire up rsh and connect /*{{{*/ // --------------------------------------------------------------------- /* */ -bool RSHConn::Connect(string Host, string User) +bool RSHConn::Connect(std::string Host, std::string User) { // Create the pipes int Pipes[4] = {-1,-1,-1,-1}; @@ -154,7 +154,7 @@ bool RSHConn::Connect(string Host, string User) // RSHConn::ReadLine - Very simple buffered read with timeout /*{{{*/ // --------------------------------------------------------------------- /* */ -bool RSHConn::ReadLine(string &Text) +bool RSHConn::ReadLine(std::string &Text) { if (Process == -1 || ReadFd == -1) return false; @@ -174,7 +174,7 @@ bool RSHConn::ReadLine(string &Text) continue; I++; - Text = string(Buffer,I); + Text = std::string(Buffer,I); memmove(Buffer,Buffer+I,Len - I); Len -= I; return true; @@ -205,7 +205,7 @@ bool RSHConn::ReadLine(string &Text) // --------------------------------------------------------------------- /* The remote sync flag appends a || echo which will insert blank line once the command completes. */ -bool RSHConn::WriteMsg(string &Text,bool Sync,const char *Fmt,...) +bool RSHConn::WriteMsg(std::string &Text,bool Sync,const char *Fmt,...) { va_list args; va_start(args,Fmt); @@ -254,7 +254,7 @@ bool RSHConn::WriteMsg(string &Text,bool Sync,const char *Fmt,...) bool RSHConn::Size(const char *Path,unsigned long long &Size) { // Query the size - string Msg; + std::string Msg; Size = 0; if (WriteMsg(Msg,true,"find %s -follow -printf '%%s\\n'",Path) == false) @@ -276,7 +276,7 @@ bool RSHConn::ModTime(const char *Path, time_t &Time) { Time = time(&Time); // Query the mod time - string Msg; + std::string Msg; if (WriteMsg(Msg,true,"TZ=UTC find %s -follow -printf '%%TY%%Tm%%Td%%TH%%TM%%TS\\n'",Path) == false) return false; @@ -309,7 +309,7 @@ bool RSHConn::Get(const char *Path,FileFd &To,unsigned long long Resume, } // FIXME: Detect file-not openable type errors. - string Jnk; + std::string Jnk; if (WriteMsg(Jnk,false,"dd if=%s bs=2048 skip=%u", Path, Resume / 2048) == false) return false; @@ -366,7 +366,7 @@ RSHMethod::RSHMethod() : pkgAcqMethod("1.0",SendConfig) /*}}}*/ // RSHMethod::Configuration - Handle a configuration message /*{{{*/ // --------------------------------------------------------------------- -bool RSHMethod::Configuration(string Message) +bool RSHMethod::Configuration(std::string Message) { char ProgStr[100]; diff --git a/methods/rsh.h b/methods/rsh.h index c81396b5f..7bebe29a0 100644 --- a/methods/rsh.h +++ b/methods/rsh.h @@ -25,15 +25,15 @@ class RSHConn URI ServerName; // Private helper functions - bool ReadLine(string &Text); + bool ReadLine(std::string &Text); public: pid_t Process; // Raw connection IO - bool WriteMsg(string &Text,bool Sync,const char *Fmt,...); - bool Connect(string Host, string User); + bool WriteMsg(std::string &Text,bool Sync,const char *Fmt,...); + bool Connect(std::string Host, std::string User); bool Comp(URI Other) const {return Other.Host == ServerName.Host && Other.Port == ServerName.Port;}; // Connection control @@ -53,11 +53,11 @@ class RSHConn class RSHMethod : public pkgAcqMethod { virtual bool Fetch(FetchItem *Itm); - virtual bool Configuration(string Message); + virtual bool Configuration(std::string Message); RSHConn *Server; - static string FailFile; + static std::string FailFile; static int FailFd; static time_t FailTime; static void SigTerm(int); diff --git a/test/interactive-helper/test_udevcdrom.cc b/test/interactive-helper/test_udevcdrom.cc index dc25ab357..bbedc0ab5 100644 --- a/test/interactive-helper/test_udevcdrom.cc +++ b/test/interactive-helper/test_udevcdrom.cc @@ -2,12 +2,14 @@ #include #include +#include + int main() { pkgUdevCdromDevices c; assert(c.Dlopen()); - vector l; + std::vector l; l = c.Scan(); assert(l.empty() == false); for (size_t i = 0; i < l.size(); ++i) diff --git a/test/libapt/getlistoffilesindir_test.cc b/test/libapt/getlistoffilesindir_test.cc index 5ee014cca..b2c95e840 100644 --- a/test/libapt/getlistoffilesindir_test.cc +++ b/test/libapt/getlistoffilesindir_test.cc @@ -7,7 +7,7 @@ #include #include -#define P(x) string(argv[1]).append("/").append(x) +#define P(x) std::string(argv[1]).append("/").append(x) int main(int argc,char *argv[]) { diff --git a/test/libapt/hashsums_test.cc b/test/libapt/hashsums_test.cc index 2cb71cc38..396e4cf6b 100644 --- a/test/libapt/hashsums_test.cc +++ b/test/libapt/hashsums_test.cc @@ -146,7 +146,7 @@ int main(int argc, char** argv) equals(sha2.VerifyFile(argv[1]), true); } { - HashString sha2("SHA256:"+string(argv[4])); + HashString sha2("SHA256:" + std::string(argv[4])); equals(sha2.VerifyFile(argv[1]), true); } diff --git a/test/libapt/parsedepends_test.cc b/test/libapt/parsedepends_test.cc index 7b496878d..b5d92d9d2 100644 --- a/test/libapt/parsedepends_test.cc +++ b/test/libapt/parsedepends_test.cc @@ -4,8 +4,8 @@ #include "assert.h" int main(int argc,char *argv[]) { - string Package; - string Version; + std::string Package; + std::string Version; unsigned int Op = 5; unsigned int Null = 0; bool StripMultiArch = true; diff --git a/test/libapt/strutil_test.cc b/test/libapt/strutil_test.cc index af6eb2cc6..bfe0d7222 100644 --- a/test/libapt/strutil_test.cc +++ b/test/libapt/strutil_test.cc @@ -4,7 +4,7 @@ int main(int argc,char *argv[]) { - string input, output, expected; + std::string input, output, expected; // no input input = "foobar"; -- cgit v1.2.3-70-g09d2 From 472ff00ef2e48383805d281c6364ec27839e3f4d Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 19 Sep 2011 19:14:19 +0200 Subject: use forward declaration in headers if possible instead of includes --- apt-inst/contrib/arfile.cc | 1 + apt-inst/contrib/arfile.h | 3 +- apt-inst/contrib/extracttar.cc | 1 + apt-inst/contrib/extracttar.h | 5 +- apt-inst/database.cc | 7 + apt-inst/database.h | 8 +- apt-inst/deb/debfile.cc | 1 + apt-inst/deb/debfile.h | 5 +- apt-inst/deb/dpkgdb.cc | 2 + apt-inst/deb/dpkgdb.h | 5 + apt-inst/extract.cc | 1 + apt-inst/filelist.h | 3 +- apt-pkg/acquire-item.cc | 2 + apt-pkg/acquire-item.h | 238 ++++++++++++++--------------- apt-pkg/acquire-method.h | 6 +- apt-pkg/algorithms.cc | 3 + apt-pkg/algorithms.h | 3 +- apt-pkg/cachefile.cc | 1 + apt-pkg/cachefile.h | 9 +- apt-pkg/cacheiterators.h | 1 + apt-pkg/cacheset.cc | 7 +- apt-pkg/cacheset.h | 13 +- apt-pkg/cdrom.cc | 2 + apt-pkg/cdrom.h | 3 +- apt-pkg/clean.cc | 1 + apt-pkg/contrib/cmndline.cc | 1 + apt-pkg/contrib/cmndline.h | 4 +- apt-pkg/contrib/mmap.cc | 1 + apt-pkg/contrib/mmap.h | 3 +- apt-pkg/contrib/netrc.cc | 2 + apt-pkg/contrib/netrc.h | 4 +- apt-pkg/deb/deblistparser.cc | 1 + apt-pkg/deb/deblistparser.h | 1 - apt-pkg/deb/debmetaindex.cc | 3 + apt-pkg/deb/debmetaindex.h | 43 +++--- apt-pkg/deb/debrecords.cc | 2 + apt-pkg/deb/debrecords.h | 2 +- apt-pkg/deb/debsystem.h | 4 +- apt-pkg/depcache.cc | 2 +- apt-pkg/depcache.h | 5 +- apt-pkg/edsp.cc | 7 + apt-pkg/edsp.h | 11 +- apt-pkg/edsp/edspindexfile.cc | 1 + apt-pkg/edsp/edspindexfile.h | 1 - apt-pkg/edsp/edsplistparser.h | 5 +- apt-pkg/indexfile.h | 2 + apt-pkg/indexrecords.cc | 3 + apt-pkg/indexrecords.h | 1 - apt-pkg/init.cc | 2 + apt-pkg/init.h | 4 +- apt-pkg/metaindex.h | 3 - apt-pkg/packagemanager.h | 3 +- apt-pkg/pkgcachegen.cc | 2 + apt-pkg/pkgsystem.h | 6 +- apt-pkg/sourcelist.cc | 2 + apt-pkg/sourcelist.h | 6 +- apt-pkg/srcrecords.cc | 1 + apt-pkg/tagfile.cc | 1 + apt-pkg/tagfile.h | 6 +- apt-pkg/vendorlist.cc | 2 + apt-pkg/vendorlist.h | 5 +- apt-pkg/version.h | 3 +- cmdline/acqprogress.h | 4 +- cmdline/apt-cache.cc | 6 +- cmdline/apt-cdrom.cc | 2 + cmdline/apt-config.cc | 1 + cmdline/apt-dump-solver.cc | 1 + cmdline/apt-extracttemplates.cc | 1 + cmdline/apt-get.cc | 5 + cmdline/apt-internal-solver.cc | 2 + cmdline/apt-mark.cc | 1 + cmdline/apt-sortpkgs.cc | 2 + debian/changelog | 3 +- ftparchive/cachedb.cc | 1 + ftparchive/cachedb.h | 8 +- ftparchive/contents.h | 3 +- ftparchive/multicompress.h | 5 +- ftparchive/writer.h | 5 +- methods/bzip2.cc | 1 + methods/cdrom.cc | 1 + methods/connect.cc | 2 + methods/connect.h | 3 +- methods/copy.cc | 1 + methods/file.cc | 1 + methods/ftp.cc | 1 + methods/ftp.h | 4 + methods/gpgv.cc | 1 + methods/http.cc | 6 + methods/http.h | 7 +- methods/https.cc | 1 + methods/https.h | 3 +- methods/mirror.cc | 3 +- methods/mirror.h | 25 +-- methods/rred.cc | 1 + methods/rsh.cc | 3 + methods/rsh.h | 8 +- test/interactive-helper/extract-control.cc | 1 + test/interactive-helper/test_udevcdrom.cc | 1 + test/interactive-helper/testextract.cc | 2 + 99 files changed, 380 insertions(+), 232 deletions(-) (limited to 'test') diff --git a/apt-inst/contrib/arfile.cc b/apt-inst/contrib/arfile.cc index 4e078349e..2dee1a40d 100644 --- a/apt-inst/contrib/arfile.cc +++ b/apt-inst/contrib/arfile.cc @@ -18,6 +18,7 @@ #include #include +#include #include #include diff --git a/apt-inst/contrib/arfile.h b/apt-inst/contrib/arfile.h index bfc128ace..2be1323d1 100644 --- a/apt-inst/contrib/arfile.h +++ b/apt-inst/contrib/arfile.h @@ -17,7 +17,8 @@ #include -#include + +class FileFd; class ARArchive { diff --git a/apt-inst/contrib/extracttar.cc b/apt-inst/contrib/extracttar.cc index 487027c3d..12919a7cd 100644 --- a/apt-inst/contrib/extracttar.cc +++ b/apt-inst/contrib/extracttar.cc @@ -18,6 +18,7 @@ // Include Files /*{{{*/ #include +#include #include #include #include diff --git a/apt-inst/contrib/extracttar.h b/apt-inst/contrib/extracttar.h index 27c453d0d..8754e8dcc 100644 --- a/apt-inst/contrib/extracttar.h +++ b/apt-inst/contrib/extracttar.h @@ -15,9 +15,10 @@ #define PKGLIB_EXTRACTTAR_H #include -#include -#include +#include + +class pkgDirStream; class ExtractTar { diff --git a/apt-inst/database.cc b/apt-inst/database.cc index 1a94e1353..da7613491 100644 --- a/apt-inst/database.cc +++ b/apt-inst/database.cc @@ -11,6 +11,8 @@ #include #include +#include +#include /*}}}*/ // DataBase::GetMetaTmp - Get the temp dir /*{{{*/ @@ -26,3 +28,8 @@ bool pkgDataBase::GetMetaTmp(std::string &Dir) return true; } /*}}}*/ +pkgDataBase::~pkgDataBase() +{ + delete Cache; + delete FList; +} diff --git a/apt-inst/database.h b/apt-inst/database.h index cd0e310bc..ccfee3797 100644 --- a/apt-inst/database.h +++ b/apt-inst/database.h @@ -21,9 +21,13 @@ #ifndef PKGLIB_DATABASE_H #define PKGLIB_DATABASE_H -#include #include +#include + +class pkgFLCache; +class OpProgress; + class pkgDataBase { protected: @@ -46,7 +50,7 @@ class pkgDataBase virtual bool LoadChanges() = 0; pkgDataBase() : Cache(0), FList(0) {}; - virtual ~pkgDataBase() {delete Cache; delete FList;}; + virtual ~pkgDataBase(); }; #endif diff --git a/apt-inst/deb/debfile.cc b/apt-inst/deb/debfile.cc index 8ade547f5..4bd065cf8 100644 --- a/apt-inst/deb/debfile.cc +++ b/apt-inst/deb/debfile.cc @@ -18,6 +18,7 @@ // Include Files /*{{{*/ #include +#include #include #include #include diff --git a/apt-inst/deb/debfile.h b/apt-inst/deb/debfile.h index e404d81db..2c4734f9e 100644 --- a/apt-inst/deb/debfile.h +++ b/apt-inst/deb/debfile.h @@ -25,9 +25,12 @@ #include -#include #include #include +#include + +class FileFd; +class pkgDataBase; class debDebFile { diff --git a/apt-inst/deb/dpkgdb.cc b/apt-inst/deb/dpkgdb.cc index 3112acdbd..819c123f6 100644 --- a/apt-inst/deb/dpkgdb.cc +++ b/apt-inst/deb/dpkgdb.cc @@ -21,6 +21,8 @@ #include #include #include +#include +#include #include #include diff --git a/apt-inst/deb/dpkgdb.h b/apt-inst/deb/dpkgdb.h index 3656929aa..f28563a93 100644 --- a/apt-inst/deb/dpkgdb.h +++ b/apt-inst/deb/dpkgdb.h @@ -22,6 +22,11 @@ #include +#include + +class DynamicMMap; +class OpProgress; + class debDpkgDB : public pkgDataBase { protected: diff --git a/apt-inst/extract.cc b/apt-inst/extract.cc index d48ff63ac..29e163028 100644 --- a/apt-inst/extract.cc +++ b/apt-inst/extract.cc @@ -49,6 +49,7 @@ #include #include #include +#include #include #include diff --git a/apt-inst/filelist.h b/apt-inst/filelist.h index 69c483e71..0405d61df 100644 --- a/apt-inst/filelist.h +++ b/apt-inst/filelist.h @@ -28,9 +28,10 @@ #ifndef PKGLIB_FILELIST_H #define PKGLIB_FILELIST_H +#include #include -#include +#include class pkgFLCache { diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index b46489f87..453fce109 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -25,6 +25,8 @@ #include #include #include +#include +#include #include #include diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index 13be17a01..24f848f27 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -21,13 +21,9 @@ #define PKGLIB_ACQUIRE_ITEM_H #include -#include -#include -#include -#include -#include #include #include +#include /** \addtogroup acquire * @{ @@ -35,6 +31,10 @@ * \file acquire-item.h */ +class indexRecords; +class pkgRecords; +class pkgSourceList; + /** \brief Represents the process by which a pkgAcquire object should {{{ * retrieve a file or a collection of files. * @@ -74,7 +74,7 @@ class pkgAcquire::Item : public WeakPointable * \param To The new name of #From. If #To exists it will be * overwritten. */ - void Rename(string From,string To); + void Rename(std::string From,std::string To); public: @@ -109,7 +109,7 @@ class pkgAcquire::Item : public WeakPointable /** \brief Contains a textual description of the error encountered * if #Status is #StatError or #StatAuthError. */ - string ErrorText; + std::string ErrorText; /** \brief The size of the object to fetch. */ unsigned long long FileSize; @@ -143,7 +143,7 @@ class pkgAcquire::Item : public WeakPointable * download progress indicator's overall statistics. */ bool Local; - string UsedMirror; + std::string UsedMirror; /** \brief The number of fetch queues into which this item has been * inserted. @@ -158,7 +158,7 @@ class pkgAcquire::Item : public WeakPointable /** \brief The name of the file into which the retrieved object * will be written. */ - string DestFile; + std::string DestFile; /** \brief Invoked by the acquire worker when the object couldn't * be fetched. @@ -173,7 +173,7 @@ class pkgAcquire::Item : public WeakPointable * * \sa pkgAcqMethod */ - virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); + virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf); /** \brief Invoked by the acquire worker when the object was * fetched successfully. @@ -194,7 +194,7 @@ class pkgAcquire::Item : public WeakPointable * * \sa pkgAcqMethod */ - virtual void Done(string Message,unsigned long long Size,string Hash, + virtual void Done(std::string Message,unsigned long long Size,std::string Hash, pkgAcquire::MethodConfig *Cnf); /** \brief Invoked when the worker starts to fetch this object. @@ -206,7 +206,7 @@ class pkgAcquire::Item : public WeakPointable * * \sa pkgAcqMethod */ - virtual void Start(string Message,unsigned long long Size); + virtual void Start(std::string Message,unsigned long long Size); /** \brief Custom headers to be sent to the fetch process. * @@ -216,18 +216,18 @@ class pkgAcquire::Item : public WeakPointable * line, so they should (if nonempty) have a leading newline and * no trailing newline. */ - virtual string Custom600Headers() {return string();}; + virtual std::string Custom600Headers() {return std::string();}; /** \brief A "descriptive" URI-like string. * * \return a URI that should be used to describe what is being fetched. */ - virtual string DescURI() = 0; + virtual std::string DescURI() = 0; /** \brief Short item description. * * \return a brief description of the object being fetched. */ - virtual string ShortDesc() {return DescURI();} + virtual std::string ShortDesc() {return DescURI();} /** \brief Invoked by the worker when the download is completely done. */ virtual void Finished() {}; @@ -237,7 +237,7 @@ class pkgAcquire::Item : public WeakPointable * \return the HashSum of this object, if applicable; otherwise, an * empty string. */ - virtual string HashSum() {return string();}; + virtual std::string HashSum() {return std::string();}; /** \return the acquire process with which this item is associated. */ pkgAcquire *GetOwner() {return Owner;}; @@ -253,7 +253,7 @@ class pkgAcquire::Item : public WeakPointable * * \param FailCode A short failure string that is send */ - void ReportMirrorFailure(string FailCode); + void ReportMirrorFailure(std::string FailCode); /** \brief Initialize an item. @@ -278,10 +278,10 @@ class pkgAcquire::Item : public WeakPointable /** \brief Information about an index patch (aka diff). */ /*{{{*/ struct DiffInfo { /** The filename of the diff. */ - string file; + std::string file; /** The sha1 hash of the diff. */ - string sha1; + std::string sha1; /** The size of the diff. */ unsigned long size; @@ -308,12 +308,12 @@ class pkgAcqSubIndex : public pkgAcquire::Item public: // Specialized action members - virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); - virtual void Done(string Message,unsigned long long Size,string Md5Hash, + virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf); + virtual void Done(std::string Message,unsigned long long Size,std::string Md5Hash, pkgAcquire::MethodConfig *Cnf); - virtual string DescURI() {return Desc.URI;}; - virtual string Custom600Headers(); - virtual bool ParseIndex(string const &IndexFile); + virtual std::string DescURI() {return Desc.URI;}; + virtual std::string Custom600Headers(); + virtual bool ParseIndex(std::string const &IndexFile); /** \brief Create a new pkgAcqSubIndex. * @@ -327,8 +327,8 @@ class pkgAcqSubIndex : public pkgAcquire::Item * * \param ExpectedHash The list file's MD5 signature. */ - pkgAcqSubIndex(pkgAcquire *Owner, string const &URI,string const &URIDesc, - string const &ShortDesc, HashString const &ExpectedHash); + pkgAcqSubIndex(pkgAcquire *Owner, std::string const &URI,std::string const &URIDesc, + std::string const &ShortDesc, HashString const &ExpectedHash); }; /*}}}*/ /** \brief An item that is responsible for fetching an index file of {{{ @@ -352,7 +352,7 @@ class pkgAcqDiffIndex : public pkgAcquire::Item /** \brief The URI of the index file to recreate at our end (either * by downloading it or by applying partial patches). */ - string RealURI; + std::string RealURI; /** \brief The Hash that the real index file should have after * all patches have been applied. @@ -362,20 +362,20 @@ class pkgAcqDiffIndex : public pkgAcquire::Item /** \brief The index file which will be patched to generate the new * file. */ - string CurrentPackagesFile; + std::string CurrentPackagesFile; /** \brief A description of the Packages file (stored in * pkgAcquire::ItemDesc::Description). */ - string Description; + std::string Description; public: // Specialized action members - virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); - virtual void Done(string Message,unsigned long long Size,string Md5Hash, + virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf); + virtual void Done(std::string Message,unsigned long long Size,std::string Md5Hash, pkgAcquire::MethodConfig *Cnf); - virtual string DescURI() {return RealURI + "Index";}; - virtual string Custom600Headers(); + virtual std::string DescURI() {return RealURI + "Index";}; + virtual std::string Custom600Headers(); /** \brief Parse the Index file for a set of Packages diffs. * @@ -387,7 +387,7 @@ class pkgAcqDiffIndex : public pkgAcquire::Item * \return \b true if the Index file was successfully parsed, \b * false otherwise. */ - bool ParseDiffIndex(string IndexDiffFile); + bool ParseDiffIndex(std::string IndexDiffFile); /** \brief Create a new pkgAcqDiffIndex. @@ -402,8 +402,8 @@ class pkgAcqDiffIndex : public pkgAcquire::Item * * \param ExpectedHash The list file's MD5 signature. */ - pkgAcqDiffIndex(pkgAcquire *Owner,string URI,string URIDesc, - string ShortDesc, HashString ExpectedHash); + pkgAcqDiffIndex(pkgAcquire *Owner,std::string URI,std::string URIDesc, + std::string ShortDesc, HashString ExpectedHash); }; /*}}}*/ /** \brief An item that is responsible for fetching all the patches {{{ @@ -460,7 +460,7 @@ class pkgAcqIndexDiffs : public pkgAcquire::Item /** \brief The URI of the package index file that is being * reconstructed. */ - string RealURI; + std::string RealURI; /** \brief The HashSum of the package index file that is being * reconstructed. @@ -468,7 +468,7 @@ class pkgAcqIndexDiffs : public pkgAcquire::Item HashString ExpectedHash; /** A description of the file being downloaded. */ - string Description; + std::string Description; /** The patches that remain to be downloaded, including the patch * being downloaded right now. This list should be ordered so @@ -478,10 +478,10 @@ class pkgAcqIndexDiffs : public pkgAcquire::Item * dictionary instead of relying on ordering and stripping them * off the front? */ - vector available_patches; + std::vector available_patches; /** Stop applying patches when reaching that sha1 */ - string ServerSha1; + std::string ServerSha1; /** The current status of this patch. */ enum DiffState @@ -506,11 +506,11 @@ class pkgAcqIndexDiffs : public pkgAcquire::Item * This method will fall back to downloading the whole index file * outright; its arguments are ignored. */ - virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); + virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf); - virtual void Done(string Message,unsigned long long Size,string Md5Hash, + virtual void Done(std::string Message,unsigned long long Size,std::string Md5Hash, pkgAcquire::MethodConfig *Cnf); - virtual string DescURI() {return RealURI + "Index";}; + virtual std::string DescURI() {return RealURI + "Index";}; /** \brief Create an index diff item. * @@ -534,10 +534,10 @@ class pkgAcqIndexDiffs : public pkgAcquire::Item * should be ordered so that each diff appears before any diff * that depends on it. */ - pkgAcqIndexDiffs(pkgAcquire *Owner,string URI,string URIDesc, - string ShortDesc, HashString ExpectedHash, - string ServerSha1, - vector diffs=vector()); + pkgAcqIndexDiffs(pkgAcquire *Owner,std::string URI,std::string URIDesc, + std::string ShortDesc, HashString ExpectedHash, + std::string ServerSha1, + std::vector diffs=std::vector()); }; /*}}}*/ /** \brief An acquire item that is responsible for fetching an index {{{ @@ -577,7 +577,7 @@ class pkgAcqIndex : public pkgAcquire::Item /** \brief The object that is actually being fetched (minus any * compression-related extensions). */ - string RealURI; + std::string RealURI; /** \brief The expected hashsum of the decompressed index file. */ HashString ExpectedHash; @@ -585,17 +585,17 @@ class pkgAcqIndex : public pkgAcquire::Item /** \brief The compression-related file extensions that are being * added to the downloaded file one by one if first fails (e.g., "gz bz2"). */ - string CompressionExtension; + std::string CompressionExtension; public: // Specialized action members - virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); - virtual void Done(string Message,unsigned long long Size,string Md5Hash, + virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf); + virtual void Done(std::string Message,unsigned long long Size,std::string Md5Hash, pkgAcquire::MethodConfig *Cnf); - virtual string Custom600Headers(); - virtual string DescURI() {return Desc.URI;}; - virtual string HashSum() {return ExpectedHash.toStr(); }; + virtual std::string Custom600Headers(); + virtual std::string DescURI() {return Desc.URI;}; + virtual std::string HashSum() {return ExpectedHash.toStr(); }; /** \brief Create a pkgAcqIndex. * @@ -616,12 +616,12 @@ class pkgAcqIndex : public pkgAcquire::Item * default is ".lzma" or ".bz2" (if the needed binaries are present) * fallback is ".gz" or none. */ - pkgAcqIndex(pkgAcquire *Owner,string URI,string URIDesc, - string ShortDesc, HashString ExpectedHash, - string compressExt=""); + pkgAcqIndex(pkgAcquire *Owner,std::string URI,std::string URIDesc, + std::string ShortDesc, HashString ExpectedHash, + std::string compressExt=""); pkgAcqIndex(pkgAcquire *Owner, struct IndexTarget const * const Target, HashString const &ExpectedHash, indexRecords const *MetaIndexParser); - void Init(string const &URI, string const &URIDesc, string const &ShortDesc); + void Init(std::string const &URI, std::string const &URIDesc, std::string const &ShortDesc); }; /*}}}*/ /** \brief An acquire item that is responsible for fetching a {{{ @@ -635,8 +635,8 @@ class pkgAcqIndexTrans : public pkgAcqIndex { public: - virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); - virtual string Custom600Headers(); + virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf); + virtual std::string Custom600Headers(); /** \brief Create a pkgAcqIndexTrans. * @@ -649,8 +649,8 @@ class pkgAcqIndexTrans : public pkgAcqIndex * * \param ShortDesc A brief description of this index file. */ - pkgAcqIndexTrans(pkgAcquire *Owner,string URI,string URIDesc, - string ShortDesc); + pkgAcqIndexTrans(pkgAcquire *Owner,std::string URI,std::string URIDesc, + std::string ShortDesc); pkgAcqIndexTrans(pkgAcquire *Owner, struct IndexTarget const * const Target, HashString const &ExpectedHash, indexRecords const *MetaIndexParser); }; @@ -660,18 +660,18 @@ class IndexTarget { public: /** \brief A URI from which the index file can be downloaded. */ - string URI; + std::string URI; /** \brief A description of the index file. */ - string Description; + std::string Description; /** \brief A shorter description of the index file. */ - string ShortDesc; + std::string ShortDesc; /** \brief The key by which this index file should be * looked up within the meta signature file. */ - string MetaKey; + std::string MetaKey; virtual bool IsOptional() const { return false; @@ -710,7 +710,7 @@ class pkgAcqMetaSig : public pkgAcquire::Item { protected: /** \brief The last good signature file */ - string LastGoodSig; + std::string LastGoodSig; /** \brief The fetch request that is currently being processed. */ pkgAcquire::ItemDesc Desc; @@ -719,20 +719,20 @@ class pkgAcqMetaSig : public pkgAcquire::Item * never modified; it is used to determine the file that is being * downloaded. */ - string RealURI; + std::string RealURI; /** \brief The URI of the meta-index file to be fetched after the signature. */ - string MetaIndexURI; + std::string MetaIndexURI; /** \brief A "URI-style" description of the meta-index file to be * fetched after the signature. */ - string MetaIndexURIDesc; + std::string MetaIndexURIDesc; /** \brief A brief description of the meta-index file to be fetched * after the signature. */ - string MetaIndexShortDesc; + std::string MetaIndexShortDesc; /** \brief A package-system-specific parser for the meta-index file. */ indexRecords* MetaIndexParser; @@ -742,21 +742,21 @@ class pkgAcqMetaSig : public pkgAcquire::Item * * \todo Why a list of pointers instead of a list of structs? */ - const vector* IndexTargets; + const std::vector* IndexTargets; public: // Specialized action members - virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); - virtual void Done(string Message,unsigned long long Size,string Md5Hash, + virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf); + virtual void Done(std::string Message,unsigned long long Size,std::string Md5Hash, pkgAcquire::MethodConfig *Cnf); - virtual string Custom600Headers(); - virtual string DescURI() {return RealURI; }; + virtual std::string Custom600Headers(); + virtual std::string DescURI() {return RealURI; }; /** \brief Create a new pkgAcqMetaSig. */ - pkgAcqMetaSig(pkgAcquire *Owner,string URI,string URIDesc, string ShortDesc, - string MetaIndexURI, string MetaIndexURIDesc, string MetaIndexShortDesc, - const vector* IndexTargets, + pkgAcqMetaSig(pkgAcquire *Owner,std::string URI,std::string URIDesc, std::string ShortDesc, + std::string MetaIndexURI, std::string MetaIndexURIDesc, std::string MetaIndexShortDesc, + const std::vector* IndexTargets, indexRecords* MetaIndexParser); }; /*}}}*/ @@ -779,17 +779,17 @@ class pkgAcqMetaIndex : public pkgAcquire::Item /** \brief The URI that is actually being downloaded; never * modified by pkgAcqMetaIndex. */ - string RealURI; + std::string RealURI; /** \brief The file in which the signature for this index was stored. * * If empty, the signature and the md5sums of the individual * indices will not be checked. */ - string SigFile; + std::string SigFile; /** \brief The index files to download. */ - const vector* IndexTargets; + const std::vector* IndexTargets; /** \brief The parser for the meta-index file. */ indexRecords* MetaIndexParser; @@ -805,7 +805,7 @@ class pkgAcqMetaIndex : public pkgAcquire::Item * * \return \b true if no fatal errors were encountered. */ - bool VerifyVendor(string Message); + bool VerifyVendor(std::string Message); /** \brief Called when a file is finished being retrieved. * @@ -816,7 +816,7 @@ class pkgAcqMetaIndex : public pkgAcquire::Item * \param Message The message block received from the fetch * subprocess. */ - void RetrievalDone(string Message); + void RetrievalDone(std::string Message); /** \brief Called when authentication succeeded. * @@ -827,7 +827,7 @@ class pkgAcqMetaIndex : public pkgAcquire::Item * \param Message The message block received from the fetch * subprocess. */ - void AuthDone(string Message); + void AuthDone(std::string Message); /** \brief Starts downloading the individual index files. * @@ -842,17 +842,17 @@ class pkgAcqMetaIndex : public pkgAcquire::Item public: // Specialized action members - virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); - virtual void Done(string Message,unsigned long long Size, string Hash, + virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf); + virtual void Done(std::string Message,unsigned long long Size, std::string Hash, pkgAcquire::MethodConfig *Cnf); - virtual string Custom600Headers(); - virtual string DescURI() {return RealURI; }; + virtual std::string Custom600Headers(); + virtual std::string DescURI() {return RealURI; }; /** \brief Create a new pkgAcqMetaIndex. */ pkgAcqMetaIndex(pkgAcquire *Owner, - string URI,string URIDesc, string ShortDesc, - string SigFile, - const vector* IndexTargets, + std::string URI,std::string URIDesc, std::string ShortDesc, + std::string SigFile, + const std::vector* IndexTargets, indexRecords* MetaIndexParser); }; /*}}}*/ @@ -860,33 +860,33 @@ class pkgAcqMetaIndex : public pkgAcquire::Item class pkgAcqMetaClearSig : public pkgAcqMetaIndex { /** \brief The URI of the meta-index file for the detached signature */ - string MetaIndexURI; + std::string MetaIndexURI; /** \brief A "URI-style" description of the meta-index file */ - string MetaIndexURIDesc; + std::string MetaIndexURIDesc; /** \brief A brief description of the meta-index file */ - string MetaIndexShortDesc; + std::string MetaIndexShortDesc; /** \brief The URI of the detached meta-signature file if the clearsigned one failed. */ - string MetaSigURI; + std::string MetaSigURI; /** \brief A "URI-style" description of the meta-signature file */ - string MetaSigURIDesc; + std::string MetaSigURIDesc; /** \brief A brief description of the meta-signature file */ - string MetaSigShortDesc; + std::string MetaSigShortDesc; public: - void Failed(string Message,pkgAcquire::MethodConfig *Cnf); - virtual string Custom600Headers(); + void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf); + virtual std::string Custom600Headers(); /** \brief Create a new pkgAcqMetaClearSig. */ pkgAcqMetaClearSig(pkgAcquire *Owner, - string const &URI, string const &URIDesc, string const &ShortDesc, - string const &MetaIndexURI, string const &MetaIndexURIDesc, string const &MetaIndexShortDesc, - string const &MetaSigURI, string const &MetaSigURIDesc, string const &MetaSigShortDesc, - const vector* IndexTargets, + std::string const &URI, std::string const &URIDesc, std::string const &ShortDesc, + std::string const &MetaIndexURI, std::string const &MetaIndexURIDesc, std::string const &MetaIndexShortDesc, + std::string const &MetaSigURI, std::string const &MetaSigURIDesc, std::string const &MetaSigShortDesc, + const std::vector* IndexTargets, indexRecords* MetaIndexParser); }; /*}}}*/ @@ -920,7 +920,7 @@ class pkgAcqArchive : public pkgAcquire::Item /** \brief A location in which the actual filename of the package * should be stored. */ - string &StoreFilename; + std::string &StoreFilename; /** \brief The next file for this version to try to download. */ pkgCache::VerFileIterator Vf; @@ -942,13 +942,13 @@ class pkgAcqArchive : public pkgAcquire::Item public: - virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); - virtual void Done(string Message,unsigned long long Size,string Hash, + virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf); + virtual void Done(std::string Message,unsigned long long Size,std::string Hash, pkgAcquire::MethodConfig *Cnf); - virtual string DescURI() {return Desc.URI;}; - virtual string ShortDesc() {return Desc.ShortDesc;}; + virtual std::string DescURI() {return Desc.URI;}; + virtual std::string ShortDesc() {return Desc.ShortDesc;}; virtual void Finished(); - virtual string HashSum() {return ExpectedHash.toStr(); }; + virtual std::string HashSum() {return ExpectedHash.toStr(); }; virtual bool IsTrusted(); /** \brief Create a new pkgAcqArchive. @@ -971,7 +971,7 @@ class pkgAcqArchive : public pkgAcquire::Item */ pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources, pkgRecords *Recs,pkgCache::VerIterator const &Version, - string &StoreFilename); + std::string &StoreFilename); }; /*}}}*/ /** \brief Retrieve an arbitrary file to the current directory. {{{ @@ -999,12 +999,12 @@ class pkgAcqFile : public pkgAcquire::Item public: // Specialized action members - virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); - virtual void Done(string Message,unsigned long long Size,string CalcHash, + virtual void Failed(std::string Message,pkgAcquire::MethodConfig *Cnf); + virtual void Done(std::string Message,unsigned long long Size,std::string CalcHash, pkgAcquire::MethodConfig *Cnf); - virtual string DescURI() {return Desc.URI;}; - virtual string HashSum() {return ExpectedHash.toStr(); }; - virtual string Custom600Headers(); + virtual std::string DescURI() {return Desc.URI;}; + virtual std::string HashSum() {return ExpectedHash.toStr(); }; + virtual std::string Custom600Headers(); /** \brief Create a new pkgAcqFile object. * @@ -1037,9 +1037,9 @@ class pkgAcqFile : public pkgAcquire::Item * is the absolute name to which the file should be downloaded. */ - pkgAcqFile(pkgAcquire *Owner, string URI, string Hash, unsigned long long Size, - string Desc, string ShortDesc, - const string &DestDir="", const string &DestFilename="", + pkgAcqFile(pkgAcquire *Owner, std::string URI, std::string Hash, unsigned long long Size, + std::string Desc, std::string ShortDesc, + const std::string &DestDir="", const std::string &DestFilename="", bool IsIndexFile=false); }; /*}}}*/ diff --git a/apt-pkg/acquire-method.h b/apt-pkg/acquire-method.h index 8acec82ed..c3f042ee0 100644 --- a/apt-pkg/acquire-method.h +++ b/apt-pkg/acquire-method.h @@ -20,11 +20,11 @@ #ifndef PKGLIB_ACQUIRE_METHOD_H #define PKGLIB_ACQUIRE_METHOD_H -#include -#include - #include +#include +#include + class Hashes; class pkgAcqMethod { diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index 40368c91f..919daefef 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -23,6 +23,9 @@ #include #include #include +#include +#include +#include #include #include diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h index f299f8189..948fe1103 100644 --- a/apt-pkg/algorithms.h +++ b/apt-pkg/algorithms.h @@ -33,10 +33,11 @@ #include #include -#include #include +class pkgAcquireStatus; + class pkgSimulate : public pkgPackageManager /*{{{*/ { protected: diff --git a/apt-pkg/cachefile.cc b/apt-pkg/cachefile.cc index f38dfc581..1b8d91a44 100644 --- a/apt-pkg/cachefile.cc +++ b/apt-pkg/cachefile.cc @@ -23,6 +23,7 @@ #include #include #include +#include #include /*}}}*/ diff --git a/apt-pkg/cachefile.h b/apt-pkg/cachefile.h index 243061f0f..b56e42855 100644 --- a/apt-pkg/cachefile.h +++ b/apt-pkg/cachefile.h @@ -17,11 +17,12 @@ #ifndef PKGLIB_CACHEFILE_H #define PKGLIB_CACHEFILE_H - #include -#include -#include -#include +#include + +class pkgPolicy; +class pkgSourceList; +class OpProgress; class pkgCacheFile { diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h index 464b2fdd8..5382f3838 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -32,6 +32,7 @@ #include #include + // abstract Iterator template /*{{{*/ /* This template provides the very basic iterator methods we need to have for doing some walk-over-the-cache magic */ diff --git a/apt-pkg/cacheset.cc b/apt-pkg/cacheset.cc index 386ecfb5f..6b95eab70 100644 --- a/apt-pkg/cacheset.cc +++ b/apt-pkg/cacheset.cc @@ -12,11 +12,14 @@ #include #include +#include #include #include #include #include #include +#include +#include #include @@ -298,7 +301,7 @@ APT::VersionSet VersionSet::FromString(pkgCacheFile &Cache, std::string pkg, std::string ver; bool verIsRel = false; size_t const vertag = pkg.find_last_of("/="); - if (vertag != string::npos) { + if (vertag != std::string::npos) { ver = pkg.substr(vertag+1); verIsRel = (pkg[vertag] == '/'); pkg.erase(vertag); @@ -316,7 +319,7 @@ APT::VersionSet VersionSet::FromString(pkgCacheFile &Cache, std::string pkg, errors = helper.showErrors(false); for (PackageSet::const_iterator P = pkgset.begin(); P != pkgset.end(); ++P) { - if (vertag == string::npos) { + if (vertag == std::string::npos) { verset.insert(VersionSet::FromPackage(Cache, P, fallback, helper)); continue; } diff --git a/apt-pkg/cacheset.h b/apt-pkg/cacheset.h index 061d0a2f4..3b1118bdc 100644 --- a/apt-pkg/cacheset.h +++ b/apt-pkg/cacheset.h @@ -16,9 +16,12 @@ #include #include -#include +#include #include /*}}}*/ + +class pkgCacheFile; + namespace APT { class PackageSet; class VersionSet; @@ -37,10 +40,10 @@ public: /*{{{*/ ShowError(ShowError), ErrorType(ErrorType) {}; virtual ~CacheSetHelper() {}; - virtual void showTaskSelection(PackageSet const &pkgset, string const &pattern) {}; - virtual void showRegExSelection(PackageSet const &pkgset, string const &pattern) {}; + virtual void showTaskSelection(PackageSet const &pkgset, std::string const &pattern) {}; + virtual void showRegExSelection(PackageSet const &pkgset, std::string const &pattern) {}; virtual void showSelectedVersion(pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const Ver, - string const &ver, bool const &verIsRel) {}; + std::string const &ver, bool const &verIsRel) {}; virtual pkgCache::PkgIterator canNotFindPkgName(pkgCacheFile &Cache, std::string const &str); virtual PackageSet canNotFindTask(pkgCacheFile &Cache, std::string pattern); @@ -265,7 +268,7 @@ public: /*{{{*/ inline pkgCache::VerFileIterator FileList() const { return (**this).FileList(); }; inline bool Downloadable() const { return (**this).Downloadable(); }; inline const char *PriorityType() const { return (**this).PriorityType(); }; - inline string RelStr() const { return (**this).RelStr(); }; + inline std::string RelStr() const { return (**this).RelStr(); }; inline bool Automatic() const { return (**this).Automatic(); }; inline pkgCache::VerFileIterator NewestFile() const { return (**this).NewestFile(); }; }; diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index 392cd890e..a9c63fd21 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include #include diff --git a/apt-pkg/cdrom.h b/apt-pkg/cdrom.h index 2241f1eba..319254fd0 100644 --- a/apt-pkg/cdrom.h +++ b/apt-pkg/cdrom.h @@ -1,10 +1,11 @@ #ifndef PKGLIB_CDROM_H #define PKGLIB_CDROM_H -#include #include #include +class Configuration; +class OpProgress; class pkgCdromStatus /*{{{*/ { diff --git a/apt-pkg/clean.cc b/apt-pkg/clean.cc index f5a939968..ed8fa1aa9 100644 --- a/apt-pkg/clean.cc +++ b/apt-pkg/clean.cc @@ -15,6 +15,7 @@ #include #include #include +#include #include #include diff --git a/apt-pkg/contrib/cmndline.cc b/apt-pkg/contrib/cmndline.cc index 34e90da20..997f26bc7 100644 --- a/apt-pkg/contrib/cmndline.cc +++ b/apt-pkg/contrib/cmndline.cc @@ -13,6 +13,7 @@ // Include files /*{{{*/ #include +#include #include #include #include diff --git a/apt-pkg/contrib/cmndline.h b/apt-pkg/contrib/cmndline.h index 7c0c71aa7..b201d9855 100644 --- a/apt-pkg/contrib/cmndline.h +++ b/apt-pkg/contrib/cmndline.h @@ -44,9 +44,7 @@ #ifndef PKGLIB_CMNDLINE_H #define PKGLIB_CMNDLINE_H - - -#include +class Configuration; class CommandLine { diff --git a/apt-pkg/contrib/mmap.cc b/apt-pkg/contrib/mmap.cc index a110a7019..f76169a92 100644 --- a/apt-pkg/contrib/mmap.cc +++ b/apt-pkg/contrib/mmap.cc @@ -21,6 +21,7 @@ #include #include +#include #include #include diff --git a/apt-pkg/contrib/mmap.h b/apt-pkg/contrib/mmap.h index 387e9a170..2ed4a95f8 100644 --- a/apt-pkg/contrib/mmap.h +++ b/apt-pkg/contrib/mmap.h @@ -27,7 +27,8 @@ #include -#include + +class FileFd; /* This should be a 32 bit type, larger tyes use too much ram and smaller types are too small. Where ever possible 'unsigned long' should be used diff --git a/apt-pkg/contrib/netrc.cc b/apt-pkg/contrib/netrc.cc index 9aa1376dc..cb7d36088 100644 --- a/apt-pkg/contrib/netrc.cc +++ b/apt-pkg/contrib/netrc.cc @@ -14,7 +14,9 @@ #include #include +#include #include + #include #include #include diff --git a/apt-pkg/contrib/netrc.h b/apt-pkg/contrib/netrc.h index 86afa43d1..7b94eba88 100644 --- a/apt-pkg/contrib/netrc.h +++ b/apt-pkg/contrib/netrc.h @@ -14,11 +14,13 @@ #ifndef NETRC_H #define NETRC_H -#include +#include #define DOT_CHAR "." #define DIR_CHAR "/" +class URI; + // Assume: password[0]=0, host[0] != 0. // If login[0] = 0, search for login and password within a machine section // in the netrc. diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index 95a2e6d47..3652f9e8b 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include diff --git a/apt-pkg/deb/deblistparser.h b/apt-pkg/deb/deblistparser.h index 09858d991..9519d9711 100644 --- a/apt-pkg/deb/deblistparser.h +++ b/apt-pkg/deb/deblistparser.h @@ -12,7 +12,6 @@ #define PKGLIB_DEBLISTPARSER_H #include -#include #include class debListParser : public pkgCacheGenerator::ListParser diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc index 1d3754b00..0d07725eb 100644 --- a/apt-pkg/deb/debmetaindex.cc +++ b/apt-pkg/deb/debmetaindex.cc @@ -4,9 +4,12 @@ #include #include #include +#include #include #include #include +#include +#include #include #include diff --git a/apt-pkg/deb/debmetaindex.h b/apt-pkg/deb/debmetaindex.h index 695cfa7cc..0cba2d8a8 100644 --- a/apt-pkg/deb/debmetaindex.h +++ b/apt-pkg/deb/debmetaindex.h @@ -3,9 +3,10 @@ #define PKGLIB_DEBMETAINDEX_H #include -#include #include +#include +#include class debReleaseIndex : public metaIndex { public: @@ -13,43 +14,43 @@ class debReleaseIndex : public metaIndex { class debSectionEntry { public: - debSectionEntry (string const &Section, bool const &IsSrc); - string const Section; + debSectionEntry (std::string const &Section, bool const &IsSrc); + std::string const Section; bool const IsSrc; }; private: /** \brief dpointer placeholder (for later in case we need it) */ void *d; - std::map > ArchEntries; + std::map > ArchEntries; enum { ALWAYS_TRUSTED, NEVER_TRUSTED, CHECK_TRUST } Trusted; public: - debReleaseIndex(string const &URI, string const &Dist); - debReleaseIndex(string const &URI, string const &Dist, bool const Trusted); + debReleaseIndex(std::string const &URI, std::string const &Dist); + debReleaseIndex(std::string const &URI, std::string const &Dist, bool const Trusted); virtual ~debReleaseIndex(); - virtual string ArchiveURI(string const &File) const {return URI + File;}; + virtual std::string ArchiveURI(std::string const &File) const {return URI + File;}; virtual bool GetIndexes(pkgAcquire *Owner, bool const &GetAll=false) const; - vector * ComputeIndexTargets() const; - string Info(const char *Type, string const &Section, string const &Arch="") const; - string MetaIndexInfo(const char *Type) const; - string MetaIndexFile(const char *Types) const; - string MetaIndexURI(const char *Type) const; - string IndexURI(const char *Type, string const &Section, string const &Arch="native") const; - string IndexURISuffix(const char *Type, string const &Section, string const &Arch="native") const; - string SourceIndexURI(const char *Type, const string &Section) const; - string SourceIndexURISuffix(const char *Type, const string &Section) const; - string TranslationIndexURI(const char *Type, const string &Section) const; - string TranslationIndexURISuffix(const char *Type, const string &Section) const; - virtual vector *GetIndexFiles(); + std::vector * ComputeIndexTargets() const; + std::string Info(const char *Type, std::string const &Section, std::string const &Arch="") const; + std::string MetaIndexInfo(const char *Type) const; + std::string MetaIndexFile(const char *Types) const; + std::string MetaIndexURI(const char *Type) const; + std::string IndexURI(const char *Type, std::string const &Section, std::string const &Arch="native") const; + std::string IndexURISuffix(const char *Type, std::string const &Section, std::string const &Arch="native") const; + std::string SourceIndexURI(const char *Type, const std::string &Section) const; + std::string SourceIndexURISuffix(const char *Type, const std::string &Section) const; + std::string TranslationIndexURI(const char *Type, const std::string &Section) const; + std::string TranslationIndexURISuffix(const char *Type, const std::string &Section) const; + virtual std::vector *GetIndexFiles(); void SetTrusted(bool const Trusted); virtual bool IsTrusted() const; - void PushSectionEntry(vector const &Archs, const debSectionEntry *Entry); - void PushSectionEntry(string const &Arch, const debSectionEntry *Entry); + void PushSectionEntry(std::vector const &Archs, const debSectionEntry *Entry); + void PushSectionEntry(std::string const &Arch, const debSectionEntry *Entry); void PushSectionEntry(const debSectionEntry *Entry); }; diff --git a/apt-pkg/deb/debrecords.cc b/apt-pkg/deb/debrecords.cc index ef6a7ca9d..1afa7b74d 100644 --- a/apt-pkg/deb/debrecords.cc +++ b/apt-pkg/deb/debrecords.cc @@ -14,6 +14,8 @@ #include #include #include +#include + #include /*}}}*/ diff --git a/apt-pkg/deb/debrecords.h b/apt-pkg/deb/debrecords.h index b75726859..9c7ea6b48 100644 --- a/apt-pkg/deb/debrecords.h +++ b/apt-pkg/deb/debrecords.h @@ -15,8 +15,8 @@ #define PKGLIB_DEBRECORDS_H #include -#include #include +#include class debRecordParser : public pkgRecords::Parser { diff --git a/apt-pkg/deb/debsystem.h b/apt-pkg/deb/debsystem.h index 232155256..855123516 100644 --- a/apt-pkg/deb/debsystem.h +++ b/apt-pkg/deb/debsystem.h @@ -11,10 +11,12 @@ #define PKGLIB_DEBSYSTEM_H #include +#include class debSystemPrivate; - class debStatusIndex; +class pkgDepCache; + class debSystem : public pkgSystem { // private d-pointer diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 529085b4a..529e9240d 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -16,13 +16,13 @@ #include #include #include - #include #include #include #include #include #include +#include #include #include diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h index 5798f0362..f6e6c0afc 100644 --- a/apt-pkg/depcache.h +++ b/apt-pkg/depcache.h @@ -40,12 +40,13 @@ #include #include -#include -#include #include #include #include +#include + +class OpProgress; class pkgDepCache : protected pkgCache::Namespace { diff --git a/apt-pkg/edsp.cc b/apt-pkg/edsp.cc index 44f7dbfd6..137398100 100644 --- a/apt-pkg/edsp.cc +++ b/apt-pkg/edsp.cc @@ -9,17 +9,24 @@ #include #include +#include #include #include #include #include +#include +#include #include #include +#include + #include /*}}}*/ +using std::string; + // we could use pkgCache::DepType and ::Priority, but these would be localized strings… const char * const EDSP::PrioMap[] = {0, "important", "required", "standard", "optional", "extra"}; diff --git a/apt-pkg/edsp.h b/apt-pkg/edsp.h index 743c3f5d1..c14309422 100644 --- a/apt-pkg/edsp.h +++ b/apt-pkg/edsp.h @@ -9,12 +9,17 @@ #ifndef PKGLIB_EDSP_H #define PKGLIB_EDSP_H -#include -#include -#include +#include +#include #include +namespace APT { + class PackageSet; +}; +class pkgDepCache; +class OpProgress; + class EDSP /*{{{*/ { // we could use pkgCache::DepType and ::Priority, but these would be localized strings… diff --git a/apt-pkg/edsp/edspindexfile.cc b/apt-pkg/edsp/edspindexfile.cc index b417a7562..058cef636 100644 --- a/apt-pkg/edsp/edspindexfile.cc +++ b/apt-pkg/edsp/edspindexfile.cc @@ -15,6 +15,7 @@ #include #include #include +#include #include #include diff --git a/apt-pkg/edsp/edspindexfile.h b/apt-pkg/edsp/edspindexfile.h index 58a7f62a9..9670c4837 100644 --- a/apt-pkg/edsp/edspindexfile.h +++ b/apt-pkg/edsp/edspindexfile.h @@ -8,7 +8,6 @@ #ifndef PKGLIB_EDSPINDEXFILE_H #define PKGLIB_EDSPINDEXFILE_H -#include #include class edspIndex : public debStatusIndex diff --git a/apt-pkg/edsp/edsplistparser.h b/apt-pkg/edsp/edsplistparser.h index 3e196cb9a..5d82716c7 100644 --- a/apt-pkg/edsp/edsplistparser.h +++ b/apt-pkg/edsp/edsplistparser.h @@ -12,9 +12,8 @@ #define PKGLIB_EDSPLISTPARSER_H #include -#include -#include -#include + +class FileFd; class edspListParser : public debListParser { diff --git a/apt-pkg/indexfile.h b/apt-pkg/indexfile.h index 68d53ad7e..5e162a846 100644 --- a/apt-pkg/indexfile.h +++ b/apt-pkg/indexfile.h @@ -27,10 +27,12 @@ #include #include #include +#include class pkgAcquire; class pkgCacheGenerator; class OpProgress; + class pkgIndexFile { protected: diff --git a/apt-pkg/indexrecords.cc b/apt-pkg/indexrecords.cc index 7b48d659e..cdb9250e8 100644 --- a/apt-pkg/indexrecords.cc +++ b/apt-pkg/indexrecords.cc @@ -10,6 +10,9 @@ #include #include #include +#include +#include + #include #include diff --git a/apt-pkg/indexrecords.h b/apt-pkg/indexrecords.h index 66b84f8bb..fa60a0847 100644 --- a/apt-pkg/indexrecords.h +++ b/apt-pkg/indexrecords.h @@ -7,7 +7,6 @@ #include -#include #include #include diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc index a1cb05e38..2a709dd36 100644 --- a/apt-pkg/init.cc +++ b/apt-pkg/init.cc @@ -13,6 +13,8 @@ #include #include #include +#include +#include #include #include diff --git a/apt-pkg/init.h b/apt-pkg/init.h index 4cee1001a..85ad0df7e 100644 --- a/apt-pkg/init.h +++ b/apt-pkg/init.h @@ -13,8 +13,8 @@ #ifndef PKGLIB_INIT_H #define PKGLIB_INIT_H -#include -#include +class pkgSystem; +class Configuration; // These lines are extracted by the makefiles and the buildsystem // Increasing MAJOR or MINOR results in the need of recompiling all diff --git a/apt-pkg/metaindex.h b/apt-pkg/metaindex.h index 66c287c30..9cc79a7a6 100644 --- a/apt-pkg/metaindex.h +++ b/apt-pkg/metaindex.h @@ -4,10 +4,7 @@ #include #include -#include -#include #include -#include class pkgAcquire; class pkgCacheGenerator; diff --git a/apt-pkg/packagemanager.h b/apt-pkg/packagemanager.h index 7ee17942c..d4989a6e0 100644 --- a/apt-pkg/packagemanager.h +++ b/apt-pkg/packagemanager.h @@ -23,11 +23,10 @@ #ifndef PKGLIB_PACKAGEMANAGER_H #define PKGLIB_PACKAGEMANAGER_H +#include #include #include -#include -#include #include class pkgAcquire; diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc index a39aa9f59..1356054b5 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -25,6 +25,8 @@ #include #include #include +#include +#include #include #include diff --git a/apt-pkg/pkgsystem.h b/apt-pkg/pkgsystem.h index 246762e0b..211fd0d56 100644 --- a/apt-pkg/pkgsystem.h +++ b/apt-pkg/pkgsystem.h @@ -37,14 +37,16 @@ #ifndef PKGLIB_PKGSYSTEM_H #define PKGLIB_PKGSYSTEM_H +#include -#include #include - + +class pkgDepCache; class pkgPackageManager; class pkgVersioningSystem; class Configuration; class pkgIndexFile; +class PkgFileIterator; class pkgSystem { diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index e20ec4704..46025fc74 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -15,6 +15,8 @@ #include #include #include +#include +#include #include diff --git a/apt-pkg/sourcelist.h b/apt-pkg/sourcelist.h index 7b473ee64..4509e54b9 100644 --- a/apt-pkg/sourcelist.h +++ b/apt-pkg/sourcelist.h @@ -31,13 +31,15 @@ #include #include #include -#include using std::string; using std::vector; -class pkgAquire; +class pkgAcquire; +class pkgIndexFile; +class metaIndex; + class pkgSourceList { public: diff --git a/apt-pkg/srcrecords.cc b/apt-pkg/srcrecords.cc index 8c1de2ea5..f6d2d5158 100644 --- a/apt-pkg/srcrecords.cc +++ b/apt-pkg/srcrecords.cc @@ -17,6 +17,7 @@ #include #include #include +#include #include /*}}}*/ diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc index 418e6bed8..ec86173df 100644 --- a/apt-pkg/tagfile.cc +++ b/apt-pkg/tagfile.cc @@ -16,6 +16,7 @@ #include #include #include +#include #include #include diff --git a/apt-pkg/tagfile.h b/apt-pkg/tagfile.h index e3034b628..a5bf5ac90 100644 --- a/apt-pkg/tagfile.h +++ b/apt-pkg/tagfile.h @@ -20,10 +20,12 @@ #ifndef PKGLIB_TAGFILE_H #define PKGLIB_TAGFILE_H - -#include #include +#include + +class FileFd; + class pkgTagSection { const char *Section; diff --git a/apt-pkg/vendorlist.cc b/apt-pkg/vendorlist.cc index 2ccb556ab..ecfc7db87 100644 --- a/apt-pkg/vendorlist.cc +++ b/apt-pkg/vendorlist.cc @@ -2,12 +2,14 @@ #include #include +#include #include #if __GNUC__ >= 4 #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif +#include #include using std::string; diff --git a/apt-pkg/vendorlist.h b/apt-pkg/vendorlist.h index 62ab78a33..733d23a32 100644 --- a/apt-pkg/vendorlist.h +++ b/apt-pkg/vendorlist.h @@ -15,10 +15,11 @@ #include #include -#include -#include #include +class Vendor; +class Configuration; + class __deprecated pkgVendorList { protected: diff --git a/apt-pkg/version.h b/apt-pkg/version.h index c9257d116..47e1919bb 100644 --- a/apt-pkg/version.h +++ b/apt-pkg/version.h @@ -20,8 +20,7 @@ #ifndef PKGLIB_VERSION_H #define PKGLIB_VERSION_H - -#include +#include #include class pkgVersioningSystem diff --git a/cmdline/acqprogress.h b/cmdline/acqprogress.h index 48f90ae59..8f0903923 100644 --- a/cmdline/acqprogress.h +++ b/cmdline/acqprogress.h @@ -12,6 +12,8 @@ #include +#include + class AcqTextStatus : public pkgAcquireStatus { unsigned int &ScreenWidth; @@ -21,7 +23,7 @@ class AcqTextStatus : public pkgAcquireStatus public: - virtual bool MediaChange(string Media,string Drive); + virtual bool MediaChange(std::string Media,std::string Drive); virtual void IMSHit(pkgAcquire::ItemDesc &Itm); virtual void Fetch(pkgAcquire::ItemDesc &Itm); virtual void Done(pkgAcquire::ItemDesc &Itm); diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index a4cdf784e..82a31c9b1 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -16,7 +16,6 @@ #include #include -#include #include #include #include @@ -24,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -31,6 +31,9 @@ #include #include #include +#include +#include +#include #include #include @@ -40,6 +43,7 @@ #include #include #include +#include #include /*}}}*/ diff --git a/cmdline/apt-cdrom.cc b/cmdline/apt-cdrom.cc index 8608b1215..fa48debcd 100644 --- a/cmdline/apt-cdrom.cc +++ b/cmdline/apt-cdrom.cc @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include #include diff --git a/cmdline/apt-config.cc b/cmdline/apt-config.cc index df2958975..94f6ee9b0 100644 --- a/cmdline/apt-config.cc +++ b/cmdline/apt-config.cc @@ -24,6 +24,7 @@ #include #include #include +#include #include #include diff --git a/cmdline/apt-dump-solver.cc b/cmdline/apt-dump-solver.cc index dab0cc6fd..e82e15c6e 100644 --- a/cmdline/apt-dump-solver.cc +++ b/cmdline/apt-dump-solver.cc @@ -12,6 +12,7 @@ #include #include +#include /*}}}*/ // ShowHelp - Show a help screen /*{{{*/ diff --git a/cmdline/apt-extracttemplates.cc b/cmdline/apt-extracttemplates.cc index 5d7b76c23..d5c1a3208 100644 --- a/cmdline/apt-extracttemplates.cc +++ b/cmdline/apt-extracttemplates.cc @@ -30,6 +30,7 @@ #include #include #include +#include #include #include diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index d8f207f0a..5e950332f 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -44,6 +45,10 @@ #include #include #include +#include +#include +#include +#include #include "acqprogress.h" diff --git a/cmdline/apt-internal-solver.cc b/cmdline/apt-internal-solver.cc index ef6c688fe..1b636e4d5 100644 --- a/cmdline/apt-internal-solver.cc +++ b/cmdline/apt-internal-solver.cc @@ -11,10 +11,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc index 8c9a47913..339cbdf44 100644 --- a/cmdline/apt-mark.cc +++ b/cmdline/apt-mark.cc @@ -13,6 +13,7 @@ #include #include #include +#include #include diff --git a/cmdline/apt-sortpkgs.cc b/cmdline/apt-sortpkgs.cc index 44b74cf6c..20ae14f2a 100644 --- a/cmdline/apt-sortpkgs.cc +++ b/cmdline/apt-sortpkgs.cc @@ -20,6 +20,8 @@ #include #include #include +#include +#include #include #include diff --git a/debian/changelog b/debian/changelog index 8a4994a32..aa98cfbd1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,8 +2,9 @@ apt (0.8.16~exp7) experimental; urgency=low [ David Kalnischkies ] * do not pollute namespace in the headers with using (Closes: #500198) + * use forward declaration in headers if possible instead of includes - -- David Kalnischkies Mon, 19 Sep 2011 13:25:58 +0200 + -- David Kalnischkies Mon, 19 Sep 2011 19:13:48 +0200 apt (0.8.16~exp6) experimental; urgency=low diff --git a/ftparchive/cachedb.cc b/ftparchive/cachedb.cc index 7d8718c56..c4db88811 100644 --- a/ftparchive/cachedb.cc +++ b/ftparchive/cachedb.cc @@ -18,6 +18,7 @@ #include #include #include +#include #include // htonl, etc diff --git a/ftparchive/cachedb.h b/ftparchive/cachedb.h index f2e1e19e4..377c41607 100644 --- a/ftparchive/cachedb.h +++ b/ftparchive/cachedb.h @@ -13,16 +13,16 @@ #define CACHEDB_H +#include #include -#include -#include #include #include #include - +#include + #include "contents.h" - + class CacheDB { protected: diff --git a/ftparchive/contents.h b/ftparchive/contents.h index cdd8abd5c..4af9db574 100644 --- a/ftparchive/contents.h +++ b/ftparchive/contents.h @@ -12,9 +12,10 @@ #include #include -#include #include +class debDebFile; + class GenContents { struct Node diff --git a/ftparchive/multicompress.h b/ftparchive/multicompress.h index 19e5065fa..5496b06d0 100644 --- a/ftparchive/multicompress.h +++ b/ftparchive/multicompress.h @@ -16,11 +16,10 @@ #ifndef MULTICOMPRESS_H #define MULTICOMPRESS_H - - -#include #include #include + +#include #include #include diff --git a/ftparchive/writer.h b/ftparchive/writer.h index a43b83876..76a3dfd1e 100644 --- a/ftparchive/writer.h +++ b/ftparchive/writer.h @@ -22,7 +22,6 @@ #include #include "cachedb.h" -#include "multicompress.h" #include "override.h" #include "apt-ftparchive.h" @@ -31,7 +30,7 @@ using std::cout; using std::endl; using std::vector; using std::map; - + class FTWScanner { protected: @@ -81,6 +80,8 @@ class FTWScanner virtual ~FTWScanner() {}; }; +class MultiCompress; + class TranslationWriter { MultiCompress *Comp; diff --git a/methods/bzip2.cc b/methods/bzip2.cc index ad5db6cfb..8e7e46557 100644 --- a/methods/bzip2.cc +++ b/methods/bzip2.cc @@ -20,6 +20,7 @@ #include #include #include +#include #include #include diff --git a/methods/cdrom.cc b/methods/cdrom.cc index bc115d259..e7114b168 100644 --- a/methods/cdrom.cc +++ b/methods/cdrom.cc @@ -16,6 +16,7 @@ #include #include #include +#include #include #include diff --git a/methods/connect.cc b/methods/connect.cc index ba2264faa..9a092a43c 100644 --- a/methods/connect.cc +++ b/methods/connect.cc @@ -15,6 +15,8 @@ #include #include +#include +#include #include #include diff --git a/methods/connect.h b/methods/connect.h index 0afa00919..bbe1bb35d 100644 --- a/methods/connect.h +++ b/methods/connect.h @@ -11,7 +11,8 @@ #define CONNECT_H #include -#include + +class pkgAcqMethod; bool Connect(std::string To,int Port,const char *Service,int DefPort, int &Fd,unsigned long TimeOut,pkgAcqMethod *Owner); diff --git a/methods/copy.cc b/methods/copy.cc index fe2918469..f8d58e479 100644 --- a/methods/copy.cc +++ b/methods/copy.cc @@ -12,6 +12,7 @@ #include #include +#include #include #include #include diff --git a/methods/file.cc b/methods/file.cc index d58652e6e..5025c996d 100644 --- a/methods/file.cc +++ b/methods/file.cc @@ -19,6 +19,7 @@ #include #include #include +#include #include #include diff --git a/methods/ftp.cc b/methods/ftp.cc index 861647aea..2ca0ac6f7 100644 --- a/methods/ftp.cc +++ b/methods/ftp.cc @@ -22,6 +22,7 @@ #include #include #include +#include #include #include diff --git a/methods/ftp.h b/methods/ftp.h index 7088e0954..2634f0732 100644 --- a/methods/ftp.h +++ b/methods/ftp.h @@ -10,6 +10,10 @@ #ifndef APT_FTP_H #define APT_FTP_H +#include + +#include + class FTPConn { char Buffer[1024*10]; diff --git a/methods/gpgv.cc b/methods/gpgv.cc index 67cbd36a2..2b2aba017 100644 --- a/methods/gpgv.cc +++ b/methods/gpgv.cc @@ -5,6 +5,7 @@ #include #include #include +#include #include #include diff --git a/methods/http.cc b/methods/http.cc index b60cfeb9e..0d81c73ed 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -288,6 +289,11 @@ void CircleBuf::Stats() clog << "Got " << InP << " in " << Diff << " at " << InP/Diff << endl;*/ } /*}}}*/ +CircleBuf::~CircleBuf() +{ + delete [] Buf; + delete Hash; +} // ServerState::ServerState - Constructor /*{{{*/ // --------------------------------------------------------------------- diff --git a/methods/http.h b/methods/http.h index 08823d1b1..c73d4df5c 100644 --- a/methods/http.h +++ b/methods/http.h @@ -13,12 +13,15 @@ #define MAXLEN 360 -#include +#include + +#include using std::cout; using std::endl; class HttpMethod; +class Hashes; class CircleBuf { @@ -80,7 +83,7 @@ class CircleBuf void Stats(); CircleBuf(unsigned long long Size); - ~CircleBuf() {delete [] Buf; delete Hash;}; + ~CircleBuf(); }; struct ServerState diff --git a/methods/https.cc b/methods/https.cc index 06a0e285a..e70206dfb 100644 --- a/methods/https.cc +++ b/methods/https.cc @@ -17,6 +17,7 @@ #include #include #include +#include #include #include diff --git a/methods/https.h b/methods/https.h index 3f0c416b6..b7adeb880 100644 --- a/methods/https.h +++ b/methods/https.h @@ -20,7 +20,7 @@ using std::cout; using std::endl; class HttpsMethod; - +class FileFd; class HttpsMethod : public pkgAcqMethod { @@ -45,6 +45,7 @@ class HttpsMethod : public pkgAcqMethod }; }; +#include URI Proxy; #endif diff --git a/methods/mirror.cc b/methods/mirror.cc index 61a7f12fd..3d5983efa 100644 --- a/methods/mirror.cc +++ b/methods/mirror.cc @@ -18,7 +18,8 @@ #include #include #include - +#include +#include #include #include diff --git a/methods/mirror.h b/methods/mirror.h index 97d18144a..81e531e21 100644 --- a/methods/mirror.h +++ b/methods/mirror.h @@ -11,8 +11,9 @@ #ifndef APT_MIRROR_H #define APT_MIRROR_H - #include +#include +#include using std::cout; using std::cerr; @@ -24,29 +25,29 @@ class MirrorMethod : public HttpMethod { FetchResult Res; // we simply transform between BaseUri and Mirror - string BaseUri; // the original mirror://... url - string Mirror; // the selected mirror uri (http://...) - vector AllMirrors; // all available mirrors - string MirrorFile; // the file that contains the list of mirrors + std::string BaseUri; // the original mirror://... url + std::string Mirror; // the selected mirror uri (http://...) + std::vector AllMirrors; // all available mirrors + std::string MirrorFile; // the file that contains the list of mirrors bool DownloadedMirrorFile; // already downloaded this session - string Dist; // the target distrubtion (e.g. sid, oneiric) + std::string Dist; // the target distrubtion (e.g. sid, oneiric) bool Debug; protected: - bool DownloadMirrorFile(string uri); - bool RandomizeMirrorFile(string file); - string GetMirrorFileName(string uri); + bool DownloadMirrorFile(std::string uri); + bool RandomizeMirrorFile(std::string file); + std::string GetMirrorFileName(std::string uri); bool InitMirrors(); bool TryNextMirror(); void CurrentQueueUriToMirror(); - bool Clean(string dir); + bool Clean(std::string dir); // we need to overwrite those to transform the url back - virtual void Fail(string Why, bool Transient = false); + virtual void Fail(std::string Why, bool Transient = false); virtual void URIStart(FetchResult &Res); virtual void URIDone(FetchResult &Res,FetchResult *Alt = 0); - virtual bool Configuration(string Message); + virtual bool Configuration(std::string Message); public: MirrorMethod(); diff --git a/methods/rred.cc b/methods/rred.cc index 2a05acce1..ef00fcaa3 100644 --- a/methods/rred.cc +++ b/methods/rred.cc @@ -7,6 +7,7 @@ #include #include #include +#include #include #include diff --git a/methods/rsh.cc b/methods/rsh.cc index add128c49..da9777fc4 100644 --- a/methods/rsh.cc +++ b/methods/rsh.cc @@ -14,6 +14,9 @@ #include #include +#include +#include +#include #include #include diff --git a/methods/rsh.h b/methods/rsh.h index 7bebe29a0..d7efa3f06 100644 --- a/methods/rsh.h +++ b/methods/rsh.h @@ -12,9 +12,9 @@ #include #include -#include -#include -#include + +class Hashes; +class FileFd; class RSHConn { @@ -50,6 +50,8 @@ class RSHConn ~RSHConn(); }; +#include + class RSHMethod : public pkgAcqMethod { virtual bool Fetch(FetchItem *Itm); diff --git a/test/interactive-helper/extract-control.cc b/test/interactive-helper/extract-control.cc index 29dcbf371..a1b3600aa 100644 --- a/test/interactive-helper/extract-control.cc +++ b/test/interactive-helper/extract-control.cc @@ -1,5 +1,6 @@ #include #include +#include #include #include diff --git a/test/interactive-helper/test_udevcdrom.cc b/test/interactive-helper/test_udevcdrom.cc index bbedc0ab5..88f5f0153 100644 --- a/test/interactive-helper/test_udevcdrom.cc +++ b/test/interactive-helper/test_udevcdrom.cc @@ -3,6 +3,7 @@ #include #include +#include int main() { diff --git a/test/interactive-helper/testextract.cc b/test/interactive-helper/testextract.cc index b790df618..f7ddb72f0 100644 --- a/test/interactive-helper/testextract.cc +++ b/test/interactive-helper/testextract.cc @@ -6,6 +6,8 @@ #include #include #include +#include +#include #include #include -- cgit v1.2.3-70-g09d2 From 7cb28948317e0d326c8663ec3c9ce995d5bf65e8 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 5 Oct 2011 22:45:22 +0200 Subject: * apt-pkg/deb/debmetaindex.cc: - none is a separator, not a language: no need for Index (Closes: #624218) * apt-pkg/aptconfiguration.cc: - do not builtin languages only if none is forced (Closes: #643787) --- apt-pkg/aptconfiguration.cc | 6 +- apt-pkg/deb/debmetaindex.cc | 8 +- debian/changelog | 7 +- .../test-bug-624218-Translation-file-handling | 87 ++++++++++++++++++++++ test/libapt/assert.h | 15 ++++ test/libapt/getlanguages_test.cc | 12 ++- test/libapt/run-tests | 3 +- 7 files changed, 128 insertions(+), 10 deletions(-) create mode 100755 test/integration/test-bug-624218-Translation-file-handling (limited to 'test') diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc index a0566e05e..7441b452c 100644 --- a/apt-pkg/aptconfiguration.cc +++ b/apt-pkg/aptconfiguration.cc @@ -142,7 +142,7 @@ std::vector const Configuration::getLanguages(bool const &All, for (struct dirent *Ent = readdir(D); Ent != 0; Ent = readdir(D)) { string const name = Ent->d_name; size_t const foundDash = name.rfind("-"); - size_t const foundUnderscore = name.rfind("_"); + size_t const foundUnderscore = name.rfind("_", foundDash); if (foundDash == string::npos || foundUnderscore == string::npos || foundDash <= foundUnderscore || name.substr(foundUnderscore+1, foundDash-(foundUnderscore+1)) != "Translation") @@ -153,7 +153,7 @@ std::vector const Configuration::getLanguages(bool const &All, // Skip unusual files, like backups or that alike string::const_iterator s = c.begin(); for (;s != c.end(); ++s) { - if (isalpha(*s) == 0) + if (isalpha(*s) == 0 && *s != '_') break; } if (s != c.end()) @@ -234,6 +234,8 @@ std::vector const Configuration::getLanguages(bool const &All, codes = environment; } else if (forceLang != "none") codes.push_back(forceLang); + else //if (forceLang == "none") + builtin.clear(); allCodes = codes; for (std::vector::const_iterator b = builtin.begin(); b != builtin.end(); ++b) diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc index c509c29c7..5d3a80aa5 100644 --- a/apt-pkg/deb/debmetaindex.cc +++ b/apt-pkg/deb/debmetaindex.cc @@ -13,6 +13,7 @@ #include #include +#include using namespace std; @@ -201,7 +202,11 @@ vector * debReleaseIndex::ComputeIndexTargets() const { } } - std::vector const lang = APT::Configuration::getLanguages(true); + std::vector lang = APT::Configuration::getLanguages(true); + std::vector::iterator lend = std::remove(lang.begin(), lang.end(), "none"); + if (lend != lang.end()) + lang.erase(lend); + if (lang.empty() == true) return IndexTargets; @@ -213,7 +218,6 @@ vector * debReleaseIndex::ComputeIndexTargets() const { s != sections.end(); ++s) { for (std::vector::const_iterator l = lang.begin(); l != lang.end(); ++l) { - if (*l == "none") continue; IndexTarget * Target = new OptionalIndexTarget(); Target->ShortDesc = "Translation-" + *l; Target->MetaKey = TranslationIndexURISuffix(l->c_str(), *s); diff --git a/debian/changelog b/debian/changelog index f32f7a282..055268619 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,6 +18,10 @@ apt (0.8.16~exp7) UNRELEASEDexperimental; urgency=low * apt-pkg/deb/deblistparser.cc: - fix crash when the dynamic mmap needs to be grown in LoadReleaseInfo (LP: #854090) + * apt-pkg/deb/debmetaindex.cc: + - none is a separator, not a language: no need for Index (Closes: #624218) + * apt-pkg/aptconfiguration.cc: + - do not builtin languages only if none is forced (Closes: #643787) [ Michael Vogt ] * apt-pkg/contrib/configuration.cc: @@ -32,8 +36,7 @@ apt (0.8.16~exp7) UNRELEASEDexperimental; urgency=low * ftparchive/cachedb.cc: - fix buffersize in bytes2hex - - -- David Kalnischkies Wed, 05 Oct 2011 18:40:57 +0200 + -- David Kalnischkies Wed, 05 Oct 2011 22:40:25 +0200 apt (0.8.16~exp6) experimental; urgency=low diff --git a/test/integration/test-bug-624218-Translation-file-handling b/test/integration/test-bug-624218-Translation-file-handling new file mode 100755 index 000000000..a1e708d2e --- /dev/null +++ b/test/integration/test-bug-624218-Translation-file-handling @@ -0,0 +1,87 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'i386' + +buildsimplenativepackage 'coolstuff' 'all' '1.0' 'unstable' + +setupaptarchive + +changetowebserver + +rm -rf rootdir/var/lib/apt/lists + +msgtest 'No download of non-existent locals' 'with Index' +LC_ALL="" aptget update -o Acquire::Languages=en | grep -q -e 'Translation-[^e][^n] ' && msgfail || msgpass +rm -rf rootdir/var/lib/apt/lists + +msgtest 'Download of existent locals' 'with Index' +LC_ALL="" aptget update | grep -q -e 'Translation-en ' && msgpass || msgfail +rm -rf rootdir/var/lib/apt/lists + +msgtest 'Download of en in LC_ALL=C' 'with Index' +LC_ALL=C aptget update | grep -q -e 'Translation-en ' && msgpass || msgfail +rm -rf rootdir/var/lib/apt/lists + +msgtest 'Download of en as forced language' 'with Index' +aptget update -o Acquire::Languages=en | grep -q -e 'Translation-en ' && msgpass || msgfail +rm -rf rootdir/var/lib/apt/lists + +msgtest 'Download of nothing else in forced language' 'with Index' +aptget update -o Acquire::Languages=en | grep -q -e 'Translation-[^e][^n] ' && msgfail || msgpass +rm -rf rootdir/var/lib/apt/lists + +msgtest 'Download no Translation- if forced language is non-existent' 'with Index' +aptget update -o Acquire::Languages=ast_DE | grep -q -e 'Translation-' && msgfail || msgpass +rm -rf rootdir/var/lib/apt/lists + +msgtest 'Download of nothing if none is forced' 'with Index' +aptget update -o Acquire::Languages=none | grep -q -e 'Translation' && msgfail || msgpass +rm -rf rootdir/var/lib/apt/lists + +sed -i '/i18n\/Index$/ d' $(find aptarchive -name 'Release') +signreleasefiles + +# we have to try as not every archive includes the i18n Index in the Release file - if it has one at all +msgtest 'Download no Translation- if forced language is non-existent' 'with not-announced Index' +aptget update -o Acquire::Languages=ast_DE | grep -q -e 'Translation-' && msgfail || msgpass +rm -rf rootdir/var/lib/apt/lists + +find aptarchive -name 'Index' -delete + +msgtest 'Download of en as forced language' 'without Index' +aptget update -o Acquire::Languages=en | grep -q -e 'Translation-en ' && msgpass || msgfail +rm -rf rootdir/var/lib/apt/lists + +msgtest 'Download of nothing else in forced language' 'without Index' +aptget update -o Acquire::Languages=en | grep -q -e 'Translation-[^e][^n] ' && msgfail || msgpass +rm -rf rootdir/var/lib/apt/lists + +msgtest 'Download of ast_DE as forced language' 'without Index' +aptget update -o Acquire::Languages=ast_DE | grep -q -e 'Translation-ast_DE$' && msgpass || msgfail +rm -rf rootdir/var/lib/apt/lists + +msgtest 'Download of nothing else in forced language' 'without Index' +aptget update -o Acquire::Languages=ast_DE | grep -q -e 'Translation-[^a][^s]' && msgfail || msgpass +rm -rf rootdir/var/lib/apt/lists + +msgtest 'Download of nothing if none is forced' 'without Index' +aptget update -o Acquire::Languages=none | grep -q -e 'Translation' && msgfail || msgpass +rm -rf rootdir/var/lib/apt/lists + +mkdir -p rootdir/var/lib/apt/lists +touch rootdir/var/lib/apt/lists/localhost:8080_dists_unstable_main_i18n_Translation-ast_DE + +msgtest 'Download of builtin files' 'without Index' +aptget update | grep -q -e 'Translation-ast_DE' && msgpass || msgfail +rm -rf rootdir/var/lib/apt/lists + +mkdir -p rootdir/var/lib/apt/lists +touch rootdir/var/lib/apt/lists/localhost:8080_dists_unstable_main_i18n_Translation-ast_DE + +msgtest 'Download of nothing (even builtin) if none is forced' 'without Index' +aptget update -o Acquire::Languages=none | grep -q -e 'Translation' && msgfail || msgpass +rm -rf rootdir/var/lib/apt/lists diff --git a/test/libapt/assert.h b/test/libapt/assert.h index fae9b6c64..ce5accc1c 100644 --- a/test/libapt/assert.h +++ b/test/libapt/assert.h @@ -54,6 +54,21 @@ void assertEqualsOr2(int const &expect1, int const &expect2, unsigned int const } +#define equalsOr3(w,x,y,z) assertEqualsOr3(x, y, z, w, __LINE__) + +template < typename X, typename Y > +void OutputAssertEqualOr3(X expect1, X expect2, X expect3, char const* compare, Y get, unsigned long const &line) { + std::cerr << "Test FAILED: »" << expect1 << "« or »" << expect2 << "« or »" << expect3 << "« " << compare << " »" << get << "« at line " << line << std::endl; +} + +template < typename X, typename Y > +void assertEqualsOr3(X expect1, X expect2, X expect3, Y get, unsigned long const &line) { + if (expect1 == get || expect2 == get || expect3 == get) + return; + OutputAssertEqualOr3(expect1, expect2, expect3, "==", get, line); +} + + // simple helper to quickly output a vectors template < typename X > void dumpVector(X vec) { diff --git a/test/libapt/getlanguages_test.cc b/test/libapt/getlanguages_test.cc index f6aa7a697..a1c801ea2 100644 --- a/test/libapt/getlanguages_test.cc +++ b/test/libapt/getlanguages_test.cc @@ -126,13 +126,19 @@ int main(int argc,char *argv[]) _config->Set("Dir::State::lists", argv[1]); vec = APT::Configuration::getLanguages(true, false, env); - equals(vec.size(), 6); + equals(vec.size(), 7); equals(vec[0], "de_DE"); equals(vec[1], "de"); equals(vec[2], "en"); equals(vec[3], "none"); - equalsOr2(vec[4], "pt", "tr"); - equalsOr2(vec[5], "tr", "pt"); + equalsOr3(vec[4], "pt", "tr", "ast_DE"); + equalsOr3(vec[5], "tr", "pt", "ast_DE"); + equalsOr3(vec[6], "tr", "pt", "ast_DE"); + + _config->Set("Acquire::Languages", "none"); + vec = APT::Configuration::getLanguages(true, false, env); + equals(vec.size(), 0); + _config->Set("Acquire::Languages", ""); _config->Set("Dir::State::lists", "/non-existing-dir"); _config->Set("Acquire::Languages::1", "none"); diff --git a/test/libapt/run-tests b/test/libapt/run-tests index 8cb2e049c..ada2dc38b 100755 --- a/test/libapt/run-tests +++ b/test/libapt/run-tests @@ -64,7 +64,8 @@ do touch "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-tr" \ "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-pt" \ "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-se~" \ - "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-st.bak" + "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-st.bak" \ + "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-ast_DE" elif [ $name = "HashSums${EXT}" ]; then TMP="$(mktemp)" dmesg > $TMP -- cgit v1.2.3-70-g09d2 From fa4d3cdc8a60e71fd3fef1c2a2cda6f80377445b Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 11 Oct 2011 13:05:40 +0200 Subject: fix compiler warning about signed comparision on amd64, too --- test/libapt/assert.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'test') diff --git a/test/libapt/assert.h b/test/libapt/assert.h index ce5accc1c..a07be4b57 100644 --- a/test/libapt/assert.h +++ b/test/libapt/assert.h @@ -26,6 +26,18 @@ void assertEquals(int const &expect, unsigned int const &get, unsigned long cons assertEquals(expect, get, line); } +void assertEquals(unsigned long const &expect, int const &get, unsigned long const &line) { + if (get < 0) + OutputAssertEqual(expect, "==", get, line); + assertEquals(expect, get, line); +} + +void assertEquals(int const &expect, unsigned long const &get, unsigned long const &line) { + if (expect < 0) + OutputAssertEqual(expect, "==", get, line); + assertEquals(expect, get, line); +} + #define equalsOr2(x,y,z) assertEqualsOr2(y, z, x, __LINE__) -- cgit v1.2.3-70-g09d2 From ea65d079e19231eee2b9a167384fac33c1534290 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 11 Oct 2011 14:37:03 +0200 Subject: run integration tests on my new amd64 box without failures --- test/integration/framework | 28 ++++++++++++++++------ .../test-bug-590041-prefer-non-virtual-packages | 2 +- .../test-bug-595691-empty-and-broken-archive-files | 8 +------ .../test-bug-612099-multiarch-conflicts | 7 +----- test/integration/test-disappearing-packages | 14 +++++------ .../test-ubuntu-bug-761175-remove-purge | 8 +++---- 6 files changed, 35 insertions(+), 32 deletions(-) (limited to 'test') diff --git a/test/integration/framework b/test/integration/framework index a2e71760e..b55f793a4 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -149,6 +149,7 @@ setupenvironment() { echo "DPKG::options:: \"--root=${TMPWORKINGDIRECTORY}/rootdir\";" >> aptconfig.conf echo "DPKG::options:: \"--force-not-root\";" >> aptconfig.conf echo "DPKG::options:: \"--force-bad-path\";" >> aptconfig.conf + echo "DPKG::options:: \"--force-architecture\";" >> aptconfig.conf # Added to test multiarch before dpkg is ready for it… echo "DPKG::options:: \"--log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log\";" >> aptconfig.conf echo 'quiet::NoUpdate "true";' >> aptconfig.conf export LC_ALL=C @@ -156,13 +157,26 @@ setupenvironment() { msgdone "info" } +getarchitecture() { + if [ "$1" = "native" -o -z "$1" ]; then + eval `aptconfig shell ARCH APT::Architecture` + if [ -n "$ARCH" ]; then + echo $ARCH + else + dpkg-architecture -qDEB_BUILD_ARCH + fi + else + echo $1 + fi +} + configarchitecture() { local CONFFILE=rootdir/etc/apt/apt.conf.d/01multiarch.conf rm -f $CONFFILE - echo "APT::Architecture \"$1\";" > $CONFFILE + echo "APT::Architecture \"$(getarchitecture $1)\";" > $CONFFILE shift while [ -n "$1" ]; do - echo "APT::Architectures:: \"$1\";" >> $CONFFILE + echo "APT::Architectures:: \"$(getarchitecture $1)\";" >> $CONFFILE shift done } @@ -275,7 +289,7 @@ Package: $NAME" > ${BUILDDIR}/debian/control echo "pool/${SRC}" >> ${BUILDDIR}/../${RELEASE}.${DISTSECTION}.srclist done - for arch in $(echo "$ARCH" | sed -e 's#,#\n#g'); do + for arch in $(echo "$ARCH" | sed -e 's#,#\n#g' | sed -e "s#^native\$#$(getarchitecture 'native')#"); do rm -rf ${BUILDDIR}/debian/tmp mkdir -p ${BUILDDIR}/debian/tmp/DEBIAN ${BUILDDIR}/debian/tmp/usr/share/doc/${NAME} ${BUILDDIR}/debian/tmp/usr/bin cp ${BUILDDIR}/debian/copyright ${BUILDDIR}/debian/changelog ${BUILDDIR}/FEATURES ${BUILDDIR}/debian/tmp/usr/share/doc/${NAME} @@ -298,6 +312,7 @@ buildpackage() { local BUILDDIR=$1 local RELEASE=$2 local SECTION=$3 + local ARCH=$(getarchitecture $4) msgninfo "Build package $(echo "$BUILDDIR" | grep -o '[^/]*$') for ${RELEASE} in ${SECTION}… " cd $BUILDDIR if [ "$ARCH" = "all" ]; then @@ -408,7 +423,7 @@ insertpackage() { local DEPENDENCIES="$5" local PRIORITY="${6:-optional}" local ARCHS="" - for arch in $(echo "$ARCH" | sed -e 's#,#\n#g'); do + for arch in $(echo "$ARCH" | sed -e 's#,#\n#g' | sed -e "s#^native\$#$(getarchitecture 'native')#"); do if [ "$arch" = "all" ]; then ARCHS="$(aptconfig dump | grep APT::Architecture | cut -d'"' -f 2 | sed '/^$/ d' | sort | uniq | tr '\n' ' ')" else @@ -465,7 +480,7 @@ insertinstalledpackage() { local DEPENDENCIES="$4" local PRIORITY="${5:-optional}" local FILE="rootdir/var/lib/dpkg/status" - for arch in $(echo "$ARCH" | sed -e 's#,#\n#g'); do + for arch in $(echo "$ARCH" | sed -e 's#,#\n#g' | sed -e "s#^native\$#$(getarchitecture 'native')#"); do echo "Package: $NAME Status: install ok installed Priority: $PRIORITY @@ -715,8 +730,7 @@ N: Can't select versions from package '$1' as it is purely virtual" N: No packages found" local COMPAREFILE=$(mktemp) addtrap "rm $COMPAREFILE;" - local ARCH=$(dpkg-architecture -qDEB_HOST_ARCH_CPU) - eval `apt-config shell ARCH APT::Architecture` + local ARCH="$(getarchitecture 'native')" echo "$VIRTUAL" | sed -e "s/:$ARCH//" -e 's/:all//' > $COMPAREFILE aptcache show -q=0 $PACKAGE 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail } diff --git a/test/integration/test-bug-590041-prefer-non-virtual-packages b/test/integration/test-bug-590041-prefer-non-virtual-packages index 3e2693f85..e0dd7737f 100755 --- a/test/integration/test-bug-590041-prefer-non-virtual-packages +++ b/test/integration/test-bug-590041-prefer-non-virtual-packages @@ -3,7 +3,7 @@ set -e . $(readlink -f $(dirname $0))/framework setupenvironment -configarchitecture "i386" "armel" +configarchitecture 'i386' 'armel' pkglibc6="Package: libc6 Architecture: armel diff --git a/test/integration/test-bug-595691-empty-and-broken-archive-files b/test/integration/test-bug-595691-empty-and-broken-archive-files index 5c103da6f..bb1ac0e54 100755 --- a/test/integration/test-bug-595691-empty-and-broken-archive-files +++ b/test/integration/test-bug-595691-empty-and-broken-archive-files @@ -13,7 +13,7 @@ setupflataptarchive testaptgetupdate() { rm -rf rootdir/var/lib/apt aptget update 2>> testaptgetupdate.diff >> testaptgetupdate.diff || true - sed -i -e '/^Fetched / d' -e 's#\[[0-9]* [kMGTPY]*B\]#\[\]#' testaptgetupdate.diff + sed -i -e '/^Fetched / d' -e '/Ign / d' -e 's#\[[0-9]* [kMGTPY]*B\]#\[\]#' testaptgetupdate.diff GIVEN="$1" shift msgtest "Test for correctness of" "apt-get update with $*" @@ -78,7 +78,6 @@ testoverfile() { createemptyfile 'en' testaptgetupdate "Get:1 file: InRelease [] -Ign file: Translation-en Reading package lists..." "empty file en.$COMPRESS over file" createemptyarchive 'en' @@ -89,12 +88,10 @@ Reading package lists..." "empty archive en.$COMPRESS over file" # FIXME: Why omits the file transport the Packages Get line? #Get:3 file: Packages [] testaptgetupdate "Get:1 file: InRelease [] -Ign file: Translation-en Reading package lists..." "empty archive Packages.$COMPRESS over file" createemptyfile 'Packages' testaptgetupdate "Get:1 file: InRelease [] -Ign file: Translation-en Err file: Packages Empty files can't be valid archives W: Failed to fetch ${COMPRESSOR}:$(readlink -f aptarchive/Packages.$COMPRESS) Empty files can't be valid archives @@ -109,7 +106,6 @@ testoverhttp() { testaptgetupdate "Get:1 http://localhost InRelease [] Get:2 http://localhost Packages [] Get:3 http://localhost Translation-en -Ign http://localhost Translation-en Reading package lists..." "empty file en.$COMPRESS over http" createemptyarchive 'en' @@ -121,14 +117,12 @@ Reading package lists..." "empty archive en.$COMPRESS over http" createemptyarchive 'Packages' testaptgetupdate "Get:1 http://localhost InRelease [] Get:2 http://localhost Packages [] -Ign http://localhost Translation-en Reading package lists..." "empty archive Packages.$COMPRESS over http" createemptyfile 'Packages' #FIXME: we should response with a good error message instead testaptgetupdate "Get:1 http://localhost InRelease [] Get:2 http://localhost Packages -Ign http://localhost Translation-en Err http://localhost Packages Empty files can't be valid archives W: Failed to fetch ${COMPRESSOR}:$(readlink -f rootdir/var/lib/apt/lists/partial/localhost:8080_Packages) Empty files can't be valid archives diff --git a/test/integration/test-bug-612099-multiarch-conflicts b/test/integration/test-bug-612099-multiarch-conflicts index b8cfe59e2..dd9efb785 100755 --- a/test/integration/test-bug-612099-multiarch-conflicts +++ b/test/integration/test-bug-612099-multiarch-conflicts @@ -4,9 +4,7 @@ set -e TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework setupenvironment -configarchitecture "i386" "amd64" - -buildsimplenativepackage 'peace-dpkg' 'all' '1.0' 'stable' +configarchitecture 'i386' 'amd64' buildsimplenativepackage 'libc6' 'i386' '1.0' 'stable' buildsimplenativepackage 'libc6' 'amd64' '1.0' 'stable' @@ -17,9 +15,6 @@ buildsimplenativepackage 'foobar' 'amd64' '1.0' 'stable' 'Depends: libc6' setupaptarchive -aptget install peace-dpkg:i386 -y -qq 2>&1 > /dev/null -testdpkginstalled peace-dpkg - aptget install libc6:i386 -t stable -y -qq 2>&1 > /dev/null testdpkginstalled libc6 testequal 'Reading package lists... diff --git a/test/integration/test-disappearing-packages b/test/integration/test-disappearing-packages index 82ba9e592..0e0e9618d 100755 --- a/test/integration/test-disappearing-packages +++ b/test/integration/test-disappearing-packages @@ -4,12 +4,12 @@ set -e TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework setupenvironment -configarchitecture "i386" +configarchitecture 'native' -buildsimplenativepackage "old-pkg" "i386" "1.0" "stable" +buildsimplenativepackage "old-pkg" "native" "1.0" "stable" buildsimplenativepackage "unrelated" "all" "0.5" "unstable" -setupsimplenativepackage "new-pkg" "i386" "2.0" "unstable" "Provides: old-pkg +setupsimplenativepackage "new-pkg" "native" "2.0" "unstable" "Provides: old-pkg Replaces: old-pkg Conflicts: old-pkg (<< 2.0)" BUILDDIR="incoming/new-pkg-2.0" @@ -43,12 +43,12 @@ Note: This is done automatic and on purpose by dpkg." > $COMPAREFILE $CMD 2>&1 | tail -n 4 | diff $COMPAREFILE - && msgpass || msgfail rm $COMPAREFILE -sed -i rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d' +sed -i rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d' -e "s#:$(getarchitecture 'native') #:native #" testfileequal "rootdir/var/log/apt/history.log" " -Install: old-pkg:i386 (1.0) +Install: old-pkg:native (1.0) -Install: new-pkg:i386 (2.0, automatic) -Upgrade: old-pkg:i386 (1.0, 2.0) +Install: new-pkg:native (2.0, automatic) +Upgrade: old-pkg:native (1.0, 2.0) Disappeared: old-pkg (1.0)" testmarkedauto # new-pkg should have get the manual flag from old-pkg diff --git a/test/integration/test-ubuntu-bug-761175-remove-purge b/test/integration/test-ubuntu-bug-761175-remove-purge index 93b67fc02..f55c6e909 100755 --- a/test/integration/test-ubuntu-bug-761175-remove-purge +++ b/test/integration/test-ubuntu-bug-761175-remove-purge @@ -4,14 +4,14 @@ set -e TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework setupenvironment -configarchitecture 'i386' +configarchitecture 'native' -setupsimplenativepackage 'compiz-core' 'i386' '1.0' 'unstable' +setupsimplenativepackage 'compiz-core' 'native' '1.0' 'unstable' BUILDDIR='incoming/compiz-core-1.0' mkdir -p ${BUILDDIR}/debian/compiz-core/etc echo 'foo=bar;' > ${BUILDDIR}/compiz.conf echo 'compiz.conf /etc/compiz.conf' >> ${BUILDDIR}/debian/install -buildpackage "$BUILDDIR" 'unstable' 'main' +buildpackage "$BUILDDIR" 'unstable' 'main' 'native' rm -rf "$BUILDDIR" setupaptarchive @@ -27,7 +27,7 @@ aptget remove compiz-core -y -qq 2>&1 >/dev/null && msgpass || msgfail testdpkgnotinstalled compiz-core msgtest 'Check that conffiles are still around for' 'compiz-core' -dpkg -l compiz-core | grep '^rc' 2>&1 >/dev/null && msgpass || msgfail +dpkg -l compiz-core | grep -q '^rc' && msgpass || msgfail testequal 'Reading package lists... Building dependency tree... -- cgit v1.2.3-70-g09d2 From 2aa7df1d88017a7f0352e210b129889ad8b6f7f3 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 11 Oct 2011 14:44:05 +0200 Subject: run apt-get download in quiet mode as it messes with output otherwise --- test/integration/test-apt-get-download | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'test') diff --git a/test/integration/test-apt-get-download b/test/integration/test-apt-get-download index 7db93c32f..4edb7c173 100755 --- a/test/integration/test-apt-get-download +++ b/test/integration/test-apt-get-download @@ -13,13 +13,12 @@ buildsimplenativepackage 'apt' 'all' '2.0' 'unstable' setupaptarchive testdownload() { - msgtest 'Test download of package file' $1 - if [ -z "$3" ]; then - aptget download ${2} - else - aptget download ${2}/${3} + local APT="$2" + if [ -n "$3" ]; then + APT="${APT}/${3}" fi - test -f $1 && msgpass || msgfail + msgtest "Test download of package file $1 with" "$APT" + aptget -qq download ${APT} && test -f $1 && msgpass || msgfail } testdownload apt_1.0_all.deb apt stable -- cgit v1.2.3-70-g09d2 From 5f4db009e50a254f1dd3edaac7b77fe31e1c5f6b Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 11 Oct 2011 21:10:31 +0200 Subject: share description list between "same" versions (LP: #868977) --- apt-pkg/pkgcachegen.cc | 60 ++++++++++++++++------ debian/changelog | 3 +- .../test-bug-601016-description-translation | 34 +++++++++++- 3 files changed, 80 insertions(+), 17 deletions(-) (limited to 'test') diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc index 5147d7547..3545517fe 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -38,6 +38,9 @@ typedef vector::iterator FileIterator; template std::vector pkgCacheGenerator::Dynamic::toReMap; +bool IsDuplicateDescription(pkgCache::DescIterator Desc, + MD5SumValue const &CurMd5, std::string const &CurLang); + // CacheGenerator::pkgCacheGenerator - Constructor /*{{{*/ // --------------------------------------------------------------------- /* We set the dirty flag and make sure that is written to the disk */ @@ -242,8 +245,11 @@ bool pkgCacheGenerator::MergeList(ListParser &List, bool pkgCacheGenerator::MergeListGroup(ListParser &List, std::string const &GrpName) { pkgCache::GrpIterator Grp = Cache.FindGrp(GrpName); + // a group has no data on it's own, only packages have it but these + // stanzas like this come from Translation- files to add descriptions, + // but without a version we don't need a description for it… if (Grp.end() == true) - return _error->Error("Information merge for non-existent group %s requested", GrpName.c_str()); + return true; Dynamic DynGrp(Grp); pkgCache::PkgIterator Pkg; @@ -268,6 +274,7 @@ bool pkgCacheGenerator::MergeListPackage(ListParser &List, pkgCache::PkgIterator // Find the right version to write the description MD5SumValue CurMd5 = List.Description_md5(); + std::string CurLang = List.DescriptionLanguage(); for (Ver = Pkg.VersionList(); Ver.end() == false; ++Ver) { @@ -275,15 +282,9 @@ bool pkgCacheGenerator::MergeListPackage(ListParser &List, pkgCache::PkgIterator Dynamic DynDesc(Desc); map_ptrloc *LastDesc = &Ver->DescriptionList; - // don't add a new description if we have one for the given // md5 && language - bool duplicate = false; - for ( ; Desc.end() == false; ++Desc) - if (MD5SumValue(Desc.md5()) == CurMd5 && - Desc.LanguageCode() == List.DescriptionLanguage()) - duplicate=true; - if (duplicate == true) + if (IsDuplicateDescription(Desc, CurMd5, CurLang) == true) continue; for (Desc = Ver.DescriptionList(); @@ -295,7 +296,7 @@ bool pkgCacheGenerator::MergeListPackage(ListParser &List, pkgCache::PkgIterator // Add new description void const * const oldMap = Map.Data(); - map_ptrloc const descindex = NewDescription(Desc, List.DescriptionLanguage(), CurMd5, *LastDesc); + map_ptrloc const descindex = NewDescription(Desc, CurLang, CurMd5, *LastDesc); if (oldMap != Map.Data()) LastDesc += (map_ptrloc*) Map.Data() - (map_ptrloc*) oldMap; *LastDesc = descindex; @@ -391,16 +392,34 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator return true; } - /* Record the Description data. Description data always exist in - Packages and Translation-* files. */ + /* Record the Description (it is not translated) */ + MD5SumValue CurMd5 = List.Description_md5(); + if (CurMd5.Value().empty() == true) + return true; + std::string CurLang = List.DescriptionLanguage(); + + /* Before we add a new description we first search in the group for + a version with a description of the same MD5 - if so we reuse this + description group instead of creating our own for this version */ + pkgCache::GrpIterator Grp = Pkg.Group(); + for (pkgCache::PkgIterator P = Grp.PackageList(); + P.end() == false; P = Grp.NextPkg(P)) + { + for (pkgCache::VerIterator V = P.VersionList(); + V.end() == false; ++V) + { + if (IsDuplicateDescription(V.DescriptionList(), CurMd5, "") == false) + continue; + Ver->DescriptionList = V->DescriptionList; + return true; + } + } + + // We haven't found reusable descriptions, so add the first description pkgCache::DescIterator Desc = Ver.DescriptionList(); Dynamic DynDesc(Desc); map_ptrloc *LastDesc = &Ver->DescriptionList; - // Skip to the end of description set - for (; Desc.end() == false; LastDesc = &Desc->NextDesc, ++Desc); - - // Add new description oldMap = Map.Data(); map_ptrloc const descindex = NewDescription(Desc, List.DescriptionLanguage(), List.Description_md5(), *LastDesc); if (oldMap != Map.Data()) @@ -1403,3 +1422,14 @@ bool pkgCacheGenerator::MakeOnlyStatusCache(OpProgress *Progress,DynamicMMap **O return true; } /*}}}*/ +// IsDuplicateDescription /*{{{*/ +bool IsDuplicateDescription(pkgCache::DescIterator Desc, + MD5SumValue const &CurMd5, std::string const &CurLang) +{ + for ( ; Desc.end() == false; ++Desc) + if (MD5SumValue(Desc.md5()) == CurMd5 && Desc.LanguageCode() == CurLang) + return true; + return false; +} + /*}}}*/ + diff --git a/debian/changelog b/debian/changelog index 1e5babe41..b7f199609 100644 --- a/debian/changelog +++ b/debian/changelog @@ -24,6 +24,7 @@ apt (0.8.16~exp7) UNRELEASEDexperimental; urgency=low - do not builtin languages only if none is forced (Closes: #643787) * apt-pkg/pkgcachegen.cc: - refactor MergeList by creating -Group, -Package and -Version specialist + - share description list between "same" versions (LP: #868977) [ Michael Vogt ] * apt-pkg/contrib/configuration.cc: @@ -38,7 +39,7 @@ apt (0.8.16~exp7) UNRELEASEDexperimental; urgency=low * ftparchive/cachedb.cc: - fix buffersize in bytes2hex - -- David Kalnischkies Tue, 11 Oct 2011 18:32:13 +0200 + -- David Kalnischkies Tue, 11 Oct 2011 21:07:38 +0200 apt (0.8.16~exp6) experimental; urgency=low diff --git a/test/integration/test-bug-601016-description-translation b/test/integration/test-bug-601016-description-translation index 44ab91900..03fddbfda 100755 --- a/test/integration/test-bug-601016-description-translation +++ b/test/integration/test-bug-601016-description-translation @@ -4,7 +4,7 @@ set -e TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework setupenvironment -configarchitecture "i386" +configarchitecture 'i386' 'amd64' # we need a valid locale here, otherwise the language configuration # will be overridden by LC_ALL=C @@ -22,8 +22,22 @@ Size: 2140230 MD5sum: 74769bfbcef9ebc4fa74f7a5271b9c08 Description-md5: d41ee493aa9fcc6cbc9ce4eb7069959c" +PACKAGESTANZA2='Package: apt +Priority: important +Section: admin +Installed-Size: 5984 +Maintainer: APT Development Team +Architecture: amd64 +Version: 0.8.7 +Filename: pool/main/a/apt/apt_0.8.7_amd64.deb +Size: 2210342 +MD5sum: 4a869bfbdef9ebc9fa74f7a5271e8d1a +Description-md5: d41ee493aa9fcc6cbc9ce4eb7069959c' echo "$PACKAGESTANZA +Description: Advanced front-end for dpkg + +$PACKAGESTANZA2 Description: Advanced front-end for dpkg" > aptarchive/Packages echo "Package: apt @@ -53,6 +67,13 @@ Description-${LOCALE}: Mächtige Oberfläche für dpkg APT-Dselect-Methode. Beides sind einfache und sicherere Wege, um Pakete zu installieren und Upgrades durchzuführen. " +LOCALESTANZA2="$PACKAGESTANZA2 +Description-${LOCALE}: Mächtige Oberfläche für dpkg + Das Paket bietet dem Nutzer technisch führende Methoden für den Zugriff + auf den dpkg-Paketmanager. Es beinhaltet das apt-get-Werkzeug und die + APT-Dselect-Methode. Beides sind einfache und sicherere Wege, + um Pakete zu installieren und Upgrades durchzuführen. +" testrun() { echo "Acquire::Languages { \"${LOCALE}\"; \"en\"; };" > rootdir/etc/apt/apt.conf.d/00languages @@ -60,6 +81,8 @@ testrun() { rm -rf rootdir/var/lib/apt/lists setupaptarchive testequal "$LOCALESTANZA" aptcache show apt -o Test=File-${LOCALE} + testequal "$LOCALESTANZA" aptcache show apt:i386 -o Test=File-${LOCALE} + testequal "$LOCALESTANZA2" aptcache show apt:amd64 -o Test=File-${LOCALE} testequal "$NOLONGSTANZA" aptcache show apt -o Acquire::Languages="ww" -o Test=File-${LOCALE} testequal "$LOCALESTANZA" aptcache show apt -o Acquire::Languages::="ww" -o Test=File-${LOCALE} LC_ALL=C testequal "$ENGLISHSTANZA" aptcache show apt -o Test=File-${LOCALE} @@ -73,6 +96,9 @@ testrun() { testrun echo "$PACKAGESTANZA +Description: Advanced front-end for dpkg + +$PACKAGESTANZA2 Description: Advanced front-end for dpkg" > aptarchive/Packages echo "Package: apt @@ -88,5 +114,11 @@ Description-en: Advanced front-end for dpkg It provides the apt-get utility and APT dselect method that provides a simpler, safer way to install and upgrade packages. " +ENGLISHSTANZA2="$PACKAGESTANZA2 +Description-en: Advanced front-end for dpkg + This is Debian's next generation front-end for the dpkg package manager. + It provides the apt-get utility and APT dselect method that provides a + simpler, safer way to install and upgrade packages. +" testrun -- cgit v1.2.3-70-g09d2 From 28f7a8f269d704779d1eb192da0e052444064693 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 17 Oct 2011 11:21:12 +0200 Subject: create "real" testcases out of the tests for chris --- test/integration/test-conflicts-loop | 19 ++++++++++++++++++- test/integration/test-package-reinstallation | 8 +++++++- test/integration/test-provides-gone-with-upgrade | 22 +--------------------- 3 files changed, 26 insertions(+), 23 deletions(-) (limited to 'test') diff --git a/test/integration/test-conflicts-loop b/test/integration/test-conflicts-loop index f76c016fb..7b5724d74 100755 --- a/test/integration/test-conflicts-loop +++ b/test/integration/test-conflicts-loop @@ -15,4 +15,21 @@ insertpackage 'unstable' 'openjdk-6-jre-headless' 'i386' '6b20-1.9.8-0ubuntu1~10 setupaptarchive -aptget dist-upgrade -s -o Debug::pkgPackageManager=true -o Debug::pkgDpkgPM=true -o APT::Immediate-Configure-All=true +testequal 'Reading package lists... +Building dependency tree... +The following packages will be upgraded: + openjdk-6-jre openjdk-6-jre-headless openjdk-6-jre-lib +3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. + openjdk-6-jre-lib conflicts with openjdk-6-jre + openjdk-6-jre conflicts with openjdk-6-jre-headless + openjdk-6-jre-headless conflicts with openjdk-6-jre +Remv openjdk-6-jre [6b16-1.8-0ubuntu1] + openjdk-6-jre-headless conflicts with openjdk-6-jre-lib +Remv openjdk-6-jre-lib [6b16-1.8-0ubuntu1] +Inst openjdk-6-jre-headless [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) + openjdk-6-jre conflicts with openjdk-6-jre-lib +Inst openjdk-6-jre [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) +Inst openjdk-6-jre-lib [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) +Conf openjdk-6-jre-lib (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) +Conf openjdk-6-jre (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) +Conf openjdk-6-jre-headless (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386])' aptget dist-upgrade -s -o APT::Immediate-Configure-All=true diff --git a/test/integration/test-package-reinstallation b/test/integration/test-package-reinstallation index 359f69284..b4f2061ec 100755 --- a/test/integration/test-package-reinstallation +++ b/test/integration/test-package-reinstallation @@ -14,4 +14,10 @@ insertinstalledpackage 'apt' 'i386' '0.8.15' 'Depends: libc6' setupaptarchive -aptget install --reinstall libc6 libc-bin -s -o Debug::pkgPackageManager=1 +testequal 'Reading package lists... +Building dependency tree... +0 upgraded, 0 newly installed, 2 reinstalled, 0 to remove and 0 not upgraded. +Inst libc-bin [2.13-8] (2.13-8 unstable [i386]) +Conf libc-bin (2.13-8 unstable [i386]) +Inst libc6 [2.13-8] (2.13-8 unstable [i386]) +Conf libc6 (2.13-8 unstable [i386])' aptget install --reinstall libc6 libc-bin -s diff --git a/test/integration/test-provides-gone-with-upgrade b/test/integration/test-provides-gone-with-upgrade index ece2eaa41..70384ce29 100755 --- a/test/integration/test-provides-gone-with-upgrade +++ b/test/integration/test-provides-gone-with-upgrade @@ -13,26 +13,6 @@ Replaces: apt (<< 0.8.15)' setupaptarchive -#testequal 'Reading package lists... -#Building dependency tree... -#The following NEW packages will be installed: -# libapt-pkg4.10 -#The following packages will be upgraded: -# apt -#1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. -#Inst libapt-pkg4.10 (0.8.15 unstable [i386]) [libapt-pkg4.10:i386 on apt:i386] [] -#Conf libapt-pkg4.10:i386 broken -# Breaks:apt:i386 -# [] -#Inst apt [0.8.14] (0.8.15 unstable [i386]) -#Conf apt (0.8.15 unstable [i386]) -#E: Conf Broken libapt-pkg4.10:i386' -aptget dist-upgrade -s -o Debug::pkgPackageManager=1 -# the solution by dpkg will be to deconfigure apt with the configuration of libapt-pkg4.10 - -exit 0 - -#FIXME: a good result would be this instead, but it requires that APT can delay his immediate configuration… testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: @@ -40,7 +20,7 @@ The following NEW packages will be installed: The following packages will be upgraded: apt 1 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst apt [0.8.14] (0.8.15 unstable [i386]) [] Inst libapt-pkg4.10 (0.8.15 unstable [i386]) Conf libapt-pkg4.10 (0.8.15 unstable [i386]) -Inst apt [0.8.14] (0.8.15 unstable [i386]) Conf apt (0.8.15 unstable [i386])' aptget dist-upgrade -s -- cgit v1.2.3-70-g09d2 From c4cca79156ef5651e90772bae5f4aa11f669907d Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 11 Nov 2011 16:03:40 +0100 Subject: - provide a {Package,Version}List similar to {Package,Version}Set * cmdline/apt-{get,cache,mark}.cc: - use Lists instead of Sets if input order should be preserved for commands accepting lists of packages, e.g. policy (Closes: #625960) --- apt-pkg/cacheset.h | 110 +++++++++++++++++++++++++++--- cmdline/apt-cache.cc | 28 ++++---- cmdline/apt-get.cc | 14 ++-- cmdline/apt-mark.cc | 16 ++--- debian/changelog | 6 +- test/integration/Packages-pdiff-usage-new | 26 +++---- 6 files changed, 146 insertions(+), 54 deletions(-) (limited to 'test') diff --git a/apt-pkg/cacheset.h b/apt-pkg/cacheset.h index 411b31513..a23659efb 100644 --- a/apt-pkg/cacheset.h +++ b/apt-pkg/cacheset.h @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -159,8 +160,8 @@ template class PackageContainer : public PackageContainerInterf Container _cont; public: /*{{{*/ /** \brief smell like a pkgCache::PkgIterator */ - class const_iterator : public PackageContainerInterface::const_iterator, - public std::iterator {/*{{{*/ + class const_iterator : public PackageContainerInterface::const_iterator,/*{{{*/ + public std::iterator { typename Container::const_iterator _iter; public: const_iterator(typename Container::const_iterator i) : _iter(i) {} @@ -172,22 +173,37 @@ public: /*{{{*/ inline bool operator==(const_iterator const &i) const { return _iter == i._iter; }; friend std::ostream& operator<<(std::ostream& out, const_iterator i) { return operator<<(out, *i); } }; - // we are not going to allow modify our pkgiterators (it doesn't make sense)… - typedef APT::PackageContainer::const_iterator iterator; + class iterator : public PackageContainerInterface::const_iterator, + public std::iterator { + typename Container::iterator _iter; + public: + iterator(typename Container::iterator i) : _iter(i) {} + pkgCache::PkgIterator getPkg(void) const { return *_iter; } + inline pkgCache::PkgIterator operator*(void) const { return *_iter; }; + operator typename Container::iterator(void) const { return _iter; } + operator typename PackageContainer::const_iterator() { return PackageContainer::const_iterator(_iter); } + inline void operator++(void) { ++_iter; }; + inline bool operator!=(iterator const &i) const { return _iter != i._iter; }; + inline bool operator==(iterator const &i) const { return _iter == i._iter; }; + friend std::ostream& operator<<(std::ostream& out, iterator i) { return operator<<(out, *i); } + }; /*}}}*/ bool insert(pkgCache::PkgIterator const &P) { if (P.end() == true) return false; _cont.insert(P); return true; }; template void insert(PackageContainer const &pkgcont) { _cont.insert((typename Cont::const_iterator)pkgcont.begin(), (typename Cont::const_iterator)pkgcont.end()); }; void insert(const_iterator begin, const_iterator end) { _cont.insert(begin, end); }; + bool empty() const { return _cont.empty(); }; void clear() { return _cont.clear(); }; - void erase(iterator position) { _cont.erase((typename Container::const_iterator)position); }; + void erase(iterator position) { _cont.erase((typename Container::iterator)position); }; size_t erase(const pkgCache::PkgIterator x) { return _cont.erase(x); }; void erase(iterator first, iterator last) { _cont.erase(first, last); }; size_t size() const { return _cont.size(); }; const_iterator begin() const { return const_iterator(_cont.begin()); }; const_iterator end() const { return const_iterator(_cont.end()); }; + iterator begin() { return iterator(_cont.begin()); }; + iterator end() { return iterator(_cont.end()); }; const_iterator find(pkgCache::PkgIterator const &P) const { return const_iterator(_cont.find(P)); }; void setConstructor(Constructor const &by) { ConstructedBy = by; }; @@ -318,7 +334,25 @@ private: /*{{{*/ Constructor ConstructedBy; /*}}}*/ }; /*}}}*/ + +template<> template void PackageContainer >::insert(PackageContainer const &pkgcont) { + for (typename PackageContainer::const_iterator p = pkgcont.begin(); p != pkgcont.end(); ++p) + _cont.push_back(*p); +}; +// these two are 'inline' as otherwise the linker has problems with seeing these untemplated +// specializations again and again - but we need to see them, so that library users can use them +template<> inline bool PackageContainer >::insert(pkgCache::PkgIterator const &P) { + if (P.end() == true) + return false; + _cont.push_back(P); + return true; +}; +template<> inline void PackageContainer >::insert(const_iterator begin, const_iterator end) { + for (const_iterator p = begin; p != end; ++p) + _cont.push_back(*p); +}; typedef PackageContainer > PackageSet; +typedef PackageContainer > PackageList; class VersionContainerInterface { /*{{{*/ /** \class APT::VersionContainerInterface @@ -406,6 +440,13 @@ public: std::list const &mods, CacheSetHelper &helper); + + static bool FromDependency(VersionContainerInterface * const vci, + pkgCacheFile &Cache, + pkgCache::DepIterator const &D, + Version const &selector, + CacheSetHelper &helper); + protected: /*{{{*/ /** \brief returns the candidate version of the package @@ -425,7 +466,7 @@ protected: /*{{{*/ }; /*}}}*/ template class VersionContainer : public VersionContainerInterface {/*{{{*/ -/** \class APT::PackageContainer +/** \class APT::VersionContainer Simple wrapper around a container class like std::set to provide a similar interface to a set of versions as to the complete set of all versions in the @@ -446,8 +487,20 @@ public: /*{{{*/ inline bool operator==(const_iterator const &i) const { return _iter == i._iter; }; friend std::ostream& operator<<(std::ostream& out, const_iterator i) { return operator<<(out, *i); } }; - // we are not going to allow modify our veriterators (it doesn't make sense)… - typedef APT::VersionContainer::const_iterator iterator; + class iterator : public VersionContainerInterface::const_iterator, + public std::iterator { + typename Container::iterator _iter; + public: + iterator(typename Container::iterator i) : _iter(i) {} + pkgCache::VerIterator getVer(void) const { return *_iter; } + inline pkgCache::VerIterator operator*(void) const { return *_iter; }; + operator typename Container::iterator(void) const { return _iter; } + operator typename VersionContainer::const_iterator() { return VersionContainer::const_iterator(_iter); } + inline void operator++(void) { ++_iter; }; + inline bool operator!=(iterator const &i) const { return _iter != i._iter; }; + inline bool operator==(iterator const &i) const { return _iter == i._iter; }; + friend std::ostream& operator<<(std::ostream& out, iterator i) { return operator<<(out, *i); } + }; /*}}}*/ bool insert(pkgCache::VerIterator const &V) { if (V.end() == true) return false; _cont.insert(V); return true; }; @@ -455,13 +508,15 @@ public: /*{{{*/ void insert(const_iterator begin, const_iterator end) { _cont.insert(begin, end); }; bool empty() const { return _cont.empty(); }; void clear() { return _cont.clear(); }; - void erase(iterator position) { _cont.erase((typename Container::const_iterator)position); }; - size_t erase(const pkgCache::PkgIterator x) { return _cont.erase(x); }; + void erase(iterator position) { _cont.erase((typename Container::iterator)position); }; + size_t erase(const pkgCache::VerIterator x) { return _cont.erase(x); }; void erase(iterator first, iterator last) { _cont.erase(first, last); }; size_t size() const { return _cont.size(); }; const_iterator begin() const { return const_iterator(_cont.begin()); }; const_iterator end() const { return const_iterator(_cont.end()); }; + iterator begin() { return iterator(_cont.begin()); }; + iterator end() { return iterator(_cont.end()); }; const_iterator find(pkgCache::VerIterator const &V) const { return const_iterator(_cont.find(V)); }; /** \brief returns all versions specified on the commandline @@ -520,7 +575,7 @@ public: /*{{{*/ return FromPackage(Cache, P, fallback, helper); } static VersionContainer FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P) { - return FromPackage(Cache, P, CANDINST); + return FromPackage(Cache, P, CANDIDATE); } static std::map GroupedFromCommandLine( @@ -547,8 +602,41 @@ public: /*{{{*/ return GroupedFromCommandLine(Cache, cmdline, mods, fallback, helper); } + + static VersionContainer FromDependency(pkgCacheFile &Cache, pkgCache::DepIterator const &D, + Version const &selector, CacheSetHelper &helper) { + VersionContainer vercon; + VersionContainerInterface::FromDependency(&vercon, Cache, D, selector, helper); + return vercon; + } + static VersionContainer FromDependency(pkgCacheFile &Cache, pkgCache::DepIterator const &D, + Version const &selector) { + CacheSetHelper helper; + return FromPackage(Cache, D, selector, helper); + } + static VersionContainer FromDependency(pkgCacheFile &Cache, pkgCache::DepIterator const &D) { + return FromPackage(Cache, D, CANDIDATE); + } /*}}}*/ }; /*}}}*/ + +template<> template void VersionContainer >::insert(VersionContainer const &vercont) { + for (typename VersionContainer::const_iterator v = vercont.begin(); v != vercont.end(); ++v) + _cont.push_back(*v); +}; +// these two are 'inline' as otherwise the linker has problems with seeing these untemplated +// specializations again and again - but we need to see them, so that library users can use them +template<> inline bool VersionContainer >::insert(pkgCache::VerIterator const &V) { + if (V.end() == true) + return false; + _cont.push_back(V); + return true; +}; +template<> inline void VersionContainer >::insert(const_iterator begin, const_iterator end) { + for (const_iterator v = begin; v != end; ++v) + _cont.push_back(*v); +}; typedef VersionContainer > VersionSet; +typedef VersionContainer > VersionList; } #endif diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index ee3416ffb..65d7b0ccd 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -199,9 +199,9 @@ bool UnMet(CommandLine &CmdL) else { CacheSetHelperVirtuals helper(true, GlobalError::NOTICE); - APT::VersionSet verset = APT::VersionSet::FromCommandLine(CacheFile, CmdL.FileList + 1, - APT::VersionSet::CANDIDATE, helper); - for (APT::VersionSet::iterator V = verset.begin(); V != verset.end(); ++V) + APT::VersionList verset = APT::VersionList::FromCommandLine(CacheFile, CmdL.FileList + 1, + APT::VersionList::CANDIDATE, helper); + for (APT::VersionList::iterator V = verset.begin(); V != verset.end(); ++V) if (ShowUnMet(V, Important) == false) return false; } @@ -215,9 +215,9 @@ bool DumpPackage(CommandLine &CmdL) { pkgCacheFile CacheFile; APT::CacheSetHelper helper(true, GlobalError::NOTICE); - APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1, helper); + APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1, helper); - for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) + for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) { cout << "Package: " << Pkg.FullName(true) << endl; cout << "Versions: " << endl; @@ -588,7 +588,7 @@ bool ShowDepends(CommandLine &CmdL, bool const RevDepends) return false; CacheSetHelperVirtuals helper(false); - APT::VersionSet verset = APT::VersionSet::FromCommandLine(CacheFile, CmdL.FileList + 1, APT::VersionSet::CANDIDATE, helper); + APT::VersionList verset = APT::VersionList::FromCommandLine(CacheFile, CmdL.FileList + 1, APT::VersionList::CANDIDATE, helper); if (verset.empty() == true && helper.virtualPkgs.empty() == true) return _error->Error(_("No packages found")); std::vector Shown(Cache->Head().PackageCount); @@ -1365,10 +1365,10 @@ bool ShowPackage(CommandLine &CmdL) { pkgCacheFile CacheFile; CacheSetHelperVirtuals helper(true, GlobalError::NOTICE); - APT::VersionSet::Version const select = _config->FindB("APT::Cache::AllVersions", true) ? - APT::VersionSet::ALL : APT::VersionSet::CANDIDATE; - APT::VersionSet const verset = APT::VersionSet::FromCommandLine(CacheFile, CmdL.FileList + 1, select, helper); - for (APT::VersionSet::const_iterator Ver = verset.begin(); Ver != verset.end(); ++Ver) + APT::VersionList::Version const select = _config->FindB("APT::Cache::AllVersions", true) ? + APT::VersionList::ALL : APT::VersionList::CANDIDATE; + APT::VersionList const verset = APT::VersionList::FromCommandLine(CacheFile, CmdL.FileList + 1, select, helper); + for (APT::VersionList::const_iterator Ver = verset.begin(); Ver != verset.end(); ++Ver) if (DisplayRecord(CacheFile, Ver) == false) return false; @@ -1531,8 +1531,8 @@ bool Policy(CommandLine &CmdL) // Print out detailed information for each package APT::CacheSetHelper helper(true, GlobalError::NOTICE); - APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1, helper); - for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) + APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1, helper); + for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) { cout << Pkg.FullName(true) << ":" << endl; @@ -1608,8 +1608,8 @@ bool Madison(CommandLine &CmdL) for (const char **I = CmdL.FileList + 1; *I != 0; I++) { _error->PushToStack(); - APT::PackageSet pkgset = APT::PackageSet::FromString(CacheFile, *I, helper); - for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) + APT::PackageList pkgset = APT::PackageList::FromString(CacheFile, *I, helper); + for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) { for (pkgCache::VerIterator V = Pkg.VersionList(); V.end() == false; ++V) { diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 5ead83ddf..763f0edad 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -2293,8 +2293,8 @@ bool DoDownload(CommandLine &CmdL) return false; APT::CacheSetHelper helper(c0out); - APT::VersionSet verset = APT::VersionSet::FromCommandLine(Cache, - CmdL.FileList + 1, APT::VersionSet::CANDIDATE, helper); + APT::VersionList verset = APT::VersionList::FromCommandLine(Cache, + CmdL.FileList + 1, APT::VersionList::CANDIDATE, helper); if (verset.empty() == true) return false; @@ -2306,7 +2306,7 @@ bool DoDownload(CommandLine &CmdL) pkgRecords Recs(Cache); pkgSourceList *SrcList = Cache.GetSourceList(); - for (APT::VersionSet::const_iterator Ver = verset.begin(); + for (APT::VersionList::const_iterator Ver = verset.begin(); Ver != verset.end(); ++Ver) { @@ -3165,14 +3165,14 @@ bool DoChangelog(CommandLine &CmdL) return false; APT::CacheSetHelper helper(c0out); - APT::VersionSet verset = APT::VersionSet::FromCommandLine(Cache, - CmdL.FileList + 1, APT::VersionSet::CANDIDATE, helper); + APT::VersionList verset = APT::VersionList::FromCommandLine(Cache, + CmdL.FileList + 1, APT::VersionList::CANDIDATE, helper); if (verset.empty() == true) return false; pkgAcquire Fetcher; if (_config->FindB("APT::Get::Print-URIs", false) == true) - for (APT::VersionSet::const_iterator Ver = verset.begin(); + for (APT::VersionList::const_iterator Ver = verset.begin(); Ver != verset.end(); ++Ver) return DownloadChangelog(Cache, Fetcher, Ver, ""); @@ -3195,7 +3195,7 @@ bool DoChangelog(CommandLine &CmdL) return _error->Errno("mkdtemp", "mkdtemp failed"); } - for (APT::VersionSet::const_iterator Ver = verset.begin(); + for (APT::VersionList::const_iterator Ver = verset.begin(); Ver != verset.end(); ++Ver) { diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc index 339cbdf44..dbbef5013 100644 --- a/cmdline/apt-mark.cc +++ b/cmdline/apt-mark.cc @@ -34,14 +34,14 @@ bool DoAuto(CommandLine &CmdL) if (unlikely(Cache == NULL || DepCache == NULL)) return false; - APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1); + APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1); if (pkgset.empty() == true) return _error->Error(_("No packages found")); bool MarkAuto = strcasecmp(CmdL.FileList[0],"auto") == 0; int AutoMarkChanged = 0; - for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) + for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) { if (Pkg->CurrentVer == 0) { @@ -81,7 +81,7 @@ bool DoMarkAuto(CommandLine &CmdL) if (unlikely(Cache == NULL || DepCache == NULL)) return false; - APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1); + APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1); if (pkgset.empty() == true) return _error->Error(_("No packages found")); @@ -89,7 +89,7 @@ bool DoMarkAuto(CommandLine &CmdL) bool const Verbose = _config->FindB("APT::MarkAuto::Verbose", false); int AutoMarkChanged = 0; - for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) + for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) { if (Pkg->CurrentVer == 0 || (((*DepCache)[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) == MarkAuto) @@ -157,13 +157,13 @@ bool DoHold(CommandLine &CmdL) if (unlikely(Cache == NULL)) return false; - APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(CacheFile, CmdL.FileList + 1); + APT::PackageList pkgset = APT::PackageList::FromCommandLine(CacheFile, CmdL.FileList + 1); if (pkgset.empty() == true) return _error->Error(_("No packages found")); bool const MarkHold = strcasecmp(CmdL.FileList[0],"hold") == 0; - for (APT::PackageSet::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) + for (APT::PackageList::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) { if ((Pkg->SelectedState == pkgCache::State::Hold) == MarkHold) { @@ -181,7 +181,7 @@ bool DoHold(CommandLine &CmdL) if (_config->FindB("APT::Mark::Simulate", false) == true) { - for (APT::PackageSet::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) + for (APT::PackageList::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) { if (MarkHold == false) ioprintf(c1out,_("%s set on hold.\n"), Pkg.FullName(true).c_str()); @@ -201,7 +201,7 @@ bool DoHold(CommandLine &CmdL) if (dpkg == NULL) return _error->Errno("DoHold", "fdopen on dpkg stdin failed"); - for (APT::PackageSet::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) + for (APT::PackageList::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) { if (MarkHold == true) { diff --git a/debian/changelog b/debian/changelog index 95ad73681..058e2926e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,8 +12,12 @@ apt (0.8.16~exp8) experimental; urgency=low * apt-pkg/cacheset.cc: - make the cachesets real containers which can embedding any container to be able to use the same interface regardless of set or list usage + - provide a {Package,Version}List similar to {Package,Version}Set + * cmdline/apt-{get,cache,mark}.cc: + - use Lists instead of Sets if input order should be preserved for + commands accepting lists of packages, e.g. policy (Closes: #625960) - -- David Kalnischkies Wed, 09 Nov 2011 17:21:02 +0100 + -- David Kalnischkies Fri, 11 Nov 2011 15:55:13 +0100 apt (0.8.16~exp7) experimental; urgency=low diff --git a/test/integration/Packages-pdiff-usage-new b/test/integration/Packages-pdiff-usage-new index 9157596a7..4f374b37f 100644 --- a/test/integration/Packages-pdiff-usage-new +++ b/test/integration/Packages-pdiff-usage-new @@ -1,16 +1,3 @@ -Package: newstuff -Version: 1.0 -Architecture: i386 -Maintainer: Joe Sixpack -Installed-Size: 101 -Filename: pool/newstuff_1.0_i386.deb -Size: 101100 -MD5sum: 311aeeadf78324aaff1ceaf3e1f76671 -SHA1: 3c695e028f7a1ae324deeddaaa1242desa81088c -SHA256: b46fd154615edefab321cc56a5cc0e7deaef23e2da3e4f129727fd660f28f050 -Description: some cool and shiny new stuff - This package will appear in the next mirror update - Package: apt Priority: important Section: admin @@ -35,3 +22,16 @@ Description: Advanced front-end for dpkg . APT features complete installation ordering, multiple source capability and several other unique features, see the Users Guide in apt-doc. + +Package: newstuff +Version: 1.0 +Architecture: i386 +Maintainer: Joe Sixpack +Installed-Size: 101 +Filename: pool/newstuff_1.0_i386.deb +Size: 101100 +MD5sum: 311aeeadf78324aaff1ceaf3e1f76671 +SHA1: 3c695e028f7a1ae324deeddaaa1242desa81088c +SHA256: b46fd154615edefab321cc56a5cc0e7deaef23e2da3e4f129727fd660f28f050 +Description: some cool and shiny new stuff + This package will appear in the next mirror update -- cgit v1.2.3-70-g09d2 From 2b5c35c7bb915dbd46fefd7c79f05364ba22f93b Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 23 Nov 2011 00:49:45 +0100 Subject: * apt-pkg/depcache.cc: - prefer native providers over foreigns even if the chain is foreign The code preferred real over virtual packages and based on priorities. This is changed in so far that a real package from any arch is preferred over any virtual provider and if priorities doesn't help in choosing the best provider we choose it based on architectures --- apt-pkg/depcache.cc | 91 ++++++++++++++++------- apt-pkg/pkgcache.h | 2 +- debian/changelog | 4 +- test/integration/test-multiarch-foreign | 128 ++++++++++++++++++++++++++++++++ 4 files changed, 195 insertions(+), 30 deletions(-) create mode 100755 test/integration/test-multiarch-foreign (limited to 'test') diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 529e9240d..031fca5c0 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -23,7 +23,9 @@ #include #include #include +#include +#include #include #include #include @@ -940,6 +942,51 @@ bool pkgDepCache::IsModeChangeOk(ModeList const mode, PkgIterator const &Pkg, // DepCache::MarkInstall - Put the package in the install state /*{{{*/ // --------------------------------------------------------------------- /* */ +struct CompareProviders { + pkgCache::PkgIterator const Pkg; + CompareProviders(pkgCache::DepIterator const &Dep) : Pkg(Dep.TargetPkg()) {}; + //bool operator() (APT::VersionList::iterator const &AV, APT::VersionList::iterator const &BV) + bool operator() (pkgCache::VerIterator const &AV, pkgCache::VerIterator const &BV) + { + pkgCache::PkgIterator const A = AV.ParentPkg(); + pkgCache::PkgIterator const B = BV.ParentPkg(); + // Prefer packages in the same group as the target; e.g. foo:i386, foo:amd64 + if (A->Group != B->Group) + { + if (A->Group == Pkg->Group && B->Group != Pkg->Group) + return false; + else if (B->Group == Pkg->Group && A->Group != Pkg->Group) + return true; + } + // we like essentials + if ((A->Flags & pkgCache::Flag::Essential) != (B->Flags & pkgCache::Flag::Essential)) + { + if ((A->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential) + return false; + else if ((B->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential) + return true; + } + // higher priority seems like a good idea + if (AV->Priority != BV->Priority) + return AV->Priority < BV->Priority; + // prefer native architecture + if (strcmp(A.Arch(), B.Arch()) != 0) + { + if (strcmp(A.Arch(), A.Cache()->NativeArch()) == 0) + return false; + else if (strcmp(B.Arch(), B.Cache()->NativeArch()) == 0) + return true; + std::vector archs = APT::Configuration::getArchitectures(); + for (std::vector::const_iterator a = archs.begin(); a != archs.end(); ++a) + if (*a == A.Arch()) + return false; + else if (*a == B.Arch()) + return true; + } + // unable to decide… + return A->ID < B->ID; + } +}; bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, unsigned long Depth, bool FromUser, bool ForceImportantDeps) @@ -1102,41 +1149,28 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, /* This bit is for processing the possibilty of an install/upgrade fixing the problem */ - SPtrArray List = Start.AllTargets(); if (Start->Type != Dep::DpkgBreaks && (DepState[Start->ID] & DepCVer) == DepCVer) { - // Right, find the best version to install.. - Version **Cur = List; - PkgIterator P = Start.TargetPkg(); - PkgIterator InstPkg(*Cache,0); - - // See if there are direct matches (at the start of the list) - for (; *Cur != 0 && (*Cur)->ParentPkg == P.Index(); Cur++) + APT::VersionList verlist; + pkgCache::VerIterator Cand = PkgState[Start.TargetPkg()->ID].CandidateVerIter(*this); + if (Cand.end() == false && VS().CheckDep(Cand.VerStr(), Start->CompareOp, Start.TargetVer()) == true) + verlist.insert(Cand); + for (PrvIterator Prv = Start.TargetPkg().ProvidesList(); Prv.end() != true; ++Prv) { - PkgIterator Pkg(*Cache,Cache->PkgP + (*Cur)->ParentPkg); - if (PkgState[Pkg->ID].CandidateVer != *Cur) + pkgCache::VerIterator V = Prv.OwnerVer(); + pkgCache::VerIterator Cand = PkgState[Prv.OwnerPkg()->ID].CandidateVerIter(*this); + if (Cand.end() == true || V != Cand || + VS().CheckDep(Cand.VerStr(), Start->CompareOp, Start.TargetVer()) == false) continue; - InstPkg = Pkg; - break; + verlist.insert(Cand); } + CompareProviders comp(Start); + APT::VersionList::iterator InstVer = std::max_element(verlist.begin(), verlist.end(), comp); - // Select the highest priority providing package - if (InstPkg.end() == true) - { - pkgPrioSortList(*Cache,Cur); - for (; *Cur != 0; Cur++) - { - PkgIterator Pkg(*Cache,Cache->PkgP + (*Cur)->ParentPkg); - if (PkgState[Pkg->ID].CandidateVer != *Cur) - continue; - InstPkg = Pkg; - break; - } - } - - if (InstPkg.end() == false) + if (InstVer != verlist.end()) { + pkgCache::PkgIterator InstPkg = InstVer.ParentPkg(); if(DebugAutoInstall == true) std::clog << OutputInDepth(Depth) << "Installing " << InstPkg.Name() << " as " << Start.DepType() << " of " << Pkg.Name() @@ -1154,7 +1188,7 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, // mark automatic dependency MarkInstall(InstPkg,true,Depth + 1, false, ForceImportantDeps); // Set the autoflag, after MarkInstall because MarkInstall unsets it - if (P->CurrentVer == 0) + if (InstPkg->CurrentVer == 0) PkgState[InstPkg->ID].Flags |= Flag::Auto; } } @@ -1166,6 +1200,7 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, upgrade the package. */ if (Start.IsNegative() == true) { + SPtrArray List = Start.AllTargets(); for (Version **I = List; *I != 0; I++) { VerIterator Ver(*this,*I); diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h index 7e32a3a96..fd1a02149 100644 --- a/apt-pkg/pkgcache.h +++ b/apt-pkg/pkgcache.h @@ -198,6 +198,7 @@ class pkgCache /*{{{*/ inline PkgFileIterator FileEnd(); inline bool MultiArchCache() const { return MultiArchEnabled; }; + inline char const * const NativeArch() const; // Make me a function pkgVersioningSystem *VS; @@ -213,7 +214,6 @@ class pkgCache /*{{{*/ private: bool MultiArchEnabled; PkgIterator SingleArchFindPkg(const std::string &Name); - inline char const * const NativeArch() const; }; /*}}}*/ // Header structure /*{{{*/ diff --git a/debian/changelog b/debian/changelog index 058e2926e..0a66d2579 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,8 +16,10 @@ apt (0.8.16~exp8) experimental; urgency=low * cmdline/apt-{get,cache,mark}.cc: - use Lists instead of Sets if input order should be preserved for commands accepting lists of packages, e.g. policy (Closes: #625960) + * apt-pkg/depcache.cc: + - prefer native providers over foreigns even if the chain is foreign - -- David Kalnischkies Fri, 11 Nov 2011 15:55:13 +0100 + -- David Kalnischkies Wed, 23 Nov 2011 00:18:35 +0100 apt (0.8.16~exp7) experimental; urgency=low diff --git a/test/integration/test-multiarch-foreign b/test/integration/test-multiarch-foreign new file mode 100755 index 000000000..d0ad829a7 --- /dev/null +++ b/test/integration/test-multiarch-foreign @@ -0,0 +1,128 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'i386' 'armel' + +insertpackage 'unstable' 'cool-foo' 'amd64,i386' '1.0' 'Depends: foo' +insertpackage 'unstable' 'foo' 'amd64,i386,armel' '1.0' 'Multi-Arch: foreign' + +insertpackage 'unstable' 'cool-bar' 'amd64,i386' '1.0' 'Depends: bar-provider' +insertpackage 'unstable' 'bar' 'amd64,i386,armel' '1.0' 'Provides: bar-provider +Multi-Arch: foreign' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo +The following NEW packages will be installed: + cool-foo:i386 foo +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 unstable [amd64]) +Inst cool-foo:i386 (1.0 unstable [i386]) +Conf foo (1.0 unstable [amd64]) +Conf cool-foo:i386 (1.0 unstable [i386])' aptget install cool-foo:i386 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo +The following NEW packages will be installed: + cool-foo foo +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 unstable [amd64]) +Inst cool-foo (1.0 unstable [amd64]) +Conf foo (1.0 unstable [amd64]) +Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + cool-foo foo +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 unstable [amd64]) +Inst cool-foo (1.0 unstable [amd64]) +Conf foo (1.0 unstable [amd64]) +Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:amd64 -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + cool-foo foo:i386 +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo:i386 (1.0 unstable [i386]) +Inst cool-foo (1.0 unstable [amd64]) +Conf foo:i386 (1.0 unstable [i386]) +Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:i386 -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + cool-foo foo:armel +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo:armel (1.0 unstable [armel]) +Inst cool-foo (1.0 unstable [amd64]) +Conf foo:armel (1.0 unstable [armel]) +Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:armel -s + + + + + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + bar +The following NEW packages will be installed: + bar cool-bar:i386 +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst bar (1.0 unstable [amd64]) +Inst cool-bar:i386 (1.0 unstable [i386]) +Conf bar (1.0 unstable [amd64]) +Conf cool-bar:i386 (1.0 unstable [i386])' aptget install cool-bar:i386 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + bar +The following NEW packages will be installed: + bar cool-bar +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst bar (1.0 unstable [amd64]) +Inst cool-bar (1.0 unstable [amd64]) +Conf bar (1.0 unstable [amd64]) +Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + bar cool-bar +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst bar (1.0 unstable [amd64]) +Inst cool-bar (1.0 unstable [amd64]) +Conf bar (1.0 unstable [amd64]) +Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:amd64 -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + bar:i386 cool-bar +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst bar:i386 (1.0 unstable [i386]) +Inst cool-bar (1.0 unstable [amd64]) +Conf bar:i386 (1.0 unstable [i386]) +Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:i386 -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + bar:armel cool-bar +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst bar:armel (1.0 unstable [armel]) +Inst cool-bar (1.0 unstable [amd64]) +Conf bar:armel (1.0 unstable [armel]) +Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:armel -s -- cgit v1.2.3-70-g09d2 From 286afa36886b60bea0a17d244f8bddad938f27cf Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 23 Nov 2011 09:54:17 +0100 Subject: * cmdline/apt-get.cc: - ignore foreign architectures if we check if a provides has only one resolver as it's basically the same for the user, so no need to choose --- cmdline/apt-get.cc | 13 +++++++++++++ debian/changelog | 5 ++++- test/integration/test-multiarch-foreign | 22 ++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 763f0edad..ca1169401 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -742,6 +742,19 @@ public: Prov = PPkg; found_one = true; } else if (PPkg != Prov) { + // same group, so it's a foreign package + if (PPkg->Group == Prov->Group) { + // do we already have the requested arch? + if (strcmp(Pkg.Arch(), Prov.Arch()) == 0 || + strcmp(Prov.Arch(), "all") == 0 || + unlikely(strcmp(PPkg.Arch(), Prov.Arch()) == 0)) // packages have only on candidate, but just to be sure + continue; + // see which architecture we prefer more and switch to it + std::vector archs = APT::Configuration::getArchitectures(); + if (std::find(archs.begin(), archs.end(), PPkg.Arch()) < std::find(archs.begin(), archs.end(), Prov.Arch())) + Prov = PPkg; + continue; + } found_one = false; // we found at least two break; } diff --git a/debian/changelog b/debian/changelog index 0a66d2579..3c0de2c62 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,8 +18,11 @@ apt (0.8.16~exp8) experimental; urgency=low commands accepting lists of packages, e.g. policy (Closes: #625960) * apt-pkg/depcache.cc: - prefer native providers over foreigns even if the chain is foreign + * cmdline/apt-get.cc: + - ignore foreign architectures if we check if a provides has only one + resolver as it's basically the same for the user, so no need to choose - -- David Kalnischkies Wed, 23 Nov 2011 00:18:35 +0100 + -- David Kalnischkies Wed, 23 Nov 2011 09:52:20 +0100 apt (0.8.16~exp7) experimental; urgency=low diff --git a/test/integration/test-multiarch-foreign b/test/integration/test-multiarch-foreign index d0ad829a7..332466d96 100755 --- a/test/integration/test-multiarch-foreign +++ b/test/integration/test-multiarch-foreign @@ -126,3 +126,25 @@ Inst bar:armel (1.0 unstable [armel]) Inst cool-bar (1.0 unstable [amd64]) Conf bar:armel (1.0 unstable [armel]) Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:armel -s + +testequal "Reading package lists... +Building dependency tree... +Note, selecting 'bar' instead of 'bar-provider' +The following NEW packages will be installed: + bar cool-bar +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst bar (1.0 unstable [amd64]) +Inst cool-bar (1.0 unstable [amd64]) +Conf bar (1.0 unstable [amd64]) +Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider -s -q=0 + +testequal "Reading package lists... +Building dependency tree... +Note, selecting 'bar:i386' instead of 'bar-provider:i386' +The following NEW packages will be installed: + bar:i386 cool-bar +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst bar:i386 (1.0 unstable [i386]) +Inst cool-bar (1.0 unstable [amd64]) +Conf bar:i386 (1.0 unstable [i386]) +Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider:i386 -s -q=0 -- cgit v1.2.3-70-g09d2 From a7e052eae64486a31595bc9b3f4a1c02c13256e3 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 30 Nov 2011 16:37:09 +0100 Subject: ensure that we exit instead of proceed in execution after the trap (the execution leads to hard failures anyway) --- test/integration/framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test') diff --git a/test/integration/framework b/test/integration/framework index b55f793a4..2ea1844f0 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -102,7 +102,7 @@ aptitude() { addtrap() { CURRENTTRAP="$CURRENTTRAP $1" - trap "$CURRENTTRAP" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM + trap "$CURRENTTRAP exit;" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM } setupenvironment() { -- cgit v1.2.3-70-g09d2 From 2c405a44a0e4ff4c6f40e2521a55811179c87ec3 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 11 Dec 2011 02:55:20 +0100 Subject: add a testcase for FindPackages() to better validate that cdrom should work. Unfortunately it's hard to do an automated integration test with cd, so we test this method in isolation which tries to find Indexes and dropping of duplications with DropRepeats() --- apt-pkg/cdrom.cc | 23 ++++++---- test/libapt/cdromfindpackages_test.cc | 86 +++++++++++++++++++++++++++++++++++ test/libapt/makefile | 6 +++ test/libapt/run-tests | 29 ++++++++++++ 4 files changed, 136 insertions(+), 8 deletions(-) create mode 100644 test/libapt/cdromfindpackages_test.cc (limited to 'test') diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index d9ecdf4f6..4462d4e24 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -277,6 +277,7 @@ bool pkgCdrom::DropBinaryArch(vector &List) /* Here we go and stat every file that we found and strip dup inodes. */ bool pkgCdrom::DropRepeats(vector &List,const char *Name) { + bool couldFindAllFiles = true; // Get a list of all the inodes ino_t *Inodes = new ino_t[List.size()]; for (unsigned int I = 0; I != List.size(); ++I) @@ -297,21 +298,22 @@ bool pkgCdrom::DropRepeats(vector &List,const char *Name) } if (found == false) - _error->Errno("stat","Failed to stat %s%s",List[I].c_str(), Name); + { + _error->Errno("stat","Failed to stat %s%s",List[I].c_str(), Name); + couldFindAllFiles = false; + Inodes[I] = 0; + } } - if (_error->PendingError() == true) { - delete[] Inodes; - return false; - } - // Look for dups for (unsigned int I = 0; I != List.size(); I++) { + if (Inodes[I] == 0) + continue; for (unsigned int J = I+1; J < List.size(); J++) { // No match - if (Inodes[J] != Inodes[I]) + if (Inodes[J] == 0 || Inodes[J] != Inodes[I]) continue; // We score the two paths.. and erase one @@ -337,7 +339,7 @@ bool pkgCdrom::DropRepeats(vector &List,const char *Name) List.erase(List.begin()+I); } - return true; + return couldFindAllFiles; } /*}}}*/ // ReduceSourceList - Takes the path list and reduces it /*{{{*/ @@ -716,8 +718,13 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ DropBinaryArch(List); DropRepeats(List,"Packages"); DropRepeats(SourceList,"Sources"); + // FIXME: We ignore stat() errors here as we usually have only one of those in use + // This has little potencial to drop 'valid' stat() errors as we know that one of these + // files need to exist, but it would be better if we would check it here + _error->PushToStack(); DropRepeats(SigList,"Release.gpg"); DropRepeats(SigList,"InRelease"); + _error->RevertToStack(); DropRepeats(TransList,""); if(log != NULL) { msg.str(""); diff --git a/test/libapt/cdromfindpackages_test.cc b/test/libapt/cdromfindpackages_test.cc new file mode 100644 index 000000000..e9f5a51b0 --- /dev/null +++ b/test/libapt/cdromfindpackages_test.cc @@ -0,0 +1,86 @@ +#include +#include + +#include +#include +#include + +#include "assert.h" + +class Cdrom : public pkgCdrom { + public: + bool FindPackages(std::string const &CD, + std::vector &List, + std::vector &SList, + std::vector &SigList, + std::vector &TransList, + std::string &InfoDir) { + bool const result = pkgCdrom::FindPackages(CD, List, SList, SigList, TransList, InfoDir, NULL, 0); + std::sort(List.begin(), List.end()); + std::sort(SList.begin(), SList.end()); + std::sort(SigList.begin(), SigList.end()); + std::sort(TransList.begin(), TransList.end()); + return result; + } + + bool DropRepeats(std::vector &List, char const *Name) { + return pkgCdrom::DropRepeats(List, Name); + } +}; + +int main(int argc, char const *argv[]) { + if (argc != 2) { + std::cout << "One parameter expected - given " << argc << std::endl; + return 100; + } + + Cdrom cd; + std::vector Packages, Sources, Signatur, Translation; + std::string InfoDir; + std::string path = argv[1]; + equals(true, cd.FindPackages(path, Packages, Sources, Signatur, Translation, InfoDir)); + equals(4, Packages.size()); + equals(path + "/dists/sid/main/binary-i386/", Packages[0]); + equals(path + "/dists/stable/contrib/binary-amd64/", Packages[1]); + equals(path + "/dists/stable/main/binary-i386/", Packages[2]); + equals(path + "/dists/unstable/main/binary-i386/", Packages[3]); + equals(3, Sources.size()); + equals(path + "/dists/sid/main/source/", Sources[0]); + equals(path + "/dists/stable/main/source/", Sources[1]); + equals(path + "/dists/unstable/main/source/", Sources[2]); + equals(3, Signatur.size()); + equals(path + "/dists/sid/", Signatur[0]); + equals(path + "/dists/stable/", Signatur[1]); + equals(path + "/dists/unstable/", Signatur[2]); + equals(4, Translation.size()); + equals(path + "/dists/sid/main/i18n/Translation-de", Translation[0]); + equals(path + "/dists/sid/main/i18n/Translation-en", Translation[1]); + equals(path + "/dists/unstable/main/i18n/Translation-de", Translation[2]); + equals(path + "/dists/unstable/main/i18n/Translation-en", Translation[3]); + equals(path + "/.disk/", InfoDir); + + cd.DropRepeats(Packages, "Packages"); + cd.DropRepeats(Sources, "Sources"); + _error->PushToStack(); + cd.DropRepeats(Signatur, "InRelease"); + cd.DropRepeats(Signatur, "Release.gpg"); + _error->RevertToStack(); + _error->DumpErrors(); + cd.DropRepeats(Translation, ""); + + equals(3, Packages.size()); + equals(path + "/dists/stable/contrib/binary-amd64/", Packages[0]); + equals(path + "/dists/stable/main/binary-i386/", Packages[1]); + equals(path + "/dists/unstable/main/binary-i386/", Packages[2]); + equals(2, Sources.size()); + equals(path + "/dists/stable/main/source/", Sources[0]); + equals(path + "/dists/unstable/main/source/", Sources[1]); + equals(2, Signatur.size()); + equals(path + "/dists/stable/", Signatur[0]); + equals(path + "/dists/unstable/", Signatur[1]); + equals(2, Translation.size()); + equals(path + "/dists/unstable/main/i18n/Translation-de", Translation[0]); + equals(path + "/dists/unstable/main/i18n/Translation-en", Translation[1]); + + return 0; +} diff --git a/test/libapt/makefile b/test/libapt/makefile index d3dddaeed..1952051e2 100644 --- a/test/libapt/makefile +++ b/test/libapt/makefile @@ -74,3 +74,9 @@ PROGRAM = Configuration${BASENAME} SLIBS = -lapt-pkg SOURCE = configuration_test.cc include $(PROGRAM_H) + +# test cdroms core FindPackages +PROGRAM = CdromFindPackages${BASENAME} +SLIBS = -lapt-pkg +SOURCE = cdromfindpackages_test.cc +include $(PROGRAM_H) diff --git a/test/libapt/run-tests b/test/libapt/run-tests index ada2dc38b..bd47d4e0d 100755 --- a/test/libapt/run-tests +++ b/test/libapt/run-tests @@ -75,6 +75,35 @@ do continue elif [ $name = "CompareVersion${EXT}" ]; then tmppath="${DIR}/versions.lst" + elif [ $name = "CdromFindPackages${EXT}" ]; then + tmppath=$(mktemp -d) + mkdir -p "${tmppath}/.disk" "${tmppath}/pool" \ + "${tmppath}/dists/stable/main/binary-i386" \ + "${tmppath}/dists/stable/main/source" \ + "${tmppath}/dists/stable/contrib/binary-amd64" \ + "${tmppath}/dists/stable/contrib/binary-all" \ + "${tmppath}/dists/unstable/main/binary-i386" \ + "${tmppath}/dists/unstable/main/i18n" \ + "${tmppath}/dists/unstable/main/source" \ + "${tmppath}/dists/broken/non-free/source" + touch "${tmppath}/dists/broken/.aptignr" \ + "${tmppath}/dists/stable/main/binary-i386/Packages" \ + "${tmppath}/dists/stable/main/binary-i386/Packages.gz" \ + "${tmppath}/dists/stable/main/source/Sources.gz" \ + "${tmppath}/dists/stable/contrib/binary-amd64/Packages" \ + "${tmppath}/dists/stable/contrib/binary-amd64/Packages.gz" \ + "${tmppath}/dists/stable/contrib/binary-all/Packages" \ + "${tmppath}/dists/unstable/main/binary-i386/Packages.gz" \ + "${tmppath}/dists/unstable/main/binary-i386/Packages.gz" \ + "${tmppath}/dists/unstable/main/i18n/Translation-en" \ + "${tmppath}/dists/unstable/main/i18n/Translation-de.gz" \ + "${tmppath}/dists/unstable/main/source/Sources.gz" \ + "${tmppath}/dists/broken/non-free/source/Sources.gz" \ + "${tmppath}/dists/stable/Release.gpg" \ + "${tmppath}/dists/stable/Release" \ + "${tmppath}/dists/unstable/InRelease" \ + "${tmppath}/dists/broken/Release.gpg" + ln -s "${tmppath}/dists/unstable" "${tmppath}/dists/sid" fi echo -n "Testing with ${NAME} " -- cgit v1.2.3-70-g09d2 From eed564b853a0e5778080c5c3012517a814041d5a Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 11 Dec 2011 13:08:21 +0100 Subject: use different compression types in the test now that we support them --- test/libapt/run-tests | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'test') diff --git a/test/libapt/run-tests b/test/libapt/run-tests index bd47d4e0d..5fff4ecca 100755 --- a/test/libapt/run-tests +++ b/test/libapt/run-tests @@ -88,16 +88,16 @@ do "${tmppath}/dists/broken/non-free/source" touch "${tmppath}/dists/broken/.aptignr" \ "${tmppath}/dists/stable/main/binary-i386/Packages" \ - "${tmppath}/dists/stable/main/binary-i386/Packages.gz" \ - "${tmppath}/dists/stable/main/source/Sources.gz" \ + "${tmppath}/dists/stable/main/binary-i386/Packages.bz2" \ + "${tmppath}/dists/stable/main/source/Sources.xz" \ "${tmppath}/dists/stable/contrib/binary-amd64/Packages" \ "${tmppath}/dists/stable/contrib/binary-amd64/Packages.gz" \ "${tmppath}/dists/stable/contrib/binary-all/Packages" \ - "${tmppath}/dists/unstable/main/binary-i386/Packages.gz" \ - "${tmppath}/dists/unstable/main/binary-i386/Packages.gz" \ + "${tmppath}/dists/unstable/main/binary-i386/Packages.xz" \ + "${tmppath}/dists/unstable/main/binary-i386/Packages.lzma" \ "${tmppath}/dists/unstable/main/i18n/Translation-en" \ - "${tmppath}/dists/unstable/main/i18n/Translation-de.gz" \ - "${tmppath}/dists/unstable/main/source/Sources.gz" \ + "${tmppath}/dists/unstable/main/i18n/Translation-de.bz2" \ + "${tmppath}/dists/unstable/main/source/Sources.xz" \ "${tmppath}/dists/broken/non-free/source/Sources.gz" \ "${tmppath}/dists/stable/Release.gpg" \ "${tmppath}/dists/stable/Release" \ -- cgit v1.2.3-70-g09d2 From 4df62de6ea49c29eada5e58764378da1b0ec8648 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 14 Dec 2011 12:32:53 +0100 Subject: * apt-pkg/aptconfiguration.cc: - parse dpkg --print-foreign-architectures correctly in case archs are separated by newline instead of space, too. --- apt-pkg/aptconfiguration.cc | 2 +- debian/changelog | 5 ++++- .../test-bug-612958-use-dpkg-multiarch-config | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc index bc385b2dc..cc77eea6f 100644 --- a/apt-pkg/aptconfiguration.cc +++ b/apt-pkg/aptconfiguration.cc @@ -335,7 +335,7 @@ std::vector const Configuration::getArchitectures(bool const &Cache FILE *dpkg = popen(dpkgcall.c_str(), "r"); char buf[1024]; if(dpkg != NULL) { - if (fgets(buf, sizeof(buf), dpkg) != NULL) { + while (fgets(buf, sizeof(buf), dpkg) != NULL) { char* arch = strtok(buf, " "); while (arch != NULL) { for (; isspace(*arch) != 0; ++arch); diff --git a/debian/changelog b/debian/changelog index 1dffe9c25..277c1d961 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,13 +5,16 @@ apt (0.8.15.10) UNRELEASEDunstable; urgency=low - show a debug why a package was kept by ResolveByKeep() * doc/manpage-style.xml: - put around email addresses + * apt-pkg/aptconfiguration.cc: + - parse dpkg --print-foreign-architectures correctly in + case archs are separated by newline instead of space, too. [ Chris Leick ] * German manpage translation update * doc/*.xml: - find and fix a bunch of misspellings - -- David Kalnischkies Sun, 20 Nov 2011 18:02:08 +0100 + -- David Kalnischkies Wed, 14 Dec 2011 12:32:37 +0100 apt (0.8.15.9) unstable; urgency=low diff --git a/test/integration/test-bug-612958-use-dpkg-multiarch-config b/test/integration/test-bug-612958-use-dpkg-multiarch-config index 4f31c3953..18b964636 100755 --- a/test/integration/test-bug-612958-use-dpkg-multiarch-config +++ b/test/integration/test-bug-612958-use-dpkg-multiarch-config @@ -56,4 +56,22 @@ testfail 'dpkg config' 'armel' echo '#! /bin/sh echo "amd64 armel"' > ./dpkg-printer +testpass 'dpkg config' 'i386' +testpass 'dpkg config' 'amd64' +testpass 'dpkg config' 'armel' + +echo '#! /bin/sh +echo "amd64 +armel"' > ./dpkg-printer + +testpass 'dpkg config' 'i386' +testpass 'dpkg config' 'amd64' testpass 'dpkg config' 'armel' + +echo '#! /bin/sh +echo "amd64 +i386"' > ./dpkg-printer + +testpass 'dpkg config' 'i386' +testpass 'dpkg config' 'amd64' +testfail 'dpkg config' 'armel' -- cgit v1.2.3-70-g09d2 From 88a52816d7626326f94c17a3a8fcde08817b7f2b Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 11 Jan 2012 18:05:15 +0100 Subject: * apt-pkg/depcache.cc: - implicit conflicts (for multiarch) are supposed to conflict only with real packages, not with virtual providers --- apt-pkg/depcache.cc | 16 ++++++--- debian/changelog | 9 +++++ .../test-implicit-conflicts-real-not-virtual | 40 ++++++++++++++++++++++ 3 files changed, 60 insertions(+), 5 deletions(-) create mode 100755 test/integration/test-implicit-conflicts-real-not-virtual (limited to 'test') diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 031fca5c0..3c6dc4325 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -374,11 +374,17 @@ bool pkgDepCache::CheckDep(DepIterator Dep,int Type,PkgIterator &Res) PkgIterator Pkg = Dep.ParentPkg(); for (; P.end() != true; ++P) { - /* Provides may never be applied against the same package (or group) - if it is a conflicts. See the comment above. */ - if (P.OwnerPkg()->Group == Pkg->Group && Dep.IsNegative() == true) - continue; - + if (Dep.IsNegative() == true) + { + /* Provides may never be applied against the same package (or group) + if it is a conflicts. See the comment above. */ + if (P.OwnerPkg()->Group == Pkg->Group) + continue; + // Implicit group-conflicts should not be applied on providers of other groups + if (Pkg->Group == Dep.TargetPkg()->Group && P.OwnerPkg()->Group != Pkg->Group) + continue; + } + // Check if the provides is a hit if (Type == NowVersion) { diff --git a/debian/changelog b/debian/changelog index a1b93a981..83704caeb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +apt (0.8.16~exp10) UNRELEASED; urgency=low + + [ David Kalnischkies ] + * apt-pkg/depcache.cc: + - implicit conflicts (for multiarch) are supposed to conflict + only with real packages, not with virtual providers + + -- David Kalnischkies Wed, 11 Jan 2012 17:59:33 +0100 + apt (0.8.16~exp9) experimental; urgency=low [ Julian Andres Klode ] diff --git a/test/integration/test-implicit-conflicts-real-not-virtual b/test/integration/test-implicit-conflicts-real-not-virtual new file mode 100755 index 000000000..9d13e1709 --- /dev/null +++ b/test/integration/test-implicit-conflicts-real-not-virtual @@ -0,0 +1,40 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'i386' + +insertpackage 'unstable-mp' 'crda' 'i386,amd64' '1.1.1-1ubuntu4mp' 'Provides: wireless-crda +Multi-Arch: foreign' +insertpackage 'unstable-m' 'crda' 'i386,amd64' '1.1.1-1ubuntu4m' 'Multi-Arch: foreign' +insertpackage 'unstable-p' 'crda' 'i386,amd64' '1.1.1-1ubuntu4p' 'Provides: wireless-crda' + +insertinstalledpackage 'wireless-crda' 'amd64' '1.14' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + crda +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst crda (1.1.1-1ubuntu4m unstable-m [amd64]) +Conf crda (1.1.1-1ubuntu4m unstable-m [amd64])' aptget install crda -s -t unstable-m + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + crda +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst crda (1.1.1-1ubuntu4p unstable-p [amd64]) +Conf crda (1.1.1-1ubuntu4p unstable-p [amd64])' aptget install crda -s -t unstable-p + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + crda +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst crda (1.1.1-1ubuntu4mp unstable-mp [amd64]) +Conf crda (1.1.1-1ubuntu4mp unstable-mp [amd64])' aptget install crda -s -t unstable-mp -- cgit v1.2.3-70-g09d2 From 5f909b67fb903f700df1bd6242ada86d58c0b068 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 13 Jan 2012 12:48:41 +0100 Subject: * apt-pkg/pkgcache.cc: - ignore implicit conflicts on providers in AllTarget, too --- apt-pkg/pkgcache.cc | 17 ++++++++++++----- debian/changelog | 4 +++- .../test-implicit-conflicts-real-not-virtual | 22 +++++++++++++++++++--- 3 files changed, 34 insertions(+), 9 deletions(-) (limited to 'test') diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index c854249e4..5361696d0 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -636,11 +636,18 @@ pkgCache::Version **pkgCache::DepIterator::AllTargets() const { if (Owner->VS->CheckDep(I.ProvideVersion(),S->CompareOp,TargetVer()) == false) continue; - - if (IsNegative() == true && - ParentPkg()->Group == I.OwnerPkg()->Group) - continue; - + + if (IsNegative() == true) + { + /* Provides may never be applied against the same package (or group) + if it is a conflicts. See the comment above. */ + if (I.OwnerPkg()->Group == ParentPkg()->Group) + continue; + // Implicit group-conflicts should not be applied on providers of other groups + if (ParentPkg()->Group == TargetPkg()->Group && I.OwnerPkg()->Group != ParentPkg()->Group) + continue; + } + Size++; if (Res != 0) *End++ = I.OwnerVer(); diff --git a/debian/changelog b/debian/changelog index 83704caeb..36b3d8340 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,8 +4,10 @@ apt (0.8.16~exp10) UNRELEASED; urgency=low * apt-pkg/depcache.cc: - implicit conflicts (for multiarch) are supposed to conflict only with real packages, not with virtual providers + * apt-pkg/pkgcache.cc: + - ignore implicit conflicts on providers in AllTarget, too - -- David Kalnischkies Wed, 11 Jan 2012 17:59:33 +0100 + -- David Kalnischkies Fri, 13 Jan 2012 12:47:33 +0100 apt (0.8.16~exp9) experimental; urgency=low diff --git a/test/integration/test-implicit-conflicts-real-not-virtual b/test/integration/test-implicit-conflicts-real-not-virtual index 9d13e1709..c9fca4edf 100755 --- a/test/integration/test-implicit-conflicts-real-not-virtual +++ b/test/integration/test-implicit-conflicts-real-not-virtual @@ -10,6 +10,8 @@ insertpackage 'unstable-mp' 'crda' 'i386,amd64' '1.1.1-1ubuntu4mp' 'Provides: wi Multi-Arch: foreign' insertpackage 'unstable-m' 'crda' 'i386,amd64' '1.1.1-1ubuntu4m' 'Multi-Arch: foreign' insertpackage 'unstable-p' 'crda' 'i386,amd64' '1.1.1-1ubuntu4p' 'Provides: wireless-crda' +insertpackage 'unstable' 'wireless-crda' 'i386,amd64' '1.16' + insertinstalledpackage 'wireless-crda' 'amd64' '1.14' @@ -19,7 +21,7 @@ testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: crda -0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. Inst crda (1.1.1-1ubuntu4m unstable-m [amd64]) Conf crda (1.1.1-1ubuntu4m unstable-m [amd64])' aptget install crda -s -t unstable-m @@ -27,7 +29,7 @@ testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: crda -0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. Inst crda (1.1.1-1ubuntu4p unstable-p [amd64]) Conf crda (1.1.1-1ubuntu4p unstable-p [amd64])' aptget install crda -s -t unstable-p @@ -35,6 +37,20 @@ testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: crda -0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. Inst crda (1.1.1-1ubuntu4mp unstable-mp [amd64]) Conf crda (1.1.1-1ubuntu4mp unstable-mp [amd64])' aptget install crda -s -t unstable-mp + +rm rootdir/var/lib/dpkg/status +insertinstalledpackage 'crda' 'amd64' '1.1.1-1ubuntu4mp' 'Provides: wireless-crda +Conflicts: wireless-crda (<< 1.15) +Replaces: wireless-crda ( << 1.15) +Multi-arch: foreign' + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + wireless-crda +0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. +Inst wireless-crda (1.16 unstable [amd64]) +Conf wireless-crda (1.16 unstable [amd64])' aptget install wireless-crda -s -t unstable -- cgit v1.2.3-70-g09d2 From 86fc2ca8909eb686e2ad751acb0f0eaf706d9d5e Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 13 Jan 2012 17:30:17 +0100 Subject: * apt-pkg/deb/dpkgpm.cc: - check if dpkg supports multiarch with --assert-multi-arch and if it does be always explicit about the architecture --- apt-pkg/deb/dpkgpm.cc | 73 ++++++++++++++++++++-------- debian/changelog | 5 +- test/integration/test-dpkg-assert-multi-arch | 53 ++++++++++++++++++++ 3 files changed, 109 insertions(+), 22 deletions(-) create mode 100755 test/integration/test-dpkg-assert-multi-arch (limited to 'test') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 7c0ed5639..4dc0baa50 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -108,7 +108,7 @@ ionice(int PID) { if (!FileExists("/usr/bin/ionice")) return false; - pid_t Process = ExecFork(); + pid_t Process = ExecFork(); if (Process == 0) { char buf[32]; @@ -829,6 +829,40 @@ static int racy_pselect(int nfds, fd_set *readfds, fd_set *writefds, */ bool pkgDPkgPM::Go(int OutStatusFd) { + // Generate the base argument list for dpkg + std::vector Args; + unsigned long StartSize = 0; + string const Tmp = _config->Find("Dir::Bin::dpkg","dpkg"); + Args.push_back(Tmp.c_str()); + StartSize += Tmp.length(); + + // Stick in any custom dpkg options + Configuration::Item const *Opts = _config->Tree("DPkg::Options"); + if (Opts != 0) + { + Opts = Opts->Child; + for (; Opts != 0; Opts = Opts->Next) + { + if (Opts->Value.empty() == true) + continue; + Args.push_back(Opts->Value.c_str()); + StartSize += Opts->Value.length(); + } + } + + size_t const BaseArgs = Args.size(); + // we need to detect if we can qualify packages with the architecture or not + Args.push_back("--assert-multi-arch"); + Args.push_back(NULL); + + pid_t dpkgAssertMultiArch = ExecFork(); + if (dpkgAssertMultiArch == 0) + { + execv(Args[0], (char**) &Args[0]); + _error->WarningE("dpkgGo", "Can't detect if dpkg supports multi-arch!"); + _exit(2); + } + fd_set rfds; struct timespec tv; sigset_t sigmask; @@ -905,27 +939,20 @@ bool pkgDPkgPM::Go(int OutStatusFd) // create log OpenLog(); - // Generate the base argument list for dpkg - std::vector Args; - unsigned long StartSize = 0; - string const Tmp = _config->Find("Dir::Bin::dpkg","dpkg"); - Args.push_back(Tmp.c_str()); - StartSize += Tmp.length(); - - // Stick in any custom dpkg options - Configuration::Item const *Opts = _config->Tree("DPkg::Options"); - if (Opts != 0) + bool dpkgMultiArch = false; + if (dpkgAssertMultiArch > 0) { - Opts = Opts->Child; - for (; Opts != 0; Opts = Opts->Next) + int Status = 0; + while (waitpid(dpkgAssertMultiArch, &Status, 0) != dpkgAssertMultiArch) { - if (Opts->Value.empty() == true) + if (errno == EINTR) continue; - Args.push_back(Opts->Value.c_str()); - StartSize += Opts->Value.length(); + _error->WarningE("dpkgGo", _("Waited for %s but it wasn't there"), "dpkg --assert-multi-arch"); + break; } + if (WIFEXITED(Status) == true && WEXITSTATUS(Status) == 0) + dpkgMultiArch = true; } - size_t const BaseArgs = Args.size(); // this loop is runs once per operation for (vector::const_iterator I = List.begin(); I != List.end();) @@ -965,14 +992,17 @@ bool pkgDPkgPM::Go(int OutStatusFd) if (J - I > (signed)MaxArgs) { J = I + MaxArgs; - Args.reserve(MaxArgs + 10); + unsigned long const size = MaxArgs + 10; + Args.reserve(size); + Packages.reserve(size); } else { - Args.reserve((J - I) + 10); + unsigned long const size = (J - I) + 10; + Args.reserve(size); + Packages.reserve(size); } - int fd[2]; pipe(fd); @@ -1047,7 +1077,8 @@ bool pkgDPkgPM::Go(int OutStatusFd) continue; if (I->Op == Item::Configure && disappearedPkgs.find(I->Pkg.Name()) != disappearedPkgs.end()) continue; - if (I->Pkg.Arch() == nativeArch || !strcmp(I->Pkg.Arch(), "all")) + // We keep this here to allow "smooth" transitions from e.g. multiarch dpkg/ubuntu to dpkg/debian + if (dpkgMultiArch == false && (I->Pkg.Arch() == nativeArch || !strcmp(I->Pkg.Arch(), "all"))) { char const * const name = I->Pkg.Name(); ADDARG(name); diff --git a/debian/changelog b/debian/changelog index 36b3d8340..5eb4e593f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,8 +6,11 @@ apt (0.8.16~exp10) UNRELEASED; urgency=low only with real packages, not with virtual providers * apt-pkg/pkgcache.cc: - ignore implicit conflicts on providers in AllTarget, too + * apt-pkg/deb/dpkgpm.cc: + - check if dpkg supports multiarch with --assert-multi-arch + and if it does be always explicit about the architecture - -- David Kalnischkies Fri, 13 Jan 2012 12:47:33 +0100 + -- David Kalnischkies Fri, 13 Jan 2012 17:29:07 +0100 apt (0.8.16~exp9) experimental; urgency=low diff --git a/test/integration/test-dpkg-assert-multi-arch b/test/integration/test-dpkg-assert-multi-arch new file mode 100755 index 000000000..b1ec73e18 --- /dev/null +++ b/test/integration/test-dpkg-assert-multi-arch @@ -0,0 +1,53 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'i386' + +buildsimplenativepackage 'native-pkg' 'amd64' '1.0' 'stable' +buildsimplenativepackage 'foreign-pkg' 'i386' '0.5' 'stable' 'Multi-Arch: foreign' +buildsimplenativepackage 'same-lib' 'amd64,i386' '0.5' 'stable' 'Multi-Arch: same' + +setupaptarchive + +testqualifier() { + msgtest 'Test for correct qualifier mode' $2 + GIVEN="$(aptget install $1 -qq -o Debug::pkgDPkgPM=1 2>&1 | grep -- '--configure' | sed -e 's/^.*--configure \([^ ]*\).*$/\1/')" + test "$GIVEN" = "$2" && msgpass || msgfail +} + +# non-multiarch or "ubuntus" old multiarchified dpkg +echo 'Dir::Bin::dpkg "./dpkg-wrapper";' > rootdir/etc/apt/apt.conf.d/99dpkgwrapper +echo '#! /bin/sh +if echo "$*" | grep -q -- "--assert-multi-arch"; then + return 2; +fi +return $*' > ./dpkg-wrapper +chmod +x ./dpkg-wrapper + +testqualifier 'native-pkg' 'native-pkg' +testqualifier 'native-pkg:amd64' 'native-pkg' +testqualifier 'foreign-pkg' 'foreign-pkg:i386' +testqualifier 'foreign-pkg:i386' 'foreign-pkg:i386' +testqualifier 'same-lib' 'same-lib' +testqualifier 'same-lib:amd64' 'same-lib' +testqualifier 'same-lib:i386' 'same-lib:i386' + +# multiarch dpkg (new interface version) + +echo 'Dir::Bin::dpkg "./dpkg-wrapper";' > rootdir/etc/apt/apt.conf.d/99dpkgwrapper +echo '#! /bin/sh +if echo "$*" | grep -q -- "--assert-multi-arch"; then + return 0; +fi +return $*' > ./dpkg-wrapper + +testqualifier 'native-pkg' 'native-pkg:amd64' +testqualifier 'native-pkg:amd64' 'native-pkg:amd64' +testqualifier 'foreign-pkg' 'foreign-pkg:i386' +testqualifier 'foreign-pkg:i386' 'foreign-pkg:i386' +testqualifier 'same-lib' 'same-lib:amd64' +testqualifier 'same-lib:amd64' 'same-lib:amd64' +testqualifier 'same-lib:i386' 'same-lib:i386' -- cgit v1.2.3-70-g09d2 From 67b5d3dc34e88e092c8e5f05efc82370a873c80f Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 19 Jan 2012 12:40:38 +0100 Subject: * apt-pkg/deb/dpkgpm.cc: - redirect out/input of dpkg --assert-multi-arch to /dev/null --- apt-pkg/deb/dpkgpm.cc | 5 +++++ debian/changelog | 8 ++++++++ test/integration/test-dpkg-assert-multi-arch | 12 ++++++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 4dc0baa50..0dc00e8ad 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -858,6 +858,11 @@ bool pkgDPkgPM::Go(int OutStatusFd) pid_t dpkgAssertMultiArch = ExecFork(); if (dpkgAssertMultiArch == 0) { + // redirect everything to the ultimate sink as we only need the exit-status + int const nullfd = open("/dev/null", O_RDONLY); + dup2(nullfd, STDIN_FILENO); + dup2(nullfd, STDOUT_FILENO); + dup2(nullfd, STDERR_FILENO); execv(Args[0], (char**) &Args[0]); _error->WarningE("dpkgGo", "Can't detect if dpkg supports multi-arch!"); _exit(2); diff --git a/debian/changelog b/debian/changelog index ef25344ca..6ed7cb73e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +apt (0.8.16~exp11) experimental; urgency=low + + [ David Kalnischkies ] + * apt-pkg/deb/dpkgpm.cc: + - redirect out/input of dpkg --assert-multi-arch to /dev/null + + -- David Kalnischkies Thu, 19 Jan 2012 12:39:31 +0100 + apt (0.8.16~exp10) experimental; urgency=low [ David Kalnischkies ] diff --git a/test/integration/test-dpkg-assert-multi-arch b/test/integration/test-dpkg-assert-multi-arch index b1ec73e18..8be7e0d76 100755 --- a/test/integration/test-dpkg-assert-multi-arch +++ b/test/integration/test-dpkg-assert-multi-arch @@ -14,14 +14,22 @@ setupaptarchive testqualifier() { msgtest 'Test for correct qualifier mode' $2 - GIVEN="$(aptget install $1 -qq -o Debug::pkgDPkgPM=1 2>&1 | grep -- '--configure' | sed -e 's/^.*--configure \([^ ]*\).*$/\1/')" - test "$GIVEN" = "$2" && msgpass || msgfail + GIVEN="$(aptget install $1 -qq -o Debug::pkgDPkgPM=1 2>&1 | grep -e '--configure' -e '^dpkg:' | sed -e 's/^.*--configure \([^ ]*\).*$/\1/')" + if [ "$GIVEN" = "$2" ]; then + msgpass + else + echo + echo "$GIVEN" + msgfail + fi } # non-multiarch or "ubuntus" old multiarchified dpkg echo 'Dir::Bin::dpkg "./dpkg-wrapper";' > rootdir/etc/apt/apt.conf.d/99dpkgwrapper echo '#! /bin/sh if echo "$*" | grep -q -- "--assert-multi-arch"; then + echo >&2 'dpkg: Fehler: unbekannte Option --assert-multi-arch' + echo >&1 'dpkg: Info: unbekannte Option --assert-multi-arch' return 2; fi return $*' > ./dpkg-wrapper -- cgit v1.2.3-70-g09d2 From 3a5ec3053c00ff5db058f1ddd99bf23591b9a181 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 19 Jan 2012 13:12:14 +0100 Subject: if multi-arch is detected ensure that pkg:all is reported as pkg:all Versions with arch:all are added to the package with the native arch, so we can't rely on Pkg.Arch() for the architecture --- apt-pkg/deb/dpkgpm.cc | 5 ++++- debian/changelog | 3 ++- test/integration/test-dpkg-assert-multi-arch | 24 ++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 0dc00e8ad..6feada4cc 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -1090,7 +1090,10 @@ bool pkgDPkgPM::Go(int OutStatusFd) } else { - char * const fullname = strdup(I->Pkg.FullName(false).c_str()); + std::string name = I->Pkg.Name(); + pkgCache::VerIterator PkgVer = Cache[I->Pkg].InstVerIter(Cache); + name.append(":").append(PkgVer.Arch()); + char * const fullname = strdup(name.c_str()); Packages.push_back(fullname); ADDARG(fullname); } diff --git a/debian/changelog b/debian/changelog index 6ed7cb73e..10356cde8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,8 +3,9 @@ apt (0.8.16~exp11) experimental; urgency=low [ David Kalnischkies ] * apt-pkg/deb/dpkgpm.cc: - redirect out/input of dpkg --assert-multi-arch to /dev/null + - if multi-arch is detected ensure that pkg:all is reported as pkg:all - -- David Kalnischkies Thu, 19 Jan 2012 12:39:31 +0100 + -- David Kalnischkies Thu, 19 Jan 2012 13:00:13 +0100 apt (0.8.16~exp10) experimental; urgency=low diff --git a/test/integration/test-dpkg-assert-multi-arch b/test/integration/test-dpkg-assert-multi-arch index 8be7e0d76..532cfd26a 100755 --- a/test/integration/test-dpkg-assert-multi-arch +++ b/test/integration/test-dpkg-assert-multi-arch @@ -9,6 +9,8 @@ configarchitecture 'amd64' 'i386' buildsimplenativepackage 'native-pkg' 'amd64' '1.0' 'stable' buildsimplenativepackage 'foreign-pkg' 'i386' '0.5' 'stable' 'Multi-Arch: foreign' buildsimplenativepackage 'same-lib' 'amd64,i386' '0.5' 'stable' 'Multi-Arch: same' +buildsimplenativepackage 'all-pkg' 'all' '2.0' 'stable' +buildsimplenativepackage 'all-foreign-pkg' 'all' '2.0' 'stable' setupaptarchive @@ -42,9 +44,21 @@ testqualifier 'foreign-pkg:i386' 'foreign-pkg:i386' testqualifier 'same-lib' 'same-lib' testqualifier 'same-lib:amd64' 'same-lib' testqualifier 'same-lib:i386' 'same-lib:i386' +testqualifier 'all-pkg' 'all-pkg' +testqualifier 'all-pkg:amd64' 'all-pkg' +testqualifier 'all-foreign-pkg' 'all-foreign-pkg' +testqualifier 'all-foreign-pkg:amd64' 'all-foreign-pkg' +insertinstalledpackage 'all-pkg' 'amd64' '1.0' +insertinstalledpackage 'all-foreign-pkg' 'amd64' '1.0' +testqualifier 'all-pkg' 'all-pkg' +testqualifier 'all-pkg:amd64' 'all-pkg' +testqualifier 'all-foreign-pkg' 'all-foreign-pkg' +testqualifier 'all-foreign-pkg:amd64' 'all-foreign-pkg' # multiarch dpkg (new interface version) +rm rootdir/var/lib/dpkg/status +touch rootdir/var/lib/dpkg/status echo 'Dir::Bin::dpkg "./dpkg-wrapper";' > rootdir/etc/apt/apt.conf.d/99dpkgwrapper echo '#! /bin/sh if echo "$*" | grep -q -- "--assert-multi-arch"; then @@ -59,3 +73,13 @@ testqualifier 'foreign-pkg:i386' 'foreign-pkg:i386' testqualifier 'same-lib' 'same-lib:amd64' testqualifier 'same-lib:amd64' 'same-lib:amd64' testqualifier 'same-lib:i386' 'same-lib:i386' +testqualifier 'all-pkg' 'all-pkg:all' +testqualifier 'all-pkg:amd64' 'all-pkg:all' +testqualifier 'all-foreign-pkg' 'all-foreign-pkg:all' +testqualifier 'all-foreign-pkg:amd64' 'all-foreign-pkg:all' +insertinstalledpackage 'all-pkg' 'amd64' '1.0' +insertinstalledpackage 'all-foreign-pkg' 'amd64' '1.0' +testqualifier 'all-pkg' 'all-pkg:all' +testqualifier 'all-pkg:amd64' 'all-pkg:all' +testqualifier 'all-foreign-pkg' 'all-foreign-pkg:all' +testqualifier 'all-foreign-pkg:amd64' 'all-foreign-pkg:all' -- cgit v1.2.3-70-g09d2 From 2a2a7ef4dfa9d8fb8118c2e318555438098cdf34 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 19 Jan 2012 18:42:57 +0100 Subject: * apt-pkg/cacheiterators.h: - return the correct version arch for all+foreign, too The flag is interpreted at a few other places in different styles so this commit ensures that the flag check is consistent everywhere (checking for Same in flag style is a bit too much as it isn't used in combination with others anyway, but who knows and just for consistency) --- apt-pkg/cacheiterators.h | 2 +- apt-pkg/deb/dpkgpm.cc | 4 ++-- apt-pkg/packagemanager.cc | 2 +- cmdline/apt-get.cc | 4 ++-- debian/changelog | 6 +++++- test/integration/framework | 9 ++++++++- test/integration/test-dpkg-assert-multi-arch | 22 +++++++++++++++++----- 7 files changed, 36 insertions(+), 13 deletions(-) (limited to 'test') diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h index e6a0fddb0..d5e018be9 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -207,7 +207,7 @@ class pkgCache::VerIterator : public Iterator { inline const char *VerStr() const {return S->VerStr == 0?0:Owner->StrP + S->VerStr;}; inline const char *Section() const {return S->Section == 0?0:Owner->StrP + S->Section;}; inline const char *Arch() const { - if (S->MultiArch == pkgCache::Version::All) + if ((S->MultiArch & pkgCache::Version::All) == pkgCache::Version::All) return "all"; return S->ParentPkg == 0?0:Owner->StrP + ParentPkg()->Arch; }; diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 99c28d201..2b04f0e71 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -1093,9 +1093,9 @@ bool pkgDPkgPM::Go(int OutStatusFd) pkgCache::VerIterator PkgVer; std::string name = I->Pkg.Name(); if (Op == Item::Remove || Op == Item::Purge) - PkgVer = I->Pkg.CurrentVer(); + PkgVer = I->Pkg.CurrentVer(); else - PkgVer = Cache[I->Pkg].InstVerIter(Cache); + PkgVer = Cache[I->Pkg].InstVerIter(Cache); name.append(":").append(PkgVer.Arch()); char * const fullname = strdup(name.c_str()); Packages.push_back(fullname); diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index c9d7a3024..349adbe40 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -733,7 +733,7 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c List->Flag(Pkg,pkgOrderList::UnPacked,pkgOrderList::States); - if (Immediate == true && instVer->MultiArch == pkgCache::Version::Same) + if (Immediate == true && (instVer->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same) { /* Do lockstep M-A:same unpacking in two phases: First unpack all installed architectures, then the not installed. diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index ca1169401..85ae1cd7e 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -2872,12 +2872,12 @@ bool DoBuildDep(CommandLine &CmdL) forbidden = "Multi-Arch: same"; // :native gets the buildArch } - else if (Ver->MultiArch == pkgCache::Version::Foreign || Ver->MultiArch == pkgCache::Version::AllForeign) + else if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign) { if (colon != string::npos) forbidden = "Multi-Arch: foreign"; } - else if (Ver->MultiArch == pkgCache::Version::Allowed || Ver->MultiArch == pkgCache::Version::AllAllowed) + else if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed) { if (colon == string::npos) Pkg = Ver.ParentPkg().Group().FindPkg(hostArch); diff --git a/debian/changelog b/debian/changelog index d8316abf6..838b14ef1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,7 +4,11 @@ apt (0.8.16~exp12) experimental; urgency=low * apt-pkg/deb/dpkgpm.cc: - fix segfault on pkg removal - -- Michael Vogt Thu, 19 Jan 2012 16:28:03 +0100 + [ David Kalnischkies ] + * apt-pkg/cacheiterators.h: + - return the correct version arch for all+foreign, too + + -- David Kalnischkies Thu, 19 Jan 2012 18:38:33 +0100 apt (0.8.16~exp11) experimental; urgency=low diff --git a/test/integration/framework b/test/integration/framework index 2ea1844f0..d7526a100 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -25,7 +25,14 @@ msgnwarn() { echo -n "${CWARNING}W: $1${CNORMAL}" >&2; } msgnmsg() { echo -n "${CMSG}$1${CNORMAL}" >&2; } msgninfo() { echo -n "${CINFO}I: $1${CNORMAL}" >&2; } msgndebug() { echo -n "${CDEBUG}D: $1${CNORMAL}" >&2; } -msgtest() { echo -n "${CINFO}$1 ${CCMD}$(echo "$2" | sed -e 's/^aptc/apt-c/' -e 's/^aptg/apt-g/' -e 's/^aptf/apt-f/')${CINFO} …${CNORMAL} " >&2; } +msgtest() { + while [ -n "$1" ]; do + echo -n "${CINFO}$1${CCMD} " >&2; + echo -n "$(echo "$2" | sed -e 's/^aptc/apt-c/' -e 's/^aptg/apt-g/' -e 's/^aptf/apt-f/')${CINFO} " >&2; + shift 2 + done + echo -n "…${CNORMAL} " >&2; +} msgpass() { echo "${CPASS}PASS${CNORMAL}" >&2; } msgskip() { echo "${CWARNING}SKIP${CNORMAL}" >&2; } msgfail() { echo "${CFAIL}FAIL${CNORMAL}" >&2; } diff --git a/test/integration/test-dpkg-assert-multi-arch b/test/integration/test-dpkg-assert-multi-arch index 532cfd26a..177d7489b 100755 --- a/test/integration/test-dpkg-assert-multi-arch +++ b/test/integration/test-dpkg-assert-multi-arch @@ -10,13 +10,13 @@ buildsimplenativepackage 'native-pkg' 'amd64' '1.0' 'stable' buildsimplenativepackage 'foreign-pkg' 'i386' '0.5' 'stable' 'Multi-Arch: foreign' buildsimplenativepackage 'same-lib' 'amd64,i386' '0.5' 'stable' 'Multi-Arch: same' buildsimplenativepackage 'all-pkg' 'all' '2.0' 'stable' -buildsimplenativepackage 'all-foreign-pkg' 'all' '2.0' 'stable' +buildsimplenativepackage 'all-foreign-pkg' 'all' '2.0' 'stable' 'Multi-Arch: foreign' setupaptarchive testqualifier() { - msgtest 'Test for correct qualifier mode' $2 - GIVEN="$(aptget install $1 -qq -o Debug::pkgDPkgPM=1 2>&1 | grep -e '--configure' -e '^dpkg:' | sed -e 's/^.*--configure \([^ ]*\).*$/\1/')" + msgtest 'Test with' $1 'for correct qualifier mode' $2 + GIVEN="$(aptget install $1 -qq -o Debug::pkgDPkgPM=1 2>&1 | grep -v -- '--unpack' | sed -e 's/^.*--[^u][^ ]* \([^ ]*\).*$/\1/')" if [ "$GIVEN" = "$2" ]; then msgpass else @@ -49,11 +49,17 @@ testqualifier 'all-pkg:amd64' 'all-pkg' testqualifier 'all-foreign-pkg' 'all-foreign-pkg' testqualifier 'all-foreign-pkg:amd64' 'all-foreign-pkg' insertinstalledpackage 'all-pkg' 'amd64' '1.0' -insertinstalledpackage 'all-foreign-pkg' 'amd64' '1.0' +insertinstalledpackage 'all-foreign-pkg' 'amd64' '1.0' 'Multi-Arch: foreign' testqualifier 'all-pkg' 'all-pkg' testqualifier 'all-pkg:amd64' 'all-pkg' testqualifier 'all-foreign-pkg' 'all-foreign-pkg' testqualifier 'all-foreign-pkg:amd64' 'all-foreign-pkg' +insertinstalledpackage 'always-all-pkg' 'all' '1.0' +insertinstalledpackage 'always-all-foreign-pkg' 'all' '1.0' 'Multi-Arch: foreign' +testqualifier 'all-pkg-' 'all-pkg' +testqualifier 'all-foreign-pkg-' 'all-foreign-pkg' +testqualifier 'always-all-pkg-' 'always-all-pkg' +testqualifier 'always-all-foreign-pkg-' 'always-all-foreign-pkg' # multiarch dpkg (new interface version) @@ -78,8 +84,14 @@ testqualifier 'all-pkg:amd64' 'all-pkg:all' testqualifier 'all-foreign-pkg' 'all-foreign-pkg:all' testqualifier 'all-foreign-pkg:amd64' 'all-foreign-pkg:all' insertinstalledpackage 'all-pkg' 'amd64' '1.0' -insertinstalledpackage 'all-foreign-pkg' 'amd64' '1.0' +insertinstalledpackage 'all-foreign-pkg' 'amd64' '1.0' 'Multi-Arch: foreign' testqualifier 'all-pkg' 'all-pkg:all' testqualifier 'all-pkg:amd64' 'all-pkg:all' testqualifier 'all-foreign-pkg' 'all-foreign-pkg:all' testqualifier 'all-foreign-pkg:amd64' 'all-foreign-pkg:all' +insertinstalledpackage 'always-all-pkg' 'all' '1.0' +insertinstalledpackage 'always-all-foreign-pkg' 'all' '1.0' 'Multi-Arch: foreign' +testqualifier 'all-pkg-' 'all-pkg:amd64' +testqualifier 'all-foreign-pkg-' 'all-foreign-pkg:amd64' +testqualifier 'always-all-pkg-' 'always-all-pkg:all' +testqualifier 'always-all-foreign-pkg-' 'always-all-foreign-pkg:all' -- cgit v1.2.3-70-g09d2 From 18aea9e6c38ec0397e546563b8a54a99b431028b Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Fri, 20 Jan 2012 01:34:31 +0100 Subject: * test/libapt/globalerror_test.cc: - errno 0 has a different strerror on hurd, so generate the expected message dynamically instead of hardcoding 'Success' (Closes: #656530) --- debian/changelog | 7 ++++++- test/libapt/globalerror_test.cc | 7 +++++-- 2 files changed, 11 insertions(+), 3 deletions(-) (limited to 'test') diff --git a/debian/changelog b/debian/changelog index 299afcf54..99c3a2032 100644 --- a/debian/changelog +++ b/debian/changelog @@ -22,7 +22,12 @@ apt (0.8.16~exp12) experimental; urgency=low which generates malformed requests, thanks Mel Collins for the hint! (Closes: #646381) - -- David Kalnischkies Thu, 19 Jan 2012 23:43:03 +0100 + [ Pino Toscano ] + * test/libapt/globalerror_test.cc: + - errno 0 has a different strerror on hurd, so generate the expected + message dynamically instead of hardcoding 'Success' (Closes: #656530) + + -- David Kalnischkies Fri, 20 Jan 2012 01:31:30 +0100 apt (0.8.16~exp11) experimental; urgency=low diff --git a/test/libapt/globalerror_test.cc b/test/libapt/globalerror_test.cc index 5d27414f9..72044d493 100644 --- a/test/libapt/globalerror_test.cc +++ b/test/libapt/globalerror_test.cc @@ -3,9 +3,12 @@ #include "assert.h" #include #include +#include int main(int argc,char *argv[]) { + std::string const textOfErrnoZero(strerror(0)); + equals(_error->empty(), true); equals(_error->PendingError(), false); equals(_error->Notice("%s Notice", "A"), false); @@ -80,7 +83,7 @@ int main(int argc,char *argv[]) equals(_error->PendingError(), true); equals(_error->PopMessage(text), true); equals(_error->PendingError(), false); - equals(text, "Something horrible happend 2 times - errno (0: Success)"); + equals(text, std::string("Something horrible happend 2 times - errno (0: ").append(textOfErrnoZero).append(")")); equals(_error->empty(), true); std::string longText; @@ -92,7 +95,7 @@ int main(int argc,char *argv[]) equals(_error->Errno("errno", "%s horrible %s %d times", longText.c_str(), "happend", 2), false); equals(_error->PopMessage(text), true); - equals(text, std::string(longText).append(" horrible happend 2 times - errno (0: Success)")); + equals(text, std::string(longText).append(" horrible happend 2 times - errno (0: ").append(textOfErrnoZero).append(")")); equals(_error->Warning("Репозиторий не обновлён и будут %d %s", 4, "test"), false); equals(_error->PopMessage(text), false); -- cgit v1.2.3-70-g09d2 From 809cf6d22a9bb72061aedf2670c78b57d9da6999 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 20 Jan 2012 02:00:48 +0100 Subject: * test/libapt/run-tests: - hurd doesn't have dmesg yet and we don't really need it either, so use with $0 a more stable data source for hashsumming --- debian/changelog | 5 ++++- test/libapt/run-tests | 4 +--- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'test') diff --git a/debian/changelog b/debian/changelog index 99c3a2032..9484063bb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -21,13 +21,16 @@ apt (0.8.16~exp12) experimental; urgency=low - use curls list append instead of appending Range and If-Range by hand which generates malformed requests, thanks Mel Collins for the hint! (Closes: #646381) + * test/libapt/run-tests: + - hurd doesn't have dmesg yet and we don't really need it either, + so use with $0 a more stable data source for hashsumming [ Pino Toscano ] * test/libapt/globalerror_test.cc: - errno 0 has a different strerror on hurd, so generate the expected message dynamically instead of hardcoding 'Success' (Closes: #656530) - -- David Kalnischkies Fri, 20 Jan 2012 01:31:30 +0100 + -- David Kalnischkies Fri, 20 Jan 2012 01:43:07 +0100 apt (0.8.16~exp11) experimental; urgency=low diff --git a/test/libapt/run-tests b/test/libapt/run-tests index 5fff4ecca..d4341412d 100755 --- a/test/libapt/run-tests +++ b/test/libapt/run-tests @@ -67,11 +67,9 @@ do "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-st.bak" \ "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-ast_DE" elif [ $name = "HashSums${EXT}" ]; then - TMP="$(mktemp)" - dmesg > $TMP + TMP="$(readlink -f "./${0}")" echo -n "Testing with \033[1;35m${name}\033[0m ... " LD_LIBRARY_PATH=${LDPATH} ${testapp} $TMP $(md5sum $TMP | cut -d' ' -f 1) $(sha1sum $TMP | cut -d' ' -f 1) $(sha256sum $TMP | cut -d' ' -f 1) $(sha512sum $TMP | cut -d' ' -f 1) && echo "\033[1;32mOKAY\033[0m" || echo "\033[1;31mFAILED\033[0m" - rm $TMP continue elif [ $name = "CompareVersion${EXT}" ]; then tmppath="${DIR}/versions.lst" -- cgit v1.2.3-70-g09d2 From 737c7a7b854aa833d75994b67619c5852aa2085d Mon Sep 17 00:00:00 2001 From: Steve Langasek Date: Sun, 29 Jan 2012 13:24:17 +0100 Subject: * cmdline/apt-get.cc: - for cross-build-dependencies M-A: none should be DEB_HOST_ARCH, not DEB_BUILD_ARCH (Closes: #646288) --- cmdline/apt-get.cc | 10 ++- debian/changelog | 9 ++- .../test-bug-632221-cross-dependency-satisfaction | 87 ++++++++++++++++------ 3 files changed, 78 insertions(+), 28 deletions(-) (limited to 'test') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 2d0554e21..32ee46980 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -2863,10 +2863,16 @@ bool DoBuildDep(CommandLine &CmdL) if ((BADVER(Ver)) == false) { string forbidden; - if (Ver->MultiArch == pkgCache::Version::None || Ver->MultiArch == pkgCache::Version::All); + if (Ver->MultiArch == pkgCache::Version::None || Ver->MultiArch == pkgCache::Version::All) + { + if (colon == string::npos) + { + Pkg = Ver.ParentPkg().Group().FindPkg(hostArch); + } + } else if (Ver->MultiArch == pkgCache::Version::Same) { - if (colon != string::npos) + if (colon == string::npos) Pkg = Ver.ParentPkg().Group().FindPkg(hostArch); else if (strcmp(D->Package.c_str() + colon, ":any") == 0) forbidden = "Multi-Arch: same"; diff --git a/debian/changelog b/debian/changelog index e8e659749..c3fadf8bc 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,11 +1,16 @@ -apt (0.8.16~exp12+nmu1) experimental; urgency=low +apt (0.8.16~exp13) UNRELEASED; urgency=low [ David Kalnischkies ] * apt-pkg/deb/dpkgpm.cc: - chroot if needed before dpkg --assert-multi-arch - ensure that dpkg binary doesn't have the chroot-directory prefixed - -- David Kalnischkies Sun, 29 Jan 2012 13:08:58 +0100 + [ Steve Langasek ] + * cmdline/apt-get.cc: + - for cross-build-dependencies M-A: none should be DEB_HOST_ARCH, + not DEB_BUILD_ARCH (Closes: #646288) + + -- David Kalnischkies Sun, 29 Jan 2012 13:14:01 +0100 apt (0.8.16~exp12) experimental; urgency=low diff --git a/test/integration/test-bug-632221-cross-dependency-satisfaction b/test/integration/test-bug-632221-cross-dependency-satisfaction index 4299f052f..30df48604 100755 --- a/test/integration/test-bug-632221-cross-dependency-satisfaction +++ b/test/integration/test-bug-632221-cross-dependency-satisfaction @@ -6,43 +6,51 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture 'amd64' 'armel' -insertinstalledpackage 'build-essential' 'all' '11.5' +insertinstalledpackage 'build-essential' 'all' '11.5' 'Multi-Arch: foreign' -insertpackage 'unstable' 'doxygen' 'amd64,armel' '1.0' +insertpackage 'unstable' 'doxygen' 'amd64,armel' '1.0' 'Multi-Arch: foreign' insertpackage 'unstable' 'libc6' 'amd64,armel' '1.0' 'Multi-Arch: same' insertpackage 'unstable' 'libc6-dev' 'amd64,armel' '1.0' 'Depends: libc6 Multi-Arch: same' +insertpackage 'unstable' 'libfwibble1' 'amd64,armel' '1.0' 'Depends: libc6 +Multi-Arch: same' +insertpackage 'unstable' 'libfwibble-dev' 'amd64,armel' '1.0' 'Depends: libfwibble1' insertpackage 'unstable' 'cool' 'amd64,armel' '1.0' 'Multi-Arch: allowed' insertpackage 'unstable' 'amdboot' 'amd64' '1.0' insertpackage 'unstable' 'foreigner' 'amd64,armel' '1.0' 'Multi-Arch: foreign' -insertsource 'unstable' 'apt' 'any' '0.8.15' 'Build-Depends: doxygen, libc6-dev, libc6-dev:native, cool:any, amdboot:amd64, foreigner' +insertsource 'unstable' 'apt' 'any' '0.8.15' 'Build-Depends: doxygen, libc6-dev, libc6-dev:native, cool:any, amdboot:amd64, foreigner, libfwibble-dev' setupaptarchive testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: - amdboot cool doxygen foreigner libc6 libc6-dev -0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. + amdboot cool doxygen foreigner libc6 libc6-dev libfwibble-dev libfwibble1 +0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded. Inst amdboot (1.0 unstable [amd64]) Inst cool (1.0 unstable [amd64]) Inst doxygen (1.0 unstable [amd64]) Inst foreigner (1.0 unstable [amd64]) Inst libc6 (1.0 unstable [amd64]) Inst libc6-dev (1.0 unstable [amd64]) +Inst libfwibble1 (1.0 unstable [amd64]) +Inst libfwibble-dev (1.0 unstable [amd64]) Conf amdboot (1.0 unstable [amd64]) Conf cool (1.0 unstable [amd64]) Conf doxygen (1.0 unstable [amd64]) Conf foreigner (1.0 unstable [amd64]) Conf libc6 (1.0 unstable [amd64]) -Conf libc6-dev (1.0 unstable [amd64])' aptget build-dep apt -s +Conf libc6-dev (1.0 unstable [amd64]) +Conf libfwibble1 (1.0 unstable [amd64]) +Conf libfwibble-dev (1.0 unstable [amd64])' aptget build-dep apt -s testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: amdboot cool doxygen foreigner libc6 libc6:armel libc6-dev libc6-dev:armel -0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded. + libfwibble-dev:armel libfwibble1:armel +0 upgraded, 10 newly installed, 0 to remove and 0 not upgraded. Inst amdboot (1.0 unstable [amd64]) Inst cool (1.0 unstable [amd64]) Inst doxygen (1.0 unstable [amd64]) @@ -51,6 +59,8 @@ Inst libc6 (1.0 unstable [amd64]) Inst libc6:armel (1.0 unstable [armel]) Inst libc6-dev (1.0 unstable [amd64]) Inst libc6-dev:armel (1.0 unstable [armel]) +Inst libfwibble1:armel (1.0 unstable [armel]) +Inst libfwibble-dev:armel (1.0 unstable [armel]) Conf amdboot (1.0 unstable [amd64]) Conf cool (1.0 unstable [amd64]) Conf doxygen (1.0 unstable [amd64]) @@ -58,34 +68,41 @@ Conf foreigner (1.0 unstable [amd64]) Conf libc6 (1.0 unstable [amd64]) Conf libc6:armel (1.0 unstable [armel]) Conf libc6-dev (1.0 unstable [amd64]) -Conf libc6-dev:armel (1.0 unstable [armel])' aptget build-dep apt -s -a armel +Conf libc6-dev:armel (1.0 unstable [armel]) +Conf libfwibble1:armel (1.0 unstable [armel]) +Conf libfwibble-dev:armel (1.0 unstable [armel])' aptget build-dep apt -s -a armel configarchitecture 'armel' 'amd64' testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: - amdboot:amd64 cool doxygen foreigner libc6 libc6-dev -0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. + amdboot:amd64 cool doxygen foreigner libc6 libc6-dev libfwibble-dev + libfwibble1 +0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded. Inst amdboot:amd64 (1.0 unstable [amd64]) Inst cool (1.0 unstable [armel]) Inst doxygen (1.0 unstable [armel]) Inst foreigner (1.0 unstable [armel]) Inst libc6 (1.0 unstable [armel]) Inst libc6-dev (1.0 unstable [armel]) +Inst libfwibble1 (1.0 unstable [armel]) +Inst libfwibble-dev (1.0 unstable [armel]) Conf amdboot:amd64 (1.0 unstable [amd64]) Conf cool (1.0 unstable [armel]) Conf doxygen (1.0 unstable [armel]) Conf foreigner (1.0 unstable [armel]) Conf libc6 (1.0 unstable [armel]) -Conf libc6-dev (1.0 unstable [armel])' aptget build-dep apt -s +Conf libc6-dev (1.0 unstable [armel]) +Conf libfwibble1 (1.0 unstable [armel]) +Conf libfwibble-dev (1.0 unstable [armel])' aptget build-dep apt -s testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: amdboot:amd64 cool doxygen foreigner libc6:amd64 libc6 libc6-dev:amd64 - libc6-dev -0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded. + libc6-dev libfwibble-dev:amd64 libfwibble1:amd64 +0 upgraded, 10 newly installed, 0 to remove and 0 not upgraded. Inst amdboot:amd64 (1.0 unstable [amd64]) Inst cool (1.0 unstable [armel]) Inst doxygen (1.0 unstable [armel]) @@ -94,6 +111,8 @@ Inst libc6:amd64 (1.0 unstable [amd64]) Inst libc6 (1.0 unstable [armel]) Inst libc6-dev:amd64 (1.0 unstable [amd64]) Inst libc6-dev (1.0 unstable [armel]) +Inst libfwibble1:amd64 (1.0 unstable [amd64]) +Inst libfwibble-dev:amd64 (1.0 unstable [amd64]) Conf amdboot:amd64 (1.0 unstable [amd64]) Conf cool (1.0 unstable [armel]) Conf doxygen (1.0 unstable [armel]) @@ -101,7 +120,9 @@ Conf foreigner (1.0 unstable [armel]) Conf libc6:amd64 (1.0 unstable [amd64]) Conf libc6 (1.0 unstable [armel]) Conf libc6-dev:amd64 (1.0 unstable [amd64]) -Conf libc6-dev (1.0 unstable [armel])' aptget build-dep apt -s -a amd64 +Conf libc6-dev (1.0 unstable [armel]) +Conf libfwibble1:amd64 (1.0 unstable [amd64]) +Conf libfwibble-dev:amd64 (1.0 unstable [amd64])' aptget build-dep apt -s -a amd64 configarchitecture 'amd64' 'armel' @@ -111,34 +132,43 @@ insertinstalledpackage 'foreigner' 'armel' '0.5' testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: - amdboot doxygen libc6 libc6-dev -0 upgraded, 4 newly installed, 0 to remove and 2 not upgraded. + amdboot doxygen libc6 libc6-dev libfwibble-dev libfwibble1 +0 upgraded, 6 newly installed, 0 to remove and 2 not upgraded. Inst amdboot (1.0 unstable [amd64]) Inst doxygen (1.0 unstable [amd64]) Inst libc6 (1.0 unstable [amd64]) Inst libc6-dev (1.0 unstable [amd64]) +Inst libfwibble1 (1.0 unstable [amd64]) +Inst libfwibble-dev (1.0 unstable [amd64]) Conf amdboot (1.0 unstable [amd64]) Conf doxygen (1.0 unstable [amd64]) Conf libc6 (1.0 unstable [amd64]) -Conf libc6-dev (1.0 unstable [amd64])' aptget build-dep apt -s +Conf libc6-dev (1.0 unstable [amd64]) +Conf libfwibble1 (1.0 unstable [amd64]) +Conf libfwibble-dev (1.0 unstable [amd64])' aptget build-dep apt -s testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: amdboot doxygen libc6 libc6:armel libc6-dev libc6-dev:armel -0 upgraded, 6 newly installed, 0 to remove and 2 not upgraded. + libfwibble-dev:armel libfwibble1:armel +0 upgraded, 8 newly installed, 0 to remove and 2 not upgraded. Inst amdboot (1.0 unstable [amd64]) Inst doxygen (1.0 unstable [amd64]) Inst libc6 (1.0 unstable [amd64]) Inst libc6:armel (1.0 unstable [armel]) Inst libc6-dev (1.0 unstable [amd64]) Inst libc6-dev:armel (1.0 unstable [armel]) +Inst libfwibble1:armel (1.0 unstable [armel]) +Inst libfwibble-dev:armel (1.0 unstable [armel]) Conf amdboot (1.0 unstable [amd64]) Conf doxygen (1.0 unstable [amd64]) Conf libc6 (1.0 unstable [amd64]) Conf libc6:armel (1.0 unstable [armel]) Conf libc6-dev (1.0 unstable [amd64]) -Conf libc6-dev:armel (1.0 unstable [armel])' aptget build-dep apt -s -a armel +Conf libc6-dev:armel (1.0 unstable [armel]) +Conf libfwibble1:armel (1.0 unstable [armel]) +Conf libfwibble-dev:armel (1.0 unstable [armel])' aptget build-dep apt -s -a armel configarchitecture 'armel' 'amd64' @@ -148,36 +178,45 @@ Building dependency tree... The following packages will be REMOVED: cool:amd64 The following NEW packages will be installed: - amdboot:amd64 cool doxygen libc6 libc6-dev -0 upgraded, 5 newly installed, 1 to remove and 1 not upgraded. + amdboot:amd64 cool doxygen libc6 libc6-dev libfwibble-dev libfwibble1 +0 upgraded, 7 newly installed, 1 to remove and 1 not upgraded. Remv cool:amd64 [0.5] Inst amdboot:amd64 (1.0 unstable [amd64]) Inst cool (1.0 unstable [armel]) Inst doxygen (1.0 unstable [armel]) Inst libc6 (1.0 unstable [armel]) Inst libc6-dev (1.0 unstable [armel]) +Inst libfwibble1 (1.0 unstable [armel]) +Inst libfwibble-dev (1.0 unstable [armel]) Conf amdboot:amd64 (1.0 unstable [amd64]) Conf cool (1.0 unstable [armel]) Conf doxygen (1.0 unstable [armel]) Conf libc6 (1.0 unstable [armel]) -Conf libc6-dev (1.0 unstable [armel])' aptget build-dep apt -s +Conf libc6-dev (1.0 unstable [armel]) +Conf libfwibble1 (1.0 unstable [armel]) +Conf libfwibble-dev (1.0 unstable [armel])' aptget build-dep apt -s testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: amdboot:amd64 doxygen libc6:amd64 libc6 libc6-dev:amd64 libc6-dev -0 upgraded, 6 newly installed, 0 to remove and 2 not upgraded. + libfwibble-dev:amd64 libfwibble1:amd64 +0 upgraded, 8 newly installed, 0 to remove and 2 not upgraded. Inst amdboot:amd64 (1.0 unstable [amd64]) Inst doxygen (1.0 unstable [armel]) Inst libc6:amd64 (1.0 unstable [amd64]) Inst libc6 (1.0 unstable [armel]) Inst libc6-dev:amd64 (1.0 unstable [amd64]) Inst libc6-dev (1.0 unstable [armel]) +Inst libfwibble1:amd64 (1.0 unstable [amd64]) +Inst libfwibble-dev:amd64 (1.0 unstable [amd64]) Conf amdboot:amd64 (1.0 unstable [amd64]) Conf doxygen (1.0 unstable [armel]) Conf libc6:amd64 (1.0 unstable [amd64]) Conf libc6 (1.0 unstable [armel]) Conf libc6-dev:amd64 (1.0 unstable [amd64]) -Conf libc6-dev (1.0 unstable [armel])' aptget build-dep apt -s -a amd64 +Conf libc6-dev (1.0 unstable [armel]) +Conf libfwibble1:amd64 (1.0 unstable [amd64]) +Conf libfwibble-dev:amd64 (1.0 unstable [amd64])' aptget build-dep apt -s -a amd64 -- cgit v1.2.3-70-g09d2 From 898c29256f034c5f8a06b90e5740b54046acf0e2 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 29 Jan 2012 13:54:40 +0100 Subject: add a very simple testcases for the previous commited fix for Breaks handling in algorithms.cc by Colin Watson --- .../test-bug-657695-resolver-breaks-on-virtuals | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100755 test/integration/test-bug-657695-resolver-breaks-on-virtuals (limited to 'test') diff --git a/test/integration/test-bug-657695-resolver-breaks-on-virtuals b/test/integration/test-bug-657695-resolver-breaks-on-virtuals new file mode 100755 index 000000000..e9b27cfcd --- /dev/null +++ b/test/integration/test-bug-657695-resolver-breaks-on-virtuals @@ -0,0 +1,51 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' + +insertinstalledpackage 'xserver-xorg-core' 'amd64' '2:1.7.6-2ubuntu7.10' +for i in $(seq 1 50); do + insertinstalledpackage "xserver-xorg-video-driver$i" 'amd64' '1.0' 'Provides: xserver-xorg-video-6' +done + +insertpackage 'unstable' 'xserver-xorg-core' 'amd64' '2:1.11.3-0ubuntu9' 'Breaks: xserver-xorg-video-6' + + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + xserver-xorg-video-driver1 xserver-xorg-video-driver10 + xserver-xorg-video-driver11 xserver-xorg-video-driver12 + xserver-xorg-video-driver13 xserver-xorg-video-driver14 + xserver-xorg-video-driver15 xserver-xorg-video-driver16 + xserver-xorg-video-driver17 xserver-xorg-video-driver18 + xserver-xorg-video-driver19 xserver-xorg-video-driver2 + xserver-xorg-video-driver20 xserver-xorg-video-driver21 + xserver-xorg-video-driver22 xserver-xorg-video-driver23 + xserver-xorg-video-driver24 xserver-xorg-video-driver25 + xserver-xorg-video-driver26 xserver-xorg-video-driver27 + xserver-xorg-video-driver28 xserver-xorg-video-driver29 + xserver-xorg-video-driver3 xserver-xorg-video-driver30 + xserver-xorg-video-driver31 xserver-xorg-video-driver32 + xserver-xorg-video-driver33 xserver-xorg-video-driver34 + xserver-xorg-video-driver35 xserver-xorg-video-driver36 + xserver-xorg-video-driver37 xserver-xorg-video-driver38 + xserver-xorg-video-driver39 xserver-xorg-video-driver4 + xserver-xorg-video-driver40 xserver-xorg-video-driver41 + xserver-xorg-video-driver42 xserver-xorg-video-driver43 + xserver-xorg-video-driver44 xserver-xorg-video-driver45 + xserver-xorg-video-driver46 xserver-xorg-video-driver47 + xserver-xorg-video-driver48 xserver-xorg-video-driver49 + xserver-xorg-video-driver5 xserver-xorg-video-driver50 + xserver-xorg-video-driver6 xserver-xorg-video-driver7 + xserver-xorg-video-driver8 xserver-xorg-video-driver9 +The following packages will be upgraded: + xserver-xorg-core +1 upgraded, 0 newly installed, 50 to remove and 0 not upgraded. +After this operation, 2150 kB disk space will be freed. +E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only -- cgit v1.2.3-70-g09d2 From cffabf7d7e3a4c7475bf6722d41e20454d759666 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 29 Jan 2012 13:57:16 +0100 Subject: add the testcase i wrote for revno 2209.1.2, to ensure that breaks on not-installed versions are ignored while searching for breakage loops --- .../test-ordering-ignore-not-matching-breaks | 56 ++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100755 test/integration/test-ordering-ignore-not-matching-breaks (limited to 'test') diff --git a/test/integration/test-ordering-ignore-not-matching-breaks b/test/integration/test-ordering-ignore-not-matching-breaks new file mode 100755 index 000000000..c9fca4edf --- /dev/null +++ b/test/integration/test-ordering-ignore-not-matching-breaks @@ -0,0 +1,56 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'i386' + +insertpackage 'unstable-mp' 'crda' 'i386,amd64' '1.1.1-1ubuntu4mp' 'Provides: wireless-crda +Multi-Arch: foreign' +insertpackage 'unstable-m' 'crda' 'i386,amd64' '1.1.1-1ubuntu4m' 'Multi-Arch: foreign' +insertpackage 'unstable-p' 'crda' 'i386,amd64' '1.1.1-1ubuntu4p' 'Provides: wireless-crda' +insertpackage 'unstable' 'wireless-crda' 'i386,amd64' '1.16' + + +insertinstalledpackage 'wireless-crda' 'amd64' '1.14' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + crda +0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. +Inst crda (1.1.1-1ubuntu4m unstable-m [amd64]) +Conf crda (1.1.1-1ubuntu4m unstable-m [amd64])' aptget install crda -s -t unstable-m + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + crda +0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. +Inst crda (1.1.1-1ubuntu4p unstable-p [amd64]) +Conf crda (1.1.1-1ubuntu4p unstable-p [amd64])' aptget install crda -s -t unstable-p + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + crda +0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. +Inst crda (1.1.1-1ubuntu4mp unstable-mp [amd64]) +Conf crda (1.1.1-1ubuntu4mp unstable-mp [amd64])' aptget install crda -s -t unstable-mp + +rm rootdir/var/lib/dpkg/status +insertinstalledpackage 'crda' 'amd64' '1.1.1-1ubuntu4mp' 'Provides: wireless-crda +Conflicts: wireless-crda (<< 1.15) +Replaces: wireless-crda ( << 1.15) +Multi-arch: foreign' + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + wireless-crda +0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. +Inst wireless-crda (1.16 unstable [amd64]) +Conf wireless-crda (1.16 unstable [amd64])' aptget install wireless-crda -s -t unstable -- cgit v1.2.3-70-g09d2 From 9535a4db891b629dc17354171bce0a0f41e48d4a Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 29 Jan 2012 15:25:02 +0100 Subject: * apt-pkg/depcache.cc: - if a M-A:same package is marked for reinstall, mark all it's installed silbings for reinstallation as well (LP: #859188) --- apt-pkg/depcache.cc | 39 ++++++++++++++++------ debian/changelog | 5 ++- .../test-ubuntu-bug-859188-multiarch-reinstall | 28 ++++++++++++++++ 3 files changed, 60 insertions(+), 12 deletions(-) create mode 100755 test/integration/test-ubuntu-bug-859188-multiarch-reinstall (limited to 'test') diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 085159711..9449c7306 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1240,19 +1240,36 @@ void pkgDepCache::SetReInstall(PkgIterator const &Pkg,bool To) if (unlikely(Pkg.end() == true)) return; + APT::PackageList pkglist; + if (Pkg->CurrentVer != 0 && + (Pkg.CurrentVer()-> MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same) + { + pkgCache::GrpIterator Grp = Pkg.Group(); + for (pkgCache::PkgIterator P = Grp.PackageList(); P.end() == false; P = Grp.NextPkg(P)) + { + if (P->CurrentVer != 0) + pkglist.insert(P); + } + } + else + pkglist.insert(Pkg); + ActionGroup group(*this); - RemoveSizes(Pkg); - RemoveStates(Pkg); - - StateCache &P = PkgState[Pkg->ID]; - if (To == true) - P.iFlags |= ReInstall; - else - P.iFlags &= ~ReInstall; - - AddStates(Pkg); - AddSizes(Pkg); + for (APT::PackageList::const_iterator Pkg = pkglist.begin(); Pkg != pkglist.end(); ++Pkg) + { + RemoveSizes(Pkg); + RemoveStates(Pkg); + + StateCache &P = PkgState[Pkg->ID]; + if (To == true) + P.iFlags |= ReInstall; + else + P.iFlags &= ~ReInstall; + + AddStates(Pkg); + AddSizes(Pkg); + } } /*}}}*/ // DepCache::SetCandidateVersion - Change the candidate version /*{{{*/ diff --git a/debian/changelog b/debian/changelog index 72916f0ed..f1ccaf403 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,9 @@ apt (0.8.16~exp13) UNRELEASED; urgency=low * apt-pkg/deb/dpkgpm.cc: - chroot if needed before dpkg --assert-multi-arch - ensure that dpkg binary doesn't have the chroot-directory prefixed + * apt-pkg/depcache.cc: + - if a M-A:same package is marked for reinstall, mark all it's installed + silbings for reinstallation as well (LP: #859188) [ Steve Langasek ] * cmdline/apt-get.cc: @@ -17,7 +20,7 @@ apt (0.8.16~exp13) UNRELEASED; urgency=low - use a signed int instead of short for score calculation as upgrades become so big now that it can overflow (Closes: #657732, LP: #917173) - -- David Kalnischkies Sun, 29 Jan 2012 14:44:19 +0100 + -- David Kalnischkies Sun, 29 Jan 2012 15:22:50 +0100 apt (0.8.16~exp12) experimental; urgency=low diff --git a/test/integration/test-ubuntu-bug-859188-multiarch-reinstall b/test/integration/test-ubuntu-bug-859188-multiarch-reinstall new file mode 100755 index 000000000..0fdf97485 --- /dev/null +++ b/test/integration/test-ubuntu-bug-859188-multiarch-reinstall @@ -0,0 +1,28 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'i386' 'armel' + +buildsimplenativepackage 'libsame' 'amd64,i386,armel' '1.0' 'unstable' 'Multi-Arch: same' + +# FIXME: hack around dpkg's current inability to handle multiarch, a clean install would be better… +insertinstalledpackage 'libsame' 'amd64,i386' '1.0' 'Multi-Arch: same' +sed -e 's#/installed#/unstable#' -e 's#Installed-Size: 42#Installed-Size: 1#' -i rootdir/var/lib/dpkg/status + +setupaptarchive + +REINSTALL='Reading package lists... +Building dependency tree... +0 upgraded, 0 newly installed, 2 reinstalled, 0 to remove and 0 not upgraded. +Inst libsame [1.0] (1.0 unstable [amd64]) +Inst libsame:i386 [1.0] (1.0 unstable [i386]) +Conf libsame (1.0 unstable [amd64]) +Conf libsame:i386 (1.0 unstable [i386])' + +testequal "$REINSTALL" aptget install --reinstall libsame -s +testequal "$REINSTALL" aptget install --reinstall libsame:amd64 -s +testequal "$REINSTALL" aptget install --reinstall libsame:i386 -s +testequal "$REINSTALL" aptget install --reinstall libsame:amd64 libsame:i386 -s -- cgit v1.2.3-70-g09d2 From 017f9fd68258b15ac4df5ae73b19ba6653711022 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 30 Jan 2012 13:13:29 +0100 Subject: * apt-pkg/contrib/configuration.cc: - do not stop parent transversal in FindDir if the value is empty See http://lists.debian.org/deity/2012/01/msg00053.html , too. --- apt-pkg/contrib/configuration.cc | 10 ++++++++-- debian/changelog | 4 +++- test/libapt/configuration_test.cc | 9 +++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) (limited to 'test') diff --git a/apt-pkg/contrib/configuration.cc b/apt-pkg/contrib/configuration.cc index 0949ec223..36866a35a 100644 --- a/apt-pkg/contrib/configuration.cc +++ b/apt-pkg/contrib/configuration.cc @@ -185,8 +185,14 @@ string Configuration::FindFile(const char *Name,const char *Default) const } string val = Itm->Value; - while (Itm->Parent != 0 && Itm->Parent->Value.empty() == false) - { + while (Itm->Parent != 0) + { + if (Itm->Parent->Value.empty() == true) + { + Itm = Itm->Parent; + continue; + } + // Absolute if (val.length() >= 1 && val[0] == '/') break; diff --git a/debian/changelog b/debian/changelog index f1ccaf403..12abea47d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,6 +7,8 @@ apt (0.8.16~exp13) UNRELEASED; urgency=low * apt-pkg/depcache.cc: - if a M-A:same package is marked for reinstall, mark all it's installed silbings for reinstallation as well (LP: #859188) + * apt-pkg/contrib/configuration.cc: + - do not stop parent transversal in FindDir if the value is empty [ Steve Langasek ] * cmdline/apt-get.cc: @@ -20,7 +22,7 @@ apt (0.8.16~exp13) UNRELEASED; urgency=low - use a signed int instead of short for score calculation as upgrades become so big now that it can overflow (Closes: #657732, LP: #917173) - -- David Kalnischkies Sun, 29 Jan 2012 15:22:50 +0100 + -- David Kalnischkies Mon, 30 Jan 2012 13:07:30 +0100 apt (0.8.16~exp12) experimental; urgency=low diff --git a/test/libapt/configuration_test.cc b/test/libapt/configuration_test.cc index 5b23d17fb..9a3e2c118 100644 --- a/test/libapt/configuration_test.cc +++ b/test/libapt/configuration_test.cc @@ -71,6 +71,15 @@ int main(int argc,const char *argv[]) { equals(Cnf.Find("APT2::Version", "33"), "33"); equals(Cnf.FindI("APT2::Version", 33), 33); + equals(Cnf.FindFile("Dir::State"), ""); + equals(Cnf.FindFile("Dir::Aptitude::State"), ""); + Cnf.Set("Dir", "/srv/sid"); + equals(Cnf.FindFile("Dir::State"), ""); + Cnf.Set("Dir::State", "var/lib/apt"); + Cnf.Set("Dir::Aptitude::State", "var/lib/aptitude"); + equals(Cnf.FindFile("Dir::State"), "/srv/sid/var/lib/apt"); + equals(Cnf.FindFile("Dir::Aptitude::State"), "/srv/sid/var/lib/aptitude"); + //FIXME: Test for configuration file parsing; // currently only integration/ tests test them implicitly -- cgit v1.2.3-70-g09d2 From 53ea1b56efc41e6b1bea6157f01f90ac552db82e Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 10 Feb 2012 15:56:50 +0100 Subject: Fix the testcases to work with and configure dpkg correctly in a multi-arch environment It's not a complete and the "fixed" test is fixed more like a hack as we have communication problems with dpkg if dpkg and APT disagree on the interpretation of the native architecture, see also: http://lists.debian.org/debian-dpkg/2012/02/msg00051.html --- test/integration/framework | 64 ++++++++++++++++------ .../test-bug-612099-multiarch-conflicts | 23 ++++++-- 2 files changed, 64 insertions(+), 23 deletions(-) (limited to 'test') diff --git a/test/integration/framework b/test/integration/framework index d7526a100..9f741877a 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -114,9 +114,9 @@ addtrap() { setupenvironment() { TMPWORKINGDIRECTORY=$(mktemp -d) - local TESTDIR=$(readlink -f $(dirname $0)) + TESTDIRECTORY=$(readlink -f $(dirname $0)) msgninfo "Preparing environment for ${CCMD}$(basename $0)${CINFO} in ${TMPWORKINGDIRECTORY}… " - BUILDDIRECTORY="${TESTDIR}/../../build/bin" + BUILDDIRECTORY="${TESTDIRECTORY}/../../build/bin" test -x "${BUILDDIRECTORY}/apt-get" || msgdie "You need to build tree first" local OLDWORKINGDIRECTORY=$(pwd) addtrap "cd /; rm -rf $TMPWORKINGDIRECTORY; cd $OLDWORKINGDIRECTORY;" @@ -126,25 +126,19 @@ setupenvironment() { mkdir -p etc/apt/apt.conf.d etc/apt/sources.list.d etc/apt/trusted.gpg.d etc/apt/preferences.d mkdir -p var/cache var/lib var/log mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers - local STATUSFILE=$(echo "$(basename $0)" | sed -e 's/^test-/status-/' -e 's/^skip-/status-/') - if [ -f "${TESTDIR}/${STATUSFILE}" ]; then - cp "${TESTDIR}/${STATUSFILE}" var/lib/dpkg/status - else - touch var/lib/dpkg/status - fi touch var/lib/dpkg/available mkdir -p usr/lib/apt ln -s ${BUILDDIRECTORY}/methods usr/lib/apt/methods cd .. local PACKAGESFILE=$(echo "$(basename $0)" | sed -e 's/^test-/Packages-/' -e 's/^skip-/Packages-/') - if [ -f "${TESTDIR}/${PACKAGESFILE}" ]; then - cp "${TESTDIR}/${PACKAGESFILE}" aptarchive/Packages + if [ -f "${TESTDIRECTORY}/${PACKAGESFILE}" ]; then + cp "${TESTDIRECTORY}/${PACKAGESFILE}" aptarchive/Packages fi local SOURCESSFILE=$(echo "$(basename $0)" | sed -e 's/^test-/Sources-/' -e 's/^skip-/Sources-/') - if [ -f "${TESTDIR}/${SOURCESSFILE}" ]; then - cp "${TESTDIR}/${SOURCESSFILE}" aptarchive/Sources + if [ -f "${TESTDIRECTORY}/${SOURCESSFILE}" ]; then + cp "${TESTDIRECTORY}/${SOURCESSFILE}" aptarchive/Sources fi - cp $(find $TESTDIR -name '*.pub' -o -name '*.sec') keys/ + cp $(find $TESTDIRECTORY -name '*.pub' -o -name '*.sec') keys/ ln -s ${TMPWORKINGDIRECTORY}/keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg echo "Dir \"${TMPWORKINGDIRECTORY}/rootdir\";" > aptconfig.conf echo "Dir::state::status \"${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg/status\";" >> aptconfig.conf @@ -156,7 +150,9 @@ setupenvironment() { echo "DPKG::options:: \"--root=${TMPWORKINGDIRECTORY}/rootdir\";" >> aptconfig.conf echo "DPKG::options:: \"--force-not-root\";" >> aptconfig.conf echo "DPKG::options:: \"--force-bad-path\";" >> aptconfig.conf - echo "DPKG::options:: \"--force-architecture\";" >> aptconfig.conf # Added to test multiarch before dpkg is ready for it… + if ! $(which dpkg) --assert-multi-arch; then + echo "DPKG::options:: \"--force-architecture\";" >> aptconfig.conf # Added to test multiarch before dpkg is ready for it… + fi echo "DPKG::options:: \"--log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log\";" >> aptconfig.conf echo 'quiet::NoUpdate "true";' >> aptconfig.conf export LC_ALL=C @@ -177,6 +173,10 @@ getarchitecture() { fi } +getarchitectures() { + echo "$(aptconfig dump | grep APT::Architecture | cut -d'"' -f 2 | sed '/^$/ d' | sort | uniq | tr '\n' ' ')" +} + configarchitecture() { local CONFFILE=rootdir/etc/apt/apt.conf.d/01multiarch.conf rm -f $CONFFILE @@ -186,6 +186,30 @@ configarchitecture() { echo "APT::Architectures:: \"$(getarchitecture $1)\";" >> $CONFFILE shift done + configdpkg +} + +configdpkg() { + if [ ! -e rootdir/var/lib/dpkg/status ]; then + local STATUSFILE=$(echo "$(basename $0)" | sed -e 's/^test-/status-/' -e 's/^skip-/status-/') + if [ -f "${TESTDIRECTORY}/${STATUSFILE}" ]; then + cp "${TESTDIRECTORY}/${STATUSFILE}" rootdir/var/lib/dpkg/status + else + echo -n > rootdir/var/lib/dpkg/status + fi + fi + if $(which dpkg) --assert-multi-arch; then + local ARCHS="$(getarchitectures)" + if echo "$ARCHS" | grep -E -q '[^ ]+ [^ ]+'; then + DPKGARCH="$(dpkg --print-architecture)" + for ARCH in ${ARCHS}; do + if [ "${ARCH}" != "${DPKGARCH}" ]; then dpkg --add-architecture ${ARCH}; fi + done + if [ "0" = "$(dpkg -l dpkg 2> /dev/null | grep '^i' | wc -l)" ]; then + insertinstalledpackage 'dpkg' "all" '1.16.2~wipmultiarch~fake' + fi + fi + fi } setupsimplenativepackage() { @@ -350,7 +374,7 @@ createaptftparchiveconfig() { local ARCHS="$(find pool/ -name '*.deb' | grep -oE '_[a-z0-9-]+\.deb$' | sort | uniq | sed -e '/^_all.deb$/ d' -e 's#^_\([a-z0-9-]*\)\.deb$#\1#' | tr '\n' ' ')" if [ -z "$ARCHS" ]; then # the pool is empty, so we will operate on faked packages - let us use the configured archs - ARCHS="$(aptconfig dump | grep APT::Architecture | cut -d'"' -f 2 | sed '/^$/ d' | sort | uniq | tr '\n' ' ')" + ARCHS="$(getarchitectures)" fi echo -n 'Dir { ArchiveDir "' >> ftparchive.conf @@ -432,7 +456,7 @@ insertpackage() { local ARCHS="" for arch in $(echo "$ARCH" | sed -e 's#,#\n#g' | sed -e "s#^native\$#$(getarchitecture 'native')#"); do if [ "$arch" = "all" ]; then - ARCHS="$(aptconfig dump | grep APT::Architecture | cut -d'"' -f 2 | sed '/^$/ d' | sort | uniq | tr '\n' ' ')" + ARCHS="$(getarchitectures)" else ARCHS="$arch" fi @@ -486,7 +510,8 @@ insertinstalledpackage() { local VERSION="$3" local DEPENDENCIES="$4" local PRIORITY="${5:-optional}" - local FILE="rootdir/var/lib/dpkg/status" + local FILE='rootdir/var/lib/dpkg/status' + local INFO='rootdir/var/lib/dpkg/info' for arch in $(echo "$ARCH" | sed -e 's#,#\n#g' | sed -e "s#^native\$#$(getarchitecture 'native')#"); do echo "Package: $NAME Status: install ok installed @@ -502,6 +527,11 @@ Version: $VERSION" >> $FILE YOU did something horribly wrong! They are autogenerated und used only by testcases for APT and surf no other propose… " >> $FILE + if [ "$(dpkg-query -W --showformat='${Multi-Arch}')" = 'same' ]; then + echo -n > ${INFO}/${NAME}:${arch}.list + else + echo -n > ${INFO}/${NAME}.list + fi done } diff --git a/test/integration/test-bug-612099-multiarch-conflicts b/test/integration/test-bug-612099-multiarch-conflicts index dd9efb785..530012e5d 100755 --- a/test/integration/test-bug-612099-multiarch-conflicts +++ b/test/integration/test-bug-612099-multiarch-conflicts @@ -16,7 +16,7 @@ buildsimplenativepackage 'foobar' 'amd64' '1.0' 'stable' 'Depends: libc6' setupaptarchive aptget install libc6:i386 -t stable -y -qq 2>&1 > /dev/null -testdpkginstalled libc6 +testdpkginstalled libc6:i386 testequal 'Reading package lists... Building dependency tree... Reading state information... @@ -75,8 +75,13 @@ The following packages will be upgraded: 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Inst libc6 [1.0] (2.0 testing [all]) Conf libc6 (2.0 testing [all])' aptget upgrade -t testing -s -aptget upgrade -y -qq 2>&1 > /dev/null -testdpkginstalled libc6 +# FIXME: on amd64 systems this test wouldn't run with a real upgrade +# as APT (here i386) disagree about the native architecture, so +# we fake it here: +#aptget upgrade -y -qq 2>&1 > /dev/null +aptget purge libc6 -y -qq 2>&1 >/dev/null +aptget install libc6:i386 -y -qq 2>&1 >/dev/null +testdpkginstalled libc6:all testequal 'Reading package lists... Building dependency tree... @@ -125,7 +130,7 @@ buildsimplenativepackage 'foobar-same' 'amd64' '1.0' 'stable' 'Depends: libc6-sa setupaptarchive aptget install libc6-same:i386 -t stable -y -qq 2>&1 > /dev/null -testdpkginstalled libc6-same +testdpkginstalled libc6-same:i386 testequal 'Reading package lists... Building dependency tree... @@ -168,8 +173,14 @@ The following packages will be upgraded: 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Inst libc6-same [1.0] (2.0 testing [all]) Conf libc6-same (2.0 testing [all])' aptget upgrade -t testing -s -aptget upgrade -y -qq 2>&1 > /dev/null -testdpkginstalled libc6-same +# FIXME: on amd64 systems this test wouldn't run with a real upgrade +# as APT (here i386) disagree about the native architecture, so +# we fake it here: +#aptget upgrade -y -qq 2>&1 > /dev/null +aptget purge libc6-same -y -qq 2>&1 >/dev/null +aptget install libc6-same:i386 -y -qq 2>&1 >/dev/null +testdpkginstalled libc6-same:all + testequal "Reading package lists... Building dependency tree... -- cgit v1.2.3-70-g09d2 From 5834d7a103cb8b68cd6eb072b4b789ca679a2d71 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 11 Feb 2012 19:46:52 +0100 Subject: fix the hold-testcase as it has problems with 'foreign' operations --- cmdline/apt-mark.cc | 4 +-- ...ages-bug-64141-install-dependencies-for-on-hold | 42 ---------------------- test/integration/framework | 2 +- ...atus-bug-64141-install-dependencies-for-on-hold | 33 ----------------- ...test-bug-64141-install-dependencies-for-on-hold | 20 ++++++++--- 5 files changed, 18 insertions(+), 83 deletions(-) delete mode 100644 test/integration/Packages-bug-64141-install-dependencies-for-on-hold delete mode 100644 test/integration/status-bug-64141-install-dependencies-for-on-hold (limited to 'test') diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc index fa4134a20..ef4331714 100644 --- a/cmdline/apt-mark.cc +++ b/cmdline/apt-mark.cc @@ -280,8 +280,8 @@ bool DoHold(CommandLine &CmdL) if (chrootDir != "/" && chroot(chrootDir.c_str()) != 0) _error->WarningE("getArchitecture", "Couldn't chroot into %s for dpkg --set-selections", chrootDir.c_str()); int const nullfd = open("/dev/null", O_RDONLY); - dup2(nullfd, STDIN_FILENO); - dup2(external[0], STDOUT_FILENO); + dup2(external[0], STDIN_FILENO); + dup2(nullfd, STDOUT_FILENO); dup2(nullfd, STDERR_FILENO); execvp(Args[0], (char**) &Args[0]); _error->WarningE("dpkgGo", "Can't detect if dpkg supports multi-arch!"); diff --git a/test/integration/Packages-bug-64141-install-dependencies-for-on-hold b/test/integration/Packages-bug-64141-install-dependencies-for-on-hold deleted file mode 100644 index 7005fa4f4..000000000 --- a/test/integration/Packages-bug-64141-install-dependencies-for-on-hold +++ /dev/null @@ -1,42 +0,0 @@ -Package: apt -Priority: important -Section: admin -Installed-Size: 6048 -Maintainer: APT Development Team -Architecture: i386 -Version: 0.8.10 -Provides: libapt-pkg4.10 -Depends: libc6 (>= 2.10), libdb4.8 -Breaks: oldcrap -Filename: pool/main/a/apt/apt_0.8.10_i386.deb -Size: 2160758 -MD5sum: 5aa2234f7b91056d430669cddf6e6e50 -Description: Advanced front-end for dpkg - -Package: libc6 -Priority: required -Section: libs -Installed-Size: 9356 -Maintainer: GNU Libc Maintainers -Architecture: i386 -Source: eglibc -Version: 2.11.2-7 -Provides: glibc-2.11-1 -Filename: pool/main/e/eglibc/libc6_2.11.2-7_i386.deb -Size: 3880868 -MD5sum: c48fd2854fc62125824267d086600793 -Description: Embedded GNU C Library: Shared libraries - -Package: libdb4.8 -Priority: standard -Section: libs -Installed-Size: 1488 -Maintainer: Clint Adams -Architecture: i386 -Source: db4.8 -Version: 4.8.30-3 -Depends: libc6 (>= 2.3.6-6~) -Filename: pool/main/d/db4.8/libdb4.8_4.8.30-3_i386.deb -Size: 681988 -MD5sum: 0d58c15898a95436d2ec480aa22693ff -Description: Berkeley v4.8 Database Libraries [runtime] diff --git a/test/integration/framework b/test/integration/framework index 9f741877a..350ee112e 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -166,7 +166,7 @@ getarchitecture() { if [ -n "$ARCH" ]; then echo $ARCH else - dpkg-architecture -qDEB_BUILD_ARCH + dpkg --print-architecture fi else echo $1 diff --git a/test/integration/status-bug-64141-install-dependencies-for-on-hold b/test/integration/status-bug-64141-install-dependencies-for-on-hold deleted file mode 100644 index c82ebd19c..000000000 --- a/test/integration/status-bug-64141-install-dependencies-for-on-hold +++ /dev/null @@ -1,33 +0,0 @@ -Package: apt -Status: install ok installed -Priority: important -Section: admin -Installed-Size: 6048 -Maintainer: APT Development Team -Architecture: i386 -Version: 0.8.9 -Provides: libapt-pkg4.10 -Depends: libc6 (>= 2.3.4) -Description: Advanced front-end for dpkg - -Package: libc6 -Status: install ok installed -Priority: required -Section: libs -Installed-Size: 9356 -Maintainer: GNU Libc Maintainers -Architecture: i386 -Source: eglibc -Version: 2.3.5-7 -Provides: glibc-2.11-1 -Description: Embedded GNU C Library: Shared libraries - -Package: oldcrap -Status: install ok installed -Priority: extra -Section: oldlibs -Installed-Size: 1 -Maintainer: Joe Sixpack -Architecture: all -Version: 1-1 -Description: Old crappy nothing package diff --git a/test/integration/test-bug-64141-install-dependencies-for-on-hold b/test/integration/test-bug-64141-install-dependencies-for-on-hold index 4633ffcc3..e2d206fdd 100755 --- a/test/integration/test-bug-64141-install-dependencies-for-on-hold +++ b/test/integration/test-bug-64141-install-dependencies-for-on-hold @@ -4,7 +4,19 @@ set -e TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework setupenvironment -configarchitecture "i386" +configarchitecture 'native' 'strange-arch' + +insertpackage 'unstable' 'unrelated' 'strange-arch' '1' + +insertinstalledpackage 'apt' 'native' '0.8.9' 'Depends: libc6 (>= 2.3.4)' +insertinstalledpackage 'libc6' 'native' '2.4.1-1' +insertinstalledpackage 'oldcrap' 'all' '1-1' + +insertpackage 'unstable' 'apt' 'native' '0.8.10' 'Depends: libc6 (>= 2.10), libdb4.8 +Breaks: oldcrap' +insertpackage 'unstable' 'libc6' 'native' '2.11.2-7' +insertpackage 'unstable' 'libdb4.8' 'native' '4.8.30-3' + setupaptarchive testequal 'Reading package lists... @@ -16,11 +28,10 @@ The following NEW packages will be installed: The following packages will be upgraded: apt libc6 2 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. -Need to get 0 B/6724 kB of archives. -After this operation, 1523 kB of additional disk space will be used. +After this operation, 0 B of additional disk space will be used. E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only -echo 'apt hold' | dpkg --set-selections +aptmark hold apt -qq testequal 'Reading package lists... Building dependency tree... @@ -29,6 +40,5 @@ The following packages have been kept back: The following packages will be upgraded: libc6 1 upgraded, 0 newly installed, 0 to remove and 1 not upgraded. -Need to get 0 B/3881 kB of archives. After this operation, 0 B of additional disk space will be used. E: Trivial Only specified but this is not a trivial operation.' aptget dist-upgrade --trivial-only -o Test='hold-back-apt' -- cgit v1.2.3-70-g09d2 From 8e3900d0d7efc11d538b944ed1d9e4e3d5286ff6 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 18 Feb 2012 19:40:13 +0100 Subject: * apt-pkg/acquire-item.cc: - drop support for i18n/Index file (introduced in 0.8.11) and use the Release file instead to get the Translations (Closes: #649314) * ftparchive/writer.cc: - add 'Translation-*' to the default patterns i18n/Index was never used outside debian - and even here it isn't used consistently as only 'main' has such a file. As the Release file now includes the Translation-* files we therefore drop support for i18n/Index. A version supporting it was never part of a debian release and still supporting it would mean that we get 99% of the time a 404 as response to the request anyway and confuse archive maintainers who want to provide all files APT tries to acquire. --- apt-pkg/acquire-item.cc | 67 +++++++--------------- apt-pkg/deb/debmetaindex.cc | 36 ++++-------- debian/changelog | 7 ++- ftparchive/writer.cc | 1 + test/integration/framework | 3 - .../test-bug-624218-Translation-file-handling | 9 +-- 6 files changed, 39 insertions(+), 84 deletions(-) (limited to 'test') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index f231c42b4..ca40b0bd7 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -189,14 +189,14 @@ void pkgAcquire::Item::ReportMirrorFailure(string FailCode) /*}}}*/ // AcqSubIndex::AcqSubIndex - Constructor /*{{{*/ // --------------------------------------------------------------------- -/* Get the Index file first and see if there are languages available - * If so, create a pkgAcqIndexTrans for the found language(s). - */ +/* Get a sub-index file based on checksums from a 'master' file and + possibly query additional files */ pkgAcqSubIndex::pkgAcqSubIndex(pkgAcquire *Owner, string const &URI, string const &URIDesc, string const &ShortDesc, HashString const &ExpectedHash) : Item(Owner), ExpectedHash(ExpectedHash) { + /* XXX: Beware: Currently this class does nothing (of value) anymore ! */ Debug = _config->FindB("Debug::pkgAcquire::SubIndex",false); DestFile = _config->FindDir("Dir::State::lists") + "partial/"; @@ -236,17 +236,7 @@ void pkgAcqSubIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) /*{{{* Status = StatDone; Dequeue(); - // No good Index is provided, so try guessing - std::vector langs = APT::Configuration::getLanguages(true); - for (std::vector::const_iterator l = langs.begin(); - l != langs.end(); ++l) - { - if (*l == "none") continue; - string const file = "Translation-" + *l; - new pkgAcqIndexTrans(Owner, Desc.URI.substr(0, Desc.URI.rfind('/')+1).append(file), - Desc.Description.erase(Desc.Description.rfind(' ')+1).append(file), - file); - } + // No good Index is provided } /*}}}*/ void pkgAcqSubIndex::Done(string Message,unsigned long long Size,string Md5Hash, /*{{{*/ @@ -305,38 +295,7 @@ bool pkgAcqSubIndex::ParseIndex(string const &IndexFile) /*{{{*/ indexRecords SubIndexParser; if (FileExists(IndexFile) == false || SubIndexParser.Load(IndexFile) == false) return false; - - std::vector lang = APT::Configuration::getLanguages(true); - for (std::vector::const_iterator l = lang.begin(); - l != lang.end(); ++l) - { - if (*l == "none") - continue; - - string file = "Translation-" + *l; - indexRecords::checkSum const *Record = SubIndexParser.Lookup(file); - HashString expected; - if (Record == NULL) - { - // FIXME: the Index file provided by debian currently only includes bz2 records - Record = SubIndexParser.Lookup(file + ".bz2"); - if (Record == NULL) - continue; - } - else - { - expected = Record->Hash; - if (expected.empty() == true) - continue; - } - - IndexTarget target; - target.Description = Desc.Description.erase(Desc.Description.rfind(' ')+1).append(file); - target.MetaKey = file; - target.ShortDesc = file; - target.URI = Desc.URI.substr(0, Desc.URI.rfind('/')+1).append(file); - new pkgAcqIndexTrans(Owner, &target, expected, &SubIndexParser); - } + // so something with the downloaded index return true; } /*}}}*/ @@ -1385,6 +1344,18 @@ void pkgAcqMetaIndex::QueueIndexes(bool verify) /*{{{*/ return; } #endif + bool transInRelease = false; + { + std::vector const keys = MetaIndexParser->MetaKeys(); + for (std::vector::const_iterator k = keys.begin(); k != keys.end(); ++k) + // FIXME: Feels wrong to check for hardcoded string here, but what should we do else… + if (k->find("Translation-") != std::string::npos) + { + transInRelease = true; + break; + } + } + for (vector ::const_iterator Target = IndexTargets->begin(); Target != IndexTargets->end(); ++Target) @@ -1422,8 +1393,10 @@ void pkgAcqMetaIndex::QueueIndexes(bool verify) /*{{{*/ if ((*Target)->IsSubIndex() == true) new pkgAcqSubIndex(Owner, (*Target)->URI, (*Target)->Description, (*Target)->ShortDesc, ExpectedIndexHash); - else + else if (transInRelease == false || MetaIndexParser->Exists((*Target)->MetaKey) == true) + { new pkgAcqIndexTrans(Owner, *Target, ExpectedIndexHash, MetaIndexParser); + } continue; } diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc index 5d3a80aa5..bcc617da7 100644 --- a/apt-pkg/deb/debmetaindex.cc +++ b/apt-pkg/deb/debmetaindex.cc @@ -128,7 +128,7 @@ string debReleaseIndex::TranslationIndexURISuffix(const char *Type, const string { string Res =""; if (Dist[Dist.size() - 1] != '/') - Res += Section + "/i18n/"; + Res += Section + "/i18n/Translation-"; return Res + Type; } @@ -210,31 +210,17 @@ vector * debReleaseIndex::ComputeIndexTargets() const { if (lang.empty() == true) return IndexTargets; - // get the Translations: - // - if its a dists-style repository get the i18n/Index first - // - if its flat try to acquire files by guessing - if (Dist[Dist.size() - 1] == '/') { - for (std::set::const_iterator s = sections.begin(); - s != sections.end(); ++s) { - for (std::vector::const_iterator l = lang.begin(); - l != lang.end(); ++l) { - IndexTarget * Target = new OptionalIndexTarget(); - Target->ShortDesc = "Translation-" + *l; - Target->MetaKey = TranslationIndexURISuffix(l->c_str(), *s); - Target->URI = TranslationIndexURI(l->c_str(), *s); - Target->Description = Info (Target->ShortDesc.c_str(), *s); - IndexTargets->push_back(Target); - } - } - } else { - for (std::set::const_iterator s = sections.begin(); - s != sections.end(); ++s) { - IndexTarget * Target = new OptionalSubIndexTarget(); - Target->ShortDesc = "TranslationIndex"; - Target->MetaKey = TranslationIndexURISuffix("Index", *s); - Target->URI = TranslationIndexURI("Index", *s); + // get the Translation-* files, later we will skip download of non-existent if we have an index + for (std::set::const_iterator s = sections.begin(); + s != sections.end(); ++s) { + for (std::vector::const_iterator l = lang.begin(); + l != lang.end(); ++l) { + IndexTarget * Target = new OptionalIndexTarget(); + Target->ShortDesc = "Translation-" + *l; + Target->MetaKey = TranslationIndexURISuffix(l->c_str(), *s); + Target->URI = TranslationIndexURI(l->c_str(), *s); Target->Description = Info (Target->ShortDesc.c_str(), *s); - IndexTargets->push_back (Target); + IndexTargets->push_back(Target); } } diff --git a/debian/changelog b/debian/changelog index 7461e9a25..35a476d5f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -27,6 +27,11 @@ apt (0.8.16~exp13) UNRELEASED; urgency=low - clean up lost atomic cachefiles with 'clean' (Closes: #650513) * apt-pkg/indexrecords.cc: - do not create empty Entries as a sideeffect of Lookup() + * apt-pkg/acquire-item.cc: + - drop support for i18n/Index file (introduced in 0.8.11) and use + the Release file instead to get the Translations (Closes: #649314) + * ftparchive/writer.cc: + - add 'Translation-*' to the default patterns [ Steve Langasek ] * cmdline/apt-get.cc: @@ -49,7 +54,7 @@ apt (0.8.16~exp13) UNRELEASED; urgency=low * apt-pkg/contrib/fileutl.h: - fix compat with FileFd::OpenDescriptor() in ReadOnlyGzip mode - -- David Kalnischkies Sat, 18 Feb 2012 18:22:14 +0100 + -- David Kalnischkies Sat, 18 Feb 2012 19:23:42 +0100 apt (0.8.16~exp12) experimental; urgency=low diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc index 159772991..d02919969 100644 --- a/ftparchive/writer.cc +++ b/ftparchive/writer.cc @@ -941,6 +941,7 @@ ReleaseWriter::ReleaseWriter(string const &DB) AddPattern("Packages.bz2"); AddPattern("Packages.lzma"); AddPattern("Packages.xz"); + AddPattern("Translation-*"); AddPattern("Sources"); AddPattern("Sources.gz"); AddPattern("Sources.bz2"); diff --git a/test/integration/framework b/test/integration/framework index 350ee112e..99088b59b 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -572,9 +572,6 @@ generatereleasefiles() { # both should be given in notation date/touch can understand msgninfo "\tGenerate Release files… " if [ -e aptarchive/dists ]; then - for dir in $(find ./aptarchive/dists -mindepth 3 -maxdepth 3 -type d -name 'i18n'); do - aptftparchive -qq release $dir -o APT::FTPArchive::Release::Patterns::='Translation-*' > $dir/Index - done for dir in $(find ./aptarchive/dists -mindepth 1 -maxdepth 1 -type d); do local SUITE="$(echo "$dir" | cut -d'/' -f 4)" local CODENAME="$(getcodenamefromsuite $SUITE)" diff --git a/test/integration/test-bug-624218-Translation-file-handling b/test/integration/test-bug-624218-Translation-file-handling index a1e708d2e..d146b943c 100755 --- a/test/integration/test-bug-624218-Translation-file-handling +++ b/test/integration/test-bug-624218-Translation-file-handling @@ -42,16 +42,9 @@ msgtest 'Download of nothing if none is forced' 'with Index' aptget update -o Acquire::Languages=none | grep -q -e 'Translation' && msgfail || msgpass rm -rf rootdir/var/lib/apt/lists -sed -i '/i18n\/Index$/ d' $(find aptarchive -name 'Release') +sed -i '/i18n\/Translation-.*$/ d' $(find aptarchive -name 'Release') signreleasefiles -# we have to try as not every archive includes the i18n Index in the Release file - if it has one at all -msgtest 'Download no Translation- if forced language is non-existent' 'with not-announced Index' -aptget update -o Acquire::Languages=ast_DE | grep -q -e 'Translation-' && msgfail || msgpass -rm -rf rootdir/var/lib/apt/lists - -find aptarchive -name 'Index' -delete - msgtest 'Download of en as forced language' 'without Index' aptget update -o Acquire::Languages=en | grep -q -e 'Translation-en ' && msgpass || msgfail rm -rf rootdir/var/lib/apt/lists -- cgit v1.2.3-70-g09d2 From 0c73b84b001028338c0862c045c0cc4e6b191fcb Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 18 Feb 2012 20:44:31 +0100 Subject: * cmdline/apt-get.cc: - if a package can't be removed as it is not installed, suggest to the user an (installed) multiarch silbing with 'Did you mean?' --- cmdline/apt-get.cc | 18 +++++- debian/changelog | 5 +- .../test-suggest-installed-multiarch-silbing | 66 ++++++++++++++++++++++ 3 files changed, 87 insertions(+), 2 deletions(-) create mode 100755 test/integration/test-suggest-installed-multiarch-silbing (limited to 'test') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 32ee46980..42a3929d6 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -904,7 +904,23 @@ struct TryToRemove { if ((Pkg->CurrentVer == 0 && PurgePkgs == false) || (PurgePkgs == true && Pkg->CurrentState == pkgCache::State::NotInstalled)) { - ioprintf(c1out,_("Package %s is not installed, so not removed\n"),Pkg.FullName(true).c_str()); + pkgCache::GrpIterator Grp = Pkg.Group(); + pkgCache::PkgIterator P = Grp.PackageList(); + for (; P.end() != true; P = Grp.NextPkg(P)) + { + if (P == Pkg) + continue; + if (P->CurrentVer != 0 || (PurgePkgs == true && P->CurrentState != pkgCache::State::NotInstalled)) + { + // TRANSLATORS: Note, this is not an interactive question + ioprintf(c1out,_("Package '%s' is not installed, so not removed. Did you mean '%s'?\n"), + Pkg.FullName(true).c_str(), P.FullName(true).c_str()); + break; + } + } + if (P.end() == true) + ioprintf(c1out,_("Package '%s' is not installed, so not removed\n"),Pkg.FullName(true).c_str()); + // MarkInstall refuses to install packages on hold Pkg->SelectedState = pkgCache::State::Hold; } diff --git a/debian/changelog b/debian/changelog index 9e23311b6..d06e48dbb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -33,6 +33,9 @@ apt (0.8.16~exp13) UNRELEASED; urgency=low - use pdiff for Translation-* files if available (Closes: #657902) * ftparchive/writer.cc: - add 'Translation-*' to the default patterns + * cmdline/apt-get.cc: + - if a package can't be removed as it is not installed, suggest to + the user an (installed) multiarch silbing with 'Did you mean?' [ Steve Langasek ] * cmdline/apt-get.cc: @@ -55,7 +58,7 @@ apt (0.8.16~exp13) UNRELEASED; urgency=low * apt-pkg/contrib/fileutl.h: - fix compat with FileFd::OpenDescriptor() in ReadOnlyGzip mode - -- David Kalnischkies Sat, 18 Feb 2012 19:44:16 +0100 + -- David Kalnischkies Sat, 18 Feb 2012 20:41:32 +0100 apt (0.8.16~exp12) experimental; urgency=low diff --git a/test/integration/test-suggest-installed-multiarch-silbing b/test/integration/test-suggest-installed-multiarch-silbing new file mode 100755 index 000000000..ca6d7bd2e --- /dev/null +++ b/test/integration/test-suggest-installed-multiarch-silbing @@ -0,0 +1,66 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'i386' 'armel' + +insertinstalledpackage 'foo' 'i386' '1' +insertpackage 'unstable' 'foo' 'amd64,i386' '1' + +insertinstalledpackage 'foo2' 'i386' '1' +insertpackage 'unstable' 'foo2' 'i386' '1' + +insertinstalledpackage 'foo3' 'amd64' '1' +insertpackage 'unstable' 'foo3' 'amd64,i386' '1' + +insertinstalledpackage 'samefoo' 'i386,amd64' '1' 'Multi-Arch: same' +insertpackage 'unstable' 'samefoo' 'amd64,i386,armel' '1' 'Multi-Arch: same' + +insertinstalledpackage 'samefoo2' 'i386' '1' 'Multi-Arch: same' +insertpackage 'unstable' 'samefoo2' 'amd64,i386,armel' '1' 'Multi-Arch: same' + +setupaptarchive + +testequal "Reading package lists... +Building dependency tree... +Package 'foo' is not installed, so not removed. Did you mean 'foo:i386'? +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove foo -s + +testequal "Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + foo2:i386 +0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. +Remv foo2:i386 [1]" aptget remove foo2 -s + +testequal "Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + foo3 +0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. +Remv foo3 [1]" aptget remove foo3 -s + +testequal "Reading package lists... +Building dependency tree... +Package 'foo3:i386' is not installed, so not removed. Did you mean 'foo3'? +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove foo3:i386 -s + +testequalor2 "Reading package lists... +Building dependency tree... +Package 'samefoo:armel' is not installed, so not removed. Did you mean 'samefoo'? +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." "Reading package lists... +Building dependency tree... +Package 'samefoo:armel' is not installed, so not removed. Did you mean 'samefoo:i386'? +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove samefoo:armel -s + +testequal "Reading package lists... +Building dependency tree... +Package 'samefoo2' is not installed, so not removed. Did you mean 'samefoo2:i386'? +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove samefoo2 -s + +testequal "Reading package lists... +Building dependency tree... +Package 'samefoo2:armel' is not installed, so not removed. Did you mean 'samefoo2:i386'? +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove samefoo2:armel -s -- cgit v1.2.3-70-g09d2 From ca5e41fdced7a5566b07dfc2d6adc67d74fa2d93 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 18 Feb 2012 21:20:57 +0100 Subject: improve 'error' message for packages which are only referenced e.g. in a Depends line and are now requested for removal --- cmdline/apt-get.cc | 31 ++++++++++++++++++---- debian/changelog | 4 ++- .../test-suggest-installed-multiarch-silbing | 14 ++++++++++ 3 files changed, 43 insertions(+), 6 deletions(-) (limited to 'test') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 42a3929d6..f4ad75d1c 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -713,11 +713,32 @@ public: } virtual pkgCache::VerIterator canNotFindNewestVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) { - APT::VersionSet const verset = tryVirtualPackage(Cache, Pkg, APT::VersionSet::NEWEST); - if (verset.empty() == false) - return *(verset.begin()); - if (ShowError == true) - ioprintf(out, _("Virtual packages like '%s' can't be removed\n"), Pkg.FullName(true).c_str()); + if (Pkg->ProvidesList != 0) + { + APT::VersionSet const verset = tryVirtualPackage(Cache, Pkg, APT::VersionSet::NEWEST); + if (verset.empty() == false) + return *(verset.begin()); + if (ShowError == true) + ioprintf(out, _("Virtual packages like '%s' can't be removed\n"), Pkg.FullName(true).c_str()); + } + else + { + pkgCache::GrpIterator Grp = Pkg.Group(); + pkgCache::PkgIterator P = Grp.PackageList(); + for (; P.end() != true; P = Grp.NextPkg(P)) + { + if (P == Pkg) + continue; + if (P->CurrentVer != 0) { + // TRANSLATORS: Note, this is not an interactive question + ioprintf(c1out,_("Package '%s' is not installed, so not removed. Did you mean '%s'?\n"), + Pkg.FullName(true).c_str(), P.FullName(true).c_str()); + break; + } + } + if (P.end() == true) + ioprintf(c1out,_("Package '%s' is not installed, so not removed\n"),Pkg.FullName(true).c_str()); + } return pkgCache::VerIterator(Cache, 0); } diff --git a/debian/changelog b/debian/changelog index d06e48dbb..b62bd3aef 100644 --- a/debian/changelog +++ b/debian/changelog @@ -36,6 +36,8 @@ apt (0.8.16~exp13) UNRELEASED; urgency=low * cmdline/apt-get.cc: - if a package can't be removed as it is not installed, suggest to the user an (installed) multiarch silbing with 'Did you mean?' + - improve 'error' message for packages which are only referenced + e.g. in a Depends line and are now requested for removal [ Steve Langasek ] * cmdline/apt-get.cc: @@ -58,7 +60,7 @@ apt (0.8.16~exp13) UNRELEASED; urgency=low * apt-pkg/contrib/fileutl.h: - fix compat with FileFd::OpenDescriptor() in ReadOnlyGzip mode - -- David Kalnischkies Sat, 18 Feb 2012 20:41:32 +0100 + -- David Kalnischkies Sat, 18 Feb 2012 21:19:25 +0100 apt (0.8.16~exp12) experimental; urgency=low diff --git a/test/integration/test-suggest-installed-multiarch-silbing b/test/integration/test-suggest-installed-multiarch-silbing index ca6d7bd2e..d55d250aa 100755 --- a/test/integration/test-suggest-installed-multiarch-silbing +++ b/test/integration/test-suggest-installed-multiarch-silbing @@ -21,6 +21,10 @@ insertpackage 'unstable' 'samefoo' 'amd64,i386,armel' '1' 'Multi-Arch: same' insertinstalledpackage 'samefoo2' 'i386' '1' 'Multi-Arch: same' insertpackage 'unstable' 'samefoo2' 'amd64,i386,armel' '1' 'Multi-Arch: same' +insertinstalledpackage 'mozplugger' 'i386' '1' 'Depends: iceweasel | fireweasel' +insertinstalledpackage 'fireweasel' 'i386' '1' +insertpackage 'unstable' 'mozplugger' 'i386,amd64' '1' 'Depends: iceweasel | fireweasel' + setupaptarchive testequal "Reading package lists... @@ -64,3 +68,13 @@ testequal "Reading package lists... Building dependency tree... Package 'samefoo2:armel' is not installed, so not removed. Did you mean 'samefoo2:i386'? 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove samefoo2:armel -s + +testequal "Reading package lists... +Building dependency tree... +Package 'iceweasel' is not installed, so not removed +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove iceweasel -s + +testequal "Reading package lists... +Building dependency tree... +Package 'fireweasel' is not installed, so not removed. Did you mean 'fireweasel:i386'? +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget remove fireweasel:amd64 -s -- cgit v1.2.3-70-g09d2 From c2ef3ce3748cc31e3431d3beb00153546a5e50c0 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 27 Feb 2012 12:51:31 +0100 Subject: fix the string in the testcases --- test/integration/test-bug-549968-install-depends-of-not-installed | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'test') diff --git a/test/integration/test-bug-549968-install-depends-of-not-installed b/test/integration/test-bug-549968-install-depends-of-not-installed index 78c0801f2..8c434b3ce 100755 --- a/test/integration/test-bug-549968-install-depends-of-not-installed +++ b/test/integration/test-bug-549968-install-depends-of-not-installed @@ -14,13 +14,13 @@ setupaptarchive # We check the Markers here as the autoremove nuker will also # prevent it, but to late - its better to fail earlier -testequal 'Reading package lists... +testequal "Reading package lists... Building dependency tree... MarkInstall coolstuff [ i386 ] < none -> 1.0 > ( other ) FU=1 Ignore MarkInstall of extracoolstuff [ i386 ] < none -> 1.0 > ( other ) as its mode (Keep) is protected -Package extracoolstuff is not installed, so not removed +Package 'extracoolstuff' is not installed, so not removed The following NEW packages will be installed: coolstuff 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Inst coolstuff (1.0 unstable [all]) -Conf coolstuff (1.0 unstable [all])' aptget install coolstuff extracoolstuff- -o Debug::pkgDepCache::Marker=1 -s +Conf coolstuff (1.0 unstable [all])" aptget install coolstuff extracoolstuff- -o Debug::pkgDepCache::Marker=1 -s -- cgit v1.2.3-70-g09d2 From d73840dc51fe0762e0d170c47e07e13211a0de95 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 3 Mar 2012 11:40:22 +0100 Subject: allow msgtest to be used with only one parameter --- test/integration/framework | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/integration/framework b/test/integration/framework index 99088b59b..a738d27cc 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -29,7 +29,8 @@ msgtest() { while [ -n "$1" ]; do echo -n "${CINFO}$1${CCMD} " >&2; echo -n "$(echo "$2" | sed -e 's/^aptc/apt-c/' -e 's/^aptg/apt-g/' -e 's/^aptf/apt-f/')${CINFO} " >&2; - shift 2 + shift + if [ -n "$1" ]; then shift; else break; fi done echo -n "…${CNORMAL} " >&2; } -- cgit v1.2.3-70-g09d2 From 440d3d654a5f85e8b5c0472e91f425fbac9541b8 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 3 Mar 2012 11:43:21 +0100 Subject: * apt-pkg/packagemanager.cc: - do not try to a void a breaks if the broken package pre-depends on the breaker, but let dpkg auto-deconfigure it --- apt-pkg/packagemanager.cc | 52 +++++++++++++++++----- debian/changelog | 5 ++- .../skip-avoid-avoiding-breaks-predepends | 21 +++++++++ 3 files changed, 65 insertions(+), 13 deletions(-) create mode 100755 test/integration/skip-avoid-avoiding-breaks-predepends (limited to 'test') diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index 2738a8a6b..05eb1a06b 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -680,7 +680,6 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c { VerIterator Ver(Cache,*I); PkgIterator BrokenPkg = Ver.ParentPkg(); - VerIterator InstallVer(Cache,Cache[BrokenPkg].InstallVer); if (BrokenPkg.CurrentVer() != Ver) { if (Debug) @@ -695,20 +694,49 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c // This dependancy has already been dealt with by another SmartUnPack on Pkg break; } else { - // Found a break, so unpack the package, + // Found a break, so see if we can unpack the package to avoid it // but do not set loop if another SmartUnPack already deals with it - if (Debug) + VerIterator InstallVer(Cache,Cache[BrokenPkg].InstallVer); + bool circle = false; + for (pkgCache::DepIterator D = InstallVer.DependsList(); D.end() == false; ++D) + { + if (D->Type != pkgCache::Dep::PreDepends) + continue; + SPtrArray VL = D.AllTargets(); + for (Version **I = VL; *I != 0; ++I) + { + VerIterator V(Cache,*I); + PkgIterator P = V.ParentPkg(); + // we are checking for installation as an easy 'protection' against or-groups and (unchosen) providers + if (P->CurrentVer == 0 || P != Pkg || (P.CurrentVer() != V && Cache[P].InstallVer != V)) + continue; + circle = true; + break; + } + if (circle == true) + break; + } + if (circle == true) + { + if (Debug) + cout << OutputInDepth(Depth) << " Avoiding " << End << " avoided as " << BrokenPkg.FullName() << " has a pre-depends on " << Pkg.FullName() << std::endl; + continue; + } + else { - cout << OutputInDepth(Depth) << " Unpacking " << BrokenPkg.Name() << " to avoid " << End; - if (PkgLoop == true) - cout << " (Looping)"; - cout << std::endl; + if (Debug) + { + cout << OutputInDepth(Depth) << " Unpacking " << BrokenPkg.FullName() << " to avoid " << End; + if (PkgLoop == true) + cout << " (Looping)"; + cout << std::endl; + } + if (PkgLoop == false) + List->Flag(Pkg,pkgOrderList::Loop); + SmartUnPack(BrokenPkg, false, Depth + 1); + if (PkgLoop == false) + List->RmFlag(Pkg,pkgOrderList::Loop); } - if (PkgLoop == false) - List->Flag(Pkg,pkgOrderList::Loop); - SmartUnPack(BrokenPkg, false, Depth + 1); - if (PkgLoop == false) - List->RmFlag(Pkg,pkgOrderList::Loop); } } else { // Check if a package needs to be removed diff --git a/debian/changelog b/debian/changelog index 07878af36..6cd2e70a7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -40,6 +40,9 @@ apt (0.8.16~exp13) UNRELEASED; urgency=low e.g. in a Depends line and are now requested for removal * cmdline/apt-cache.cc: - correct --pre-depends option by using dash consistently (LP: #940837) + * apt-pkg/packagemanager.cc: + - do not try to a void a breaks if the broken package pre-depends + on the breaker, but let dpkg auto-deconfigure it [ Steve Langasek ] * cmdline/apt-get.cc: @@ -62,7 +65,7 @@ apt (0.8.16~exp13) UNRELEASED; urgency=low * apt-pkg/contrib/fileutl.h: - fix compat with FileFd::OpenDescriptor() in ReadOnlyGzip mode - -- David Kalnischkies Sat, 25 Feb 2012 19:43:04 +0100 + -- David Kalnischkies Sat, 03 Mar 2012 11:03:58 +0100 apt (0.8.16~exp12) experimental; urgency=low diff --git a/test/integration/skip-avoid-avoiding-breaks-predepends b/test/integration/skip-avoid-avoiding-breaks-predepends new file mode 100755 index 000000000..a47e8bc2b --- /dev/null +++ b/test/integration/skip-avoid-avoiding-breaks-predepends @@ -0,0 +1,21 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'native' + +insertinstalledpackage 'looping' 'native' '1' +insertinstalledpackage 'loop1' 'native' '1' 'Depends: loop2 (= 1)' +insertinstalledpackage 'loop2' 'native' '1' 'Depends: loop1 (= 1)' + +buildsimplenativepackage 'looping' 'native' '1.15.7.2' 'stable' 'Breaks: loop2 (<= 1)' +buildsimplenativepackage 'loop1' 'native' '2' 'stable' 'Depends: loop2 (= 2)' +buildsimplenativepackage 'loop2' 'native' '2' 'stable' 'Depends: loop1 (= 2) +Pre-Depends: looping (>= 1.15)' + +setupaptarchive + +aptget dist-upgrade -y -o Debug::pkgOrderList=1 #-qq 2>&1 > /dev/null +testdpkginstalled looping loop1 loop2 -- cgit v1.2.3-70-g09d2 From 43c1ca5d1eb8101e3a52d19a2175c14817e6dd14 Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Sat, 3 Mar 2012 11:44:06 +0100 Subject: testcase for CVE-2012-0214 --- test/integration/test-releasefile-verification | 29 ++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'test') diff --git a/test/integration/test-releasefile-verification b/test/integration/test-releasefile-verification index 8bf02a78f..4f65cfa3b 100755 --- a/test/integration/test-releasefile-verification +++ b/test/integration/test-releasefile-verification @@ -153,6 +153,35 @@ runtest() { installaptold } +runtest2() { + prepare ${PKGFILE} + rm -rf rootdir/var/lib/apt/lists + signreleasefiles 'Joe Sixpack' + msgtest 'Cold archive signed by' 'Joe Sixpack' + aptget update 2>&1 | grep -E '^(W|E): ' > /dev/null && msgfail || msgpass + + # New .deb but now an unsigned archive. For example MITM to circumvent + # package verification. + prepare ${PKGFILE}-new + find aptarchive/ -name InRelease -delete + find aptarchive/ -name Release.gpg -delete + msgtest 'Warm archive signed by' 'nobody' + aptget update 2>&1 | grep -E '^(W|E): ' > /dev/null && msgfail || msgpass + testequal "$(cat ${PKGFILE}-new) +" aptcache show apt + failaptnew + + # Unsigned archive from the beginning must also be detected. + rm -rf rootdir/var/lib/apt/lists + msgtest 'Cold archive signed by' 'nobody' + aptget update 2>&1 | grep -E '^(W|E): ' > /dev/null && msgfail || msgpass + testequal "$(cat ${PKGFILE}-new) +" aptcache show apt + failaptnew +} +runtest2 + + DELETEFILE="InRelease" runtest DELETEFILE="Release.gpg" -- cgit v1.2.3-70-g09d2 From a02f0c29d9dcda7a1973e52db032c1eb50f11ed2 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 12 Mar 2012 19:02:57 +0100 Subject: now that the package name 'apt' is a magic word enabling essential status for said package i can't use it anymore in the testcase, so use another name --- test/integration/test-pin-non-existent-package | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'test') diff --git a/test/integration/test-pin-non-existent-package b/test/integration/test-pin-non-existent-package index c91e77844..35de22115 100755 --- a/test/integration/test-pin-non-existent-package +++ b/test/integration/test-pin-non-existent-package @@ -6,7 +6,7 @@ TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture "i386" -insertpackage 'unstable' 'apt' 'i386' '0.8.15' +insertpackage 'unstable' 'rapt' 'i386' '0.8.15' insertpackage 'unstable' 'arch' 'i386' '1.0' setupaptarchive @@ -22,40 +22,40 @@ testcandidate() { fi } -testcandidate apt '0.8.15' +testcandidate rapt '0.8.15' testequal 'N: Unable to locate package doesntexist' aptcache policy doesntexist -q=0 testequal 'Reading package lists... Building dependency tree... -0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget dist-upgrade +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget dist-upgrade --trivial-only -echo 'Package: apt +echo 'Package: rapt Pin: release a=unstable Pin-Priority: -1' > rootdir/etc/apt/preferences -testcandidate apt '(none)' +testcandidate rapt '(none)' testequal 'N: Unable to locate package doesntexist' aptcache policy doesntexist -q=0 testequal 'Reading package lists... Building dependency tree... -0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget dist-upgrade +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget dist-upgrade --trivial-only echo ' Package: doesntexist Pin: release a=unstable Pin-Priority: 1000' >> rootdir/etc/apt/preferences -testcandidate apt '(none)' +testcandidate rapt '(none)' echo ' -Package: apt +Package: rapt Pin: release a=unstable Pin-Priority: 1000' >> rootdir/etc/apt/preferences -testcandidate apt '(none)' +testcandidate rapt '(none)' testequal 'N: Unable to locate package doesntexist' aptcache policy doesntexist -q=0 testequal 'Reading package lists... Building dependency tree... -0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget dist-upgrade +0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget dist-upgrade --trivial-only echo 'Package: arch:amd64 Pin: release a=unstable -- cgit v1.2.3-70-g09d2 From 670cf3542be6a079d6288c36d3b6a14877f8b5f9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 12 Mar 2012 19:29:59 +0100 Subject: improve the testcode so that we do not depend on the order of unpacking of specific packages as long as the order is okay in general --- .../test-bug-618288-multiarch-same-lockstep | 42 +++++++++------------- 1 file changed, 17 insertions(+), 25 deletions(-) (limited to 'test') diff --git a/test/integration/test-bug-618288-multiarch-same-lockstep b/test/integration/test-bug-618288-multiarch-same-lockstep index 7333054cc..fde075172 100755 --- a/test/integration/test-bug-618288-multiarch-same-lockstep +++ b/test/integration/test-bug-618288-multiarch-same-lockstep @@ -16,30 +16,22 @@ buildsimplenativepackage 'apt' 'i386' '2' 'unstable' 'Depends: libsame (= 2)' '' buildsimplenativepackage 'apt2' 'amd64' '2' 'unstable' 'Depends: libsame (= 2)' '' 'required' setupaptarchive +aptget dist-upgrade -s 2>&1 > output.apt # order in switch libsame:{amd64,i386} are unpacked is irrelevant, as both are installed - but we need to do it together -testequalor2 'Reading package lists... -Building dependency tree... -The following packages will be upgraded: - apt:i386 apt2 libsame libsame:i386 -4 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. -Inst libsame:i386 [1] (2 unstable [i386]) [libsame:amd64 on libsame:i386] [libsame:i386 on libsame:amd64] [libsame:amd64 apt:i386 ] -Inst libsame [1] (2 unstable [amd64]) [apt2:amd64 apt:i386 ] -Conf libsame:i386 (2 unstable [i386]) [apt2:amd64 apt:i386 ] -Conf libsame (2 unstable [amd64]) [apt2:amd64 apt:i386 ] -Inst apt2 [1] (2 unstable [amd64]) [apt:i386 ] -Conf apt2 (2 unstable [amd64]) [apt:i386 ] -Inst apt:i386 [1] (2 unstable [i386]) -Conf apt:i386 (2 unstable [i386])' 'Reading package lists... -Building dependency tree... -The following packages will be upgraded: - apt:i386 apt2 libsame libsame:i386 -4 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. -Inst libsame [1] (2 unstable [amd64]) [libsame:amd64 on libsame:i386] [libsame:i386 on libsame:amd64] [libsame:i386 apt2:amd64 ] -Inst libsame:i386 [1] (2 unstable [i386]) [apt2:amd64 apt:i386 ] -Conf libsame:i386 (2 unstable [i386]) [apt2:amd64 apt:i386 ] -Conf libsame (2 unstable [amd64]) [apt2:amd64 apt:i386 ] -Inst apt2 [1] (2 unstable [amd64]) [apt:i386 ] -Conf apt2 (2 unstable [amd64]) [apt:i386 ] -Inst apt:i386 [1] (2 unstable [i386]) -Conf apt:i386 (2 unstable [i386])' aptget dist-upgrade -s +LS_U_AMD="$(grep -o -n '^Inst libsame ' output.apt | cut -d: -f1)" +LS_U_INT="$(grep -o -n '^Inst libsame:i386 ' output.apt | cut -d: -f1)" +LS_C_AMD="$(grep -o -n '^Conf libsame ' output.apt | cut -d: -f1)" +LS_C_INT="$(grep -o -n '^Conf libsame:i386 ' output.apt | cut -d: -f1)" + +msgtest 'Test if libsame:amd64 unpack before configure' +test "$LS_U_AMD" -lt "$LS_C_AMD" && msgpass || msgfail + +msgtest 'Test if libsame:i386 unpack before configure' +test "$LS_U_INT" -lt "$LS_C_INT" && msgpass || msgfail + +msgtest 'Test if libsame:amd64 unpack is before libsame:i386 configure' +test "$LS_U_AMD" -lt "$LS_C_INT" && msgpass || msgfail + +msgtest 'Test if libsame:i386 unpack is before libsame:amd64 configure' +test "$LS_U_INT" -lt "$LS_C_AMD" && msgpass || msgfail -- cgit v1.2.3-70-g09d2 From 90436124e1957f685673f0926a3cd8edc6d2fcdf Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 12 Mar 2012 19:30:48 +0100 Subject: ensure that the fullname of a package is displayed in the debug output --- apt-pkg/packagemanager.cc | 58 ++++++++++++++++++------------------ test/integration/test-conflicts-loop | 10 +++---- 2 files changed, 34 insertions(+), 34 deletions(-) (limited to 'test') diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index feddc3bf8..eff92738f 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -152,7 +152,7 @@ void pkgPackageManager::ImmediateAdd(PkgIterator I, bool UseInstallVer, unsigned if(!List->IsFlag(D.TargetPkg(), pkgOrderList::Immediate)) { if(Debug) - clog << OutputInDepth(Depth) << "ImmediateAdd(): Adding Immediate flag to " << D.TargetPkg() << " cause of " << D.DepType() << " " << I.Name() << endl; + clog << OutputInDepth(Depth) << "ImmediateAdd(): Adding Immediate flag to " << D.TargetPkg() << " cause of " << D.DepType() << " " << I.FullName() << endl; List->Flag(D.TargetPkg(),pkgOrderList::Immediate); ImmediateAdd(D.TargetPkg(), UseInstallVer, Depth + 1); } @@ -187,7 +187,7 @@ bool pkgPackageManager::CreateOrderList() NoImmConfigure == false) || ImmConfigureAll) { if(Debug && !ImmConfigureAll) - clog << "CreateOrderList(): Adding Immediate flag for " << I.Name() << endl; + clog << "CreateOrderList(): Adding Immediate flag for " << I.FullName() << endl; List->Flag(I,pkgOrderList::Immediate); if (!ImmConfigureAll) { @@ -256,7 +256,7 @@ bool pkgPackageManager::CheckRConflicts(PkgIterator Pkg,DepIterator D, if (EarlyRemove(D.ParentPkg()) == false) return _error->Error("Reverse conflicts early remove for package '%s' failed", - Pkg.Name()); + Pkg.FullName().c_str()); } return true; } @@ -294,9 +294,9 @@ bool pkgPackageManager::ConfigureAll() if (ConfigurePkgs == true && SmartConfigure(Pkg, 0) == false) { if (ImmConfigureAll) _error->Error(_("Could not perform immediate configuration on '%s'. " - "Please see man 5 apt.conf under APT::Immediate-Configure for details. (%d)"),Pkg.Name(),1); + "Please see man 5 apt.conf under APT::Immediate-Configure for details. (%d)"),Pkg.FullName().c_str(),1); else - _error->Error("Internal error, packages left unconfigured. %s",Pkg.Name()); + _error->Error("Internal error, packages left unconfigured. %s",Pkg.FullName().c_str()); return false; } @@ -325,7 +325,7 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg, int const Depth) if (Debug) { VerIterator InstallVer = VerIterator(Cache,Cache[Pkg].InstallVer); - clog << OutputInDepth(Depth) << "SmartConfigure " << Pkg.Name() << " (" << InstallVer.VerStr() << ")"; + clog << OutputInDepth(Depth) << "SmartConfigure " << Pkg.FullName() << " (" << InstallVer.VerStr() << ")"; if (PkgLoop) clog << " (Only Correct Dependencies)"; clog << endl; @@ -413,7 +413,7 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg, int const Depth) { List->Flag(Pkg,pkgOrderList::Loop); if (Debug) - cout << OutputInDepth(Depth) << "Unpacking " << DepPkg.Name() << " to avoid loop" << endl; + cout << OutputInDepth(Depth) << "Unpacking " << DepPkg.FullName() << " to avoid loop" << endl; SmartUnPack(DepPkg, true, Depth + 1); List->RmFlag(Pkg,pkgOrderList::Loop); } @@ -432,7 +432,7 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg, int const Depth) if (Bad) { if (Debug) - _error->Warning(_("Could not configure '%s'. "),Pkg.Name()); + _error->Warning(_("Could not configure '%s'. "),Pkg.FullName().c_str()); return false; } @@ -442,7 +442,7 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg, int const Depth) static bool const ConfigurePkgs = (conf == "all" || conf == "smart"); if (List->IsFlag(Pkg,pkgOrderList::Configured)) - return _error->Error("Internal configure error on '%s'.", Pkg.Name()); + return _error->Error("Internal configure error on '%s'.", Pkg.FullName().c_str()); if (ConfigurePkgs == true && Configure(Pkg) == false) return false; @@ -462,7 +462,7 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg, int const Depth) // Sanity Check if (List->IsFlag(Pkg,pkgOrderList::Configured) == false) - return _error->Error(_("Could not configure '%s'. "),Pkg.Name()); + return _error->Error(_("Could not configure '%s'. "),Pkg.FullName().c_str()); return true; } @@ -508,7 +508,7 @@ bool pkgPackageManager::EarlyRemove(PkgIterator Pkg) "removing the essential package %s due to a " "Conflicts/Pre-Depends loop. This is often bad, " "but if you really want to do it, activate the " - "APT::Force-LoopBreak option."),Pkg.Name()); + "APT::Force-LoopBreak option."),Pkg.FullName().c_str()); } bool Res = SmartRemove(Pkg); @@ -544,7 +544,7 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c bool PkgLoop = List->IsFlag(Pkg,pkgOrderList::Loop); if (Debug) { - clog << OutputInDepth(Depth) << "SmartUnPack " << Pkg.Name(); + clog << OutputInDepth(Depth) << "SmartUnPack " << Pkg.FullName(); VerIterator InstallVer = VerIterator(Cache,Cache[Pkg].InstallVer); if (Pkg.CurrentVer() == 0) cout << " (install version " << InstallVer.VerStr() << ")"; @@ -574,7 +574,7 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c while (End->Type == pkgCache::Dep::PreDepends) { if (Debug) - clog << OutputInDepth(Depth) << "PreDepends order for " << Pkg.Name() << std::endl; + clog << OutputInDepth(Depth) << "PreDepends order for " << Pkg.FullName() << std::endl; // Look for possible ok targets. SPtrArray VList = Start.AllTargets(); @@ -590,7 +590,7 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c { Bad = false; if (Debug) - clog << OutputInDepth(Depth) << "Found ok package " << Pkg.Name() << endl; + clog << OutputInDepth(Depth) << "Found ok package " << Pkg.FullName() << endl; continue; } } @@ -615,12 +615,12 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c if (!List->IsFlag(Pkg,pkgOrderList::UnPacked)) { if (Debug) - clog << OutputInDepth(Depth) << "Trying to SmartUnpack " << Pkg.Name() << endl; + clog << OutputInDepth(Depth) << "Trying to SmartUnpack " << Pkg.FullName() << endl; // SmartUnpack with the ImmediateFlag to ensure its really ready Bad = !SmartUnPack(Pkg, true, Depth + 1); } else { if (Debug) - clog << OutputInDepth(Depth) << "Trying to SmartConfigure " << Pkg.Name() << endl; + clog << OutputInDepth(Depth) << "Trying to SmartConfigure " << Pkg.FullName() << endl; Bad = !SmartConfigure(Pkg, Depth + 1); } } @@ -633,7 +633,7 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c if (Start == End) return _error->Error("Couldn't configure pre-depend %s for %s, " "probably a dependency cycle.", - End.TargetPkg().Name(),Pkg.Name()); + End.TargetPkg().FullName().c_str(),Pkg.FullName().c_str()); ++Start; } else @@ -655,27 +655,27 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c // See if the current version is conflicting if (ConflictPkg.CurrentVer() == Ver && List->IsNow(ConflictPkg)) { - cout << OutputInDepth(Depth) << Pkg.Name() << " conflicts with " << ConflictPkg.Name() << endl; + cout << OutputInDepth(Depth) << Pkg.FullName() << " conflicts with " << ConflictPkg.FullName() << endl; /* If a loop is not present or has not yet been detected, attempt to unpack packages to resolve this conflict. If there is a loop present, remove packages to resolve this conflict */ if (!List->IsFlag(ConflictPkg,pkgOrderList::Loop)) { if (Cache[ConflictPkg].Keep() == 0 && Cache[ConflictPkg].InstallVer != 0) { if (Debug) - cout << OutputInDepth(Depth) << OutputInDepth(Depth) << "Unpacking " << ConflictPkg.Name() << " to prevent conflict" << endl; + cout << OutputInDepth(Depth) << OutputInDepth(Depth) << "Unpacking " << ConflictPkg.FullName() << " to prevent conflict" << endl; List->Flag(Pkg,pkgOrderList::Loop); SmartUnPack(ConflictPkg,false, Depth + 1); // Remove loop to allow it to be used later if needed List->RmFlag(Pkg,pkgOrderList::Loop); } else { if (EarlyRemove(ConflictPkg) == false) - return _error->Error("Internal Error, Could not early remove %s",ConflictPkg.Name()); + return _error->Error("Internal Error, Could not early remove %s",ConflictPkg.FullName().c_str()); } } else { if (!List->IsFlag(ConflictPkg,pkgOrderList::Removed)) { if (Debug) - cout << OutputInDepth(Depth) << "Because of conficts knot, removing " << ConflictPkg.Name() << " to conflict violation" << endl; + cout << OutputInDepth(Depth) << "Because of conficts knot, removing " << ConflictPkg.FullName() << " to conflict violation" << endl; if (EarlyRemove(ConflictPkg) == false) - return _error->Error("Internal Error, Could not early remove %s",ConflictPkg.Name()); + return _error->Error("Internal Error, Could not early remove %s",ConflictPkg.FullName().c_str()); } } } @@ -752,7 +752,7 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c if (Cache[BrokenPkg].Delete() == true && !List->IsFlag(BrokenPkg,pkgOrderList::Configured)) { if (Debug) - cout << OutputInDepth(Depth) << " Removing " << BrokenPkg.Name() << " to avoid " << End << endl; + cout << OutputInDepth(Depth) << " Removing " << BrokenPkg.FullName() << " to avoid " << End << endl; SmartRemove(BrokenPkg); } } @@ -815,7 +815,7 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c // Perform immedate configuration of the package. if (SmartConfigure(Pkg, Depth + 1) == false) _error->Warning(_("Could not perform immediate configuration on '%s'. " - "Please see man 5 apt.conf under APT::Immediate-Configure for details. (%d)"),Pkg.Name(),2); + "Please see man 5 apt.conf under APT::Immediate-Configure for details. (%d)"),Pkg.FullName().c_str(),2); } return true; @@ -855,11 +855,11 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall() { if (!List->IsFlag(Pkg,pkgOrderList::Configured) && !NoImmConfigure) { if (SmartConfigure(Pkg, 0) == false && Debug) - _error->Warning("Internal Error, Could not configure %s",Pkg.Name()); + _error->Warning("Internal Error, Could not configure %s",Pkg.FullName().c_str()); // FIXME: The above warning message might need changing } else { if (Debug == true) - clog << "Skipping already done " << Pkg.Name() << endl; + clog << "Skipping already done " << Pkg.FullName() << endl; } continue; @@ -868,7 +868,7 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall() if (List->IsMissing(Pkg) == true) { if (Debug == true) - clog << "Sequence completed at " << Pkg.Name() << endl; + clog << "Sequence completed at " << Pkg.FullName() << endl; if (DoneSomething == false) { _error->Error("Internal Error, ordering was unable to handle the media swap"); @@ -882,7 +882,7 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall() Pkg.State() == pkgCache::PkgIterator::NeedsNothing && (Cache[Pkg].iFlags & pkgDepCache::ReInstall) != pkgDepCache::ReInstall) { - _error->Error("Internal Error, trying to manipulate a kept package (%s)",Pkg.Name()); + _error->Error("Internal Error, trying to manipulate a kept package (%s)",Pkg.FullName().c_str()); return Failed; } @@ -915,7 +915,7 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall() if (List->IsFlag(*I,pkgOrderList::Configured) == false) { _error->Error("Internal error, packages left unconfigured. %s", - PkgIterator(Cache,*I).Name()); + PkgIterator(Cache,*I).FullName().c_str()); return Failed; } } diff --git a/test/integration/test-conflicts-loop b/test/integration/test-conflicts-loop index 7b5724d74..233077ef5 100755 --- a/test/integration/test-conflicts-loop +++ b/test/integration/test-conflicts-loop @@ -20,14 +20,14 @@ Building dependency tree... The following packages will be upgraded: openjdk-6-jre openjdk-6-jre-headless openjdk-6-jre-lib 3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. - openjdk-6-jre-lib conflicts with openjdk-6-jre - openjdk-6-jre conflicts with openjdk-6-jre-headless - openjdk-6-jre-headless conflicts with openjdk-6-jre + openjdk-6-jre-lib:i386 conflicts with openjdk-6-jre:i386 + openjdk-6-jre:i386 conflicts with openjdk-6-jre-headless:i386 + openjdk-6-jre-headless:i386 conflicts with openjdk-6-jre:i386 Remv openjdk-6-jre [6b16-1.8-0ubuntu1] - openjdk-6-jre-headless conflicts with openjdk-6-jre-lib + openjdk-6-jre-headless:i386 conflicts with openjdk-6-jre-lib:i386 Remv openjdk-6-jre-lib [6b16-1.8-0ubuntu1] Inst openjdk-6-jre-headless [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) - openjdk-6-jre conflicts with openjdk-6-jre-lib + openjdk-6-jre:i386 conflicts with openjdk-6-jre-lib:i386 Inst openjdk-6-jre [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) Inst openjdk-6-jre-lib [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) Conf openjdk-6-jre-lib (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) -- cgit v1.2.3-70-g09d2 From 98ee49227a1f1669306cbfc1b15c5243ed13cc8a Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 13 Mar 2012 12:39:05 +0100 Subject: recheck dependencies in SmartUnpack after a change, too --- apt-pkg/packagemanager.cc | 361 +++++++++++++++++++---------------- debian/changelog | 3 +- test/integration/test-conflicts-loop | 1 + 3 files changed, 199 insertions(+), 166 deletions(-) (limited to 'test') diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index 5ba1225a0..73637d071 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -590,198 +590,229 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c VerIterator const instVer = Cache[Pkg].InstVerIter(Cache); /* PreUnpack Checks: This loop checks and attempts to rectify and problems that would prevent the package being unpacked. - It addresses: PreDepends, Conflicts, Obsoletes and Breaks (DpkgBreaks). Any resolutions that do not require it should + It addresses: PreDepends, Conflicts, Obsoletes and Breaks (DpkgBreaks). Any resolutions that do not require it should avoid configuration (calling SmartUnpack with Immediate=true), this is because when unpacking some packages with - complex dependancy structures, trying to configure some packages while breaking the loops can complicate things . - This will be either dealt with if the package is configured as a dependency of Pkg (if and when Pkg is configured), + complex dependancy structures, trying to configure some packages while breaking the loops can complicate things . + This will be either dealt with if the package is configured as a dependency of Pkg (if and when Pkg is configured), or by the ConfigureAll call at the end of the for loop in OrderInstall. */ - for (DepIterator D = instVer.DependsList(); - D.end() == false; ) - { - // Compute a single dependency element (glob or) - pkgCache::DepIterator Start; - pkgCache::DepIterator End; - D.GlobOr(Start,End); - - while (End->Type == pkgCache::Dep::PreDepends) + bool Changed = false; + do { + Changed = false; + for (DepIterator D = instVer.DependsList(); D.end() == false; ) { - if (Debug) - clog << OutputInDepth(Depth) << "PreDepends order for " << Pkg.FullName() << std::endl; + // Compute a single dependency element (glob or) + pkgCache::DepIterator Start, End; + D.GlobOr(Start,End); - // Look for possible ok targets. - SPtrArray VList = Start.AllTargets(); - bool Bad = true; - for (Version **I = VList; *I != 0 && Bad == true; I++) - { - VerIterator Ver(Cache,*I); - PkgIterator Pkg = Ver.ParentPkg(); - - // See if the current version is ok - if (Pkg.CurrentVer() == Ver && List->IsNow(Pkg) == true && - Pkg.State() == PkgIterator::NeedsNothing) + if (End->Type == pkgCache::Dep::PreDepends) + { + bool Bad = true; + if (Debug) + clog << OutputInDepth(Depth) << "PreDepends order for " << Pkg.FullName() << std::endl; + + // Look for easy targets: packages that are already okay + for (DepIterator Cur = Start; Bad == true; ++Cur) { - Bad = false; - if (Debug) - clog << OutputInDepth(Depth) << "Found ok package " << Pkg.FullName() << endl; - continue; - } - } - - // Look for something that could be configured. - for (Version **I = VList; *I != 0 && Bad == true; I++) - { - VerIterator Ver(Cache,*I); - PkgIterator Pkg = Ver.ParentPkg(); - - // Not the install version - if (Cache[Pkg].InstallVer != *I || - (Cache[Pkg].Keep() == true && Pkg.State() == PkgIterator::NeedsNothing)) - continue; - - if (List->IsFlag(Pkg,pkgOrderList::Configured)) { - Bad = false; - continue; + SPtrArray VList = Start.AllTargets(); + for (Version **I = VList; *I != 0; ++I) + { + VerIterator Ver(Cache,*I); + PkgIterator Pkg = Ver.ParentPkg(); + + // See if the current version is ok + if (Pkg.CurrentVer() == Ver && List->IsNow(Pkg) == true && + Pkg.State() == PkgIterator::NeedsNothing) + { + Bad = false; + if (Debug) + clog << OutputInDepth(Depth) << "Found ok package " << Pkg.FullName() << endl; + break; + } + } + if (Cur == End) + break; } - // check if it needs unpack or if if configure is enough - if (!List->IsFlag(Pkg,pkgOrderList::UnPacked)) - { - if (Debug) - clog << OutputInDepth(Depth) << "Trying to SmartUnpack " << Pkg.FullName() << endl; - // SmartUnpack with the ImmediateFlag to ensure its really ready - Bad = !SmartUnPack(Pkg, true, Depth + 1); - } else { - if (Debug) - clog << OutputInDepth(Depth) << "Trying to SmartConfigure " << Pkg.FullName() << endl; - Bad = !SmartConfigure(Pkg, Depth + 1); - } - } + // Look for something that could be configured. + for (DepIterator Cur = Start; Bad == true; ++Cur) + { + SPtrArray VList = Start.AllTargets(); + for (Version **I = VList; *I != 0; ++I) + { + VerIterator Ver(Cache,*I); + PkgIterator Pkg = Ver.ParentPkg(); - /* If this or element did not match then continue on to the - next or element until a matching element is found */ - if (Bad == true) - { - // This triggers if someone make a pre-depends/depend loop. - if (Start == End) - return _error->Error("Couldn't configure pre-depend %s for %s, " - "probably a dependency cycle.", - End.TargetPkg().FullName().c_str(),Pkg.FullName().c_str()); - ++Start; - } - else - break; - } - - if (End->Type == pkgCache::Dep::Conflicts || - End->Type == pkgCache::Dep::Obsoletes) - { - /* Look for conflicts. Two packages that are both in the install - state cannot conflict so we don't check.. */ - SPtrArray VList = End.AllTargets(); - for (Version **I = VList; *I != 0; I++) - { - VerIterator Ver(Cache,*I); - PkgIterator ConflictPkg = Ver.ParentPkg(); - VerIterator InstallVer(Cache,Cache[ConflictPkg].InstallVer); - - // See if the current version is conflicting - if (ConflictPkg.CurrentVer() == Ver && List->IsNow(ConflictPkg)) - { - cout << OutputInDepth(Depth) << Pkg.FullName() << " conflicts with " << ConflictPkg.FullName() << endl; - /* If a loop is not present or has not yet been detected, attempt to unpack packages - to resolve this conflict. If there is a loop present, remove packages to resolve this conflict */ - if (!List->IsFlag(ConflictPkg,pkgOrderList::Loop)) { - if (Cache[ConflictPkg].Keep() == 0 && Cache[ConflictPkg].InstallVer != 0) { - if (Debug) - cout << OutputInDepth(Depth) << OutputInDepth(Depth) << "Unpacking " << ConflictPkg.FullName() << " to prevent conflict" << endl; - List->Flag(Pkg,pkgOrderList::Loop); - SmartUnPack(ConflictPkg,false, Depth + 1); - // Remove loop to allow it to be used later if needed - List->RmFlag(Pkg,pkgOrderList::Loop); - } else { - if (EarlyRemove(ConflictPkg) == false) - return _error->Error("Internal Error, Could not early remove %s",ConflictPkg.FullName().c_str()); - } - } else { - if (!List->IsFlag(ConflictPkg,pkgOrderList::Removed)) { - if (Debug) - cout << OutputInDepth(Depth) << "Because of conficts knot, removing " << ConflictPkg.FullName() << " to conflict violation" << endl; - if (EarlyRemove(ConflictPkg) == false) - return _error->Error("Internal Error, Could not early remove %s",ConflictPkg.FullName().c_str()); - } + // Not the install version + if (Cache[Pkg].InstallVer != *I || + (Cache[Pkg].Keep() == true && Pkg.State() == PkgIterator::NeedsNothing)) + continue; + + if (List->IsFlag(Pkg,pkgOrderList::Configured)) + { + Bad = false; + break; + } + + // check if it needs unpack or if if configure is enough + if (List->IsFlag(Pkg,pkgOrderList::UnPacked) == false) + { + if (Debug) + clog << OutputInDepth(Depth) << "Trying to SmartUnpack " << Pkg.FullName() << endl; + // SmartUnpack with the ImmediateFlag to ensure its really ready + if (SmartUnPack(Pkg, true, Depth + 1) == true) + { + Bad = false; + if (List->IsFlag(Pkg,pkgOrderList::Loop) == false) + Changed = true; + break; + } + } + else + { + if (Debug) + clog << OutputInDepth(Depth) << "Trying to SmartConfigure " << Pkg.FullName() << endl; + if (SmartConfigure(Pkg, Depth + 1) == true) + { + Bad = false; + if (List->IsFlag(Pkg,pkgOrderList::Loop) == false) + Changed = true; + break; + } + } } } + + if (Bad == true) + { + if (Start == End) + return _error->Error("Couldn't configure pre-depend %s for %s, " + "probably a dependency cycle.", + End.TargetPkg().FullName().c_str(),Pkg.FullName().c_str()); + } + else + continue; } - } - - // Check for breaks - if (End->Type == pkgCache::Dep::DpkgBreaks) { - SPtrArray VList = End.AllTargets(); - for (Version **I = VList; *I != 0; I++) + else if (End->Type == pkgCache::Dep::Conflicts || + End->Type == pkgCache::Dep::Obsoletes) { - VerIterator Ver(Cache,*I); - PkgIterator BrokenPkg = Ver.ParentPkg(); - if (BrokenPkg.CurrentVer() != Ver) + /* Look for conflicts. Two packages that are both in the install + state cannot conflict so we don't check.. */ + SPtrArray VList = End.AllTargets(); + for (Version **I = VList; *I != 0; I++) { - if (Debug) - std::clog << OutputInDepth(Depth) << " Ignore not-installed version " << Ver.VerStr() << " of " << Pkg.FullName() << " for " << End << std::endl; - continue; - } + VerIterator Ver(Cache,*I); + PkgIterator ConflictPkg = Ver.ParentPkg(); + VerIterator InstallVer(Cache,Cache[ConflictPkg].InstallVer); - // Check if it needs to be unpacked - if (List->IsFlag(BrokenPkg,pkgOrderList::InList) && Cache[BrokenPkg].Delete() == false && - List->IsNow(BrokenPkg)) { - if (List->IsFlag(BrokenPkg,pkgOrderList::Loop) && PkgLoop) { - // This dependancy has already been dealt with by another SmartUnPack on Pkg - break; - } else { - // Found a break, so see if we can unpack the package to avoid it - // but do not set loop if another SmartUnPack already deals with it - VerIterator InstallVer(Cache,Cache[BrokenPkg].InstallVer); - bool circle = false; - for (pkgCache::DepIterator D = InstallVer.DependsList(); D.end() == false; ++D) + // See if the current version is conflicting + if (ConflictPkg.CurrentVer() == Ver && List->IsNow(ConflictPkg)) + { + cout << OutputInDepth(Depth) << Pkg.FullName() << " conflicts with " << ConflictPkg.FullName() << endl; + /* If a loop is not present or has not yet been detected, attempt to unpack packages + to resolve this conflict. If there is a loop present, remove packages to resolve this conflict */ + if (List->IsFlag(ConflictPkg,pkgOrderList::Loop) == false) { - if (D->Type != pkgCache::Dep::PreDepends) - continue; - SPtrArray VL = D.AllTargets(); - for (Version **I = VL; *I != 0; ++I) + if (Cache[ConflictPkg].Keep() == 0 && Cache[ConflictPkg].InstallVer != 0) { - VerIterator V(Cache,*I); - PkgIterator P = V.ParentPkg(); - // we are checking for installation as an easy 'protection' against or-groups and (unchosen) providers - if (P->CurrentVer == 0 || P != Pkg || (P.CurrentVer() != V && Cache[P].InstallVer != V)) - continue; - circle = true; - break; + if (Debug) + cout << OutputInDepth(Depth) << OutputInDepth(Depth) << "Unpacking " << ConflictPkg.FullName() << " to prevent conflict" << endl; + List->Flag(Pkg,pkgOrderList::Loop); + if (SmartUnPack(ConflictPkg,false, Depth + 1) == true) + if (List->IsFlag(ConflictPkg,pkgOrderList::Loop) == false) + Changed = true; + // Remove loop to allow it to be used later if needed + List->RmFlag(Pkg,pkgOrderList::Loop); } - if (circle == true) - break; + else if (EarlyRemove(ConflictPkg) == false) + return _error->Error("Internal Error, Could not early remove %s (1)",ConflictPkg.FullName().c_str()); } - if (circle == true) + else if (List->IsFlag(ConflictPkg,pkgOrderList::Removed) == false) { if (Debug) - cout << OutputInDepth(Depth) << " Avoiding " << End << " avoided as " << BrokenPkg.FullName() << " has a pre-depends on " << Pkg.FullName() << std::endl; - continue; + cout << OutputInDepth(Depth) << "Because of conficts knot, removing " << ConflictPkg.FullName() << " to conflict violation" << endl; + if (EarlyRemove(ConflictPkg) == false) + return _error->Error("Internal Error, Could not early remove %s (2)",ConflictPkg.FullName().c_str()); + } + } + } + } + else if (End->Type == pkgCache::Dep::DpkgBreaks) + { + SPtrArray VList = End.AllTargets(); + for (Version **I = VList; *I != 0; ++I) + { + VerIterator Ver(Cache,*I); + PkgIterator BrokenPkg = Ver.ParentPkg(); + if (BrokenPkg.CurrentVer() != Ver) + { + if (Debug) + std::clog << OutputInDepth(Depth) << " Ignore not-installed version " << Ver.VerStr() << " of " << Pkg.FullName() << " for " << End << std::endl; + continue; + } + + // Check if it needs to be unpacked + if (List->IsFlag(BrokenPkg,pkgOrderList::InList) && Cache[BrokenPkg].Delete() == false && + List->IsNow(BrokenPkg)) + { + if (List->IsFlag(BrokenPkg,pkgOrderList::Loop) && PkgLoop) + { + // This dependancy has already been dealt with by another SmartUnPack on Pkg + break; } else { - if (Debug) + // Found a break, so see if we can unpack the package to avoid it + // but do not set loop if another SmartUnPack already deals with it + // Also, avoid it if the package we would unpack pre-depends on this one + VerIterator InstallVer(Cache,Cache[BrokenPkg].InstallVer); + bool circle = false; + for (pkgCache::DepIterator D = InstallVer.DependsList(); D.end() == false; ++D) { - cout << OutputInDepth(Depth) << " Unpacking " << BrokenPkg.FullName() << " to avoid " << End; - if (PkgLoop == true) - cout << " (Looping)"; - cout << std::endl; + if (D->Type != pkgCache::Dep::PreDepends) + continue; + SPtrArray VL = D.AllTargets(); + for (Version **I = VL; *I != 0; ++I) + { + VerIterator V(Cache,*I); + PkgIterator P = V.ParentPkg(); + // we are checking for installation as an easy 'protection' against or-groups and (unchosen) providers + if (P->CurrentVer == 0 || P != Pkg || (P.CurrentVer() != V && Cache[P].InstallVer != V)) + continue; + circle = true; + break; + } + if (circle == true) + break; + } + if (circle == true) + { + if (Debug) + cout << OutputInDepth(Depth) << " Avoiding " << End << " avoided as " << BrokenPkg.FullName() << " has a pre-depends on " << Pkg.FullName() << std::endl; + continue; + } + else + { + if (Debug) + { + cout << OutputInDepth(Depth) << " Unpacking " << BrokenPkg.FullName() << " to avoid " << End; + if (PkgLoop == true) + cout << " (Looping)"; + cout << std::endl; + } + if (PkgLoop == false) + List->Flag(Pkg,pkgOrderList::Loop); + if (SmartUnPack(BrokenPkg, false, Depth + 1) == true) + { + if (List->IsFlag(BrokenPkg,pkgOrderList::Loop) == false) + Changed = true; + } + if (PkgLoop == false) + List->RmFlag(Pkg,pkgOrderList::Loop); } - if (PkgLoop == false) - List->Flag(Pkg,pkgOrderList::Loop); - SmartUnPack(BrokenPkg, false, Depth + 1); - if (PkgLoop == false) - List->RmFlag(Pkg,pkgOrderList::Loop); } } - } else { // Check if a package needs to be removed - if (Cache[BrokenPkg].Delete() == true && !List->IsFlag(BrokenPkg,pkgOrderList::Configured)) + else if (Cache[BrokenPkg].Delete() == true && List->IsFlag(BrokenPkg,pkgOrderList::Configured) == false) { if (Debug) cout << OutputInDepth(Depth) << " Removing " << BrokenPkg.FullName() << " to avoid " << End << endl; @@ -790,7 +821,7 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c } } } - } + } while (Changed == true); // Check for reverse conflicts. if (CheckRConflicts(Pkg,Pkg.RevDependsList(), diff --git a/debian/changelog b/debian/changelog index d8e6d66a5..f95992445 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,8 +4,9 @@ apt (0.8.16~exp14) experimental; urgency=low * apt-pkg/packagemanager.cc: - recheck all dependencies if we changed a package in SmartConfigure as this could break an earlier dependency (LP: #940396) + - recheck dependencies in SmartUnpack after a change, too - -- David Kalnischkies Tue, 13 Mar 2012 11:33:46 +0100 + -- David Kalnischkies Tue, 13 Mar 2012 12:38:35 +0100 apt (0.8.16~exp13) experimental; urgency=low diff --git a/test/integration/test-conflicts-loop b/test/integration/test-conflicts-loop index 233077ef5..25f005969 100755 --- a/test/integration/test-conflicts-loop +++ b/test/integration/test-conflicts-loop @@ -28,6 +28,7 @@ Remv openjdk-6-jre [6b16-1.8-0ubuntu1] Remv openjdk-6-jre-lib [6b16-1.8-0ubuntu1] Inst openjdk-6-jre-headless [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) openjdk-6-jre:i386 conflicts with openjdk-6-jre-lib:i386 + openjdk-6-jre:i386 conflicts with openjdk-6-jre-lib:i386 Inst openjdk-6-jre [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) Inst openjdk-6-jre-lib [6b16-1.8-0ubuntu1] (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) Conf openjdk-6-jre-lib (6b20-1.9.8-0ubuntu1~10.04.1 unstable [i386]) -- cgit v1.2.3-70-g09d2 From 9a3798e6d5c26ebdaf1f865f5117bbc995b69b76 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 13 Mar 2012 13:34:47 +0100 Subject: now that stdout/stdlog are used consistently, the message order changed --- test/integration/test-conflicts-loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test') diff --git a/test/integration/test-conflicts-loop b/test/integration/test-conflicts-loop index 25f005969..4407fbd9d 100755 --- a/test/integration/test-conflicts-loop +++ b/test/integration/test-conflicts-loop @@ -19,10 +19,10 @@ testequal 'Reading package lists... Building dependency tree... The following packages will be upgraded: openjdk-6-jre openjdk-6-jre-headless openjdk-6-jre-lib -3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. openjdk-6-jre-lib:i386 conflicts with openjdk-6-jre:i386 openjdk-6-jre:i386 conflicts with openjdk-6-jre-headless:i386 openjdk-6-jre-headless:i386 conflicts with openjdk-6-jre:i386 +3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Remv openjdk-6-jre [6b16-1.8-0ubuntu1] openjdk-6-jre-headless:i386 conflicts with openjdk-6-jre-lib:i386 Remv openjdk-6-jre-lib [6b16-1.8-0ubuntu1] -- cgit v1.2.3-70-g09d2 From 05343a22b8c7d9b491e93169e035a996ff68af9f Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 20 Mar 2012 17:03:35 +0100 Subject: update the versionnumber of the faked dpkg in the testcases for multiarch and add a comment about the need of this number --- test/integration/framework | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/integration/framework b/test/integration/framework index a738d27cc..fa4a98f58 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -207,7 +207,9 @@ configdpkg() { if [ "${ARCH}" != "${DPKGARCH}" ]; then dpkg --add-architecture ${ARCH}; fi done if [ "0" = "$(dpkg -l dpkg 2> /dev/null | grep '^i' | wc -l)" ]; then - insertinstalledpackage 'dpkg' "all" '1.16.2~wipmultiarch~fake' + # dpkg doesn't really check the version as long as it is fully installed, + # but just to be sure we choose one above the required version + insertinstalledpackage 'dpkg' "all" '1.16.2+fake' fi fi fi -- cgit v1.2.3-70-g09d2 From fca9751603f4f1ee0612208c009326490dca9a53 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 20 Mar 2012 21:08:15 +0100 Subject: for these helpers we don't need too much checks, but no warnings from gcc helps --- test/interactive-helper/extract-control.cc | 3 +-- test/interactive-helper/testextract.cc | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'test') diff --git a/test/interactive-helper/extract-control.cc b/test/interactive-helper/extract-control.cc index a1b3600aa..3f7feabcb 100644 --- a/test/interactive-helper/extract-control.cc +++ b/test/interactive-helper/extract-control.cc @@ -21,8 +21,7 @@ bool ExtractMember(const char *File,const char *Member) if (Extract.Control == 0) return true; - write(STDOUT_FILENO,Extract.Control,Extract.Length); - return true; + return write(STDOUT_FILENO,Extract.Control,Extract.Length) != -1; } int main(int argc, const char *argv[]) diff --git a/test/interactive-helper/testextract.cc b/test/interactive-helper/testextract.cc index f7ddb72f0..8dfe68fc9 100644 --- a/test/interactive-helper/testextract.cc +++ b/test/interactive-helper/testextract.cc @@ -66,7 +66,8 @@ bool Go(int argc,char *argv[]) while (feof(F) == 0) { char Line[300]; - fgets(Line,sizeof(Line),F); + if (fgets(Line,sizeof(Line),F) == NULL) + return false; Itm.Name = _strstrip(Line); Itm.Type = pkgDirStream::Item::File; if (Line[strlen(Line)-1] == '/') -- cgit v1.2.3-70-g09d2 From a11afb9d0dd5d2326acb2de19ea20b49238667d0 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 21 Mar 2012 23:47:54 +0100 Subject: do not update po and pot files in the process of the build as this causes timestamp changes for the mo files which therefore can't be refcounted by dpkg for your M-A: same packages (Closes: #659333, LP: #924628) The commit also enables a top-level 'make update-po' and does all the needed changes to let this work now that update-po might be called in a freshly checkout tree --- Makefile | 6 ++++-- buildlib/defaults.mak | 2 +- buildlib/podomain.mak | 2 +- debian/changelog | 7 ++++++- doc/makefile | 11 +++-------- po/makefile | 24 +++++++++++++++--------- test/Makefile | 4 ++-- 7 files changed, 32 insertions(+), 24 deletions(-) (limited to 'test') diff --git a/Makefile b/Makefile index 9a47014c3..aa8160ac0 100644 --- a/Makefile +++ b/Makefile @@ -9,8 +9,8 @@ endif .PHONY: default default: startup all -.PHONY: headers library clean veryclean all binary program doc test -all headers library clean veryclean binary program doc dirs test: +.PHONY: headers library clean veryclean all binary program doc test update-po +startup all headers library clean veryclean binary program doc dirs test update-po: $(MAKE) -C apt-pkg $@ $(MAKE) -C apt-inst $@ $(MAKE) -C methods $@ @@ -21,6 +21,8 @@ all headers library clean veryclean binary program doc dirs test: $(MAKE) -C po $@ $(MAKE) -C test $@ +update-po: startup + # Some very common aliases .PHONY: maintainer-clean dist-clean distclean pristine sanity maintainer-clean dist-clean distclean pristine sanity: veryclean diff --git a/buildlib/defaults.mak b/buildlib/defaults.mak index edb089160..c10813e9d 100644 --- a/buildlib/defaults.mak +++ b/buildlib/defaults.mak @@ -121,7 +121,7 @@ MKDIRS := $(BIN) all: dirs binary doc binary: library program maintainer-clean dist-clean distclean pristine sanity: veryclean -headers library clean veryclean program test: +startup headers library clean veryclean program test update-po: veryclean: echo Very Clean done for $(SUBDIR) diff --git a/buildlib/podomain.mak b/buildlib/podomain.mak index 511a5cae2..bb1c77e47 100644 --- a/buildlib/podomain.mak +++ b/buildlib/podomain.mak @@ -14,7 +14,7 @@ MKDIRS += $(PO_DOMAINS)/$(MY_DOMAIN) $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list: SRC := $(addprefix $(SUBDIR)/,$(SOURCE)) $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list: makefile (echo $(SRC) | xargs -n1 echo) > $@ -binary program clean: $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list +startup binary program clean: $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list veryclean: veryclean/$(LOCAL) veryclean/po/$(LOCAL): LIST := $(PO_DOMAINS)/$(MY_DOMAIN)/$(LOCAL).$(TYPE)list diff --git a/debian/changelog b/debian/changelog index bb5d9920a..ca622a78c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,10 @@ apt (0.8.16~exp14) UNRELEASED; urgency=low - fix inconsistent clog/cout usage in the debug output [ David Kalnischkies ] + * do not update po and pot files in the process of the build as this + causes timestamp changes for the mo files which therefore can't + be refcounted by dpkg for your M-A: same packages + (Closes: #659333, LP: #924628) * debian/libapt-pkg4.12: - update symbols file * apt-pkg/packagemanager.cc: @@ -35,7 +39,8 @@ apt (0.8.16~exp14) UNRELEASED; urgency=low - do not link rred against libz anymore as FileFd handles all this transparently now - -- David Kalnischkies Tue, 20 Mar 2012 19:22:49 +0100 + + -- David Kalnischkies Wed, 21 Mar 2012 18:50:23 +0100 apt (0.8.16~exp13) experimental; urgency=low diff --git a/doc/makefile b/doc/makefile index 4fcf3bd10..fca0bfa0d 100644 --- a/doc/makefile +++ b/doc/makefile @@ -67,26 +67,21 @@ veryclean-subdirs: rm -rf $$dir; \ done +.PHONY: update-po po4a stats + ifdef PO4A doc: po4a -clean: po4a-clean - -.PHONY: update-po po4a stats update-po: po4a --previous --no-backups --force --no-translations po4a.conf -po4a-clean: - po4a --previous --rm-backups --rm-translations po4a.conf - po4a: po4a --previous --no-backups po4a.conf +endif stats: for i in po/*.po; do echo -n "$$i: "; msgfmt --statistics $$i; done -endif - ifdef DOXYGEN DOXYGEN_SOURCES = $(shell find $(BASE)/apt-pkg -not -name .\\\#* -and \( -name \*.cc -or -name \*.h \) ) diff --git a/po/makefile b/po/makefile index 9f8b7b22e..6a2bc416d 100644 --- a/po/makefile +++ b/po/makefile @@ -29,7 +29,7 @@ GETDOMAIN = $(word 1,$(subst /, ,$(1))) # Generate the list of files from the bits the other make files dropped # and produce the .pot file. $(POTFILES) : $(PO)/%.pot : - printf "%s " "Generating POT file $@" + echo "Generating POT file $@" echo $@ : $(wildcard $(PO)/domains/$*/*.*list) $(addprefix $(BASE)/,$(shell cat $(wildcard $(PO)/domains/$*/*.srclist))) > $@.d # From sh source cat $(PO)/domains/$*/*.shlist 2> /dev/null | (cd $(BASE) && xargs -n1 bash --dump-po-strings) > $(PO)/domains/$*/sh.pot @@ -40,22 +40,19 @@ $(POTFILES) : $(PO)/%.pot : --keyword=P_:1,2 \ --files-from=$(PO)/POTFILES_$*.in -o $(PO)/domains/$*/c.pot rm -f $(PO)/POTFILES_$*.in - $(MSGCOMM) --more-than=0 $(PO)/domains/$*/c.pot $(PO)/domains/$*/sh.pot --output=$@ + $(MSGCOMM) --omit-header --more-than=0 $(PO)/domains/$*/c.pot $(PO)/domains/$*/sh.pot --output=$@ # copy into the domain dirs to make rosetta happy rm -f $(PO)/domains/$*/*.pot cp $@ $(PO)/domains/$* -$(PACKAGE)-all.pot: $(POTFILES) - $(MSGCOMM) --more-than=0 $(POTFILES) --output=$@ - # Filter the complete translation with the domain specific file to produce # only the subtext needed for this domain # We cannot express the dependencies required for this directly with a pattern # rule, so we use the .d hack. -$(LANG_POFILES) : $(PO_DOMAINS)/%.po : $(PACKAGE)-all.pot +$(LANG_POFILES) : $(PO_DOMAINS)/%.po : $(POTFILES) printf "%s " "Generating $@" echo $@ : $(notdir $@) $(PO)/$(call GETDOMAIN,$*).pot > $(PO)/$(call GETDOMAIN,$*)_$(notdir $@).d - $(MSGMERGE) $(notdir $@) $(PO)/$(call GETDOMAIN,$*).pot -o $@ + $(MSGMERGE) --no-location $(notdir $@) $(PO)/$(call GETDOMAIN,$*).pot -o $@ $(MOFILES) : $(PO_DOMAINS)/%.mo : $(PO_DOMAINS)/%.po printf "%s: " "Generating $(LOCALE)/$(notdir $*)/LC_MESSAGES/$(call GETDOMAIN,$*).mo" @@ -66,7 +63,16 @@ $(MOFILES) : $(PO_DOMAINS)/%.mo : $(PO_DOMAINS)/%.po stats: for i in *.pot *.po; do echo -n "$$i: "; msgfmt --statistics $$i; done -binary: $(POTFILES) $(PACKAGE)-all.pot $(MOFILES) +binary: $(POTFILES) $(MOFILES) + +$(PACKAGE)-all.pot: $(POTFILES) + # we create our partial pot files without a header to avoid changing dates in *.mo files, + # but we want a header for our master-pot file, so we use a dummy pot with nothing but the header + $(XGETTEXT) --default-domain=$(PO)/$(PACKAGE)-dummy.pot --foreign --language=c \ + -o $(PO)/$(PACKAGE)-dummy.pot --force-po --package-name=$(PACKAGE) \ + --package-version=$(VERSION) --msgid-bugs-address=deity@lists.debian.org /dev/null + $(MSGCOMM) --more-than=0 $(PO)/$(PACKAGE)-dummy.pot $(POTFILES) --output=$(PACKAGE)-all.pot + rm -f $(PO)/$(PACKAGE)-dummy.pot .PHONY: update-po update-po: $(PACKAGE)-all.pot @@ -78,7 +84,7 @@ update-po: $(PACKAGE)-all.pot done clean: clean/local -clean/local: update-po +clean/local: rm -f $(MOFILES) $(LANG_POFILES) $(PO)/*.d # Include the dependencies that are available diff --git a/test/Makefile b/test/Makefile index da0a49b0c..b42a90b25 100644 --- a/test/Makefile +++ b/test/Makefile @@ -6,8 +6,8 @@ ifndef NOISY .SILENT: endif -.PHONY: headers library clean veryclean all binary program doc test -all clean veryclean binary program dirs test: +.PHONY: startup headers library clean veryclean all binary program doc test update-po +startup all clean veryclean binary program dirs test update-po: $(MAKE) -C libapt $@ $(MAKE) -C interactive-helper $@ -- cgit v1.2.3-70-g09d2 From 9c257550854273ff6defb1816cb210d51f64db03 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 22 Mar 2012 13:09:22 +0100 Subject: * apt-inst/database.{cc,h}, apt-inst/deb/dpkgdb.{cc,h}: - drop instead of fix as it is only needed if you want to reimplement dpkg and comes straight from the beginning of last decade (Closes: #663372) * apt-inst/deb/debfile.cc: - {Extract,Merge}Control() is another instance of "lets reimplement dpkg" so shot of this code before someone ends up using this… MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apt-inst/database.cc | 35 --- apt-inst/database.h | 60 ---- apt-inst/deb/debfile.cc | 63 ----- apt-inst/deb/debfile.h | 10 +- apt-inst/deb/dpkgdb.cc | 493 --------------------------------- apt-inst/deb/dpkgdb.h | 55 ---- apt-inst/makefile | 7 +- debian/changelog | 8 +- debian/libapt-inst1.4.symbols | 28 -- test/interactive-helper/makefile | 12 +- test/interactive-helper/testextract.cc | 104 ------- 11 files changed, 15 insertions(+), 860 deletions(-) delete mode 100644 apt-inst/database.cc delete mode 100644 apt-inst/database.h delete mode 100644 apt-inst/deb/dpkgdb.cc delete mode 100644 apt-inst/deb/dpkgdb.h delete mode 100644 test/interactive-helper/testextract.cc (limited to 'test') diff --git a/apt-inst/database.cc b/apt-inst/database.cc deleted file mode 100644 index da7613491..000000000 --- a/apt-inst/database.cc +++ /dev/null @@ -1,35 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -// $Id: database.cc,v 1.2 2001/02/20 07:03:16 jgg Exp $ -/* ###################################################################### - - Data Base Abstraction - - ##################################################################### */ - /*}}}*/ -// Include Files /*{{{*/ -#include - -#include -#include -#include - /*}}}*/ - -// DataBase::GetMetaTmp - Get the temp dir /*{{{*/ -// --------------------------------------------------------------------- -/* This re-initializes the meta temporary directory if it hasn't yet - been inited for this cycle. The flag is the emptyness of MetaDir */ -bool pkgDataBase::GetMetaTmp(std::string &Dir) -{ - if (MetaDir.empty() == true) - if (InitMetaTmp(MetaDir) == false) - return false; - Dir = MetaDir; - return true; -} - /*}}}*/ -pkgDataBase::~pkgDataBase() -{ - delete Cache; - delete FList; -} diff --git a/apt-inst/database.h b/apt-inst/database.h deleted file mode 100644 index 64e149f98..000000000 --- a/apt-inst/database.h +++ /dev/null @@ -1,60 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -// $Id: database.h,v 1.2 2001/02/20 07:03:16 jgg Exp $ -/* ###################################################################### - - Data Base Abstraction - - This class provides a simple interface to an abstract notion of a - database directory for storing state information about the system. - - The 'Meta' information for a package is the control information and - setup scripts stored inside the archive. GetMetaTmp returns the name of - a directory that is used to store named files containing the control - information. - - The File Listing is the database of installed files. It is loaded - into the memory/persistent cache structure by the ReadFileList method. - - ##################################################################### */ - /*}}}*/ -#ifndef PKGLIB_DATABASE_H -#define PKGLIB_DATABASE_H - -#include - -#include - -#ifndef APT_8_CLEANER_HEADERS -#include -#endif - -class pkgFLCache; -class OpProgress; - -class pkgDataBase -{ - protected: - - pkgCacheGenerator *Cache; - pkgFLCache *FList; - std::string MetaDir; - virtual bool InitMetaTmp(std::string &Dir) = 0; - - public: - - // Some manipulators for the cache and generator - inline pkgCache &GetCache() {return Cache->GetCache();}; - inline pkgFLCache &GetFLCache() {return *FList;}; - inline pkgCacheGenerator &GetGenerator() {return *Cache;}; - - bool GetMetaTmp(std::string &Dir); - virtual bool ReadyFileList(OpProgress &Progress) = 0; - virtual bool ReadyPkgCache(OpProgress &Progress) = 0; - virtual bool LoadChanges() = 0; - - pkgDataBase() : Cache(0), FList(0) {}; - virtual ~pkgDataBase(); -}; - -#endif diff --git a/apt-inst/deb/debfile.cc b/apt-inst/deb/debfile.cc index aeab82e82..ab4037915 100644 --- a/apt-inst/deb/debfile.cc +++ b/apt-inst/deb/debfile.cc @@ -18,7 +18,6 @@ // Include Files /*{{{*/ #include -#include #include #include #include @@ -90,42 +89,6 @@ const ARArchive::Member *debDebFile::GotoMember(const char *Name) return Member; } /*}}}*/ -// DebFile::ExtractControl - Extract Control information /*{{{*/ -// --------------------------------------------------------------------- -/* Extract the control information into the Database's temporary - directory. */ -bool debDebFile::ExtractControl(pkgDataBase &DB) -{ - // Get the archive member and positition the file - const ARArchive::Member *Member = GotoMember("control.tar.gz"); - if (Member == 0) - return false; - - // Prepare Tar - ControlExtract Extract; - ExtractTar Tar(File,Member->Size,"gzip"); - if (_error->PendingError() == true) - return false; - - // Get into the temporary directory - std::string Cwd = SafeGetCWD(); - std::string Tmp; - if (DB.GetMetaTmp(Tmp) == false) - return false; - if (chdir(Tmp.c_str()) != 0) - return _error->Errno("chdir",_("Couldn't change to %s"),Tmp.c_str()); - - // Do extraction - if (Tar.Go(Extract) == false) - return false; - - // Switch out of the tmp directory. - if (chdir(Cwd.c_str()) != 0) - return _error->Errno("chdir",_("Unable to change to %s"),Cwd.c_str()); - - return true; -} - /*}}}*/ // DebFile::ExtractArchive - Extract the archive data itself /*{{{*/ // --------------------------------------------------------------------- /* Simple wrapper around tar.. */ @@ -167,32 +130,6 @@ bool debDebFile::ExtractArchive(pkgDirStream &Stream) return Tar.Go(Stream); } /*}}}*/ -// DebFile::MergeControl - Merge the control information /*{{{*/ -// --------------------------------------------------------------------- -/* This reads the extracted control file into the cache and returns the - version that was parsed. All this really does is select the correct - parser and correct file to parse. */ -pkgCache::VerIterator debDebFile::MergeControl(pkgDataBase &DB) -{ - // Open the control file - std::string Tmp; - if (DB.GetMetaTmp(Tmp) == false) - return pkgCache::VerIterator(DB.GetCache()); - FileFd Fd(Tmp + "control",FileFd::ReadOnly); - if (_error->PendingError() == true) - return pkgCache::VerIterator(DB.GetCache()); - - // Parse it - debListParser Parse(&Fd); - pkgCache::VerIterator Ver(DB.GetCache()); - if (DB.GetGenerator().MergeList(Parse,&Ver) == false) - return pkgCache::VerIterator(DB.GetCache()); - - if (Ver.end() == true) - _error->Error(_("Failed to locate a valid control file")); - return Ver; -} - /*}}}*/ // DebFile::ControlExtract::DoItem - Control Tar Extraction /*{{{*/ // --------------------------------------------------------------------- diff --git a/apt-inst/deb/debfile.h b/apt-inst/deb/debfile.h index 5e1ea1d2f..d94b74446 100644 --- a/apt-inst/deb/debfile.h +++ b/apt-inst/deb/debfile.h @@ -29,12 +29,7 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -#include -#endif - class FileFd; -class pkgDataBase; class debDebFile { @@ -46,13 +41,10 @@ class debDebFile bool CheckMember(const char *Name); public: - class ControlExtract; class MemControlExtract; - - bool ExtractControl(pkgDataBase &DB); + bool ExtractArchive(pkgDirStream &Stream); - pkgCache::VerIterator MergeControl(pkgDataBase &DB); const ARArchive::Member *GotoMember(const char *Name); inline FileFd &GetFile() {return File;}; diff --git a/apt-inst/deb/dpkgdb.cc b/apt-inst/deb/dpkgdb.cc deleted file mode 100644 index 71a0c2177..000000000 --- a/apt-inst/deb/dpkgdb.cc +++ /dev/null @@ -1,493 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -// $Id: dpkgdb.cc,v 1.7.2.1 2004/01/16 18:58:50 mdz Exp $ -/* ###################################################################### - - DPKGv1 Database Implemenation - - This class provides parsers and other implementations for the DPKGv1 - database. It reads the diversion file, the list files and the status - file to build both the list of currently installed files and the - currently installed package list. - - ##################################################################### */ - /*}}}*/ -// Include Files /*{{{*/ -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - /*}}}*/ -using namespace std; - -// EraseDir - Erase A Directory /*{{{*/ -// --------------------------------------------------------------------- -/* This is necessary to create a new empty sub directory. The caller should - invoke mkdir after this with the proper permissions and check for - error. Maybe stick this in fileutils */ -static bool EraseDir(const char *Dir) -{ - // First we try a simple RM - if (rmdir(Dir) == 0 || - errno == ENOENT) - return true; - - // A file? Easy enough.. - if (errno == ENOTDIR) - { - if (unlink(Dir) != 0) - return _error->Errno("unlink",_("Failed to remove %s"),Dir); - return true; - } - - // Should not happen - if (errno != ENOTEMPTY) - return _error->Errno("rmdir",_("Failed to remove %s"),Dir); - - // Purge it using rm - pid_t Pid = ExecFork(); - - // Spawn the subprocess - if (Pid == 0) - { - execlp(_config->Find("Dir::Bin::rm","/bin/rm").c_str(), - "rm","-rf","--",Dir,(char *)NULL); - _exit(100); - } - return ExecWait(Pid,_config->Find("dir::bin::rm","/bin/rm").c_str()); -} - /*}}}*/ -// DpkgDB::debDpkgDB - Constructor /*{{{*/ -// --------------------------------------------------------------------- -/* */ -debDpkgDB::debDpkgDB() : CacheMap(0), FileMap(0) -{ - AdminDir = flNotFile(_config->Find("Dir::State::status")); - DiverInode = 0; - DiverTime = 0; -} - /*}}}*/ -// DpkgDB::~debDpkgDB - Destructor /*{{{*/ -// --------------------------------------------------------------------- -/* */ -debDpkgDB::~debDpkgDB() -{ - delete Cache; - Cache = 0; - delete CacheMap; - CacheMap = 0; - - delete FList; - FList = 0; - delete FileMap; - FileMap = 0; -} - /*}}}*/ -// DpkgDB::InitMetaTmp - Get the temp dir for meta information /*{{{*/ -// --------------------------------------------------------------------- -/* This creats+empties the meta temporary directory /var/lib/dpkg/tmp.ci - Only one package at a time can be using the returned meta directory. */ -bool debDpkgDB::InitMetaTmp(string &Dir) -{ - string Tmp = AdminDir + "tmp.ci/"; - if (EraseDir(Tmp.c_str()) == false) - return _error->Error(_("Unable to create %s"),Tmp.c_str()); - if (mkdir(Tmp.c_str(),0755) != 0) - return _error->Errno("mkdir",_("Unable to create %s"),Tmp.c_str()); - - // Verify it is on the same filesystem as the main info directory - dev_t Dev; - struct stat St; - if (stat((AdminDir + "info").c_str(),&St) != 0) - return _error->Errno("stat",_("Failed to stat %sinfo"),AdminDir.c_str()); - Dev = St.st_dev; - if (stat(Tmp.c_str(),&St) != 0) - return _error->Errno("stat",_("Failed to stat %s"),Tmp.c_str()); - if (Dev != St.st_dev) - return _error->Error(_("The info and temp directories need to be on the same filesystem")); - - // Done - Dir = Tmp; - return true; -} - /*}}}*/ -// DpkgDB::ReadyPkgCache - Prepare the cache with the current status /*{{{*/ -// --------------------------------------------------------------------- -/* This reads in the status file into an empty cache. This really needs - to be somehow unified with the high level APT notion of the Database - directory, but there is no clear way on how to do that yet. */ -bool debDpkgDB::ReadyPkgCache(OpProgress &Progress) -{ - if (Cache != 0) - { - Progress.OverallProgress(1,1,1,_("Reading package lists")); - return true; - } - - if (CacheMap != 0) - { - delete CacheMap; - CacheMap = 0; - } - - if (pkgCacheGenerator::MakeOnlyStatusCache(&Progress,&CacheMap) == false) - return false; - Cache->DropProgress(); - - return true; -} - /*}}}*/ -// DpkgDB::ReadFList - Read the File Listings in /*{{{*/ -// --------------------------------------------------------------------- -/* This reads the file listing in from the state directory. This is a - performance critical routine, as it needs to parse about 50k lines of - text spread over a hundred or more files. For an initial cold start - most of the time is spent in reading file inodes and so on, not - actually parsing. */ -bool debDpkgDB::ReadFList(OpProgress &Progress) -{ - // Count the number of packages we need to read information for - unsigned long Total = 0; - pkgCache &Cache = this->Cache->GetCache(); - for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) - { - // Only not installed packages have no files. - if (I->CurrentState == pkgCache::State::NotInstalled) - continue; - Total++; - } - - /* Switch into the admin dir, this prevents useless lookups for the - path components */ - string Cwd = SafeGetCWD(); - if (chdir((AdminDir + "info/").c_str()) != 0) - return _error->Errno("chdir",_("Failed to change to the admin dir %sinfo"),AdminDir.c_str()); - - // Allocate a buffer. Anything larger than this buffer will be mmaped - unsigned long BufSize = 32*1024; - char *Buffer = new char[BufSize]; - - // Begin Loading them - unsigned long Count = 0; - char Name[300]; - for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) - { - /* Only not installed packages have no files. ConfFile packages have - file lists but we don't want to read them in */ - if (I->CurrentState == pkgCache::State::NotInstalled || - I->CurrentState == pkgCache::State::ConfigFiles) - continue; - - // Fetch a package handle to associate with the file - pkgFLCache::PkgIterator FlPkg = FList->GetPkg(I.Name(),0,true); - if (FlPkg.end() == true) - { - _error->Error(_("Internal error getting a package name")); - break; - } - - Progress.OverallProgress(Count,Total,1,_("Reading file listing")); - - // Open the list file - snprintf(Name,sizeof(Name),"%s.list",I.Name()); - int Fd = open(Name,O_RDONLY); - - /* Okay this is very strange and bad.. Best thing is to bail and - instruct the user to look into it. */ - struct stat Stat; - if (Fd == -1 || fstat(Fd,&Stat) != 0) - { - _error->Errno("open",_("Failed to open the list file '%sinfo/%s'. If you " - "cannot restore this file then make it empty " - "and immediately re-install the same version of the package!"), - AdminDir.c_str(),Name); - break; - } - - // Set File to be a memory buffer containing the whole file - char *File; - if ((unsigned)Stat.st_size < BufSize) - { - if (read(Fd,Buffer,Stat.st_size) != Stat.st_size) - { - _error->Errno("read",_("Failed reading the list file %sinfo/%s"), - AdminDir.c_str(),Name); - close(Fd); - break; - } - File = Buffer; - } - else - { - // Use mmap - File = (char *)mmap(0,Stat.st_size,PROT_READ,MAP_PRIVATE,Fd,0); - if (File == (char *)(-1)) - { - _error->Errno("mmap",_("Failed reading the list file %sinfo/%s"), - AdminDir.c_str(),Name); - close(Fd); - break; - } - } - - // Parse it - const char *Start = File; - const char *End = File; - const char *Finish = File + Stat.st_size; - for (; End < Finish; End++) - { - // Not an end of line - if (*End != '\n' && End + 1 < Finish) - continue; - - // Skip blank lines - if (End - Start > 1) - { - pkgFLCache::NodeIterator Node = FList->GetNode(Start,End, - FlPkg.Offset(),true,false); - if (Node.end() == true) - { - _error->Error(_("Internal error getting a node")); - break; - } - } - - // Skip past the end of line - for (; *End == '\n' && End < Finish; End++); - Start = End; - } - - close(Fd); - if ((unsigned)Stat.st_size >= BufSize) - munmap((caddr_t)File,Stat.st_size); - - // Failed - if (End < Finish) - break; - - Count++; - } - - delete [] Buffer; - if (chdir(Cwd.c_str()) != 0) - return _error->Errno("chdir",_("Unable to change to %s"),Cwd.c_str()); - return !_error->PendingError(); -} - /*}}}*/ -// DpkgDB::ReadDiversions - Load the diversions file /*{{{*/ -// --------------------------------------------------------------------- -/* Read the diversion file in from disk. This is usually invoked by - LoadChanges before performing an operation that uses the FLCache. */ -bool debDpkgDB::ReadDiversions() -{ - struct stat Stat; - if (stat((AdminDir + "diversions").c_str(),&Stat) != 0) - return true; - - if (_error->PendingError() == true) - return false; - - FILE *Fd = fopen((AdminDir + "diversions").c_str(),"r"); - if (Fd == 0) - return _error->Errno("fopen",_("Failed to open the diversions file %sdiversions"),AdminDir.c_str()); - - FList->BeginDiverLoad(); - while (1) - { - char From[300]; - char To[300]; - char Package[100]; - - // Read the three lines in - if (fgets(From,sizeof(From),Fd) == 0) - break; - if (fgets(To,sizeof(To),Fd) == 0 || - fgets(Package,sizeof(Package),Fd) == 0) - { - _error->Error(_("The diversion file is corrupted")); - break; - } - - // Strip the \ns - unsigned long Len = strlen(From); - if (Len < 2 || From[Len-1] != '\n') - _error->Error(_("Invalid line in the diversion file: %s"),From); - else - From[Len-1] = 0; - Len = strlen(To); - if (Len < 2 || To[Len-1] != '\n') - _error->Error(_("Invalid line in the diversion file: %s"),To); - else - To[Len-1] = 0; - Len = strlen(Package); - if (Len < 2 || Package[Len-1] != '\n') - _error->Error(_("Invalid line in the diversion file: %s"),Package); - else - Package[Len-1] = 0; - - // Make sure the lines were parsed OK - if (_error->PendingError() == true) - break; - - // Fetch a package - if (strcmp(Package,":") == 0) - Package[0] = 0; - pkgFLCache::PkgIterator FlPkg = FList->GetPkg(Package,0,true); - if (FlPkg.end() == true) - { - _error->Error(_("Internal error getting a package name")); - break; - } - - // Install the diversion - if (FList->AddDiversion(FlPkg,From,To) == false) - { - _error->Error(_("Internal error adding a diversion")); - break; - } - } - if (_error->PendingError() == false) - FList->FinishDiverLoad(); - - DiverInode = Stat.st_ino; - DiverTime = Stat.st_mtime; - - fclose(Fd); - return !_error->PendingError(); -} - /*}}}*/ -// DpkgDB::ReadFileList - Read the file listing /*{{{*/ -// --------------------------------------------------------------------- -/* Read in the file listing. The file listing is created from three - sources, *.list, Conffile sections and the Diversion table. */ -bool debDpkgDB::ReadyFileList(OpProgress &Progress) -{ - if (Cache == 0) - return _error->Error(_("The pkg cache must be initialized first")); - if (FList != 0) - { - Progress.OverallProgress(1,1,1,_("Reading file listing")); - return true; - } - - // Create the cache and read in the file listing - FileMap = new DynamicMMap(MMap::Public); - FList = new pkgFLCache(*FileMap); - if (_error->PendingError() == true || - ReadFList(Progress) == false || - ReadConfFiles() == false || - ReadDiversions() == false) - { - delete FList; - delete FileMap; - FileMap = 0; - FList = 0; - return false; - } - - cout << "Node: " << FList->HeaderP->NodeCount << ',' << FList->HeaderP->UniqNodes << endl; - cout << "Dir: " << FList->HeaderP->DirCount << endl; - cout << "Package: " << FList->HeaderP->PackageCount << endl; - cout << "HashSize: " << FList->HeaderP->HashSize << endl; - cout << "Size: " << FileMap->Size() << endl; - cout << endl; - - return true; -} - /*}}}*/ -// DpkgDB::ReadConfFiles - Read the conf file sections from the s-file /*{{{*/ -// --------------------------------------------------------------------- -/* Reading the conf files is done by reparsing the status file. This is - actually rather fast so it is no big deal. */ -bool debDpkgDB::ReadConfFiles() -{ - FileFd File(_config->FindFile("Dir::State::status"),FileFd::ReadOnly); - pkgTagFile Tags(&File); - if (_error->PendingError() == true) - return false; - - pkgTagSection Section; - while (1) - { - // Skip to the next section - unsigned long Offset = Tags.Offset(); - if (Tags.Step(Section) == false) - break; - - // Parse the line - const char *Start; - const char *Stop; - if (Section.Find("Conffiles",Start,Stop) == false) - continue; - - const char *PkgStart; - const char *PkgEnd; - if (Section.Find("Package",PkgStart,PkgEnd) == false) - return _error->Error(_("Failed to find a Package: header, offset %lu"),Offset); - - // Snag a package record for it - pkgFLCache::PkgIterator FlPkg = FList->GetPkg(PkgStart,PkgEnd,true); - if (FlPkg.end() == true) - return _error->Error(_("Internal error getting a package name")); - - // Parse the conf file lines - while (1) - { - for (; isspace(*Start) != 0 && Start < Stop; Start++); - if (Start == Stop) - break; - - // Split it into words - const char *End = Start; - for (; isspace(*End) == 0 && End < Stop; End++); - const char *StartMd5 = End; - for (; isspace(*StartMd5) != 0 && StartMd5 < Stop; StartMd5++); - const char *EndMd5 = StartMd5; - for (; isspace(*EndMd5) == 0 && EndMd5 < Stop; EndMd5++); - if (StartMd5 == EndMd5 || Start == End) - return _error->Error(_("Bad ConfFile section in the status file. Offset %lu"),Offset); - - // Insert a new entry - unsigned char MD5[16]; - if (Hex2Num(string(StartMd5,EndMd5-StartMd5),MD5,16) == false) - return _error->Error(_("Error parsing MD5. Offset %lu"),Offset); - - if (FList->AddConfFile(Start,End,FlPkg,MD5) == false) - return false; - Start = EndMd5; - } - } - - return true; -} - /*}}}*/ -// DpkgDB::LoadChanges - Read in any changed state files /*{{{*/ -// --------------------------------------------------------------------- -/* The only file in the dpkg system that can change while packages are - unpacking is the diversions file. */ -bool debDpkgDB::LoadChanges() -{ - struct stat Stat; - if (stat((AdminDir + "diversions").c_str(),&Stat) != 0) - return true; - if (DiverInode == Stat.st_ino && DiverTime == Stat.st_mtime) - return true; - return ReadDiversions(); -} - /*}}}*/ diff --git a/apt-inst/deb/dpkgdb.h b/apt-inst/deb/dpkgdb.h deleted file mode 100644 index f28563a93..000000000 --- a/apt-inst/deb/dpkgdb.h +++ /dev/null @@ -1,55 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -// $Id: dpkgdb.h,v 1.2 2001/02/20 07:03:17 jgg Exp $ -/* ###################################################################### - - DPKGv1 Data Base Implemenation - - The DPKGv1 database is typically stored in /var/lib/dpkg/. For - DPKGv1 the 'meta' information is the contents of the .deb control.tar.gz - member prepended by the package name. The meta information is unpacked - in its temporary directory and then migrated into the main list dir - at a checkpoint. - - Journaling is providing by syncronized file writes to the updates sub - directory. - - ##################################################################### */ - /*}}}*/ -#ifndef PKGLIB_DPKGDB_H -#define PKGLIB_DPKGDB_H - - -#include - -#include - -class DynamicMMap; -class OpProgress; - -class debDpkgDB : public pkgDataBase -{ - protected: - - std::string AdminDir; - DynamicMMap *CacheMap; - DynamicMMap *FileMap; - unsigned long DiverInode; - signed long DiverTime; - - virtual bool InitMetaTmp(std::string &Dir); - bool ReadFList(OpProgress &Progress); - bool ReadDiversions(); - bool ReadConfFiles(); - - public: - - virtual bool ReadyFileList(OpProgress &Progress); - virtual bool ReadyPkgCache(OpProgress &Progress); - virtual bool LoadChanges(); - - debDpkgDB(); - virtual ~debDpkgDB(); -}; - -#endif diff --git a/apt-inst/makefile b/apt-inst/makefile index 1b9cc2676..c716b8c96 100644 --- a/apt-inst/makefile +++ b/apt-inst/makefile @@ -23,12 +23,11 @@ APT_DOMAIN:=libapt-inst$(MAJOR) SOURCE = contrib/extracttar.cc contrib/arfile.cc # Source code for the main library -SOURCE+= filelist.cc database.cc dirstream.cc extract.cc \ - deb/dpkgdb.cc deb/debfile.cc +SOURCE+= filelist.cc dirstream.cc extract.cc deb/debfile.cc # Public header files -HEADERS = extracttar.h arfile.h filelist.h database.h extract.h \ - dpkgdb.h dirstream.h debfile.h +HEADERS = extracttar.h arfile.h filelist.h extract.h \ + dirstream.h debfile.h HEADERS := $(addprefix apt-pkg/,$(HEADERS)) include $(LIBRARY_H) diff --git a/debian/changelog b/debian/changelog index e1e023c7d..127152b09 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,12 @@ apt (0.8.16~exp14) UNRELEASED; urgency=low causes timestamp changes for the mo files which therefore can't be refcounted by dpkg for your M-A: same packages (Closes: #659333, LP: #924628) + * apt-inst/database.{cc,h}, apt-inst/deb/dpkgdb.{cc,h}: + - drop instead of fix as it is only needed if you want to reimplement dpkg + and comes straight from the beginning of last decade (Closes: #663372) + * apt-inst/deb/debfile.cc: + - {Extract,Merge}Control() is another instance of "lets reimplement dpkg" + so shot of this code before someone ends up using this… * debian/libapt-pkg4.12: - update symbols file * debian/apt-utils.install: @@ -46,7 +52,7 @@ apt (0.8.16~exp14) UNRELEASED; urgency=low * doc/apt-get.8.xml: - typofix: respect → respecting, thanks Mike Erickson! (Closes: #664833) - -- David Kalnischkies Thu, 22 Mar 2012 10:33:17 +0100 + -- David Kalnischkies Thu, 22 Mar 2012 12:53:34 +0100 apt (0.8.16~exp13) experimental; urgency=low diff --git a/debian/libapt-inst1.4.symbols b/debian/libapt-inst1.4.symbols index bba2cb653..cade0990d 100644 --- a/debian/libapt-inst1.4.symbols +++ b/debian/libapt-inst1.4.symbols @@ -7,11 +7,9 @@ libapt-inst.so.1.4 libapt-inst1.4 #MINVER# (c++)"ExtractTar::~ExtractTar()@Base" 0.8.0 (c++)"debDebFile::GotoMember(char const*)@Base" 0.8.0 (c++)"debDebFile::CheckMember(char const*)@Base" 0.8.0 - (c++)"debDebFile::MergeControl(pkgDataBase&)@Base" 0.8.0 (c++)"debDebFile::ControlExtract::DoItem(pkgDirStream::Item&, int&)@Base" 0.8.0 (c++)"debDebFile::ControlExtract::~ControlExtract()@Base" 0.8.0 (c++)"debDebFile::ExtractArchive(pkgDirStream&)@Base" 0.8.0 - (c++)"debDebFile::ExtractControl(pkgDataBase&)@Base" 0.8.0 (c++)"debDebFile::MemControlExtract::TakeControl(void const*, unsigned long)@Base" 0.8.0 (c++)"debDebFile::MemControlExtract::Read(debDebFile&)@Base" 0.8.0 (c++)"debDebFile::MemControlExtract::DoItem(pkgDirStream::Item&, int&)@Base" 0.8.0 @@ -39,16 +37,11 @@ libapt-inst.so.1.4 libapt-inst1.4 #MINVER# (c++)"pkgFLCache::HashNode(pkgFLCache::NodeIterator const&)@Base" 0.8.0 (c++)"pkgFLCache::PrintTree(unsigned int, unsigned long)@Base" 0.8.0 (c++)"pkgFLCache::pkgFLCache(DynamicMMap&)@Base" 0.8.0 - (c++)"pkgDataBase::GetMetaTmp(std::basic_string, std::allocator >&)@Base" 0.8.0 - (c++)"pkgDataBase::~pkgDataBase()@Base" 0.8.0 (c++)"pkgDirStream::FinishedFile(pkgDirStream::Item&, int)@Base" 0.8.0 (c++)"pkgDirStream::Fail(pkgDirStream::Item&, int)@Base" 0.8.0 (c++)"pkgDirStream::DoItem(pkgDirStream::Item&, int&)@Base" 0.8.0 (c++)"pkgDirStream::Process(pkgDirStream::Item&, unsigned char const*, unsigned long, unsigned long)@Base" 0.8.0 (c++)"pkgDirStream::~pkgDirStream()@Base" 0.8.0 - (c++|optional)"debListParser::~debListParser()@Base" 0.8.0 - (c++|optional)"pkgCacheGenerator::ListParser::CollectFileProvides(pkgCache&, pkgCache::VerIterator&)@Base" 0.8.0 - (c++|optional)"pkgCacheGenerator::ListParser::~ListParser()@Base" 0.8.0 (c++|optional)"pkgCache::DepIterator::operator++(int)@Base" 0.8.0 (c++|optional)"pkgCache::DepIterator::operator++()@Base" 0.8.0 (c++|optional)"pkgCache::VerIterator::operator++(int)@Base" 0.8.0 @@ -56,15 +49,6 @@ libapt-inst.so.1.4 libapt-inst1.4 #MINVER# (c++)"ARArchive::LoadHeaders()@Base" 0.8.0 (c++)"ARArchive::ARArchive(FileFd&)@Base" 0.8.0 (c++)"ARArchive::~ARArchive()@Base" 0.8.0 - (c++)"debDpkgDB::InitMetaTmp(std::basic_string, std::allocator >&)@Base" 0.8.0 - (c++)"debDpkgDB::LoadChanges()@Base" 0.8.0 - (c++)"debDpkgDB::ReadConfFiles()@Base" 0.8.0 - (c++)"debDpkgDB::ReadyFileList(OpProgress&)@Base" 0.8.0 - (c++)"debDpkgDB::ReadyPkgCache(OpProgress&)@Base" 0.8.0 - (c++)"debDpkgDB::ReadDiversions()@Base" 0.8.0 - (c++)"debDpkgDB::ReadFList(OpProgress&)@Base" 0.8.0 - (c++)"debDpkgDB::debDpkgDB()@Base" 0.8.0 - (c++)"debDpkgDB::~debDpkgDB()@Base" 0.8.0 (c++)"pkgFLCache::NodeIterator::RealPackage() const@Base" 0.8.0 (c++)"pkgFLCache::Header::CheckSizes(pkgFLCache::Header&) const@Base" 0.8.0 (c++|optional)"pkgCache::DepIterator::OwnerPointer() const@Base" 0.8.0 @@ -72,42 +56,30 @@ libapt-inst.so.1.4 libapt-inst1.4 #MINVER# (c++)"ARArchive::FindMember(char const*) const@Base" 0.8.0 (c++)"typeinfo for ExtractTar@Base" 0.8.0 (c++)"typeinfo for pkgExtract@Base" 0.8.0 - (c++)"typeinfo for pkgDataBase@Base" 0.8.0 (c++)"typeinfo for pkgDirStream@Base" 0.8.0 - (c++)"typeinfo for debDpkgDB@Base" 0.8.0 (c++)"typeinfo for debDebFile::ControlExtract@Base" 0.8.0 (c++)"typeinfo for debDebFile::MemControlExtract@Base" 0.8.0 - (c++|optional)"typeinfo for pkgCacheGenerator::ListParser@Base" 0.8.0 (c++|optional)"typeinfo for pkgCache::DepIterator@Base" 0.8.0 (c++|optional)"typeinfo for pkgCache::VerIterator@Base" 0.8.0 (c++|optional)"typeinfo for pkgCache::Iterator@Base" 0.8.0 - (c++|optional)"typeinfo for pkgCache::Iterator@Base" 0.8.0 (c++|optional)"typeinfo for pkgCache::Iterator@Base" 0.8.0 (c++)"typeinfo name for ExtractTar@Base" 0.8.0 (c++)"typeinfo name for pkgExtract@Base" 0.8.0 - (c++)"typeinfo name for pkgDataBase@Base" 0.8.0 (c++)"typeinfo name for pkgDirStream@Base" 0.8.0 - (c++)"typeinfo name for debDpkgDB@Base" 0.8.0 (c++)"typeinfo name for debDebFile::ControlExtract@Base" 0.8.0 (c++)"typeinfo name for debDebFile::MemControlExtract@Base" 0.8.0 - (c++|optional)"typeinfo name for pkgCacheGenerator::ListParser@Base" 0.8.0 (c++|optional)"typeinfo name for pkgCache::DepIterator@Base" 0.8.0 (c++|optional)"typeinfo name for pkgCache::VerIterator@Base" 0.8.0 (c++|optional)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 - (c++|optional)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 (c++|optional)"typeinfo name for pkgCache::Iterator@Base" 0.8.0 (c++)"vtable for ExtractTar@Base" 0.8.0 (c++)"vtable for pkgExtract@Base" 0.8.0 - (c++)"vtable for pkgDataBase@Base" 0.8.0 (c++)"vtable for pkgDirStream@Base" 0.8.0 - (c++)"vtable for debDpkgDB@Base" 0.8.0 (c++)"vtable for debDebFile::ControlExtract@Base" 0.8.0 (c++)"vtable for debDebFile::MemControlExtract@Base" 0.8.0 - (c++|optional)"vtable for pkgCacheGenerator::ListParser@Base" 0.8.0 (c++|optional)"vtable for pkgCache::DepIterator@Base" 0.8.0 (c++|optional)"vtable for pkgCache::VerIterator@Base" 0.8.0 (c++|optional)"vtable for pkgCache::Iterator@Base" 0.8.0 - (c++|optional)"vtable for pkgCache::Iterator@Base" 0.8.0 (c++|optional)"vtable for pkgCache::Iterator@Base" 0.8.0 ### gcc-4.4 specific # (c++|regex|optional=std)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0 diff --git a/test/interactive-helper/makefile b/test/interactive-helper/makefile index b96139fda..10d1e44ec 100644 --- a/test/interactive-helper/makefile +++ b/test/interactive-helper/makefile @@ -11,28 +11,24 @@ SLIBS = SOURCE = mthdcat.cc include $(PROGRAM_H) -# Version compare tester -PROGRAM=testextract -SLIBS = -lapt-pkg -lapt-inst -LIB_MAKES = apt-pkg/makefile apt-inst/makefile -SOURCE = testextract.cc -include $(PROGRAM_H) - # Program for testing the tar/deb extractor PROGRAM=testdeb SLIBS = -lapt-pkg -lapt-inst +LIB_MAKES = apt-pkg/makefile apt-inst/makefile SOURCE = testdeb.cc include $(PROGRAM_H) # Program for testing tar extraction PROGRAM=extract-control SLIBS = -lapt-pkg -lapt-inst +LIB_MAKES = apt-pkg/makefile apt-inst/makefile SOURCE = extract-control.cc include $(PROGRAM_H) # Program for testing udevcdrom PROGRAM=test_udevcdrom -SLIBS = -lapt-pkg +SLIBS = -lapt-pkg +LIB_MAKES = apt-pkg/makefile SOURCE = test_udevcdrom.cc include $(PROGRAM_H) diff --git a/test/interactive-helper/testextract.cc b/test/interactive-helper/testextract.cc deleted file mode 100644 index 8dfe68fc9..000000000 --- a/test/interactive-helper/testextract.cc +++ /dev/null @@ -1,104 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using namespace std; - -bool Go(int argc,char *argv[]) -{ - // Init the database - debDpkgDB Db; - { - OpTextProgress Prog; - - if (Db.ReadyPkgCache(Prog) == false) - return false; - Prog.Done(); - - if (Db.ReadyFileList(Prog) == false) - return false; - } - - for (int I = 1; I < argc; I++) - { - const char *Fake = 0; - for (unsigned J = 0; argv[I][J] != 0; J++) - { - if (argv[I][J] != ',') - continue; - Fake = argv[I] + J + 1; - argv[I][J] = 0; - } - - FileFd F(argv[I],FileFd::ReadOnly); - debDebFile Deb(F); - - if (_error->PendingError() == true) - return false; - - if (Deb.ExtractControl(Db) == false) - return false; - cout << argv[I] << endl; - - pkgCache::VerIterator Ver = Deb.MergeControl(Db); - if (Ver.end() == true) - return false; - - cout << Ver.ParentPkg().Name() << ' ' << Ver.VerStr() << endl; - - pkgExtract Extract(Db.GetFLCache(),Ver); - - if (Fake != 0) - { - pkgExtract::Item Itm; - memset(&Itm,0,sizeof(Itm)); - FILE *F = fopen(Fake,"r"); - while (feof(F) == 0) - { - char Line[300]; - if (fgets(Line,sizeof(Line),F) == NULL) - return false; - Itm.Name = _strstrip(Line); - Itm.Type = pkgDirStream::Item::File; - if (Line[strlen(Line)-1] == '/') - Itm.Type = pkgDirStream::Item::Directory; - - int Fd; - if (Extract.DoItem(Itm,Fd) == false) { - fclose(F); - return false; - } - } - fclose(F); - } - else - if (Deb.ExtractArchive(Extract) == false) - return false; - } - return true; -} - -int main(int argc,char *argv[]) -{ - pkgInitConfig(*_config); - pkgInitSystem(*_config,_system); - _config->Set("Dir::State::status","/tmp/testing/status"); - - Go(argc,argv); - - if (_error->PendingError() == true) - { - _error->DumpErrors(); - return 0; - } -} -- cgit v1.2.3-70-g09d2 From b058a788c4f976ea98e20b853853929f47d4bc3e Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 22 Mar 2012 13:42:59 +0100 Subject: use the variables as the rest of the tests to avoid escapes in the output --- test/libapt/run-tests | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/test/libapt/run-tests b/test/libapt/run-tests index d4341412d..4ea9a916d 100755 --- a/test/libapt/run-tests +++ b/test/libapt/run-tests @@ -68,8 +68,8 @@ do "${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-ast_DE" elif [ $name = "HashSums${EXT}" ]; then TMP="$(readlink -f "./${0}")" - echo -n "Testing with \033[1;35m${name}\033[0m ... " - LD_LIBRARY_PATH=${LDPATH} ${testapp} $TMP $(md5sum $TMP | cut -d' ' -f 1) $(sha1sum $TMP | cut -d' ' -f 1) $(sha256sum $TMP | cut -d' ' -f 1) $(sha512sum $TMP | cut -d' ' -f 1) && echo "\033[1;32mOKAY\033[0m" || echo "\033[1;31mFAILED\033[0m" + echo -n "Testing with ${NAME} " + LD_LIBRARY_PATH=${LDPATH} ${testapp} $TMP $(md5sum $TMP | cut -d' ' -f 1) $(sha1sum $TMP | cut -d' ' -f 1) $(sha256sum $TMP | cut -d' ' -f 1) $(sha512sum $TMP | cut -d' ' -f 1) && echo "$TESTOKAY" || echo "$TESTFAIL" continue elif [ $name = "CompareVersion${EXT}" ]; then tmppath="${DIR}/versions.lst" -- cgit v1.2.3-70-g09d2 From de3786516df8b0fec2f759a16bbbc4b8605c1856 Mon Sep 17 00:00:00 2001 From: Bogdan Purcareata Date: Thu, 5 Apr 2012 12:03:37 +0200 Subject: * cmdline/apt-get.cc: - distinguish information about 'apt-get autoremove' based on the number of auto-removed packages both before and after the list of packages (Closes: #665833) --- cmdline/apt-get.cc | 2 +- debian/changelog | 6 +++++- test/integration/test-bug-604222-new-and-autoremove | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) (limited to 'test') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index ac1566f30..52618ae28 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1826,7 +1826,7 @@ bool DoAutomaticRemove(CacheFile &Cache) else ioprintf(c1out, P_("%lu package was automatically installed and is no longer required.\n", "%lu packages were automatically installed and are no longer required.\n", autoRemoveCount), autoRemoveCount); - c1out << _("Use 'apt-get autoremove' to remove them.") << std::endl; + c1out << P_("Use 'apt-get autoremove' to remove it.", "Use 'apt-get autoremove' to remove them.", autoRemoveCount) << std::endl; } return true; } diff --git a/debian/changelog b/debian/changelog index d6913b003..fe92378dd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -63,8 +63,12 @@ apt (0.8.16~exp14) UNRELEASED; urgency=low [ Bogdan Purcareata ] * doc/apt-get.8.xml: - add 'download' to the usage line (Closes: #649340) + * cmdline/apt-get.cc: + - distinguish information about 'apt-get autoremove' based on the + number of auto-removed packages both before and after the list + of packages (Closes: #665833) - -- David Kalnischkies Thu, 05 Apr 2012 11:22:34 +0200 + -- David Kalnischkies Thu, 05 Apr 2012 11:55:30 +0200 apt (0.8.16~exp13) experimental; urgency=low diff --git a/test/integration/test-bug-604222-new-and-autoremove b/test/integration/test-bug-604222-new-and-autoremove index 2875d547a..5820fb0dc 100755 --- a/test/integration/test-bug-604222-new-and-autoremove +++ b/test/integration/test-bug-604222-new-and-autoremove @@ -16,7 +16,7 @@ Building dependency tree... Reading state information... The following package was automatically installed and is no longer required: libvtk5.4 -Use 'apt-get autoremove' to remove them. +Use 'apt-get autoremove' to remove it. The following NEW packages will be installed: libavcodec52 0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. @@ -28,7 +28,7 @@ Building dependency tree... Reading state information... The following package was automatically installed and is no longer required: libvtk5.4 -Use 'apt-get autoremove' to remove them. +Use 'apt-get autoremove' to remove it. The following extra packages will be installed: libavcodec52 libopenal-dev libvtk5.4 The following NEW packages will be installed: -- cgit v1.2.3-70-g09d2 From 8bcbc69451bfb00977c16fdb03662c844f6e861e Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 11 Apr 2012 11:57:48 +0200 Subject: use xz-utils in the testcases instead of lzma and ensure that we really ignore the presents (or absence) of lzma if we decided to use xz --- apt-pkg/aptconfiguration.cc | 2 +- test/integration/framework | 2 +- .../test-bug-595691-empty-and-broken-archive-files | 12 ++++++++---- 3 files changed, 10 insertions(+), 6 deletions(-) (limited to 'test') diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc index d6691e392..d72b0c5ae 100644 --- a/apt-pkg/aptconfiguration.cc +++ b/apt-pkg/aptconfiguration.cc @@ -435,7 +435,7 @@ void Configuration::setDefaultConfigurationForCompressors() { _config->CndSet("Dir::Bin::bzip2", "/bin/bzip2"); _config->CndSet("Dir::Bin::xz", "/usr/bin/xz"); if (FileExists(_config->FindFile("Dir::Bin::xz")) == true) { - _config->CndSet("Dir::Bin::lzma", _config->Find("Dir::Bin::xz")); + _config->Clear("Dir::Bin::lzma"); _config->Set("APT::Compressor::lzma::Binary", "xz"); if (_config->Exists("APT::Compressor::lzma::CompressArg") == false) { _config->Set("APT::Compressor::lzma::CompressArg::", "--format=lzma"); diff --git a/test/integration/framework b/test/integration/framework index fa4a98f58..0670d6a78 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -558,7 +558,7 @@ buildaptarchivefromfiles() { msgninfo "\t${line} file… " cat ${line} | gzip > ${line}.gz cat ${line} | bzip2 > ${line}.bz2 - cat ${line} | lzma > ${line}.lzma + cat ${line} | xz --format=lzma > ${line}.lzma cat ${line} | xz > ${line}.xz msgdone "info" done diff --git a/test/integration/test-bug-595691-empty-and-broken-archive-files b/test/integration/test-bug-595691-empty-and-broken-archive-files index bb1ac0e54..63883b380 100755 --- a/test/integration/test-bug-595691-empty-and-broken-archive-files +++ b/test/integration/test-bug-595691-empty-and-broken-archive-files @@ -28,10 +28,10 @@ testaptgetupdate() { createemptyarchive() { find aptarchive/ \( -name "Packages*" -o -name "en*" \) -type f -delete if [ "en" = "$1" ]; then - echo -n "" | $COMPRESSOR > aptarchive/Packages.$COMPRESS + echo -n "" | $COMPRESSOR_CMD > aptarchive/Packages.$COMPRESS fi touch aptarchive/Packages - echo -n "" | $COMPRESSOR > aptarchive/${1}.$COMPRESS + echo -n "" | $COMPRESSOR_CMD > aptarchive/${1}.$COMPRESS generatereleasefiles signreleasefiles rm -f aptarchive/Packages @@ -40,7 +40,7 @@ createemptyarchive() { createemptyfile() { find aptarchive/ \( -name "Packages*" -o -name "en*" \) -type f -delete if [ "en" = "$1" ]; then - echo -n "" | $COMPRESSOR > aptarchive/Packages.$COMPRESS + echo -n "" | $COMPRESSOR_CMD > aptarchive/Packages.$COMPRESS fi touch aptarchive/Packages aptarchive/${1}.$COMPRESS generatereleasefiles @@ -50,6 +50,7 @@ createemptyfile() { setupcompressor() { COMPRESSOR="$1" + COMPRESSOR_CMD="$1" case $COMPRESSOR in gzip) COMPRESS="gz";; bzip2) COMPRESS="bz2";; @@ -66,10 +67,13 @@ Dir::Bin::xz \"/does/not/exist\";" > rootdir/etc/apt/apt.conf.d/00compressor echo "Dir::Bin::${COMPRESSOR} \"/bin/${COMPRESSOR}\";" >> rootdir/etc/apt/apt.conf.d/00compressor elif [ -e "/usr/bin/${COMPRESSOR}" ]; then echo "Dir::Bin::${COMPRESSOR} \"/usr/bin/${COMPRESSOR}\";" >> rootdir/etc/apt/apt.conf.d/00compressor + elif [ "${COMPRESSOR}" = 'lzma' ]; then + echo "Dir::Bin::xz \"/usr/bin/xz\";" >> rootdir/etc/apt/apt.conf.d/00compressor + COMPRESSOR_CMD='xz --format=lzma' else msgtest "Test for availability of compressor" "${COMPRESSOR}" msgfail - exit 1 + #exit 1 fi } -- cgit v1.2.3-70-g09d2 From fdfdba56b128acf59b40edfdde0dd95fdd9c4439 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 11 Apr 2012 12:12:24 +0200 Subject: * cmdline/apt-get.cc: - print list of autoremoves in alphabetical order (Closes: #639008) --- cmdline/apt-get.cc | 36 +++++++++++----------- debian/changelog | 4 ++- .../test-bug-613420-new-garbage-dependency | 2 +- 3 files changed, 22 insertions(+), 20 deletions(-) (limited to 'test') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 52618ae28..6d7f80202 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1711,12 +1711,13 @@ bool DoAutomaticRemove(CacheFile &Cache) bool smallList = (hideAutoRemove == false && strcasecmp(_config->Find("APT::Get::HideAutoRemove","").c_str(),"small") == 0); - string autoremovelist, autoremoveversions; unsigned long autoRemoveCount = 0; APT::PackageSet tooMuch; + APT::PackageList autoRemoveList; // look over the cache to see what can be removed - for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); ! Pkg.end(); ++Pkg) + for (unsigned J = 0; J < Cache->Head().PackageCount; ++J) { + pkgCache::PkgIterator Pkg(Cache,Cache.List[J]); if (Cache[Pkg].Garbage) { if(Pkg.CurrentVer() != 0 || Cache[Pkg].Install()) @@ -1733,6 +1734,8 @@ bool DoAutomaticRemove(CacheFile &Cache) } else { + if (hideAutoRemove == false && Cache[Pkg].Delete() == false) + autoRemoveList.insert(Pkg); // if the package is a new install and already garbage we don't need to // install it in the first place, so nuke it instead of show it if (Cache[Pkg].Install() == true && Pkg.CurrentVer() == 0) @@ -1742,16 +1745,8 @@ bool DoAutomaticRemove(CacheFile &Cache) Cache->MarkDelete(Pkg, false); } // only show stuff in the list that is not yet marked for removal - else if(hideAutoRemove == false && Cache[Pkg].Delete() == false) - { + else if(hideAutoRemove == false && Cache[Pkg].Delete() == false) ++autoRemoveCount; - // we don't need to fill the strings if we don't need them - if (smallList == false) - { - autoremovelist += Pkg.FullName(true) + " "; - autoremoveversions += string(Cache[Pkg].CandVersion) + "\n"; - } - } } } } @@ -1786,14 +1781,7 @@ bool DoAutomaticRemove(CacheFile &Cache) std::clog << "Save " << Pkg << " as another installed garbage package depends on it" << std::endl; Cache->MarkInstall(Pkg, false); if (hideAutoRemove == false) - { ++autoRemoveCount; - if (smallList == false) - { - autoremovelist += Pkg.FullName(true) + " "; - autoremoveversions += string(Cache[Pkg].CandVersion) + "\n"; - } - } tooMuch.erase(Pkg); Changed = true; break; @@ -1803,6 +1791,18 @@ bool DoAutomaticRemove(CacheFile &Cache) } while (Changed == true); } + std::string autoremovelist, autoremoveversions; + if (smallList == false && autoRemoveCount != 0) + { + for (APT::PackageList::const_iterator Pkg = autoRemoveList.begin(); Pkg != autoRemoveList.end(); ++Pkg) + { + if (Cache[Pkg].Garbage == false) + continue; + autoremovelist += Pkg.FullName(true) + " "; + autoremoveversions += string(Cache[Pkg].CandVersion) + "\n"; + } + } + // Now see if we had destroyed anything (if we had done anything) if (Cache->BrokenCount() != 0) { diff --git a/debian/changelog b/debian/changelog index 85382b6fa..4e337df48 100644 --- a/debian/changelog +++ b/debian/changelog @@ -73,6 +73,8 @@ apt (0.8.16~exp14) UNRELEASED; urgency=low - use libz2 library for (de)compression instead of the bzip2 binary as the first is a dependency of dpkg and the later just priority:optional so we gain 'easier' access to bz2-compressed Translation files this way + * cmdline/apt-get.cc: + - print list of autoremoves in alphabetical order (Closes: #639008) [ Bogdan Purcareata ] * doc/apt-get.8.xml: @@ -82,7 +84,7 @@ apt (0.8.16~exp14) UNRELEASED; urgency=low number of auto-removed packages both before and after the list of packages (Closes: #665833) - -- David Kalnischkies Thu, 05 Apr 2012 21:36:16 +0200 + -- David Kalnischkies Wed, 11 Apr 2012 12:09:33 +0200 apt (0.8.16~exp13) experimental; urgency=low diff --git a/test/integration/test-bug-613420-new-garbage-dependency b/test/integration/test-bug-613420-new-garbage-dependency index 34cf38cbc..7a08871ca 100755 --- a/test/integration/test-bug-613420-new-garbage-dependency +++ b/test/integration/test-bug-613420-new-garbage-dependency @@ -22,7 +22,7 @@ testequal "Reading package lists... Building dependency tree... Reading state information... The following packages were automatically installed and are no longer required: - openoffice.org-officebean libreoffice-officebean + libreoffice-officebean openoffice.org-officebean Use 'apt-get autoremove' to remove them. The following extra packages will be installed: libreoffice-core libreoffice-officebean openoffice.org-officebean -- cgit v1.2.3-70-g09d2 From 3b4d8136e78b9f2a70431ece4c850861d90e8bb1 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 11 Apr 2012 12:36:32 +0200 Subject: fix the remaining lzma calls with xz --format=lzma in the testcases --- test/integration/test-hashsum-verification | 2 +- test/integration/test-pdiff-usage | 2 +- test/integration/test-releasefile-verification | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'test') diff --git a/test/integration/test-hashsum-verification b/test/integration/test-hashsum-verification index 3ac9eccfb..99ea8bffa 100755 --- a/test/integration/test-hashsum-verification +++ b/test/integration/test-hashsum-verification @@ -23,7 +23,7 @@ prepare() { find aptarchive -name 'Release' -delete cat aptarchive/Packages | gzip > aptarchive/Packages.gz cat aptarchive/Packages | bzip2 > aptarchive/Packages.bz2 - cat aptarchive/Packages | lzma > aptarchive/Packages.lzma + cat aptarchive/Packages | xz --format=lzma > aptarchive/Packages.lzma # create Release file with incorret checksums cat > aptarchive/Release < aptarchive/Packages.gz cat aptarchive/Packages | bzip2 > aptarchive/Packages.bz2 -cat aptarchive/Packages | lzma > aptarchive/Packages.lzma +cat aptarchive/Packages | xz --format=lzma > aptarchive/Packages.lzma rm -rf aptarchive/Packages.diff mkdir -p aptarchive/Packages.diff PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)" diff --git a/test/integration/test-releasefile-verification b/test/integration/test-releasefile-verification index 4f65cfa3b..d3ea91de5 100755 --- a/test/integration/test-releasefile-verification +++ b/test/integration/test-releasefile-verification @@ -24,7 +24,7 @@ prepare() { find aptarchive -name 'Release' -delete cat aptarchive/Packages | gzip > aptarchive/Packages.gz cat aptarchive/Packages | bzip2 > aptarchive/Packages.bz2 - cat aptarchive/Packages | lzma > aptarchive/Packages.lzma + cat aptarchive/Packages | xz --format=lzma > aptarchive/Packages.lzma generatereleasefiles "$DATE" } -- cgit v1.2.3-70-g09d2 From a12d5352927c7d3a2fe66a90fc7794b4a8e596ad Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 12 Apr 2012 12:23:57 +0200 Subject: merged r1972 from lp:~paolorotolo/apt/fix-for-967393 --- cmdline/apt-get.cc | 2 +- debian/changelog | 5 ++++- po/apt-all.pot | 2 +- po/ar.po | 4 ++++ po/ast.po | 21 +++++++++++++++++++++ po/bg.po | 22 ++++++++++++++++++++++ po/ca.po | 21 +++++++++++++++++++++ po/cs.po | 21 +++++++++++++++++++++ po/cy.po | 21 +++++++++++++++++++++ po/da.po | 21 +++++++++++++++++++++ po/de.po | 25 +++++++++++++++++++++++++ po/dz.po | 18 ++++++++++++++++++ po/el.po | 19 +++++++++++++++++++ po/es.po | 21 +++++++++++++++++++++ po/eu.po | 18 ++++++++++++++++++ po/fi.po | 18 ++++++++++++++++++ po/fr.po | 22 ++++++++++++++++++++++ po/gl.po | 21 +++++++++++++++++++++ po/hu.po | 18 ++++++++++++++++++ po/it.po | 21 +++++++++++++++++++++ po/ja.po | 21 +++++++++++++++++++++ po/km.po | 18 ++++++++++++++++++ po/ko.po | 21 +++++++++++++++++++++ po/lt.po | 9 +++++++++ po/mr.po | 18 ++++++++++++++++++ po/nb.po | 21 +++++++++++++++++++++ po/ne.po | 18 ++++++++++++++++++ po/nl.po | 21 +++++++++++++++++++++ po/nn.po | 18 ++++++++++++++++++ po/pl.po | 21 +++++++++++++++++++++ po/pt.po | 21 +++++++++++++++++++++ po/pt_BR.po | 18 ++++++++++++++++++ po/ro.po | 18 ++++++++++++++++++ po/ru.po | 22 ++++++++++++++++++++++ po/sk.po | 21 +++++++++++++++++++++ po/sl.po | 21 +++++++++++++++++++++ po/sv.po | 23 +++++++++++++++++++++++ po/th.po | 18 ++++++++++++++++++ po/tl.po | 18 ++++++++++++++++++ po/uk.po | 19 +++++++++++++++++++ po/vi.po | 21 +++++++++++++++++++++ po/zh_CN.po | 21 +++++++++++++++++++++ po/zh_TW.po | 18 ++++++++++++++++++ test/integration/test-disappearing-packages | 2 +- 44 files changed, 784 insertions(+), 4 deletions(-) (limited to 'test') diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index bff7ef7b6..4e6cc32de 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1415,7 +1415,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask = true, "all files have been overwritten by other packages:", "The following packages disappeared from your system as\n" "all files have been overwritten by other packages:", disappearedPkgs.size()), disappear, ""); - c0out << _("Note: This is done automatic and on purpose by dpkg.") << std::endl; + c0out << _("Note: This is done automatically and on purpose by dpkg.") << std::endl; return true; } diff --git a/debian/changelog b/debian/changelog index e31b1b80e..71efc8e38 100644 --- a/debian/changelog +++ b/debian/changelog @@ -93,7 +93,10 @@ apt (0.9.0~exp1) UNRELEASEDexperimental; urgency=low [ Steve Langasek ] * don't treat build-depends-indep as cross-build-dependencies; we should always install the host arch versions. LP: #968828. - + + [ Paolo Rotolo ] + * Fix string from automatic to automatically (LP: #967393). + -- Michael Vogt Wed, 11 Apr 2012 17:53:39 +0200 apt (0.8.16~exp13) experimental; urgency=low diff --git a/po/apt-all.pot b/po/apt-all.pot index ed5e54ef7..b952c4f7b 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -904,7 +904,7 @@ msgstr[0] "" msgstr[1] "" #: cmdline/apt-get.cc:1381 -msgid "Note: This is done automatic and on purpose by dpkg." +msgid "Note: This is done automatically and on purpose by dpkg." msgstr "" #: cmdline/apt-get.cc:1519 diff --git a/po/ar.po b/po/ar.po index 72da5e102..ef2b7cf34 100644 --- a/po/ar.po +++ b/po/ar.po @@ -3308,6 +3308,10 @@ msgstr "" #~ msgid "Error occurred while processing %s (NewFileVer1)" #~ msgstr "حدث خطأ أثناء معالجة %s (NewFileVer1)" +#, fuzzy +#~ msgid "Error occurred while processing %s (NewVersion%d)" +#~ msgstr "حدث خطأ أثناء معالجة %s (NewVersion1)" + #~ msgid "Error occurred while processing %s (UsePackage3)" #~ msgstr "حدث خطأ أثناء معالجة %s (UsePackage3)" diff --git a/po/ast.po b/po/ast.po index 217973e3b..1b4256fd4 100644 --- a/po/ast.po +++ b/po/ast.po @@ -3553,9 +3553,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Conexón encaboxada prematuramente" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Saltu mal formáu %s llinia %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Saltu mal formáu %s llinia %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Saltu mal formáu %s llinia %lu #3" + #~ msgid "decompressor" #~ msgstr "descompresor" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Nota: Esto faise automáticamente y baxo demanda por dpkg." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "lleíos, entá tenía de lleer %lu pero nun queda nada" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "escritos, entá tenía d'escribir %lu pero nun pudo facerse" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3588,6 +3606,9 @@ msgstr "Conexón encaboxada prematuramente" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Hebo un error al procesar %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Hebo un error al procesar %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Hebo un error al procesar %s (CollectFileProvides)" diff --git a/po/bg.po b/po/bg.po index 94e3a0c30..805eb2121 100644 --- a/po/bg.po +++ b/po/bg.po @@ -3590,9 +3590,28 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Връзката прекъсна преждевременно" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Неправилно форматиран override %s, ред %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Неправилно форматиран override %s, ред %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Неправилно форматиран override %s, ред %lu #3" + #~ msgid "decompressor" #~ msgstr "декомпресираща програма" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Това се прави автоматично от dpkg." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "" +#~ "грешка при четене, все още има %lu за четене, но няма нито един останал" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "грешка при запис, все още име %lu за запис, но не успя" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3624,6 +3643,9 @@ msgstr "Връзката прекъсна преждевременно" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Възникна грешка при обработката на %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Възникна грешка при обработката на %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Възникна грешка при обработката на %s (CollectFileProvides)" diff --git a/po/ca.po b/po/ca.po index 7d2ca8c00..e8cc0b1fc 100644 --- a/po/ca.po +++ b/po/ca.po @@ -3611,9 +3611,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "La connexió s'ha tancat prematurament" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Línia predominant %s línia malformada %lu núm 1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Línia predominant %s línia malformada %lu núm 2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Línia predominant %s línia malformada %lu núm 3" + #~ msgid "decompressor" #~ msgstr "decompressor" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Nota: Això ho fa el dpkg automàticament i a propòsit." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "llegits, falten %lu per llegir, però no queda res" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "escrits, falten %lu per escriure però no s'ha pogut" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3646,6 +3664,9 @@ msgstr "La connexió s'ha tancat prematurament" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "S'ha produït un error durant el processament de %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "S'ha produït un error durant el processament de %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "" #~ "S'ha produït un error durant el processament de %s (CollectFileProvides)" diff --git a/po/cs.po b/po/cs.po index 52fb86996..30f1e793a 100644 --- a/po/cs.po +++ b/po/cs.po @@ -3514,9 +3514,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Spojení bylo předčasně ukončeno" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Zkomolený soubor %s, řádek %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Zkomolený soubor %s, řádek %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Zkomolený soubor %s, řádek %lu #3" + #~ msgid "decompressor" #~ msgstr "dekompresor" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Poznámka: Toto má svůj důvod a děje se automaticky v dpkg." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "čtení, stále mám k přečtení %lu, ale už nic nezbývá" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "zápis, stále mám %lu k zápisu, ale nejde to" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3548,6 +3566,9 @@ msgstr "Spojení bylo předčasně ukončeno" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Při zpracování %s se objevila chyba (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Chyba při zpracování %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Při zpracování %s se objevila chyba (CollectFileProvides)" diff --git a/po/cy.po b/po/cy.po index 4d0c2123e..8b4494037 100644 --- a/po/cy.po +++ b/po/cy.po @@ -3590,9 +3590,26 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Caewyd y cysylltiad yn gynnar" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Gwrthwneud camffurfiol %s llinell %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Gwrthwneud camffurfiol %s llinell %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Gwrthwneud camffurfiol %s llinell %lu #3" + #~ msgid "decompressor" #~ msgstr "datgywasgydd" +# FIXME +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "o hyd %lu i ddarllen ond dim ar ôl" + +# FIXME +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "o hyd %lu i ysgrifennu ond methwyd" + #, fuzzy #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr "Digwyddod gwall wrth brosesu %s (NewPackage)" @@ -3625,6 +3642,10 @@ msgstr "Caewyd y cysylltiad yn gynnar" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Digwyddod gwall wrth brosesu %s (NewFileVer1)" +#, fuzzy +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Digwyddod gwall wrth brosesu %s (FindPkg)" + #, fuzzy #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Digwyddod gwall wrth brosesu %s (CollectFileProvides)" diff --git a/po/da.po b/po/da.po index bac1274a9..751289588 100644 --- a/po/da.po +++ b/po/da.po @@ -3562,9 +3562,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Forbindelsen lukkedes for hurtigt" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Ugyldig gennemtvangs %s-linje %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Ugyldig gennemtvangs %s-linje %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Ugyldig gennemtvangs %s-linje %lu #3" + #~ msgid "decompressor" #~ msgstr "dekomprimerings-program" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Bemærk: Dette sker automatisk og med vilje af dpkg." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "læs, mangler stadig at læse %lu men der er ikke flere" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "skriv, mangler stadig at skrive %lu men kunne ikke" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3596,5 +3614,8 @@ msgstr "Forbindelsen lukkedes for hurtigt" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Der skete en fejl under behandlingen af %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Der skete en fejl under behandlingen af %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Der skete en fejl under behandlingen af %s (CollectfileProvides)" diff --git a/po/de.po b/po/de.po index a4153760c..8b6ebca6d 100644 --- a/po/de.po +++ b/po/de.po @@ -3632,9 +3632,31 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Verbindung vorzeitig beendet" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Missgestaltetes Override %s Zeile %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Missgestaltetes Override %s Zeile %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Missgestaltetes Override %s Zeile %lu #3" + #~ msgid "decompressor" #~ msgstr "Dekomprimierer" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "" +#~ "Hinweis: Dies wird automatisch und absichtlich von dpkg durchgeführt." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "" +#~ "Lesevorgang: es verbleiben noch %lu zu lesen, jedoch nichts mehr übrig" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "" +#~ "Schreibvorgang: es verbleiben noch %lu zu schreiben, jedoch Schreiben " +#~ "nicht möglich" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3667,6 +3689,9 @@ msgstr "Verbindung vorzeitig beendet" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Fehler aufgetreten beim Verarbeiten von %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Fehler aufgetreten beim Verarbeiten von %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Fehler aufgetreten beim Verarbeiten von %s (CollectFileProvides)" diff --git a/po/dz.po b/po/dz.po index 3d18495d2..6efb4fb6d 100644 --- a/po/dz.po +++ b/po/dz.po @@ -3509,9 +3509,24 @@ msgstr "" msgid "Connection closed prematurely" msgstr "དུས་སུ་མ་འབབ་པ་རང་མཐུད་ལམ་འདི་ག་བསྡམས་ཡོད།" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "བཟོ་ཉེས་གྱུར་བའི་ཟུར་བཞག་%s གྲལ་ཐིག་%lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "བཟོ་ཉེས་གྱུར་བའི་ཟུར་བཞག་%sགྲལ་ཐིག%lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "བཟོ་ཉེས་གྱུར་བའི་ཟུར་བཞག་%sགྲལ་ཐིག%lu #3" + #~ msgid "decompressor" #~ msgstr "ཨེབ་བཤོལ་འཕྲུལ་ཆས།" +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "ལྷག་ ད་ལྟོ་ཡང་ལྷག་ནི་ལུ་%lu་ཡོད་འདི་འབདཝ་ད་ཅི་ཡང་ལྷག་ལུས་མིན་འདུག" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "འབྲི་ ད་ལྟོ་ཡང་འབྲི་ནི་ལུ་%lu་ཡོད་འདི་འདབཝ་ད་འབད་མ་ཚུགས།" + #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr "%s (ཐུམ་སྒྲིལ་གསརཔ་)བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག" @@ -3539,6 +3554,9 @@ msgstr "དུས་སུ་མ་འབབ་པ་རང་མཐུད་ལ #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "%s (ཡིག་སྣོད་འཐོན་རིམ་གསརཔ་ ༡)བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "%s (པི་ཀེ་ཇི་འཚོལ་ནི)དེ་བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "%s (CollectFileProvides)དེ་བཟོ་སྦྱོར་འབད་བའི་བསྒང་འཛོལ་བ་ཅིག་བྱུང་ནུག" diff --git a/po/el.po b/po/el.po index cd3328100..37b235f98 100644 --- a/po/el.po +++ b/po/el.po @@ -3547,9 +3547,25 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Η σύνδεση έκλεισε πρόωρα" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #3" + #~ msgid "decompressor" #~ msgstr "αποσυμπιεστής" +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "" +#~ "αναγνώστηκαν, απομένουν ακόμη %lu για ανάγνωση αλλά δεν απομένουν άλλα" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "γράφτηκαν, απομένουν %lu για εγγραφή αλλά χωρίς επιτυχία" + #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr "Προέκυψε σφάλμα κατά την επεξεργασία του %s (NewPackage)" @@ -3575,6 +3591,9 @@ msgstr "Η σύνδεση έκλεισε πρόωρα" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Προέκευψε σφάλμα κατά την επεξεργασία του %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Προέκυψε σφάλμα κατά την επεξεργασία του %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Προέκυψε σφάλμα κατά την επεξεργασία του %s (CollectFileProvides)" diff --git a/po/es.po b/po/es.po index 5d459d340..adda1e7d2 100644 --- a/po/es.po +++ b/po/es.po @@ -3657,9 +3657,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "La conexión se cerró prematuramente" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Predominio mal formado %s línea %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Predominio mal formado %s línea %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Predominio mal formado %s línea %lu #3" + #~ msgid "decompressor" #~ msgstr "decompresor" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Nota: Dpkg realiza esto de forma automática y a propósito." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "leídos, todavía debía leer %lu pero no queda nada" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "escritos, todavía tenía que escribir %lu pero no pude hacerlo" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3692,6 +3710,9 @@ msgstr "La conexión se cerró prematuramente" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Se produjo un error mientras se procesaba %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Se produjo un error mientras se procesaba %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Se produjo un error mientras se procesaba %s (CollectFileProvides)" diff --git a/po/eu.po b/po/eu.po index 2ce8031a7..ab65305c7 100644 --- a/po/eu.po +++ b/po/eu.po @@ -3509,9 +3509,24 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Konexioa behar baino lehenago itxi da" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Gaizki osatutako override %s, lerroa: %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Gaizki osatutako override %s, lerroa: %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Gaizki osatutako override %s, lerroa: %lu #3" + #~ msgid "decompressor" #~ msgstr "deskonpresorea" +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "irakurrita; oraindik %lu irakurtzeke, baina ez da ezer geratzen" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "idatzita; oraindik %lu idazteke, baina ezin da" + #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr "Errorea gertatu da %s prozesatzean (NewPackage)" @@ -3537,6 +3552,9 @@ msgstr "Konexioa behar baino lehenago itxi da" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Errorea gertatu da %s prozesatzean (NewFileDesc1)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Errorea gertatu da %s prozesatzean (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Errorea gertatu da %s prozesatzean (CollectFileProvides)" diff --git a/po/fi.po b/po/fi.po index 5f175ba30..eee05ba10 100644 --- a/po/fi.po +++ b/po/fi.po @@ -3502,9 +3502,24 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Yhteys katkesi ennenaikaisesti" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Väärän muotoinen poikkeus %s rivi %lu n:ro 1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Väärän muotoinen poikkeus %s rivi %lu n:ro 2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Väärän muotoinen poikkeus %s rivi %lu n:ro 3" + #~ msgid "decompressor" #~ msgstr "purkaja" +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "read, vielä %lu lukematta mutta tiedosto loppui" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "write, vielä %lu kirjoittamatta mutta epäonnistui" + #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr "Tapahtui virhe käsiteltäessä %s (NewPackage)" @@ -3530,6 +3545,9 @@ msgstr "Yhteys katkesi ennenaikaisesti" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Tapahtui virhe käsiteltäessä %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Tapahtui virhe käsiteltäessä %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Tapahtui virhe käsiteltäessä %s (CollectFileProvides)" diff --git a/po/fr.po b/po/fr.po index eb4037df9..70ec1d8de 100644 --- a/po/fr.po +++ b/po/fr.po @@ -3658,9 +3658,28 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Connexion fermée prématurément" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Entrée « override » %s mal formée ligne %lu n° 1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Entrée « override » %s mal formée %lu n° 2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Entrée « override » %s mal formée %lu n° 3" + #~ msgid "decompressor" #~ msgstr "décompacteur" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "" +#~ "Note : cette opération volontaire (effectuée par dpkg) est automatique." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "lu(s), %lu restant à lire, mais rien n'est disponible" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "écrit(s), %lu restant à écrire, mais l'écriture est impossible" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3694,6 +3713,9 @@ msgstr "Connexion fermée prématurément" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Erreur apparue lors du traitement de %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Erreur apparue lors du traitement de %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Erreur apparue lors du traitement de %s (CollectFileProvides)" diff --git a/po/gl.po b/po/gl.po index 57df307ce..cb4f6322e 100644 --- a/po/gl.po +++ b/po/gl.po @@ -3598,9 +3598,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "A conexión pechouse prematuramente" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "«Override» %s liña %lu incorrecta (1)" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "«Override» %s liña %lu incorrecta (2)" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "«Override» %s liña %lu incorrecta (3)" + #~ msgid "decompressor" #~ msgstr "descompresor" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Nota: Isto será feito automaticamente por dpkg." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "lectura, aínda hai %lu para ler pero non queda ningún" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "escritura, aínda hai %lu para escribir pero non se puido" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3633,6 +3651,9 @@ msgstr "A conexión pechouse prematuramente" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Produciuse un erro ao procesar %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Produciuse un erro ao procesar %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Produciuse un erro ao procesar %s (CollectFileProvides)" diff --git a/po/hu.po b/po/hu.po index c4c10a17a..628521c50 100644 --- a/po/hu.po +++ b/po/hu.po @@ -3609,9 +3609,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "A kapcsolat idő előtt lezárult" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Deformált felülbírálás %s %lu. sorában #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Deformált felülbírálás %s %lu. sorában #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Deformált felülbírálás %s %lu. sorában #3" + #~ msgid "decompressor" #~ msgstr "kicsomagoló" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Megjegyzés: ezt a dpkg automatikusan és szándékosan hajtja végre." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "olvasás, még kellene %lu, de már az összes elfogyott" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "írás, még kiírandó %lu, de ez nem lehetséges" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." diff --git a/po/it.po b/po/it.po index ea65d8eda..0f8fa6ff0 100644 --- a/po/it.po +++ b/po/it.po @@ -3629,9 +3629,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Connessione chiusa prematuramente" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Override non corretto: file %s riga %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Override non corretto: file %s riga %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Override non corretto: file %s riga %lu #3" + #~ msgid "decompressor" #~ msgstr "de-compressore" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Nota: questo viene svolto automaticamente da dpkg." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "lettura, c'erano ancora %lu da leggere ma non ne è rimasto alcuno" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "scrittura, c'erano ancora %lu da scrivere ma non è stato possibile" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3664,6 +3682,9 @@ msgstr "Connessione chiusa prematuramente" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Si è verificato un errore nell'elaborare %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Si è verificato un errore nell'elaborare %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Si è verificato un errore nell'elaborare %s (CollectFileProvides)" diff --git a/po/ja.po b/po/ja.po index 9215c3d98..404ce09e4 100644 --- a/po/ja.po +++ b/po/ja.po @@ -3571,9 +3571,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "途中で接続がクローズされました" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "不正な override %s %lu 行目 #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "不正な override %s %lu 行目 #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "不正な override %s %lu 行目 #3" + #~ msgid "decompressor" #~ msgstr "展開ツール" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "注意: これは dpkg により自動でわざと行われれます。" + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "読み込みが %lu 残っているはずですが、何も残っていません" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "あと %lu 書き込む必要がありますが、書き込むことができませんでした" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3605,6 +3623,9 @@ msgstr "途中で接続がクローズされました" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "%s を処理中にエラーが発生しました (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "%s を処理中にエラーが発生しました (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "%s を処理中にエラーが発生しました (CollectFileProvides)" diff --git a/po/km.po b/po/km.po index 77b752a37..397df6d79 100644 --- a/po/km.po +++ b/po/km.po @@ -3468,9 +3468,24 @@ msgstr "" msgid "Connection closed prematurely" msgstr "បាន​បិទ​ការ​តភ្ជាប់​មុន​ពេល" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Malformed បដិសេធ %s បន្ទាត់ %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Malformed បដិសេធ %s បន្ទាត់​ %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Malformed បដិសេធ %s បន្ទាត់​ %lu #3" + #~ msgid "decompressor" #~ msgstr "កម្មវិធី​ពន្លា" +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "អាន​, នៅតែ​មាន %lu ដើម្បី​អាន​ ប៉ុន្តែ​គ្មាន​អ្វី​នៅសល់" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "សរសេរ​, នៅតែមាន​ %lu ដើម្បី​សរសេរ​ ប៉ុន្តែ​មិន​អាច​" + #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr "កំហុស​បាន​កើត​ឡើង​​ ខណៈ​ពេល​កំពុង​ដំណើរការ​ %s (កញ្ចប់​ថ្មី​)" @@ -3498,6 +3513,9 @@ msgstr "បាន​បិទ​ការ​តភ្ជាប់​មុន​ #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "កំហុស​បានកើតឡើង​ ខណៈពេល​កំពុង​ដំណើរការ​ %s (កំណែ​​​ឯកសារ​ថ្មី​១)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "កំហុស​បានកើតឡើង​ខណៈពេល​កំពុង​ដំណើរការ​ %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "កំហុស​បានកើតឡើង​ខណៈពេល​កំពុង​ដំណើរការ​%s (ផ្តល់​ឯកសារ​ប្រមូល​ផ្តុំ)" diff --git a/po/ko.po b/po/ko.po index cd2edc115..0edbf373d 100644 --- a/po/ko.po +++ b/po/ko.po @@ -3509,9 +3509,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "연결이 너무 빨리 끊어졌습니다" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "override %s의 %lu번 줄 #1이 잘못되었습니다" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "override %s의 %lu번 줄 #2가 잘못되었습니다" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "override %s의 %lu번 줄 #3이 잘못되었습니다" + #~ msgid "decompressor" #~ msgstr "압축 해제 프로그램" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "주의: dpkg에서 자동으로 의도적으로 수행했습니다." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "%lu만큼 더 읽어야 하지만 더 이상 읽을 데이터가 없습니다" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "%lu만큼 더 써야 하지만 더 이상 쓸 수 없습니다" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3543,6 +3561,9 @@ msgstr "연결이 너무 빨리 끊어졌습니다" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "%s 처리하는 중에 오류가 발생했습니다 (NewFileDesc1)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "%s 처리 중에 오류가 발생했습니다 (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "%s 처리 중에 오류가 발생했습니다 (CollectFileProvides)" diff --git a/po/lt.po b/po/lt.po index d6148424f..c366056dc 100644 --- a/po/lt.po +++ b/po/lt.po @@ -3390,6 +3390,15 @@ msgstr "" msgid "Connection closed prematurely" msgstr "" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Nekorektiškas perrašymas %s eilutėje %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Nekorektiškas perrašymas %s eilutėje %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Nekorektiškas perrašymas %s eilutėje %lu #3" + #~ msgid "decompressor" #~ msgstr "išskleidiklis" diff --git a/po/mr.po b/po/mr.po index 314d5c7e0..69f5d7256 100644 --- a/po/mr.po +++ b/po/mr.po @@ -3480,9 +3480,24 @@ msgstr "" msgid "Connection closed prematurely" msgstr "जोडणी अकाली बंद झाली" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "व्यंगीत/हिडीस दुर्लक्षित केले %s रेषा %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "व्यंगीत/हिडीस दुर्लक्षित केले %s रेषा %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "व्यंगीत/हिडीस दुर्लक्षित केले %s रेषा %lu #3" + #~ msgid "decompressor" #~ msgstr "असंकलितकर्ता " +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "वाचा, %lu अजूनही वाचण्यासाठी आहे पण आता काही उरली नाही" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "लिहा, %lu अजूनही लिहिण्यासाठी आहे पण लिहिता येत नाही" + #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr "%s (नविन पॅकेज) प्रक्रिया करीत असतांना दोष आढळून आला" @@ -3508,6 +3523,9 @@ msgstr "जोडणी अकाली बंद झाली" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "%s (NewFileDesc2) वर प्रक्रिया सुरू असताना त्रुटी उद्भवली" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "%s (पॅकेज शोधतांना) प्रक्रिया करीत असतांना दोष आढळून आला" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "%s (तरतूद/पुरवलेल्या संचिका जमा) प्रक्रिया करीत असतांना दोष आढळून आला" diff --git a/po/nb.po b/po/nb.po index a775e2f36..9f12ced23 100644 --- a/po/nb.po +++ b/po/nb.po @@ -3538,9 +3538,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Forbindelsen ble uventet stengt" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Ugyldig overstyring %s linje %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Ugyldig overstyring %s linje %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Ugyldig overstyring %s linje %lu #3" + #~ msgid "decompressor" #~ msgstr "dekomprimering" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Merk: Dette er gjort automatisk og med hensikt av dpkg." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "lese, har fremdeles %lu igjen å lese, men ingen igjen" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "skrive, har fremdeles %lu igjen å skrive, men klarte ikke å" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3572,6 +3590,9 @@ msgstr "Forbindelsen ble uventet stengt" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Feil oppsto under behandling av %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Feil oppsto under behandling av %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Feil oppsto under behandling av %s (CollectFileProvides)" diff --git a/po/ne.po b/po/ne.po index d5dbb5162..7ee368e5e 100644 --- a/po/ne.po +++ b/po/ne.po @@ -3472,9 +3472,24 @@ msgstr "" msgid "Connection closed prematurely" msgstr "जडान असमायिक बन्द भयो" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "वैरुप्य गरिएको अधिलेखन %s रेखा %lu #१" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "वैरुप्य गरिएको अधिलेखन %s रेखा %lu #२" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "वैरुप्य गरिएको अधिलेखन %s रेखा %lu #३" + #~ msgid "decompressor" #~ msgstr "सङ्कुचनविहिन कर्ता" +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "पड्नुहोस्, अहिले सम्म %lu पढ्न छ तर कुनै बाँकी छैन" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "लेख्नुहोस्, अहिले सम्म %lu लेख्न छ तर सकिदैन " + #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (नयाँ प्याकेज)" @@ -3502,6 +3517,9 @@ msgstr "जडान असमायिक बन्द भयो" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (नयाँ फाइल संस्करण १)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (pkg फेला पार्नुहोस् )" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr " %s प्रक्रिया गर्दा त्रुटि देखा पर्यो (संकलन फाइलले उपलब्ध गर्दछ)" diff --git a/po/nl.po b/po/nl.po index 36033f167..2597a3539 100644 --- a/po/nl.po +++ b/po/nl.po @@ -3600,9 +3600,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Verbinding werd voortijdig afgebroken" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Misvormde voorrangsingang %s op regel %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Misvormde voorrangsingang %s op regel %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Misvormde voorrangsingang %s op regel %lu #3" + #~ msgid "decompressor" #~ msgstr "decompressor" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Let op: Dit wordt automatische en bewust door dpkg gedaan." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "lees, de laatste te lezen %lu zijn niet beschikbaar" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "schrijf, de laatste %lu konden niet weggeschreven worden" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3634,6 +3652,9 @@ msgstr "Verbinding werd voortijdig afgebroken" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Fout tijdens verwerken van %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Fout tijdens verwerken van %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Fout tijdens verwerken van %s (CollectFileProvides)" diff --git a/po/nn.po b/po/nn.po index 771d933ea..418d4fe88 100644 --- a/po/nn.po +++ b/po/nn.po @@ -3493,9 +3493,24 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Sambandet vart uventa stengd" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Misforma overstyring %s linje %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Misforma overstyring %s linje %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Misforma overstyring %s linje %lu #3" + #~ msgid "decompressor" #~ msgstr "dekomprimering" +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "lese, har framleis %lu att å lesa, men ingen att" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "skrive, har framleis %lu att å skrive, men klarte ikkje" + #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr "Feil ved behandling av %s (NewPackage)" @@ -3523,6 +3538,9 @@ msgstr "Sambandet vart uventa stengd" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Feil ved behandling av %s (NewFileVer1)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Feil ved behandling av %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Feil ved behandling av %s (CollectFileProvides)" diff --git a/po/pl.po b/po/pl.po index e27e44ebd..fb8975b11 100644 --- a/po/pl.po +++ b/po/pl.po @@ -3624,9 +3624,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Połączenie zostało przedwcześnie zamknięte" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Nieprawidłowa linia %2$lu #1 pliku override %1$s" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Nieprawidłowa linia %2$lu #2 pliku override %1$s" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Nieprawidłowa linia %2$lu #3 pliku override %1$s" + #~ msgid "decompressor" #~ msgstr "dekompresor" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Uwaga: dpkg wykonał to automatycznie i celowo." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "należało przeczytać jeszcze %lu, ale nic nie zostało" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "należało zapisać jeszcze %lu, ale nie udało się to" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3659,6 +3677,9 @@ msgstr "Połączenie zostało przedwcześnie zamknięte" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Wystąpił błąd podczas przetwarzania %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Wystąpił błąd podczas przetwarzania %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Wystąpił błąd podczas przetwarzania %s (CollectFileProvides)" diff --git a/po/pt.po b/po/pt.po index 0bdbeca5f..f7ca17e87 100644 --- a/po/pt.po +++ b/po/pt.po @@ -3589,9 +3589,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Ligação encerrada prematuramente" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Override %s malformado linha %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Override %s malformado linha %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Override %s malformado linha %lu #3" + #~ msgid "decompressor" #~ msgstr "descompactador" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Nota: Isto foi feito automaticamente e intencionalmente pelo dpkg." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "lido, ainda restam %lu para serem lidos mas não resta nenhum" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "escrito, ainda restam %lu para escrever mas não foi possível" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3624,6 +3642,9 @@ msgstr "Ligação encerrada prematuramente" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Ocorreu um erro ao processar %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Ocorreu um erro ao processar %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Ocorreu um erro ao processar %s (CollectFileProvides)" diff --git a/po/pt_BR.po b/po/pt_BR.po index d7c4c0bb7..aff1293bb 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -3539,9 +3539,24 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Conexão encerrada prematuramente" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Override malformado %s linha %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Override malformado %s linha %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Override malformado %s linha %lu #3" + #~ msgid "decompressor" #~ msgstr "descompactador" +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "leitura, ainda restam %lu para serem lidos mas nenhum deixado" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "escrita, ainda restam %lu para gravar mas não foi possível" + #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr "Um erro ocorreu processando %s (NovoPacote)" @@ -3567,6 +3582,9 @@ msgstr "Conexão encerrada prematuramente" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Um erro ocorreu processando %s (NovoArquivoDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Um erro ocorreu processando %s (EncontrarPacote)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Um erro ocorreu processando %s (ColetarArquivoProvides)" diff --git a/po/ro.po b/po/ro.po index bd84af0f1..acfcdd620 100644 --- a/po/ro.po +++ b/po/ro.po @@ -3549,9 +3549,24 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Conexiune închisă prematur" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Înlocuire greșită %s linia %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Înlocuire greșită %s linia %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Înlocuire greșită %s linia %lu #3" + #~ msgid "decompressor" #~ msgstr "decompresor" +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "citire, încă mai am %lu de citit dar n-a mai rămas nimic" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "scriere, încă mai am %lu de scris dar nu pot" + #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr "Eroare apărută în timpul procesării %s (NewPackage)" @@ -3577,6 +3592,9 @@ msgstr "Conexiune închisă prematur" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "A apărut o eroare în timpul procesării lui %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Eroare apărută în timpul procesării %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Eroare apărută în timpul procesării %s (CollectFileProvides)" diff --git a/po/ru.po b/po/ru.po index 17e7511d1..bbeaf8e91 100644 --- a/po/ru.po +++ b/po/ru.po @@ -3626,9 +3626,28 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Соединение закрыто преждевременно" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Неправильная запись о переназначении (override) %s на строке %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Неправильная запись о переназначении (override) %s на строке %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Неправильная запись о переназначении (override) %s на строке %lu #3" + #~ msgid "decompressor" #~ msgstr "декомпрессор" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Замечание: это сделано автоматически и специально программой dpkg." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "" +#~ "ошибка при чтении. собирались прочесть ещё %lu байт, но ничего больше нет" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "ошибка при записи, собирались записать ещё %lu байт, но не смогли" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3660,6 +3679,9 @@ msgstr "Соединение закрыто преждевременно" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Произошла ошибка во время обработки %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Произошла ошибка во время обработки %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Произошла ошибка во время обработки %s (CollectFileProvides)" diff --git a/po/sk.po b/po/sk.po index c96e8441a..6c6519027 100644 --- a/po/sk.po +++ b/po/sk.po @@ -3563,9 +3563,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Spojenie bolo predčasne ukončené" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Skomolený „override“ %s riadok %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Skomolený „override“ %s riadok %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Skomolený „override“ %s riadok %lu #3" + #~ msgid "decompressor" #~ msgstr "dekompresor" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Pozn.: Toto robí dpkg automaticky a zámerne." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "čítanie, stále treba prečítať %lu, ale už nič neostáva" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "zápis, stále treba zapísať %lu, no nedá sa to" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3597,6 +3615,9 @@ msgstr "Spojenie bolo predčasne ukončené" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Vyskytla sa chyba pri spracovávaní %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Chyba pri spracovávaní %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Chyba pri spracovávaní %s (CollectFileProvides)" diff --git a/po/sl.po b/po/sl.po index 348d4569c..3a3d5bf8c 100644 --- a/po/sl.po +++ b/po/sl.po @@ -3544,9 +3544,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Povezava se je prezgodaj zaprla" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Napačno oblikovana prepisana vrstica %s %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Napačno oblikovana prepisana vrstica %s %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Napačno oblikovanje prepisane vrstice %s %lu #3" + #~ msgid "decompressor" #~ msgstr "program za razširjanje" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Opomba: To je dpkg storil samodejno in namenoma." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "branje, še vedno %lu za branje, a nobeden ni ostal" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "pisanje, še vedno %lu za pisanje, a ni mogoče" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3578,6 +3596,9 @@ msgstr "Povezava se je prezgodaj zaprla" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Med obdelovanjem %s je prišlo do napake (NovOpisDatoteke2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Prišlo je do napake med obdelavo %s (Najdi paket)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Prišlo je do napake med obdelavo %s (Zberi dobavitelje datotek)" diff --git a/po/sv.po b/po/sv.po index 9d854db62..67e603cd8 100644 --- a/po/sv.po +++ b/po/sv.po @@ -3571,9 +3571,28 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Anslutningen stängdes i förtid" +# parametrar: filnamn, radnummer +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Felaktig override %s rad %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Felaktig override %s rad %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Felaktig override %s rad %lu #3" + #~ msgid "decompressor" #~ msgstr "uppackare" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Observera: Detta sker med automatik och vid behov av dpkg." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "läsning, har fortfarande %lu att läsa men ingenting finns kvar" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "skrivning, har fortfarande %lu att skriva men kunde inte" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3606,6 +3625,10 @@ msgstr "Anslutningen stängdes i förtid" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Fel uppstod vid hantering av %s (NewFileDesc2)" +# NewPackage etc. är funktionsnamn +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Fel uppstod vid hantering av %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "Fel uppstod vid hantering av %s (CollectFileProvides)" diff --git a/po/th.po b/po/th.po index 3112ebf8d..d414c4430 100644 --- a/po/th.po +++ b/po/th.po @@ -3452,9 +3452,24 @@ msgstr "" msgid "Connection closed prematurely" msgstr "การเชื่อมต่อถูกปิดก่อนเวลาอันควร" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "แฟ้ม override %s ผิดรูปแบบที่บรรทัด %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "แฟ้ม override %s ผิดรูปแบบที่บรรทัด %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "แฟ้ม override %s ผิดรูปแบบที่บรรทัด %lu #3" + #~ msgid "decompressor" #~ msgstr "ตัวคลายบีบอัด" +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "read: ยังเหลือ %lu ที่ยังไม่ได้อ่าน แต่ข้อมูลหมดแล้ว" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "write: ยังเหลือ %lu ที่ยังไม่ได้เขียน แต่ไม่สามารถเขียนได้" + #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (NewPackage)" @@ -3480,6 +3495,9 @@ msgstr "การเชื่อมต่อถูกปิดก่อนเว #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "เกิดข้อผิดพลาดขณะประมวลผล %s (CollectFileProvides)" diff --git a/po/tl.po b/po/tl.po index ddbf9db93..51fa4587a 100644 --- a/po/tl.po +++ b/po/tl.po @@ -3531,9 +3531,24 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Nagsara ng maaga ang koneksyon" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Maling anyo ng override %s linya %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Maling anyo ng override %s linya %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Maling anyo ng override %s linya %lu #3" + #~ msgid "decompressor" #~ msgstr "taga-decompress" +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "pagbasa, mayroong %lu na babasahin ngunit walang natira" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "pagsulat, mayroon pang %lu na isusulat ngunit hindi makasulat" + #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr "May naganap na error habang prinoseso ang %s (NewPackage)" @@ -3561,6 +3576,9 @@ msgstr "Nagsara ng maaga ang koneksyon" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "May naganap na error habang prinoseso ang %s (NewFileVer1)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "May naganap na error habang prinoseso ang %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "May naganap na Error habang prinoseso ang %s (CollectFileProvides)" diff --git a/po/uk.po b/po/uk.po index f8c1a48fb..4c0cd5b85 100644 --- a/po/uk.po +++ b/po/uk.po @@ -3544,9 +3544,25 @@ msgstr "" msgid "Connection closed prematurely" msgstr "З'єднання завершено передчасно" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Спотворений запис про перепризначення (override) %s на рядку %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Спотворений запис про перепризначення (override) %s на рядку %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Спотворений запис про перепризначення (override) %s на рядку %lu #3" + #~ msgid "decompressor" #~ msgstr "декомпресор" +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "" +#~ "помилка при читанні. мали прочитати ще %lu байт, але нічого більше нема" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "помилка при записі, мали прочитати ще %lu байт, але не змогли" + #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr "Помилка, яка була викликана внаслідок обробки %s (NewPackage)" @@ -3574,6 +3590,9 @@ msgstr "З'єднання завершено передчасно" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Помилка, яка була викликана внаслідок обробки %s (NewFileVer1)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Помилка, яка була викликана внаслідок обробки %s (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "" #~ "Помилка, яка була викликана внаслідок обробки %s (CollectFileProvides)" diff --git a/po/vi.po b/po/vi.po index 7f058840e..00300fb6d 100644 --- a/po/vi.po +++ b/po/vi.po @@ -3578,9 +3578,27 @@ msgstr "" msgid "Connection closed prematurely" msgstr "Kết nối bị đóng quá sớm." +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "Điều đè dạng sai %s dòng %lu #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "Điều đè dạng sai %s dòng %lu #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "Điều đè dạng sai %s dòng %lu #3" + #~ msgid "decompressor" #~ msgstr "bộ giải nén" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "Ghi chú : thay đổi này được tự động làm bởi dpkg." + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "đọc, còn cần đọc %lu nhưng mà không có gì còn lại" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "ghi, còn cần ghi %lu nhưng mà không thể" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3612,6 +3630,9 @@ msgstr "Kết nối bị đóng quá sớm." #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "Gặp lỗi khi xử lý %s (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "Gặp lỗi khi xử lý %s (FindPkg - tìm gói)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "" #~ "Gặp lỗi khi xử lý %s (CollectFileProvides - tập hợp các trường hợp miễn " diff --git a/po/zh_CN.po b/po/zh_CN.po index 8fb361fb9..8dfa91730 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -3466,9 +3466,27 @@ msgstr "无法连同 mmap 为 %s 打补丁(但没有 mmap 的错误) - 补丁可 msgid "Connection closed prematurely" msgstr "连接被永久关闭" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "override 文件 %s 第 %lu 行的格式有误 #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "override 文件 %s 第 %lu 行的格式有误 #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "override 文件 %s 第 %lu 行的格式有误 #3" + #~ msgid "decompressor" #~ msgstr "解压程序" +#~ msgid "Note: This is done automatically and on purpose by dpkg." +#~ msgstr "注意:这是自动被 dpkg 有意完成的。" + +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "读取文件出错,还剩 %lu 字节没有读出" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "写入文件出错,还剩 %lu 字节没有保存" + #~ msgid "" #~ "Could not perform immediate configuration on already unpacked '%s'. " #~ "Please see man 5 apt.conf under APT::Immediate-Configure for details." @@ -3500,6 +3518,9 @@ msgstr "连接被永久关闭" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "处理 %s (NewFileDesc2)时出错" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "处理 %s (FindPkg)时出错" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "处理 %s (CollectFileProvides)时出错" diff --git a/po/zh_TW.po b/po/zh_TW.po index 68807a680..aa1b493e9 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -3451,9 +3451,24 @@ msgstr "" msgid "Connection closed prematurely" msgstr "連線突然終止" +#~ msgid "Malformed override %s line %lu #1" +#~ msgstr "重新定義檔 %s 第 %lu 行的格式錯誤 #1" + +#~ msgid "Malformed override %s line %lu #2" +#~ msgstr "重新定義檔 %s 第 %lu 行的格式錯誤 #2" + +#~ msgid "Malformed override %s line %lu #3" +#~ msgstr "重新定義檔 %s 第 %lu 行的格式錯誤 #3" + #~ msgid "decompressor" #~ msgstr "解壓縮程式" +#~ msgid "read, still have %lu to read but none left" +#~ msgstr "讀取,仍有 %lu 未讀但已無空間" + +#~ msgid "write, still have %lu to write but couldn't" +#~ msgstr "寫入,仍有 %lu 待寫入但已沒辨法" + #~ msgid "Error occurred while processing %s (NewPackage)" #~ msgstr "在處理 %s 時發生錯誤 (NewPackage)" @@ -3479,6 +3494,9 @@ msgstr "連線突然終止" #~ msgid "Error occurred while processing %s (NewFileDesc2)" #~ msgstr "在處理 %s 時發生錯誤 (NewFileDesc2)" +#~ msgid "Error occurred while processing %s (FindPkg)" +#~ msgstr "在處理 %s 時發生錯誤 (FindPkg)" + #~ msgid "Error occurred while processing %s (CollectFileProvides)" #~ msgstr "在處理 %s 時發生錯誤 (CollectFileProvides)" diff --git a/test/integration/test-disappearing-packages b/test/integration/test-disappearing-packages index 0e0e9618d..d2ac4edc6 100755 --- a/test/integration/test-disappearing-packages +++ b/test/integration/test-disappearing-packages @@ -39,7 +39,7 @@ COMPAREFILE=$(mktemp) echo "The following package disappeared from your system as all files have been overwritten by other packages: old-pkg -Note: This is done automatic and on purpose by dpkg." > $COMPAREFILE +Note: This is done automatically and on purpose by dpkg." > $COMPAREFILE $CMD 2>&1 | tail -n 4 | diff $COMPAREFILE - && msgpass || msgfail rm $COMPAREFILE -- cgit v1.2.3-70-g09d2