From b29c37128c2c77490f5851158a7631ed107c79fc Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 2 Sep 2010 12:47:48 +0200 Subject: * 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) Easily done by moving a private method from pkgAcquire into the public area of fileutl.cc to be able to use it also in here --- apt-pkg/acquire.cc | 21 --------------------- apt-pkg/acquire.h | 8 -------- apt-pkg/contrib/fileutl.cc | 21 +++++++++++++++++++++ apt-pkg/contrib/fileutl.h | 9 +++++++++ apt-pkg/deb/dpkgpm.cc | 3 ++- debian/changelog | 5 ++++- test/integration/framework | 4 ++-- 7 files changed, 38 insertions(+), 33 deletions(-) diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc index 63825da93..6ec557397 100644 --- a/apt-pkg/acquire.cc +++ b/apt-pkg/acquire.cc @@ -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..94d994e8b 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; } /*}}}*/ +// 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 CheckDirectory(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..f79c9032f 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 CheckDirectory(string const &Parent, string const &Path); + std::vector GetListOfFilesInDir(string const &Dir, string const &Ext, bool const &SortList, bool const &AllowNoExt=false); std::vector GetListOfFilesInDir(string const &Dir, std::vector const &Ext, diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 5530ef129..d3c432ce1 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(CheckDirectory(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/debian/changelog b/debian/changelog index e37a5504f..2a3a9d89c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -40,8 +40,11 @@ apt (0.8.1) UNRELEASED; urgency=low - let the pin origin actually work as advertised in the manpage which means "" are optional and pinning a local archive does work - even if it is a non-flat archive (Closes: #594435) + * 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) - -- Michael Vogt Mon, 30 Aug 2010 11:53:30 +0200 + -- David Kalnischkies Thu, 02 Sep 2010 12:41:32 +0200 apt (0.8.0) unstable; urgency=low diff --git a/test/integration/framework b/test/integration/framework index ba5f9dfa3..2b26fc8f7 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -88,8 +88,8 @@ 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-/') if [ -f "${TESTDIR}/${STATUSFILE}" ]; then -- cgit v1.2.3