Resolvables now provide information about their source, initialize this
authorJiri Srain <jsrain@suse.cz>
Fri, 27 Jan 2006 08:44:25 +0000 (08:44 +0000)
committerJiri Srain <jsrain@suse.cz>
Fri, 27 Jan 2006 08:44:25 +0000 (08:44 +0000)
info for YUM source

27 files changed:
zypp/ResObject.cc
zypp/ResObject.h
zypp/Source.cc
zypp/Source.h
zypp/detail/ResObjectImplIf.cc
zypp/detail/ResObjectImplIf.h
zypp/source/SourceImpl.cc
zypp/source/SourceImpl.h
zypp/source/susetags/SuseTagsImpl.cc
zypp/source/susetags/SuseTagsImpl.h
zypp/source/yum/YUMGroupImpl.cc
zypp/source/yum/YUMGroupImpl.h
zypp/source/yum/YUMMessageImpl.cc
zypp/source/yum/YUMMessageImpl.h
zypp/source/yum/YUMPackageImpl.cc
zypp/source/yum/YUMPackageImpl.h
zypp/source/yum/YUMPatchImpl.cc
zypp/source/yum/YUMPatchImpl.h
zypp/source/yum/YUMPatternImpl.cc
zypp/source/yum/YUMPatternImpl.h
zypp/source/yum/YUMProductImpl.cc
zypp/source/yum/YUMProductImpl.h
zypp/source/yum/YUMScriptImpl.cc
zypp/source/yum/YUMScriptImpl.h
zypp/source/yum/YUMSourceImpl.cc
zypp/source/yum/YUMSourceImpl.h
zypp/target/store/XMLFilesBackend.cc

index 1b97ee2848f2310918314471db4f9520e05d4cb3..e1243da51cff60af808e0df8e26784dc4aa5d8f9 100644 (file)
@@ -48,6 +48,8 @@ namespace zypp
   Text ResObject::description() const
   { return pimpl().description(); }
 
+  Source & ResObject::source() const
+  { return pimpl().source(); }
   /////////////////////////////////////////////////////////////////
 } // namespace zypp
 ///////////////////////////////////////////////////////////////////
index 86681d99e1267073bff02640d81c38ef5b562312..527d4b2ebda0836bf12fc78b0b9f0df629fc868d 100644 (file)
@@ -22,6 +22,7 @@ namespace zypp
   namespace detail {
     class ResObjectImplIf;
   }
+  class Source;
 
   ///////////////////////////////////////////////////////////////////
   //
@@ -43,6 +44,8 @@ namespace zypp
     Label summary() const;
     /** */
     Text description() const;
+    /** */
+    zypp::Source & source() const;
 
   protected:
     /** Ctor */
index f68b2e3c246fbdedc80dba9fd29a7b0239901628..9e6ceaa6aa117342cec89bb57617461478472bd1 100644 (file)
@@ -15,6 +15,7 @@
 
 #include "zypp/Source.h"
 #include "zypp/source/SourceImpl.h"
+#include "zypp/SourceFactory.h"
 
 using namespace std;
 
@@ -41,14 +42,29 @@ namespace zypp
     assert( impl_r );
   }
 
+  Source Source::_nullimpl;
+  bool Source::_nullimpl_initialized = false;
+
+  /** Null implementation */
+  Source & Source::nullimpl()
+  {
+    if (! _nullimpl_initialized)
+    {
+      _nullimpl = SourceFactory().createFrom(source::SourceImpl::nullimpl());
+      _nullimpl_initialized = true;
+    }
+    return _nullimpl;
+  }
+
+
   ///////////////////////////////////////////////////////////////////
   //
   //   Forward to SourceImpl:
   //
   ///////////////////////////////////////////////////////////////////
 
-  const ResStore & Source::resolvables() const
-  { return _pimpl->resolvables(); }
+  const ResStore & Source::resolvables()
+  { return _pimpl->resolvables(*this); }
 
   std::ostream & Source::dumpOn( std::ostream & str ) const
   { return _pimpl->dumpOn( str ); }
index cd91339b99479fa0368471599cf0c9908b001af0..81a98c1a7e2937e55757aaa556effa500e40e847 100644 (file)
@@ -44,12 +44,15 @@ namespace zypp
   public:
 
     /** All resolvables provided by this source. */
-    const ResStore & resolvables() const;
+    const ResStore & resolvables();
+    /** Null implementation */
+    static Source & nullimpl();
 
   private:
     /** Factory */
     friend class SourceFactory;
     friend class SourceManager;
+  private:
     /** Factory ctor */
     Source();
     /** Factory ctor */
@@ -65,6 +68,9 @@ namespace zypp
     /** Pointer to implementation */
     RW_pointer<Impl,rw_pointer::Intrusive<Impl> > _pimpl;
 
