Fixed cache dir handling
authorStanislav Visnovsky <visnov@suse.cz>
Tue, 21 Feb 2006 11:42:11 +0000 (11:42 +0000)
committerStanislav Visnovsky <visnov@suse.cz>
Tue, 21 Feb 2006 11:42:11 +0000 (11:42 +0000)
TODO: integration with SourceCache

zypp/Source.cc
zypp/Source.h
zypp/SourceFactory.cc
zypp/SourceManager.cc
zypp/source/SourceImpl.cc
zypp/source/SourceImpl.h

index 46f2fed0135fb17148e160e2e7b1256ee6cb8f50..26c91920ad2edd4d5bfb2905a379daaec136f018 100644 (file)
@@ -123,6 +123,9 @@ namespace zypp
   const Pathname & Source_Ref::path (void) const
   { return _pimpl->path (); }
 
+  const Pathname & Source_Ref::cacheDir (void) const
+  { return _pimpl->cacheDir (); }
+
   void Source_Ref::changeMedia(const media::MediaId & media_r, const Pathname & path_r)
   { _pimpl->changeMedia(media_r, path_r); }
 
index ffcf8f34468046c54137d9f663d315044ae8000c..8a9f3de659fec435ddc47d752ae34b3070546ccc 100644 (file)
@@ -104,6 +104,7 @@ namespace zypp
     void setPriority (unsigned p);
     unsigned priorityUnsubscribed (void) const;
     void setPriorityUnsubscribed (unsigned p);
+    const Pathname & cacheDir (void) const;
 
     // for ZMD
     std::string zmdName (void) const;
index 17c3aed765e56ed855c499d71be33f624e37077a..2948035ee6d6abfdd0c731471b7041bdda551f02 100644 (file)
@@ -111,6 +111,7 @@ media::MediaManager media_mgr;
 
     report->startProbe (url_r);
     
+#warning if cache_dir is provided, no need to open the original url
     // open the media
     media::MediaId id = media_mgr.open(url_r);
 
index 8858a4161040ff949d01fde588b9644274360eec..dabae21e6396147b84c593684a603cfa7948f930 100644 (file)
 #include <iostream>
 #include "zypp/base/Logger.h"
 
+#include "zypp/ZYpp.h"
+#include "zypp/ZYppFactory.h"
 #include "zypp/SourceManager.h"
 #include "zypp/SourceFactory.h"
 #include "zypp/Source.h"
 #include "zypp/source/SourceImpl.h"
 #include "zypp/target/store/PersistentStorage.h"
+#include "zypp/Pathname.h"
+#include "zypp/PathInfo.h"
+
+#include "boost/filesystem/operations.hpp" // includes boost/filesystem/path.hpp
+#include "boost/filesystem/fstream.hpp"    // ditto
+
+#define ZYPP_METADATA_PREFIX ( getZYpp()->homePath().asString()+"/cache/" )
 
 using std::endl;
+using namespace boost::filesystem;
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
@@ -130,7 +140,22 @@ namespace zypp
   {
     storage::PersistentStorage store;    
     store.init( root_r );
-  
+    
+
+    // make sure to create the source metadata cache
+    if( metadata_cache )
+    {
+       // make sure our root exists
+       
+       filesystem::assert_dir ( root_r.asString() + "/" + getZYpp()->homePath().asString() );
+       
+       path topdir = path(root_r.asString()) / path(ZYPP_METADATA_PREFIX);
+       if (!exists(topdir))
+           create_directory(topdir);
+       MIL << "Created..." << topdir.string() << std::endl;
+    }
+
+    unsigned id = 0;  
     for( SourceMap::iterator it = _sources.begin(); it != _sources.end(); it++)
     {
        storage::PersistentStorage::SourceData descr;
@@ -141,8 +166,17 @@ namespace zypp
        descr.autorefresh = it->second->autorefresh();
        descr.type = it->second->type();
        
+       descr.cache_dir = it->second->cacheDir().empty() ?
+           root_r.asString() + ZYPP_METADATA_PREFIX + str::numstring(id)
+           : it->second->cacheDir().asString();
+
+       filesystem::assert_dir ( descr.cache_dir );
+
        // FIXME: product_dir
        store.storeSource( descr );
+
+       if( metadata_cache )
+               it->second->storeMetadata( descr.cache_dir );
     }
 
     for( SourceMap::iterator it = _deleted_sources.begin(); it != _deleted_sources.end(); it++)
@@ -174,7 +208,7 @@ namespace zypp
        unsigned id = 0;
        
        try {
-           id = addSource(it->url, it->product_dir, it->alias);
+           id = addSource(it->url, it->product_dir, it->alias, it->cache_dir);
        }
        catch ( const Exception & expt ){
            ERR << "Unable to restore source from " << it->url << endl;
index 3ee3e50b860064717b244c79977328039807fc99..748fa4f0c2f82e51376fb624ad68ca3940bedeb9 100644 (file)
@@ -227,6 +227,9 @@ namespace zypp
     void SourceImpl::setPriorityUnsubscribed (unsigned p)
     { _priority_unsubscribed = p; }
 
+    const Pathname & SourceImpl::cacheDir (void) 
+    { return _cache_dir; }
+
     Url SourceImpl::url (void) const
     { return _url; }
 
index 31cd6518f1f9087e54aace45c88c0b4ff859f4a2..9f9febbab571335f7e3ed607bf0f4b841fb3327c 100644 (file)
@@ -131,6 +131,8 @@ namespace zypp
       virtual void setPriority (unsigned p);
       virtual unsigned priorityUnsubscribed (void) const;
       virtual void setPriorityUnsubscribed (unsigned p);
+      virtual const Pathname & cacheDir (void);
+
 
       virtual std::string type(void) const;