#include <iosfwd>
#include "zypp/base/PtrTypes.h"
+#include <zypp/Pathname.h>
#include <zypp/Patch.h>
///////////////////////////////////////////////////////////////////
{
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;
#include "zypp/base/ReferenceCounted.h"
#include "zypp/base/NonCopyable.h"
#include "zypp/base/PtrTypes.h"
+#include <zypp/Pathname.h>
#include <zypp/Patch.h>
///////////////////////////////////////////////////////////////////
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 );
#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;
{ }
bool randomFileName;
std::set<Resolvable::Kind> kinds;
+ Pathname root;
};
///////////////////////////////////////////////////////////////////
// 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);
{
// 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;
{
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);
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;
}
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