+    static Source _nullimpl;
+    static bool _nullimpl_initialized;
+
   public:
     /** Provide a file to local filesystem */
     const Pathname provideFile(const Pathname & file_r,
index acfd58e86941d12cf87e076105fe9936b3644bbc..abec2a36936139c647b0f39d4bc4728cd8b277d9 100644 (file)
@@ -43,8 +43,8 @@ namespace zypp
       bool ResObjectImplIf::providesSources() const
       { return false; }
 
-      Source ResObjectImplIf::source() const
-      { return SourceFactory().createFrom(source::SourceImpl::nullimpl()); }
+      Source ResObjectImplIf::source() const
+      { return Source::nullimpl(); }
 
       Label ResObjectImplIf::instSrcLabel() const
       { return Label(); }
index 762682bc8c19c0b56850e99e3e912de2b7068f54..2a7da048866f7a2b7b0e054616229a7c1bf6c5c4 100644 (file)
@@ -81,7 +81,7 @@ namespace zypp
       virtual bool providesSources() const PURE_VIRTUAL;
 
       /** Installation source which provides the package */
-      virtual Source source() const PURE_VIRTUAL;
+      virtual Source source() const PURE_VIRTUAL;
 
       /** \name deprecated
        * \todo These should be replaced by a offering a
index acea948afad2a6e360d6a146d3a4cf683b3e81a8..d89a6ca3926e6b654d0f38562acdb5bfa7ec2d7d 100644 (file)
@@ -46,6 +46,7 @@ namespace zypp
     : _media(media_r)
     , _path(path_r)
     , _enabled(true)
+    , _res_store_initialized(false)
     {}
 
     ///////////////////////////////////////////////////////////////////
@@ -56,6 +57,16 @@ namespace zypp
     SourceImpl::~SourceImpl()
     {}
 
+    const ResStore & SourceImpl::resolvables(Source & source_r)
+    {
+      if (! _res_store_initialized)
+      {
+       createResolvables(source_r);
+       _res_store_initialized = true;
+      }
+      return _store;
+     }
+
     const Pathname SourceImpl::provideFile(const Pathname & file_r,
                                           const unsigned media_nr)
     {
@@ -75,6 +86,9 @@ namespace zypp
       return _media->localPath (path_r);
     }
 
+    void SourceImpl::createResolvables(Source & source_r)
+    {}
+
     /////////////////////////////////////////////////////////////////
   } // namespace source
   ///////////////////////////////////////////////////////////////////
index 33d50aa8af394869534ba94dd044cc9031294f22..99951d4d4dee1aa8b590f8b8858b9dc11116f738 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "zypp/Pathname.h"
 #include "zypp/media/MediaAccess.h"
+#include "zypp/Source.h"
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
@@ -47,6 +48,7 @@ namespace zypp
     public:
       /** Ctor, FIXME it is here only because of target storage, then make it private */
       SourceImpl()
+      : _res_store_initialized(true) // in case of null source, nothing to read
       {}
       /** Ctor. */
       SourceImpl(media::MediaAccess::Ptr & media_r,
@@ -60,8 +62,7 @@ namespace zypp
     public:
 
       /** All resolvables provided by this source. */
-      const ResStore & resolvables() const
-      { return _store; }
+      const ResStore & resolvables(Source & source_r);
 
       /** Provide a file to local filesystem */
       const Pathname provideFile(const Pathname & file,
@@ -97,6 +98,10 @@ namespace zypp
     private:
       /** Null implementation */
       static SourceImpl_Ptr _nullimpl;
+      /** ResStore initialized? */
+      bool _res_store_initialized;
+      /** Fill in the ResStore */
+      virtual void createResolvables(Source & source_r);
     };
     ///////////////////////////////////////////////////////////////////
 
index bd68496af7ed1b650c0e1d83a803fcbce5a2dd4a..efae65937a5068e758ca24dc987ed9bde07f54d0 100644 (file)
@@ -59,14 +59,18 @@ namespace zypp
       SuseTagsImpl::SuseTagsImpl( media::MediaAccess::Ptr & media_r, const Pathname & path_r )
       : SourceImpl(media_r, path_r)
       {
-        Pathname p = provideFile(path_r + "suse/setup/descr/packages");
+#warning TODO check if the source is of this type
+      }
+
+      void SuseTagsImpl::createResolvables(Source & source_r)
+      {
+        Pathname p = provideFile(_path + "suse/setup/descr/packages");
         DBG << "Going to parse " << p << endl;
         std::list<Package::Ptr> content( parsePackages( p ) );
         _store.insert( content.begin(), content.end() );
         DBG << "SuseTagsImpl (fake) from " << p << ": "
             << content.size() << " packages" << endl;
       }
-
       ///////////////////////////////////////////////////////////////////
       //
       //       METHOD NAME : SuseTagsImpl::~SuseTagsImpl
index 6ffb0a35a4def64ac856e6a1b7396cc19b0a07af..bcc7a96c521e8c496756500609916322765823bc 100644 (file)
@@ -44,6 +44,7 @@ namespace zypp
         /** Dtor */
         ~SuseTagsImpl();
 
+       virtual void createResolvables(Source & source_r);
       public:
         /** Stream output. */
         virtual std::ostream & dumpOn( std::ostream & str ) const;
index b0efa0f808db258a7f3e4f8489f0dc6cf686fdea..1e213342b6d33641d2dc30006b4644a09c203f8d 100644 (file)
@@ -34,9 +34,11 @@ namespace zypp
       /** Default ctor
       */
       YUMGroupImpl::YUMGroupImpl(
+       Source & source_r,
        const zypp::parser::yum::YUMGroupData & parsed
       )
       : _user_visible(parsed.userVisible == "true")
+      , _source(source_r)
       {
        CapFactory _f;
        for (std::list<PackageReq>::const_iterator it = parsed.packageList.begin();
@@ -117,6 +119,8 @@ namespace zypp
       ByteCount YUMGroupImpl::size() const
       { return ResObjectImplIf::size(); }
 
+      Source & YUMGroupImpl::source() const
+      { return _source; }
 
     } // namespace yum
     /////////////////////////////////////////////////////////////////
index 6fdc8357721c4bc8203b21b276ed728212dbce7d..b1243d91678998c540b7e7d8bc5939383499fbf6 100644 (file)
@@ -15,6 +15,7 @@
 #include "zypp/detail/SelectionImplIf.h"
 #include "zypp/parser/yum/YUMParserData.h"
 #include "zypp/Edition.h"
+#include "zypp/Source.h"
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
@@ -35,7 +36,10 @@ namespace zypp
       {
       public:
         /** Default ctor */
-        YUMGroupImpl( const zypp::parser::yum::YUMGroupData & parsed );
+        YUMGroupImpl(
+         Source & source_r,
+         const zypp::parser::yum::YUMGroupData & parsed
+       );
        /** Is to be visible for user? */
        virtual bool userVisible() const;
         /** Other requested groups */
@@ -66,6 +70,10 @@ namespace zypp
         bool _user_visible;
        CapSet _optional_req;
        CapSet _default_req;
+      private:
+       Source & _source;
+      public:
+       Source & source() const;
       };
       ///////////////////////////////////////////////////////////////////
     } // namespace yum
index 576f314abf12ef2f9b492b414c6a692be562545a..6bc8b96cbeb5df4efcb39a5161a7940f694fa452 100644 (file)
@@ -32,8 +32,10 @@ namespace zypp
       /** Default ctor
       */
       YUMMessageImpl::YUMMessageImpl(
+       Source & source_r,
        const zypp::parser::yum::YUMPatchMessage & parsed
       )
+      : _source(source_r)
       {
        _text = parsed.text;
        _type = parsed.type;
@@ -67,6 +69,8 @@ namespace zypp
       Vendor YUMMessageImpl::instSrcVendor() const
       { return ResObjectImplIf::instSrcVendor(); }
 
+      Source & YUMMessageImpl::source() const
+      { return _source; }
 
 
     } // namespace yum
index 92a69b39ee84d9fc9c0155c8f24ac8be5f56f5cb..8f059218861d99fa9005589ad24a47fa80c5d7ce 100644 (file)
@@ -34,7 +34,10 @@ namespace zypp
       {
       public:
         /** Default ctor */
-        YUMMessageImpl( const zypp::parser::yum::YUMPatchMessage & parsed );
+        YUMMessageImpl(
+         Source & source_r,
+         const zypp::parser::yum::YUMPatchMessage & parsed
+       );
        /** Get the text of the message */
        virtual std::string text() const;
        /** Get the type of the message (YesNo / OK) */
@@ -60,6 +63,10 @@ namespace zypp
        std::string _text;
        /** The type of the message (YesNo / OK) */
        std::string _type;
+      private:
+       Source & _source;
+      public:
+       Source & source() const;
       };
       ///////////////////////////////////////////////////////////////////
     } // namespace yum
index dd6c2fcb08f998ffc2f53e2ec1095bcece2af5cf..c617e8e386d68a273f967876b1369c1a512f2950 100644 (file)
@@ -35,6 +35,7 @@ namespace zypp
       /** Default ctor
       */
       YUMPackageImpl::YUMPackageImpl(
+       Source & source_r,
        const zypp::parser::yum::YUMPrimaryData & parsed,
        const zypp::parser::yum::YUMFileListData & filelist,
        const zypp::parser::yum::YUMOtherData & other
@@ -61,7 +62,8 @@ namespace zypp
        _delta_rpms(),
        _patch_rpms(),
 
-       _install_only(parsed.installOnly)
+       _install_only(parsed.installOnly),
+       _source(source_r)
 #if 0
       : _size_package(strtol(parsed.sizePackage.c_str(), 0, 10)),
        _size_archive(strtol(parsed.sizeArchive.c_str(), 0, 10)),
@@ -89,6 +91,7 @@ namespace zypp
       }
 
       YUMPackageImpl::YUMPackageImpl(
+       Source & source_r,
        const zypp::parser::yum::YUMPatchPackage & parsed
       )
       : _summary(parsed.summary),
@@ -113,7 +116,8 @@ namespace zypp
        _delta_rpms(),
        _patch_rpms(),
 
-       _install_only(parsed.installOnly)
+       _install_only(parsed.installOnly),
+       _source(source_r)
 #if 0
       : _size_package( strtol(parsed.sizePackage.c_str(), 0, 10)),
        _size_archive( strtol(parsed.sizeArchive.c_str(), 0, 10)),
@@ -333,6 +337,9 @@ namespace zypp
       std::list<PatchRpm> YUMPackageImpl::patchRpms() const
       { return _patch_rpms; }
 
+      Source & YUMPackageImpl::source() const
+      { return _source; }
+
 #if 0
       /** */
       std::list<std::string> YUMPackageImpl::insnotify() const
index b5d1eec612b525ed05442ddf53520a660528c6a3..006ca6032b9beef62f493645d559eb174b3b30ba 100644 (file)
@@ -40,11 +40,13 @@ namespace zypp
        /** Default ctor
        */
        YUMPackageImpl(
+         Source & source_r,
          const zypp::parser::yum::YUMPrimaryData & parsed,
          const zypp::parser::yum::YUMFileListData & filelist,
          const zypp::parser::yum::YUMOtherData & other
        );
        YUMPackageImpl(
+         Source & source_r,
          const zypp::parser::yum::YUMPatchPackage & parsed
        );
 
@@ -225,6 +227,10 @@ namespace zypp
 /*
        std::list<ChangelogEntry> changelog;
 */
+      private:
+       Source & _source;
+      public:
+       Source & source() const;
 
 
        };
