From dc4a2160ce70db5434fdf64ae5f23f8140229b56 Mon Sep 17 00:00:00 2001 From: Duncan Mac-Vicar P Date: Fri, 3 Feb 2006 11:18:19 +0000 Subject: [PATCH] add support for root path --- zypp/target/store/Backend.cc | 2 +- zypp/target/store/Backend.h | 5 +++-- zypp/target/store/PersistentStorage.cc | 7 ++++++- zypp/target/store/PersistentStorage.h | 6 ++++++ zypp/target/store/XMLFilesBackend.cc | 21 +++++++++------------ zypp/target/store/XMLFilesBackend.h | 2 +- 6 files changed, 26 insertions(+), 17 deletions(-) diff --git a/zypp/target/store/Backend.cc b/zypp/target/store/Backend.cc index 55b0b6f..b699da7 100644 --- a/zypp/target/store/Backend.cc +++ b/zypp/target/store/Backend.cc @@ -43,7 +43,7 @@ namespace zypp // METHOD NAME : Backend::Backend // METHOD TYPE : Ctor // - Backend::Backend() + Backend::Backend(const Pathname &root) {} /////////////////////////////////////////////////////////////////// diff --git a/zypp/target/store/Backend.h b/zypp/target/store/Backend.h index 055001d..8290f1a 100644 --- a/zypp/target/store/Backend.h +++ b/zypp/target/store/Backend.h @@ -15,6 +15,7 @@ #include #include "zypp/base/PtrTypes.h" +#include #include /////////////////////////////////////////////////////////////////// @@ -35,8 +36,8 @@ class Backend { friend std::ostream & operator<<( std::ostream & str, const Backend & obj ); public: - /** Default ctor */ - Backend(); + /** root is the system root path */ + Backend(const Pathname &root); /** Dtor */ virtual ~Backend(); virtual void doTest() = 0; diff --git a/zypp/target/store/PersistentStorage.cc b/zypp/target/store/PersistentStorage.cc index d2b05d1..817ffe3 100644 --- a/zypp/target/store/PersistentStorage.cc +++ b/zypp/target/store/PersistentStorage.cc @@ -51,7 +51,12 @@ PersistentStorage::PersistentStorage() { d = new Private; DBG << " Creating XML Files backend" << endl; - d->backend = new XMLFilesBackend(); + d->backend = 0L; +} + +void PersistentStorage::init(const Pathname &root) +{ + d->backend = new XMLFilesBackend(root); } /////////////////////////////////////////////////////////////////// diff --git a/zypp/target/store/PersistentStorage.h b/zypp/target/store/PersistentStorage.h index aea3bbd..e02ffc2 100644 --- a/zypp/target/store/PersistentStorage.h +++ b/zypp/target/store/PersistentStorage.h @@ -17,6 +17,7 @@ #include "zypp/base/ReferenceCounted.h" #include "zypp/base/NonCopyable.h" #include "zypp/base/PtrTypes.h" +#include #include /////////////////////////////////////////////////////////////////// @@ -44,6 +45,11 @@ namespace zypp public: /** + * Initializes the Storage when the system is located in some + * root path. THIS MUST BE CALLED BEFORE DOING ANY OPERATION + */ + void init(const Pathname &root); + /** * Stores a Resolvable in the active backend. */ void storeObject( Resolvable::constPtr resolvable ); diff --git a/zypp/target/store/XMLFilesBackend.cc b/zypp/target/store/XMLFilesBackend.cc index 4d5fc22..5d3a8cb 100644 --- a/zypp/target/store/XMLFilesBackend.cc +++ b/zypp/target/store/XMLFilesBackend.cc @@ -38,7 +38,7 @@ #include "serialize.h" #include -#define ZYPP_DB_DIR "zypp_db" +#define ZYPP_DB_DIR "/var/lib/zypp_db" using std::endl; using namespace boost::filesystem; @@ -63,6 +63,7 @@ class XMLFilesBackend::Private { } bool randomFileName; std::set kinds; + Pathname root; }; /////////////////////////////////////////////////////////////////// @@ -76,11 +77,11 @@ class XMLFilesBackend::Private // METHOD NAME : XMLFilesBackend::XMLFilesBackend // METHOD TYPE : Ctor // -XMLFilesBackend::XMLFilesBackend() +XMLFilesBackend::XMLFilesBackend(const Pathname &root) : Backend(root) { d = new Private; d->randomFileName = false; - + d->root = root; // types of resolvables stored (supported) d->kinds.insert(ResTraits::kind); //d->kinds.insert(ResTraits::kind); @@ -165,7 +166,7 @@ XMLFilesBackend::initBackend() { // FIXME duncan * handle exceptions DBG << "Creating directory structure..." << std::endl; - path topdir(ZYPP_DB_DIR); + path topdir = path(d->root.asString()) / path(ZYPP_DB_DIR); create_directory(topdir); MIL << "Created..." << topdir.string() << std::endl; std::set::const_iterator it_kinds; @@ -173,7 +174,7 @@ XMLFilesBackend::initBackend() { Resolvable::Kind kind = (*it_kinds); # warning "add exception handling here" - path p(path(ZYPP_DB_DIR) / path(resolvableKindToString(kind, true /* plural */))); + path p(topdir / path(resolvableKindToString(kind, true /* plural */))); if (!exists(p)) { create_directory(p); @@ -191,10 +192,7 @@ std::string XMLFilesBackend::dirForResolvableKind( Resolvable::Kind kind ) const { std::string dir; - // FIXME replace with path class of boost - dir += std::string(ZYPP_DB_DIR); - dir += "/"; - dir += resolvableKindToString(kind, true); + dir += path( path(d->root.asString()) / path(ZYPP_DB_DIR) / path(resolvableKindToString(kind, true)) ).string(); return dir; } @@ -208,9 +206,8 @@ std::string XMLFilesBackend::fullPathForResolvable( Resolvable::constPtr resolvable ) const { std::string filename; - filename = dirForResolvable(resolvable) + "/"; - filename += d->randomFileName ? randomString(40) : (resolvable->name() + "-" + resolvable->edition().version()); - return filename; + filename = d->randomFileName ? randomString(40) : (resolvable->name() + "-" + resolvable->edition().version()); + return path( path(dirForResolvable(resolvable)) / path(filename)).string(); } void diff --git a/zypp/target/store/XMLFilesBackend.h b/zypp/target/store/XMLFilesBackend.h index e572a18..de84fe9 100644 --- a/zypp/target/store/XMLFilesBackend.h +++ b/zypp/target/store/XMLFilesBackend.h @@ -48,7 +48,7 @@ public: public: /** Default ctor */ - XMLFilesBackend(); + XMLFilesBackend(const Pathname &root); /** Dtor */ ~XMLFilesBackend(); void setRandomFileNameEnabled( bool enabled ); -- 2.7.4