add support for root path
authorDuncan Mac-Vicar P <dmacvicar@suse.de>
Fri, 3 Feb 2006 11:18:19 +0000 (11:18 +0000)
committerDuncan Mac-Vicar P <dmacvicar@suse.de>
Fri, 3 Feb 2006 11:18:19 +0000 (11:18 +0000)
zypp/target/store/Backend.cc
zypp/target/store/Backend.h
zypp/target/store/PersistentStorage.cc
zypp/target/store/PersistentStorage.h
zypp/target/store/XMLFilesBackend.cc
zypp/target/store/XMLFilesBackend.h

index 55b0b6f..b699da7 100644 (file)
@@ -43,7 +43,7 @@ namespace zypp
                //      METHOD NAME : Backend::Backend
                //      METHOD TYPE : Ctor
                //
-               Backend::Backend()
+               Backend::Backend(const Pathname &root)
                {}
 
                ///////////////////////////////////////////////////////////////////
index 055001d..8290f1a 100644 (file)
@@ -15,6 +15,7 @@
 #include <iosfwd>
 
 #include "zypp/base/PtrTypes.h"
+#include <zypp/Pathname.h>
 #include <zypp/Patch.h>
 
 ///////////////////////////////////////////////////////////////////
@@ -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;
index d2b05d1..817ffe3 100644 (file)
@@ -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);
 }
 
 ///////////////////////////////////////////////////////////////////
index aea3bbd..e02ffc2 100644 (file)
@@ -17,6 +17,7 @@
 #include "zypp/base/ReferenceCounted.h"
 #include "zypp/base/NonCopyable.h"
 #include "zypp/base/PtrTypes.h"
+#include <zypp/Pathname.h>
 #include <zypp/Patch.h>
 
 ///////////////////////////////////////////////////////////////////
@@ -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 );
index 4d5fc22..5d3a8cb 100644 (file)
@@ -38,7 +38,7 @@
 #include "serialize.h"
 #include <list>
 
-#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<Resolvable::Kind> 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<zypp::Patch>::kind);
   //d->kinds.insert(ResTraits<zypp::Message>::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<Resolvable::Kind>::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
index e572a18..de84fe9 100644 (file)
@@ -48,7 +48,7 @@ public:
 
   public:
   /** Default ctor */
-  XMLFilesBackend();
+  XMLFilesBackend(const Pathname &root);
   /** Dtor */
   ~XMLFilesBackend();
   void setRandomFileNameEnabled( bool enabled );