index 6d410518a0232d23f94908ffab610e2583b0f577..0ef8040979cb7d19ea796fbbcfed20cd8000ca0b 100644 (file)
@@ -43,9 +43,11 @@ namespace zypp
        * \bug CANT BE CONSTUCTED THAT WAY ANYMORE
       */
       YUMPatchImpl::YUMPatchImpl(
+       Source & source_r,
        const zypp::parser::yum::YUMPatchData & parsed,
-       YUMSourceImpl * src
+       YUMSourceImpl & srcimpl_r
       )
+      : _source(source_r)
       {
        _patch_id = parsed.patchId;
         _timestamp = atol(parsed.timestamp.c_str());
@@ -87,21 +89,21 @@ namespace zypp
             case YUMPatchAtom::Package: {
               shared_ptr<YUMPatchPackage> package_data
                 = dynamic_pointer_cast<YUMPatchPackage>(*it);
-              Package::Ptr package = src->createPackage(*package_data);
+              Package::Ptr package = srcimpl_r.createPackage(_source, *package_data);
               _atoms.push_back(package);
               break;
             }
             case YUMPatchAtom::Message: {
               shared_ptr<YUMPatchMessage> message_data
                 = dynamic_pointer_cast<YUMPatchMessage>(*it);
-              Message::Ptr message = src->createMessage(*message_data);
+              Message::Ptr message = srcimpl_r.createMessage(_source, *message_data);
               _atoms.push_back(message);
               break;
             }
             case YUMPatchAtom::Script: {
               shared_ptr<YUMPatchScript> script_data
                 = dynamic_pointer_cast<YUMPatchScript>(*it);
-              Script::Ptr script = src->createScript(*script_data);
+              Script::Ptr script = srcimpl_r.createScript(_source, *script_data);
               _atoms.push_back(script);
               break;
             }
@@ -251,6 +253,9 @@ namespace zypp
         }
       }
 
