summaryrefslogtreecommitdiff
path: root/apt-pkg/cachefile.cc
diff options
context:
space:
mode:
authorArch Librarian <arch@canonical.com>2004-09-20 16:56:32 +0000
committerArch Librarian <arch@canonical.com>2004-09-20 16:56:32 +0000
commitb2e465d6d32d2dc884f58b94acb7e35f671a87fe (patch)
tree5928383b9bde7b0ba9812e6526ad746466e558f7 /apt-pkg/cachefile.cc
parent00b47c98ca4a4349686a082eba6d77decbb03a4d (diff)
Join with aliencode
Author: jgg Date: 2001-02-20 07:03:16 GMT Join with aliencode
Diffstat (limited to 'apt-pkg/cachefile.cc')
-rw-r--r--apt-pkg/cachefile.cc90
1 files changed, 56 insertions, 34 deletions
diff --git a/apt-pkg/cachefile.cc b/apt-pkg/cachefile.cc
index d7f3c0937..74d136afb 100644
--- a/apt-pkg/cachefile.cc
+++ b/apt-pkg/cachefile.cc
@@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: cachefile.cc,v 1.4 1999/06/24 04:06:30 jgg Exp $
+// $Id: cachefile.cc,v 1.5 2001/02/20 07:03:17 jgg Exp $
/* ######################################################################
CacheFile - Simple wrapper class for opening, generating and whatnot
@@ -21,23 +21,29 @@
#include <apt-pkg/sourcelist.h>
#include <apt-pkg/pkgcachegen.h>
#include <apt-pkg/configuration.h>
+#include <apt-pkg/policy.h>
+#include <apt-pkg/pkgsystem.h>
+
+#include <apti18n.h>
/*}}}*/
// CacheFile::CacheFile - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* */
-pkgCacheFile::pkgCacheFile() : Map(0), Cache(0), Lock(0)
+pkgCacheFile::pkgCacheFile() : Map(0), Cache(0), DCache(0), Policy(0)
{
}
/*}}}*/
-// CacheFile::~CacheFile - Destructor /*{{{*/
+// CacheFile::~CacheFile - Destructor /*{{{*/
// ---------------------------------------------------------------------
/* */
pkgCacheFile::~pkgCacheFile()
{
+ delete DCache;
+ delete Policy;
delete Cache;
delete Map;
- delete Lock;
+ _system->UnLock(true);
}
/*}}}*/
// CacheFile::Open - Open the cache files, creating if necessary /*{{{*/
@@ -46,7 +52,8 @@ pkgCacheFile::~pkgCacheFile()
bool pkgCacheFile::Open(OpProgress &Progress,bool WithLock)
{
if (WithLock == true)
- Lock = new pkgDpkgLock;
+ if (_system->Lock() == false)
+ return false;
if (_error->PendingError() == true)
return false;
@@ -54,38 +61,35 @@ bool pkgCacheFile::Open(OpProgress &Progress,bool WithLock)
// Read the source list
pkgSourceList List;
if (List.ReadMainList() == false)
- return _error->Error("The list of sources could not be read.");
+ return _error->Error(_("The list of sources could not be read."));
+
+ // Read the caches
+ bool Res = pkgMakeStatusCache(List,Progress,&Map,!WithLock);
+ Progress.Done();
+ if (Res == false)
+ return _error->Error(_("The package lists or status file could not be parsed or opened."));
+
+ /* This sux, remove it someday */
+ if (_error->empty() == false)
+ _error->Warning(_("You may want to run apt-get update to correct these missing files"));
+
+ Cache = new pkgCache(Map);
+ if (_error->PendingError() == true)
+ return false;
- /* Build all of the caches, using the cache files if we are locking
- (ie as root) */
- if (WithLock == true)
- {
- pkgMakeStatusCache(List,Progress);
- Progress.Done();
- if (_error->PendingError() == true)
- return _error->Error("The package lists or status file could not be parsed or opened.");
- if (_error->empty() == false)
- _error->Warning("You may want to run apt-get update to correct these missing files");
-
- // Open the cache file
- FileFd File(_config->FindFile("Dir::Cache::pkgcache"),FileFd::ReadOnly);
- if (_error->PendingError() == true)
- return false;
-
- Map = new MMap(File,MMap::Public | MMap::ReadOnly);
- if (_error->PendingError() == true)
- return false;
- }
- else
- {
- Map = pkgMakeStatusCacheMem(List,Progress);
- Progress.Done();
- if (Map == 0)
- return false;
- }
+ // The policy engine
+ Policy = new pkgPolicy(Cache);
+ if (_error->PendingError() == true)
+ return false;
+ if (ReadPinFile(*Policy) == false)
+ return false;
// Create the dependency cache
- Cache = new pkgDepCache(*Map,Progress);
+ DCache = new pkgDepCache(Cache,Policy);
+ if (_error->PendingError() == true)
+ return false;
+
+ DCache->Init(&Progress);
Progress.Done();
if (_error->PendingError() == true)
return false;
@@ -93,3 +97,21 @@ bool pkgCacheFile::Open(OpProgress &Progress,bool WithLock)
return true;
}
/*}}}*/
+
+// CacheFile::Close - close the cache files /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void pkgCacheFile::Close()
+{
+ delete DCache;
+ delete Policy;
+ delete Cache;
+ delete Map;
+ _system->UnLock(true);
+
+ Map = 0;
+ DCache = 0;
+ Policy = 0;
+ Cache = 0;
+}
+ /*}}}*/