summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <mvo@debian.org>2010-09-06 18:11:49 +0200
committerMichael Vogt <mvo@debian.org>2010-09-06 18:11:49 +0200
commitfb031c5598c529b98477c47eac6fe11cae4b1b66 (patch)
treede7908c98e8086a148c423e6edb3d8a6e7455491
parenteb1115ef4e84b90189a50c15af4002e4e7306c01 (diff)
parent7753e4684e2b80abbed296b90f47be12b4fce8fc (diff)
merged from lp:~donkult/apt/sid
-rw-r--r--apt-pkg/acquire.cc29
-rw-r--r--apt-pkg/acquire.h8
-rw-r--r--apt-pkg/contrib/fileutl.cc21
-rw-r--r--apt-pkg/contrib/fileutl.h9
-rw-r--r--apt-pkg/deb/dpkgpm.cc3
-rw-r--r--apt-pkg/indexcopy.cc2
-rw-r--r--apt-pkg/init.cc3
-rw-r--r--apt-pkg/init.h2
-rw-r--r--apt-pkg/versionmatch.cc2
-rwxr-xr-xcmdline/apt-key2
-rw-r--r--configure.in2
-rw-r--r--debian/changelog18
-rw-r--r--methods/bzip2.cc9
-rw-r--r--methods/gzip.cc9
-rw-r--r--test/integration/framework24
15 files changed, 82 insertions, 61 deletions
diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc
index 63825da93..9478cdfb4 100644
--- a/apt-pkg/acquire.cc
+++ b/apt-pkg/acquire.cc
@@ -74,12 +74,12 @@ bool pkgAcquire::Setup(pkgAcquireStatus *Progress, string const &Lock)
string const archivesDir = _config->FindDir("Dir::Cache::Archives");
string const partialArchivesDir = archivesDir + "partial/";
- if (CheckDirectory(_config->FindDir("Dir::State"), partialListDir) == false &&
- CheckDirectory(listDir, partialListDir) == false)
+ if (CreateAPTDirectoryIfNeeded(_config->FindDir("Dir::State"), partialListDir) == false &&
+ CreateAPTDirectoryIfNeeded(listDir, partialListDir) == false)
return _error->Errno("Acquire", _("List directory %spartial is missing."), listDir.c_str());
- if (CheckDirectory(_config->FindDir("Dir::Cache"), partialArchivesDir) == false &&
- CheckDirectory(archivesDir, partialArchivesDir) == false)
+ if (CreateAPTDirectoryIfNeeded(_config->FindDir("Dir::Cache"), partialArchivesDir) == false &&
+ CreateAPTDirectoryIfNeeded(archivesDir, partialArchivesDir) == false)
return _error->Errno("Acquire", _("Archives directory %spartial is missing."), archivesDir.c_str());
if (Lock.empty() == true || _config->FindB("Debug::NoLocking", false) == true)
@@ -93,27 +93,6 @@ bool pkgAcquire::Setup(pkgAcquireStatus *Progress, string const &Lock)
return true;
}
/*}}}*/
-// Acquire::CheckDirectory - ensure that the given directory exists /*{{{*/
-// ---------------------------------------------------------------------
-/* a small wrapper around CreateDirectory to check if it exists and to
- remove the trailing "/apt/" from the parent directory if needed */
-bool pkgAcquire::CheckDirectory(string const &Parent, string const &Path) const
-{
- if (DirectoryExists(Path) == true)
- return true;
-
- size_t const len = Parent.size();
- if (len > 5 && Parent.find("/apt/", len - 6, 5) == len - 5)
- {
- if (CreateDirectory(Parent.substr(0,len-5), Path) == true)
- return true;
- }
- else if (CreateDirectory(Parent, Path) == true)
- return true;
-
- return false;
-}
- /*}}}*/
// Acquire::~pkgAcquire - Destructor /*{{{*/
// ---------------------------------------------------------------------
/* Free our memory, clean up the queues (destroy the workers) */
diff --git a/apt-pkg/acquire.h b/apt-pkg/acquire.h
index 82be8b843..e3a4435b8 100644
--- a/apt-pkg/acquire.h
+++ b/apt-pkg/acquire.h
@@ -362,14 +362,6 @@ class pkgAcquire
private:
/** \brief FD of the Lock file we acquire in Setup (if any) */
int LockFD;
-
- /** \brief Ensure the existence of the given Path
- *
- * \param Parent directory of the Path directory - a trailing
- * /apt/ will be removed before CreateDirectory call.
- * \param Path which should exist after (successful) call
- */
- bool CheckDirectory(string const &Parent, string const &Path) const;
};
/** \brief Represents a single download source from which an item
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc
index 2b73d1424..eabaadf90 100644
--- a/apt-pkg/contrib/fileutl.cc
+++ b/apt-pkg/contrib/fileutl.cc
@@ -251,6 +251,27 @@ bool CreateDirectory(string const &Parent, string const &Path)
return true;
}
/*}}}*/
+// CreateAPTDirectoryIfNeeded - ensure that the given directory exists /*{{{*/
+// ---------------------------------------------------------------------
+/* a small wrapper around CreateDirectory to check if it exists and to
+ remove the trailing "/apt/" from the parent directory if needed */
+bool CreateAPTDirectoryIfNeeded(string const &Parent, string const &Path)
+{
+ if (DirectoryExists(Path) == true)
+ return true;
+
+ size_t const len = Parent.size();
+ if (len > 5 && Parent.find("/apt/", len - 6, 5) == len - 5)
+ {
+ if (CreateDirectory(Parent.substr(0,len-5), Path) == true)
+ return true;
+ }
+ else if (CreateDirectory(Parent, Path) == true)
+ return true;
+
+ return false;
+}
+ /*}}}*/
// GetListOfFilesInDir - returns a vector of files in the given dir /*{{{*/
// ---------------------------------------------------------------------
/* If an extension is given only files with this extension are included
diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h
index cb4655798..419506273 100644
--- a/apt-pkg/contrib/fileutl.h
+++ b/apt-pkg/contrib/fileutl.h
@@ -94,6 +94,15 @@ int GetLock(string File,bool Errors = true);
bool FileExists(string File);
bool DirectoryExists(string const &Path) __attrib_const;
bool CreateDirectory(string const &Parent, string const &Path);
+
+/** \brief Ensure the existence of the given Path
+ *
+ * \param Parent directory of the Path directory - a trailing
+ * /apt/ will be removed before CreateDirectory call.
+ * \param Path which should exist after (successful) call
+ */
+bool CreateAPTDirectoryIfNeeded(string const &Parent, string const &Path);
+
std::vector<string> GetListOfFilesInDir(string const &Dir, string const &Ext,
bool const &SortList, bool const &AllowNoExt=false);
std::vector<string> GetListOfFilesInDir(string const &Dir, std::vector<string> const &Ext,
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index 5530ef129..395c3fb1a 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -641,7 +641,8 @@ void pkgDPkgPM::WriteHistoryTag(string const &tag, string value)
bool pkgDPkgPM::OpenLog()
{
string const logdir = _config->FindDir("Dir::Log");
- if(not FileExists(logdir))
+ if(CreateAPTDirectoryIfNeeded(logdir, logdir) == false)
+ // FIXME: use a better string after freeze
return _error->Error(_("Directory '%s' missing"), logdir.c_str());
// get current time
diff --git a/apt-pkg/indexcopy.cc b/apt-pkg/indexcopy.cc
index a2a1d5934..ed037027c 100644
--- a/apt-pkg/indexcopy.cc
+++ b/apt-pkg/indexcopy.cc
@@ -661,7 +661,7 @@ bool SigVerify::RunGPGV(std::string const &File, std::string const &FileGPG,
{
string const gpgvpath = _config->Find("Dir::Bin::gpg", "/usr/bin/gpgv");
// FIXME: remove support for deprecated APT::GPGV setting
- string const trustedFile = _config->FindFile("Dir::Etc::Trusted");
+ string const trustedFile = _config->Find("APT::GPGV::TrustedKeyring", _config->FindFile("Dir::Etc::Trusted"));
string const trustedPath = _config->FindDir("Dir::Etc::TrustedParts");
bool const Debug = _config->FindB("Debug::Acquire::gpgv", false);
diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc
index 846b27313..f0bad78df 100644
--- a/apt-pkg/init.cc
+++ b/apt-pkg/init.cc
@@ -70,8 +70,7 @@ bool pkgInitConfig(Configuration &Cnf)
Cnf.Set("Dir::Etc::parts","apt.conf.d");
Cnf.Set("Dir::Etc::preferences","preferences");
Cnf.Set("Dir::Etc::preferencesparts","preferences.d");
- string const deprecated = _config->Find("APT::GPGV::TrustedKeyring");
- Cnf.Set("Dir::Etc::trusted", deprecated.empty() ? "trusted.gpg" : deprecated);
+ Cnf.Set("Dir::Etc::trusted", "trusted.gpg");
Cnf.Set("Dir::Etc::trustedparts","trusted.gpg.d");
Cnf.Set("Dir::Bin::methods","/usr/lib/apt/methods");
Cnf.Set("Dir::Media::MountPath","/media/apt");
diff --git a/apt-pkg/init.h b/apt-pkg/init.h
index 6e7340dfe..15a1165b9 100644
--- a/apt-pkg/init.h
+++ b/apt-pkg/init.h
@@ -23,7 +23,7 @@
// See also buildlib/libversion.mak
#define APT_PKG_MAJOR 4
#define APT_PKG_MINOR 10
-#define APT_PKG_RELEASE 0
+#define APT_PKG_RELEASE 1
extern const char *pkgVersion;
extern const char *pkgLibVersion;
diff --git a/apt-pkg/versionmatch.cc b/apt-pkg/versionmatch.cc
index 17a54bc4c..c40b1fdbc 100644
--- a/apt-pkg/versionmatch.cc
+++ b/apt-pkg/versionmatch.cc
@@ -118,7 +118,7 @@ pkgVersionMatch::pkgVersionMatch(string Data,MatchType Type) : Type(Type)
if (Type == Origin)
{
- if (Data[0] == '"' && Data.end()[-1] == '"')
+ if (Data[0] == '"' && Data.length() >= 2 && Data.end()[-1] == '"')
OrSite = Data.substr(1, Data.length() - 2);
else
OrSite = Data;
diff --git a/cmdline/apt-key b/cmdline/apt-key
index 27731ef7d..b39ab12e4 100755
--- a/cmdline/apt-key
+++ b/cmdline/apt-key
@@ -147,11 +147,13 @@ else
#echo "generate list"
TRUSTEDFILE="/etc/apt/trusted.gpg"
eval $(apt-config shell TRUSTEDFILE Apt::GPGV::TrustedKeyring)
+ eval $(apt-config shell TRUSTEDFILE Dir::Etc::Trusted/f)
if [ -r "$TRUSTEDFILE" ]; then
GPG="$GPG --keyring $TRUSTEDFILE"
fi
GPG="$GPG --primary-keyring $TRUSTEDFILE"
TRUSTEDPARTS="/etc/apt/trusted.gpg.d"
+ eval $(apt-config shell TRUSTEDPARTS Dir::Etc::TrustedParts/d)
if [ -d "$TRUSTEDPARTS" ]; then
#echo "parts active"
for trusted in $(run-parts --list $TRUSTEDPARTS --regex '^.*\.gpg$'); do
diff --git a/configure.in b/configure.in
index 8b212c1bc..b2880c99c 100644
--- a/configure.in
+++ b/configure.in
@@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib)
AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
dnl -- SET THIS TO THE RELEASE VERSION --
-AC_DEFINE_UNQUOTED(VERSION,"0.7.26~exp6")
+AC_DEFINE_UNQUOTED(VERSION,"0.8.2")
PACKAGE="apt"
AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
AC_SUBST(PACKAGE)
diff --git a/debian/changelog b/debian/changelog
index 66d512599..403b36d17 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,7 +3,23 @@ apt (0.8.2) UNRELEASED; urgency=low
[ Manpages translations ]
* Spanish (Omar Campagne). Closes: #595557
- -- Christian Perrier <bubulle@debian.org> Sun, 05 Sep 2010 07:53:15 +0200
+ [ David Kalnischkies ]
+ * apt-pkg/versionmatch.cc:
+ - do not accept 'Pin: origin "' (missing closing ") as a valid
+ way to pin a local archive: either "" or none…
+ * apt-pkg/deb/dpkgpm.cc:
+ - create Dir::Log if needed to support /var/log as tmpfs or similar,
+ inspired by Thomas Bechtold, thanks! (Closes: #523919, LP: #220239)
+ * apt-pkg/indexcopy.cc:
+ - support really still the APT::GPGV::TrustedKeyring setting,
+ as it breaks d-i badly otherwise (Closes: #595428)
+ * cmdline/apt-key:
+ - support also Dir::Etc::Trusted so that apt-key works in the same
+ way as the library part which works with the trusted files
+ * methods/{gzip,bzip2}.cc:
+ - empty files can never be valid archives (Closes: #595691)
+
+ -- Michael Vogt <mvo@debian.org> Mon, 06 Sep 2010 18:10:06 +0200
apt (0.8.1) unstable; urgency=low
diff --git a/methods/bzip2.cc b/methods/bzip2.cc
index 241f21c66..c668141a2 100644
--- a/methods/bzip2.cc
+++ b/methods/bzip2.cc
@@ -56,12 +56,9 @@ bool Bzip2Method::Fetch(FetchItem *Itm)
// Open the source and destination files
FileFd From(Path,FileFd::ReadOnly);
- // if the file is empty, just rename it and return
- if(From.Size() == 0)
- {
- rename(Path.c_str(), Itm->DestFile.c_str());
- return true;
- }
+ // FIXME add an error message saying that empty files can't be valid archives
+ if(From.Size() == 0)
+ return false;
int GzOut[2];
if (pipe(GzOut) < 0)
diff --git a/methods/gzip.cc b/methods/gzip.cc
index 5b9b66b50..22cae9424 100644
--- a/methods/gzip.cc
+++ b/methods/gzip.cc
@@ -48,12 +48,9 @@ bool GzipMethod::Fetch(FetchItem *Itm)
// Open the source and destination files
FileFd From(Path,FileFd::ReadOnlyGzip);
- // if the file is empty, just rename it and return
- if(From.Size() == 0)
- {
- rename(Path.c_str(), Itm->DestFile.c_str());
- return true;
- }
+ // FIXME add an error message saying that empty files can't be valid archives
+ if(From.Size() == 0)
+ return false;
FileFd To(Itm->DestFile,FileFd::WriteAtomic);
To.EraseOnFailure();
diff --git a/test/integration/framework b/test/integration/framework
index 8efe47330..8a5973d4b 100644
--- a/test/integration/framework
+++ b/test/integration/framework
@@ -72,11 +72,15 @@ aptconfig() { runapt apt-config $*; }
aptcache() { runapt apt-cache $*; }
aptget() { runapt apt-get $*; }
aptftparchive() { runapt apt-ftparchive $*; }
+aptkey() { runapt apt-key $*; }
+dpkg() {
+ $(which dpkg) --root=${TMPWORKINGDIRECTORY}/rootdir --force-not-root --force-bad-path --log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log $*
+}
setupenvironment() {
TMPWORKINGDIRECTORY=$(mktemp -d)
local TESTDIR=$(readlink -f $(dirname $0))
- msgninfo "Preparing environment for ${CCMD}$0${CINFO} in ${TMPWORKINGDIRECTORY}… "
+ msgninfo "Preparing environment for ${CCMD}$(basename $0)${CINFO} in ${TMPWORKINGDIRECTORY}… "
BUILDDIRECTORY="${TESTDIR}/../../build/bin"
test -x "${BUILDDIRECTORY}/apt-get" || msgdie "You need to build tree first"
local OLDWORKINGDIRECTORY=$(pwd)
@@ -85,10 +89,10 @@ setupenvironment() {
cd $TMPWORKINGDIRECTORY
mkdir rootdir aptarchive keys
cd rootdir
- mkdir -p etc/apt/apt.conf.d etc/apt/sources.list.d etc/apt/trusted.gpg.d etc/apt/preferences.d var/cache
- mkdir -p var/log/apt var/lib/apt
+ 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 's/^test-/status-/')
+ 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
@@ -98,7 +102,7 @@ setupenvironment() {
mkdir -p usr/lib/apt
ln -s ${BUILDDIRECTORY}/methods usr/lib/apt/methods
cd ..
- local PACKAGESFILE=$(echo "$(basename $0)" | sed 's/^test-/Packages-/')
+ local PACKAGESFILE=$(echo "$(basename $0)" | sed -e 's/^test-/Packages-/' -e 's/^skip-/Packages-/')
if [ -f "${TESTDIR}/${PACKAGESFILE}" ]; then
cp "${TESTDIR}/${PACKAGESFILE}" aptarchive/Packages
else
@@ -228,6 +232,10 @@ buildaptarchive() {
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' ' ')"
+ fi
echo -n 'Dir {
ArchiveDir "' >> ftparchive.conf
echo -n $(readlink -f .) >> ftparchive.conf
@@ -297,7 +305,7 @@ buildaptftparchivedirectorystructure() {
}
buildaptarchivefromincoming() {
- msginfo "Build APT archive for ${CCMD}$0${CINFO} based on incoming packages…"
+ msginfo "Build APT archive for ${CCMD}$(basename $0)${CINFO} based on incoming packages…"
cd aptarchive
[ -e pool ] || ln -s ../incoming pool
[ -e ftparchive.conf ] || createaptftparchiveconfig
@@ -314,7 +322,7 @@ buildaptarchivefromincoming() {
}
buildaptarchivefromfiles() {
- msginfo "Build APT archive for ${CCMD}$0${CINFO} based on prebuild files…"
+ msginfo "Build APT archive for ${CCMD}$(basename $0)${CINFO} based on prebuild files…"
cd aptarchive
if [ -f Packages ]; then
msgninfo "\tPackages file… "
@@ -476,7 +484,7 @@ N: No packages found"
local ARCH=$(dpkg-architecture -qDEB_HOST_ARCH_CPU)
eval `apt-config shell ARCH APT::Architecture`
echo "$VIRTUAL" | sed -e "s/:$ARCH//" -e 's/:all//' > $COMPAREFILE
- aptcache show $PACKAGE 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail
+ aptcache show -q=0 $PACKAGE 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail
rm $COMPAREFILE
}