+      Source & YUMPatchImpl::source() const
+      { return _source; }
+
     } // namespace yum
     /////////////////////////////////////////////////////////////////
   } // namespace source
index 59691b3b68fdc3505d7f9fe4db3f6233647dfcce..1b01e503b0b3fb49ef4db83e2d6493137c90a2c6 100644 (file)
@@ -36,8 +36,9 @@ namespace zypp
       public:
         /** Default ctor */
         YUMPatchImpl(
+         Source & source_r,
          const zypp::parser::yum::YUMPatchData & parsed,
-         YUMSourceImpl * src
+         YUMSourceImpl & srcimpl_r
        );
        /** Patch ID */
        std::string id() const;
@@ -87,6 +88,10 @@ namespace zypp
        bool _affects_pkg_manager;
        /** The list of all atoms building the patch */
        AtomList _atoms;
+      private:
+       Source & _source;
+      public:
+       Source & source() const;
        };
       ///////////////////////////////////////////////////////////////////
     } // namespace yum
index 0aedb110f101ff3595f08b061a6aa610af9cc2af..38cff3c6a133bd90b707a3ebfdc1e38495c7a515 100644 (file)
@@ -34,9 +34,11 @@ namespace zypp
       /** Default ctor
       */
       YUMPatternImpl::YUMPatternImpl(
+       Source & source_r,
        const zypp::parser::yum::YUMPatternData & parsed
       )
       : _user_visible(parsed.userVisible == "true")
