From 38e89d87d9d64f1b75be1f372541b5123598fbc8 Mon Sep 17 00:00:00 2001 From: Michael Andres Date: Fri, 3 Aug 2007 21:48:30 +0000 Subject: [PATCH] Fix susetags repo to parse dikusage data (#293039) --- VERSION.cmake | 2 +- devel/devel.ma/Test.cc | 154 ++++++++++++++++- zypp/CMakeLists.txt | 2 + zypp/data/ResolvableData.h | 2 + zypp/parser/susetags/PackagesDuFileReader.cc | 245 +++++++++++++++++++++++++++ zypp/parser/susetags/PackagesDuFileReader.h | 94 ++++++++++ zypp/parser/susetags/RepoParser.cc | 46 ++++- 7 files changed, 537 insertions(+), 8 deletions(-) create mode 100644 zypp/parser/susetags/PackagesDuFileReader.cc create mode 100644 zypp/parser/susetags/PackagesDuFileReader.h diff --git a/VERSION.cmake b/VERSION.cmake index a17be34..3721309 100644 --- a/VERSION.cmake +++ b/VERSION.cmake @@ -47,4 +47,4 @@ SET(LIBZYPP_MAJOR "3") SET(LIBZYPP_MINOR "13") SET(LIBZYPP_COMPATMINOR "13") -SET(LIBZYPP_PATCH "11") +SET(LIBZYPP_PATCH "12") diff --git a/devel/devel.ma/Test.cc b/devel/devel.ma/Test.cc index ebed466..089a73c 100644 --- a/devel/devel.ma/Test.cc +++ b/devel/devel.ma/Test.cc @@ -19,14 +19,161 @@ #include #include +#include "zypp/parser/TagParser.h" +#include "zypp/parser/susetags/PackagesFileReader.h" +#include "zypp/parser/susetags/PackagesLangFileReader.h" +#include "zypp/parser/susetags/PatternFileReader.h" +#include "zypp/parser/susetags/ContentFileReader.h" +#include "zypp/parser/susetags/RepoIndex.h" +#include "zypp/parser/susetags/RepoParser.h" #include "zypp/cache/CacheStore.h" -#include using namespace std; using namespace zypp; +using namespace zypp::parser; +using namespace zypp::parser::susetags; /////////////////////////////////////////////////////////////////// +struct DummyConsumer : public zypp::data::ResolvableDataConsumer + , private base::NonCopyable +{ + std::string idString( const data::ResObject_Ptr & res_r, ResolvableTraits::KindType kind_r ) + { + std::string ret( kind_r.asString() ); + ret += ":"; + ret += res_r->name; + ret += "-"; + ret += res_r->edition.asString(); + ret += "."; + ret += res_r->arch.asString(); + return ret; + } + + data::RecordId _lastId; + std::map _idMap; + std::map _reverseMap; + + bool hasEntry( const std::string & id_r ) + { + return _idMap.find( id_r ) != _idMap.end(); + } + + data::RecordId newId( const data::ResObject_Ptr & res_r, ResolvableTraits::KindType kind_r ) + { + std::string id( idString( res_r, kind_r ) ); + if ( hasEntry( id ) ) + ZYPP_THROW(Exception(id)); + _idMap[id] = ++_lastId; + _reverseMap[_lastId] = id; + MIL << "NEW_ID " << _lastId << " - " << id << endl; + logNew( res_r, kind_r ); + return _lastId; + } + + data::RecordId getId( const data::ResObject_Ptr & res_r, ResolvableTraits::KindType kind_r ) + { + std::string id( idString( res_r, kind_r ) ); + if ( ! hasEntry( id ) ) + ZYPP_THROW(Exception(id)); + data::RecordId ret = _idMap[id]; + DBG << ret << " " << id << endl; + return ret; + } + + std::string lookup( data::RecordId id_r ) + { + if ( id_r == data::noRecordId ) + { + return ""; + } + + if ( _reverseMap.find( id_r ) != _reverseMap.end() ) + { + return _reverseMap[id_r]; + } + + WAR << "Lookup id " << id_r << "failed" << endl; + return std::string(); + } + + // + void logNew( const data::ResObject_Ptr & res_r, ResolvableTraits::KindType kind_r ) + { + std::string shr( lookup( res_r->shareDataWith ) ); + } + + public: + + virtual data::RecordId consumePackage( const data::RecordId & repository_id, const data::Package_Ptr & res_r ) + { + return newId( res_r, ResTraits::kind ); + } + + virtual data::RecordId consumeSourcePackage( const data::RecordId & repository_id, const data::SrcPackage_Ptr & res_r ) + { + return newId( res_r, ResTraits::kind ); + } + + virtual data::RecordId consumeProduct ( const data::RecordId & repository_id, const data::Product_Ptr & res_r ) + { + return newId( res_r, ResTraits::kind ); + } + + virtual data::RecordId consumePatch ( const data::RecordId & repository_id, const data::Patch_Ptr & res_r ) + { + return newId( res_r, ResTraits::kind ); + } + + virtual data::RecordId consumePackageAtom ( const data::RecordId & repository_id, const data::PackageAtom_Ptr & res_r ) + { + return newId( res_r, ResTraits::kind ); + } + + virtual data::RecordId consumeMessage ( const data::RecordId & repository_id, const data::Message_Ptr & res_r ) + { + return newId( res_r, ResTraits::kind ); + } + + virtual data::RecordId consumeScript ( const data::RecordId & repository_id, const data::Script_Ptr & res_r ) + { + return newId( res_r, ResTraits