Browse Source
Author: jgg Date: 1999-04-18 06:36:36 GMT Support for memory-only cachingdebian/1.8.y

9 changed files with 421 additions and 145 deletions
@ -0,0 +1,96 @@ |
|||
// -*- mode: cpp; mode: fold -*-
|
|||
// Description /*{{{*/
|
|||
// $Id: cachefile.cc,v 1.1 1999/04/18 06:36:36 jgg Exp $
|
|||
/* ######################################################################
|
|||
|
|||
CacheFile - Simple wrapper class for opening, generating and whatnot |
|||
|
|||
This class implements a simple 2 line mechanism to open various sorts |
|||
of caches. It can operate as root, as not root, show progress and so on, |
|||
it transparently handles everything necessary. |
|||
|
|||
##################################################################### */ |
|||
/*}}}*/ |
|||
// Include Files /*{{{*/
|
|||
#ifdef __GNUG__ |
|||
#pragma implementation "apt-pkg/cachefile.h" |
|||
#endif |
|||
|
|||
#include <apt-pkg/cachefile.h> |
|||
#include <apt-pkg/error.h> |
|||
#include <apt-pkg/sourcelist.h> |
|||
#include <apt-pkg/pkgcachegen.h> |
|||
#include <apt-pkg/configuration.h> |
|||
/*}}}*/ |
|||
|
|||
// CacheFile::CacheFile - Constructor /*{{{*/
|
|||
// ---------------------------------------------------------------------
|
|||
/* */ |
|||
pkgCacheFile::pkgCacheFile() : Map(0), Cache(0), Lock() |
|||
{ |
|||
} |
|||
/*}}}*/ |
|||
// CacheFile::~CacheFile - Destructor /*{{{*/
|
|||
// ---------------------------------------------------------------------
|
|||
/* */ |
|||
pkgCacheFile::~pkgCacheFile() |
|||
{ |
|||
delete Cache; |
|||
delete Map; |
|||
delete Lock; |
|||
} |
|||
/*}}}*/ |
|||
// CacheFile::Open - Open the cache files, creating if necessary /*{{{*/
|
|||
// ---------------------------------------------------------------------
|
|||
/* */ |
|||
bool pkgCacheFile::Open(OpProgress &Progress,bool WithLock) |
|||
{ |
|||
if (WithLock == true) |
|||
Lock = new pkgDpkgLock; |
|||
|
|||
if (_error->PendingError() == true) |
|||
return false; |
|||
|
|||
// Read the source list
|
|||
pkgSourceList List; |
|||
if (List.ReadMainList() == false) |
|||
return _error->Error("The list of sources could not be read."); |
|||
|
|||
/* 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 theses 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; |
|||
} |
|||
|
|||
// Create the dependency cache
|
|||
Cache = new pkgDepCache(*Map,Progress); |
|||
if (_error->PendingError() == true) |
|||
return false; |
|||
|
|||
Progress.Done(); |
|||
|
|||
return true; |
|||
} |
|||
/*}}}*/ |
@ -0,0 +1,48 @@ |
|||
// -*- mode: cpp; mode: fold -*-
|
|||
// Description /*{{{*/
|
|||
// $Id: cachefile.h,v 1.1 1999/04/18 06:36:36 jgg Exp $
|
|||
/* ######################################################################
|
|||
|
|||
CacheFile - Simple wrapper class for opening, generating and whatnot |
|||
|
|||
This class implements a simple 2 line mechanism to open various sorts |
|||
of caches. It can operate as root, as not root, show progress and so on, |
|||
it transparently handles everything necessary. |
|||
|
|||
##################################################################### */ |
|||
/*}}}*/ |
|||
#ifndef PKGLIB_CACHEFILE_H |
|||
#define PKGLIB_CACHEFILE_H |
|||
|
|||
#ifdef __GNUG__ |
|||
#pragma interface "apt-pkg/cachefile.h" |
|||
#endif |
|||
|
|||
#include <apt-pkg/depcache.h> |
|||
#include <apt-pkg/dpkginit.h> |
|||
|
|||
class pkgCacheFile |
|||
{ |
|||
protected: |
|||
|
|||
MMap *Map; |
|||
pkgDepCache *Cache; |
|||
pkgDpkgLock *Lock; |
|||
|
|||
public: |
|||
|
|||
// We look pretty much exactly like a pointer to a dep cache
|
|||
inline operator pkgDepCache &() {return *Cache;}; |
|||
inline pkgDepCache *operator ->() {return Cache;}; |
|||
inline pkgDepCache &operator *() {return *Cache;}; |
|||
|
|||
// Release the dpkg status lock
|
|||
inline void ReleaseLock() {Lock->Close();}; |
|||
|
|||
bool Open(OpProgress &Progress,bool WithLock = true); |
|||
|
|||
pkgCacheFile(); |
|||
~pkgCacheFile(); |
|||
}; |
|||
|
|||
#endif |
Loading…
Reference in new issue