+      , _source(source_r)
       {
        CapFactory _f;
        for (std::list<PackageReq>::const_iterator it = parsed.packageList.begin();
@@ -117,6 +119,9 @@ namespace zypp
       ByteCount YUMPatternImpl::size() const
       { return ResObjectImplIf::size(); }
 
+      Source & YUMPatternImpl::source() const
+      { return _source; }
+
 
     } // namespace yum
     /////////////////////////////////////////////////////////////////
index 575bb057275912f85e37c1df02084560618d0a37..216bfdb64484ec0d0ab0fb471ddb43c12d11be85 100644 (file)
@@ -35,7 +35,10 @@ namespace zypp
       {
       public:
         /** Default ctor */
-        YUMPatternImpl( const zypp::parser::yum::YUMPatternData & parsed );
+        YUMPatternImpl(
+         Source & source_r,
+         const zypp::parser::yum::YUMPatternData & parsed
+       );
        /** Is to be visible for user? */
        virtual bool userVisible() const;
         /** optional requirements */
@@ -66,6 +69,10 @@ namespace zypp
         bool _user_visible;
        CapSet _optional_req;
        CapSet _default_req;
+      private:
+       Source & _source;
+      public:
+       Source & source() const;
       };
       ///////////////////////////////////////////////////////////////////
     } // namespace yum
index 786089874acf0de8b1abbe47ace9bb47d0d6505a..33bb650031f8773caa10e365310e26dad95e947f 100644 (file)
@@ -43,13 +43,14 @@ namespace zypp
        * \bug CANT BE CONSTUCTED THAT WAY ANYMORE
       */
       YUMProductImpl::YUMProductImpl(
-       const zypp::parser::yum::YUMProductData & parsed,
-       YUMSourceImpl * src
+       Source & source_r,
+       const zypp::parser::yum::YUMProductData & parsed
       )
       :        _category(parsed.type),
-       _vendor(parsed.vendor)//,
+       _vendor(parsed.vendor),
 //     _displayname(parsed.displayname),
 //     _description(parsed.description)
+       _source(source_r)
       {}
 
       std::string YUMProductImpl::category() const
@@ -84,6 +85,9 @@ namespace zypp
 
       Vendor YUMProductImpl::instSrcVendor() const
       { return ResObjectImplIf::instSrcVendor(); }
+
+      Source & YUMProductImpl::source() const
+      { return _source; }
  
     } // namespace yum
     /////////////////////////////////////////////////////////////////
index ee6a9ab6490ac3b516a01a2c354956cfbc48f9e0..cff68c833bab9f0aa54f12f55bca3e95d16fd5dc 100644 (file)
@@ -36,8 +36,8 @@ namespace zypp
       public:
         /** Default ctor */
         YUMProductImpl(
-         const zypp::parser::yum::YUMProductData & parsed,
-         YUMSourceImpl * src
+         Source & source_r,
+         const zypp::parser::yum::YUMProductData & parsed
        );
        std::string category() const;
        Label vendor() const;
@@ -57,6 +57,10 @@ namespace zypp
        Text _description;
 
 
+      private:
+       Source & _source;
+      public:
+       Source & source() const;
 
        };
       ///////////////////////////////////////////////////////////////////
index 531b6d9270d4cc8bb79807a3ff036c8afcde43be..8db105ac2519dd9866e7433f14d71b6053512d87 100644 (file)
@@ -35,8 +35,10 @@ namespace zypp
       /** Default ctor
       */
       YUMScriptImpl::YUMScriptImpl(
+       Source & source_r,
        const zypp::parser::yum::YUMPatchScript & parsed
       )
+      : _source(source_r)
       {
        _do_script = parsed.do_script;
        _undo_script = parsed.undo_script;
@@ -73,6 +75,11 @@ namespace zypp
       Vendor YUMScriptImpl::instSrcVendor() const
       { return ResObjectImplIf::instSrcVendor(); }
 
+      Source & YUMScriptImpl::source() const
+      { return _source; }
+
+
+
     } // namespace yum
     /////////////////////////////////////////////////////////////////
   } // namespace source
