diff options
author | Otavio Salvador <otavio@ossystems.com.br> | 2007-12-16 18:53:32 -0200 |
---|---|---|
committer | Otavio Salvador <otavio@ossystems.com.br> | 2007-12-16 18:53:32 -0200 |
commit | db2cca1129fa2d88eae80e1c4a17e263236a95a3 (patch) | |
tree | 2fa70cc26707e15b829c02bd02ae94f5d7e690c8 | |
parent | 18d38975fb8ff17340ddf0457d74f02a596248fb (diff) |
* apt-pkg/contrib/configuration.cc:
- if RootDir is set, then FindFile and FindDir will return paths
relative to the directory stored in RootDir, closes: #456457.
-rw-r--r-- | apt-pkg/contrib/configuration.cc | 7 | ||||
-rw-r--r-- | debian/changelog | 5 | ||||
-rw-r--r-- | doc/apt.conf.5.xml | 13 |
3 files changed, 24 insertions, 1 deletions
diff --git a/apt-pkg/contrib/configuration.cc b/apt-pkg/contrib/configuration.cc index 3109fd7a5..e8301d918 100644 --- a/apt-pkg/contrib/configuration.cc +++ b/apt-pkg/contrib/configuration.cc @@ -173,6 +173,11 @@ string Configuration::Find(const char *Name,const char *Default) const */ string Configuration::FindFile(const char *Name,const char *Default) const { + const Item *RootItem = Lookup("RootDir"); + std::string rootDir = (RootItem == 0) ? "" : RootItem->Value; + if(rootDir.size() > 0 && rootDir[rootDir.size() - 1] != '/') + rootDir.push_back('/'); + const Item *Itm = Lookup(Name); if (Itm == 0 || Itm->Value.empty() == true) { @@ -204,7 +209,7 @@ string Configuration::FindFile(const char *Name,const char *Default) const Itm = Itm->Parent; } - return val; + return rootDir + val; } /*}}}*/ // Configuration::FindDir - Find a directory name /*{{{*/ diff --git a/debian/changelog b/debian/changelog index 9ae68c770..d8ce744d6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -47,6 +47,11 @@ apt (0.7.10) UNRELEASED; urgency=low - support lzma data members * ftparchive/multicompress.cc: - support lzma output + + [ Daniel Burrows ] + * apt-pkg/contrib/configuration.cc: + - if RootDir is set, then FindFile and FindDir will return paths + relative to the directory stored in RootDir, closes: #456457. -- Otavio Salvador <otavio@ossystems.com.br> Sun, 16 Dec 2007 18:46:29 -0200 diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml index 43f33681f..5bc6c55db 100644 --- a/doc/apt.conf.5.xml +++ b/doc/apt.conf.5.xml @@ -295,6 +295,19 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";}; <literal>dpkg</literal>, <literal>apt-get</literal> <literal>dpkg-source</literal> <literal>dpkg-buildpackage</literal> and <literal>apt-cache</literal> specify the location of the respective programs.</para> + + <para> + The configuration item <literal>RootDir</literal> has a special + meaning. If set, all paths in <literal>Dir::</literal> will be + relative to <literal>RootDir</literal>, <emphasis>even paths that + are specified absolutely</emphasis>. So, for instance, if + <literal>RootDir</literal> is set to + <filename>/tmp/staging</filename> and + <literal>Dir::State::status</literal> is set to + <filename>/var/lib/dpkg/status</filename>, then the status file + will be looked up in + <filename>/tmp/staging/var/lib/dpkg/status</filename>. + </para> </refsect1> <refsect1><title>APT in DSelect</title> |