diff options
-rw-r--r-- | apt-pkg/deb/debsystem.cc | 28 | ||||
-rw-r--r-- | test/integration/framework | 1 |
2 files changed, 25 insertions, 4 deletions
diff --git a/apt-pkg/deb/debsystem.cc b/apt-pkg/deb/debsystem.cc index e2b1df950..fd702b3c6 100644 --- a/apt-pkg/deb/debsystem.cc +++ b/apt-pkg/deb/debsystem.cc @@ -86,7 +86,7 @@ bool debSystem::Lock() } // Create the lockfile - string AdminDir = flNotFile(_config->Find("Dir::State::status")); + string AdminDir = flNotFile(_config->FindFile("Dir::State::status")); d->LockFD = GetLock(AdminDir + "lock"); if (d->LockFD == -1) { @@ -145,7 +145,7 @@ bool debSystem::UnLock(bool NoErrors) bool debSystem::CheckUpdates() { // Check for updates.. (dirty) - string File = flNotFile(_config->Find("Dir::State::status")) + "updates/"; + string File = flNotFile(_config->FindFile("Dir::State::status")) + "updates/"; DIR *DirP = opendir(File.c_str()); if (DirP == 0) return false; @@ -184,13 +184,35 @@ pkgPackageManager *debSystem::CreatePM(pkgDepCache *Cache) const // System::Initialize - Setup the configuration space.. /*{{{*/ // --------------------------------------------------------------------- /* These are the Debian specific configuration variables.. */ +static std::string getDpkgStatusLocation(Configuration &Cnf) { + auto const cnfstatedir = Cnf.Find("Dir::State", "var/lib/apt/"); + std::string statedir; + if (APT::String::Endswith(cnfstatedir, "/apt/")) + statedir.assign(cnfstatedir, 0, cnfstatedir.length() - 5); + else if (APT::String::Endswith(cnfstatedir, "/apt")) + statedir.assign(cnfstatedir, 0, cnfstatedir.length() - 4); + if (statedir.empty()) + Cnf.Set("Dir::State", "var/lib/dpkg"); + else + Cnf.Set("Dir::State", flCombine(statedir, "dpkg")); + auto const cnfrootdir = Cnf.Find("RootDir"); + if (Cnf.Exists("RootDir") == true) + Cnf.Set("RootDir", ""); + Cnf.Set("Dir::State::status", "status"); + auto const statusfile = Cnf.FindFile("Dir::State::status"); + if (cnfrootdir.empty() == false) + Cnf.Set("RootDir", cnfrootdir); + Cnf.Set("Dir::State", cnfstatedir); + return statusfile; +} bool debSystem::Initialize(Configuration &Cnf) { /* These really should be jammed into a generic 'Local Database' engine which is yet to be determined. The functions in pkgcachegen should be the only users of these */ Cnf.CndSet("Dir::State::extended_states", "extended_states"); - Cnf.CndSet("Dir::State::status","/var/lib/dpkg/status"); + if (Cnf.Exists("Dir::State::status") == false) + Cnf.Set("Dir::State::status", getDpkgStatusLocation(Cnf)); Cnf.CndSet("Dir::Bin::dpkg","/usr/bin/dpkg"); if (d->StatusFile) { diff --git a/test/integration/framework b/test/integration/framework index 27239cce4..54adcf92d 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -331,7 +331,6 @@ setupenvironment() { 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 echo "APT::Get::Show-User-Simulation-Note \"false\";" >> aptconfig.conf echo "Dir::Bin::Methods \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/methods\";" >> aptconfig.conf # either store apt-key were we can access it, even if we run it as a different user |