index b2e95ad5997c9fccfe516e9438642fd2dfa3b661..008f041f80a734f699c4d20571f308524323e034 100644 (file)
@@ -33,7 +33,10 @@ namespace zypp
       {
       public:
         /** Default ctor */
-        YUMScriptImpl( const zypp::parser::yum::YUMPatchScript & parsed );
+        YUMScriptImpl(
+         Source & source_r,
+         const zypp::parser::yum::YUMPatchScript & parsed
+       );
        /** Get the script to perform the change */
        virtual std::string do_script() const;
        /** Get the script to undo the change */
@@ -55,6 +58,10 @@ namespace zypp
        std::string _do_script;
        /** The script to undo the change */
        std::string _undo_script;
+      private:
+       Source & _source;
+      public:
+       Source & source() const;
       };
       ///////////////////////////////////////////////////////////////////
     } // namespace yum
index a554fc1fd723e0810b91f7a97e2638acbf2d8abf..5e299c6715b1bac75843e38eaf441bf795f9c14d 100644 (file)
@@ -50,6 +50,28 @@ namespace zypp
       YUMSourceImpl::YUMSourceImpl(media::MediaAccess::Ptr & media_r,
                                   const Pathname & path_r)
       : SourceImpl(media_r, path_r)
+      {
+       try {
+       // first read list of all files in the reposotory
+        Pathname filename = provideFile(_path + "/repomd.xml");
+       DBG << "Reading file " << filename << endl;
+       ifstream repo_st(filename.asString().c_str());
+       YUMRepomdParser repomd(repo_st, "");
+
+       for(;
+           ! repomd.atEnd();
+           ++repomd)
+       {
+       }
+       }
+       catch (...)
+       {
+       ERR << "Cannot read repomd file, cannot initialize source" << endl;
+       ZYPP_THROW( Exception("Cannot read repomd file, cannot initialize source") );
+       }
+      }
+
+      void YUMSourceImpl::createResolvables(Source & source_r)
       {
        std::list<YUMRepomdData_Ptr> repo_primary;
        std::list<YUMRepomdData_Ptr> repo_files;
@@ -61,7 +83,7 @@ namespace zypp
 
        try {
        // first read list of all files in the reposotory
-        Pathname filename = provideFile(path_r + "/repomd.xml");
+        Pathname filename = provideFile(_path + "/repomd.xml");
        DBG << "Reading file " << filename << endl;
        ifstream repo_st(filename.asString().c_str());
        YUMRepomdParser repomd(repo_st, "");
@@ -103,7 +125,7 @@ namespace zypp
             it++)
        {
          // TODO check checksum
-         Pathname filename = provideFile(path_r + (*it)->location);
+         Pathname filename = provideFile(_path + (*it)->location);
          DBG << "Reading file " << filename << endl;
          ifstream st(filename.asString().c_str());
          YUMFileListParser filelist(st, "");
@@ -127,7 +149,7 @@ namespace zypp
             it++)
        {
          // TODO check checksum
-         Pathname filename = provideFile(path_r + (*it)->location);
+         Pathname filename = provideFile(_path + (*it)->location);
          DBG << "Reading file " << filename << endl;
          ifstream st(filename.asString().c_str());
          YUMOtherParser other(st, "");
@@ -152,7 +174,7 @@ namespace zypp
             it++)
        {
          // TODO check checksum
-         Pathname filename = provideFile(path_r + (*it)->location);
+         Pathname filename = provideFile(_path + (*it)->location);
          DBG << "Reading file " << filename << endl;
          ifstream st(filename.asString().c_str());
          YUMPrimaryParser prim(st, "");
@@ -172,6 +194,7 @@ namespace zypp
            YUMFileListData filelist_empty;
            YUMOtherData other_empty;
            Package::Ptr p = createPackage(
+             source_r,
              **prim,
              found_files != files_data.end()
                ? *found_files->second
@@ -197,7 +220,7 @@ namespace zypp
             it++)
        {
          // TODO check checksum
-         Pathname filename = provideFile(path_r + (*it)->location);
+         Pathname filename = provideFile(_path + (*it)->location);
          DBG << "Reading file " << filename << endl;
          ifstream st(filename.asString().c_str());
          YUMGroupParser group(st, "");
@@ -205,7 +228,10 @@ namespace zypp
               !group.atEnd();
               ++group)
          {
-           Selection::Ptr p = createGroup(**group);
+           Selection::Ptr p = createGroup(
+             source_r,
+             **group
+           );
            _store.insert (p);
          }
          if (group.errorStatus())
@@ -223,7 +249,7 @@ namespace zypp
             it++)
        {
          // TODO check checksum
-         Pathname filename = provideFile(path_r + (*it)->location);
+         Pathname filename = provideFile(_path + (*it)->location);
          DBG << "Reading file " << filename << endl;
          ifstream st(filename.asString().c_str());
          YUMPatternParser pattern(st, "");
@@ -231,7 +257,10 @@ namespace zypp
               !pattern.atEnd();
               ++pattern)
          {
-           Pattern::Ptr p = createPattern(**pattern);
+           Pattern::Ptr p = createPattern(
+             source_r,
+             **pattern
+           );
            _store.insert (p);
          }
          if (pattern.errorStatus())
@@ -249,7 +278,7 @@ namespace zypp
             it++)
        {
          // TODO check checksum
-         Pathname filename = provideFile(path_r + (*it)->location);
+         Pathname filename = provideFile(_path + (*it)->location);
          DBG << "Reading file " << filename << endl;
          ifstream st(filename.asString().c_str());
          YUMProductParser product(st, "");
@@ -257,7 +286,10 @@ namespace zypp
               !product.atEnd();
               ++product)
          {
-           Product::Ptr p = createProduct(**product);
+           Product::Ptr p = createProduct(
+             source_r,
+             **product
+           );
            _store.insert (p);
          }
          if (product.errorStatus())
@@ -276,7 +308,7 @@ namespace zypp
             it++)
        {
          // TODO check checksum
-         Pathname filename = provideFile(path_r + (*it)->location);
+         Pathname filename = provideFile(_path + (*it)->location);
          DBG << "Reading file " << filename << endl;
          ifstream st(filename.asString().c_str());
          YUMPatchesParser patch(st, "");
@@ -296,7 +328,7 @@ namespace zypp
             it != patch_files.end();
             it++)
        {
-           Pathname filename = provideFile(path_r + *it);
+           Pathname filename = provideFile(_path + *it);
            DBG << "Reading file " << filename << endl;
            ifstream st(filename.asString().c_str());
            YUMPatchParser ptch(st, "");
@@ -304,7 +336,10 @@ namespace zypp
                !ptch.atEnd();
                ++ptch)
            {
-             Patch::Ptr p = createPatch(**ptch);
+             Patch::Ptr p = createPatch(
+               source_r,
+               **ptch
+             );
              _store.insert (p);
              Patch::AtomList atoms = p->atoms();
              for (Patch::AtomList::iterator at = atoms.begin();
@@ -325,6 +360,7 @@ namespace zypp
       }
 
        Package::Ptr YUMSourceImpl::createPackage(
+         Source & source_r,
          const zypp::parser::yum::YUMPrimaryData & parsed,
          const zypp::parser::yum::YUMFileListData & filelist,
          const zypp::parser::yum::YUMOtherData & other
@@ -333,7 +369,7 @@ namespace zypp
          try
          {
            shared_ptr<YUMPackageImpl> impl(
-             new YUMPackageImpl(parsed, filelist, other));
+             new YUMPackageImpl(source_r, parsed, filelist, other));
 
             // Collect basic Resolvable data
             NVRAD dataCollect( parsed.name,
@@ -355,12 +391,13 @@ namespace zypp
        }
 
        Package::Ptr YUMSourceImpl::createPackage(
+         Source & source_r,
          const zypp::parser::yum::YUMPatchPackage & parsed
        )
        {
          try
          {
-           shared_ptr<YUMPackageImpl> impl(new YUMPackageImpl(parsed));
+           shared_ptr<YUMPackageImpl> impl(new YUMPackageImpl(source_r, parsed));
 
             // Collect basic Resolvable data
             NVRAD dataCollect( parsed.name,
@@ -382,12 +419,13 @@ namespace zypp
        }
 
        Selection::Ptr YUMSourceImpl::createGroup(
+         Source & source_r,
          const zypp::parser::yum::YUMGroupData & parsed
        )
        {
          try
          {
-           shared_ptr<YUMGroupImpl> impl(new YUMGroupImpl(parsed));
+           shared_ptr<YUMGroupImpl> impl(new YUMGroupImpl(source_r, parsed));
             // Collect basic Resolvable data
             NVRAD dataCollect( parsed.groupId,
                                Edition::noedition,
@@ -406,12 +444,13 @@ namespace zypp
        }
 
        Pattern::Ptr YUMSourceImpl::createPattern(
+         Source & source_r,
          const zypp::parser::yum::YUMPatternData & parsed
        )
        {
          try
          {
-           shared_ptr<YUMPatternImpl> impl(new YUMPatternImpl(parsed));
+           shared_ptr<YUMPatternImpl> impl(new YUMPatternImpl(source_r, parsed));
             // Collect basic Resolvable data
             NVRAD dataCollect( parsed.patternId,
                                Edition::noedition,
@@ -430,12 +469,13 @@ namespace zypp
        }
 
        Message::Ptr YUMSourceImpl::createMessage(
+         Source & source_r,
          const zypp::parser::yum::YUMPatchMessage & parsed
        )
        {
          try
          {
-           shared_ptr<YUMMessageImpl> impl(new YUMMessageImpl(parsed));
+           shared_ptr<YUMMessageImpl> impl(new YUMMessageImpl(source_r, parsed));
 
             // Collect basic Resolvable data
             NVRAD dataCollect( parsed.name,
@@ -457,12 +497,13 @@ namespace zypp
        }
 
        Script::Ptr YUMSourceImpl::createScript(
+         Source & source_r,
          const zypp::parser::yum::YUMPatchScript & parsed
        )
        {
          try
          {
-           shared_ptr<YUMScriptImpl> impl(new YUMScriptImpl(parsed));
+           shared_ptr<YUMScriptImpl> impl(new YUMScriptImpl(source_r, parsed));
 
             // Collect basic Resolvable data
             NVRAD dataCollect( parsed.name,
@@ -484,12 +525,13 @@ namespace zypp
        }
 
        Product::Ptr YUMSourceImpl::createProduct(
+         Source & source_r,
          const zypp::parser::yum::YUMProductData & parsed
        )
        {
          try
          {
-           shared_ptr<YUMProductImpl> impl(new YUMProductImpl(parsed, this));
+           shared_ptr<YUMProductImpl> impl(new YUMProductImpl(source_r, parsed));
 
             // Collect basic Resolvable data
             NVRAD dataCollect( parsed.name,
@@ -511,12 +553,13 @@ namespace zypp
        }
 
        Patch::Ptr YUMSourceImpl::createPatch(
+         Source & source_r,
          const zypp::parser::yum::YUMPatchData & parsed
        )
        {
          try
          {
-           shared_ptr<YUMPatchImpl> impl(new YUMPatchImpl(parsed, this));
+           shared_ptr<YUMPatchImpl> impl(new YUMPatchImpl(source_r, parsed, *this));
 
             // Collect basic Resolvable data
             NVRAD dataCollect( parsed.name,
index 04abaa985e0ab3d19c3ff4eab8a5439d85d1955d..136ad272ce1d9a2721d14675a1df4a949e59f000 100644 (file)
@@ -48,30 +48,40 @@ namespace zypp
         /** Default ctor */
         YUMSourceImpl(media::MediaAccess::Ptr & media_r, const Pathname & path_r = "/");
 
+       virtual void createResolvables(Source & source_r);
+
        Package::Ptr createPackage(
+         Source & source_r,
          const zypp::parser::yum::YUMPrimaryData & parsed,
          const zypp::parser::yum::YUMFileListData & filelist,
          const zypp::parser::yum::YUMOtherData & other
        );
        Package::Ptr createPackage(
+         Source & source_r,
          const zypp::parser::yum::YUMPatchPackage & parsed
        );
        Selection::Ptr createGroup(
+         Source & source_r,
          const zypp::parser::yum::YUMGroupData & parsed
        );
        Pattern::Ptr createPattern(
+         Source & source_r,
          const zypp::parser::yum::YUMPatternData & parsed
        );
        Message::Ptr createMessage(
+         Source & source_r,
          const zypp::parser::yum::YUMPatchMessage & parsed
        );
        Script::Ptr createScript(
+         Source & source_r,
          const zypp::parser::yum::YUMPatchScript & parsed
        );
        Patch::Ptr createPatch(
+         Source & source_r,
          const zypp::parser::yum::YUMPatchData & parsed
        );
        Product::Ptr createProduct(
+         Source & source_r,
          const zypp::parser::yum::YUMProductData & parsed
        );
 
@@ -91,6 +101,7 @@ namespace zypp
 
        Capability createCapability(const YUMDependency & dep,
                                    const Resolvable::Kind & my_kind);
+      private:
 
        class PackageID {
        public:
@@ -133,8 +144,9 @@ namespace zypp
          std::string _rel;
          std::string _arch;
        };
-
+       friend inline bool operator<( const YUMSourceImpl::PackageID & lhs, const YUMSourceImpl::PackageID & rhs );
       };
+
       inline bool operator<( const YUMSourceImpl::PackageID & lhs, const YUMSourceImpl::PackageID & rhs )
       { return YUMSourceImpl::PackageID::compare( lhs, rhs ) == -1; }
 
index 580dd37071fe7fa3e1f10235971ec96716499e4e..0bd0ddb710052a7ada48b4f077a7211dadd1240c 100644 (file)
@@ -52,8 +52,12 @@ namespace storage
 class XMLFilesBackend::Private
 {
   public:
+  XMLFilesBackend::Private::Private()
+  : source(Source::nullimpl())
+  { }
   bool randomFileName;
-       YUMSourceImpl source;
+  Source & source;
+  YUMSourceImpl sourceimpl;
 };
 
 ///////////////////////////////////////////////////////////////////
@@ -207,7 +211,7 @@ Resolvable::Ptr XMLFilesBackend::resolvableFromFile( std::string file_path, Reso
     YUMPatchParser iter(res_file,"");
     for (; !iter.atEnd(); ++iter)
     {
-      resolvable = d->source.createPatch(**iter);
+      resolvable = d->sourceimpl.createPatch(d->source, **iter);
       break;
     }
   }