From: Michael Andres Date: Tue, 15 Jul 2008 23:21:55 +0000 (+0000) Subject: Remove Atom, Script, Message and other obsolete classes X-Git-Tag: BASE-SuSE-Code-11-Branch~613 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e415c9e6f0afb9e161e2623aa4d1537fe44b7827;p=platform%2Fupstream%2Flibzypp.git Remove Atom, Script, Message and other obsolete classes --- diff --git a/zypp/parser/susetags/FileReaderBase.h b/zypp/parser/susetags/FileReaderBase.h deleted file mode 100644 index d6f0852..0000000 --- a/zypp/parser/susetags/FileReaderBase.h +++ /dev/null @@ -1,51 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/susetags/FileReaderBase.h - * -*/ -#ifndef ZYPP_PARSER_SUSETAGS_FILEREADERBASE_H -#define ZYPP_PARSER_SUSETAGS_FILEREADERBASE_H - -#include - -#include "zypp/base/PtrTypes.h" -#include "zypp/parser/TagParser.h" - -/////////////////////////////////////////////////////////////////// -namespace zypp -{ ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace parser - { ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace susetags - { ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : FileReaderBase - // - /** Common base for susetags::FileReaders. */ - class FileReaderBase : public TagParser - { - protected: - class BaseImpl; - }; - /////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////// - } // namespace susetags - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - } // namespace parser - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// -} // namespace zypp -/////////////////////////////////////////////////////////////////// -#endif // ZYPP_PARSER_SUSETAGS_FILEREADERBASE_H diff --git a/zypp/parser/susetags/FileReaderBaseImpl.h b/zypp/parser/susetags/FileReaderBaseImpl.h deleted file mode 100644 index f5cf0ef..0000000 --- a/zypp/parser/susetags/FileReaderBaseImpl.h +++ /dev/null @@ -1,122 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/susetags/FileReaderBaseImpl.h - * -*/ -#ifndef ZYPP_PARSER_SUSETAGS_FILEREADERBASEIMPL_H -#define ZYPP_PARSER_SUSETAGS_FILEREADERBASEIMPL_H - -#include - -#include "zypp/base/Logger.h" -#include "zypp/base/Function.h" - -#include "zypp/parser/susetags/FileReaderBase.h" -#include "zypp/parser/ParseException.h" -#include "zypp/data/ResolvableData.h" -#include "zypp/PathInfo.h" - -using std::endl; - -/////////////////////////////////////////////////////////////////// -namespace zypp -{ ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace parser - { ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace susetags - { ///////////////////////////////////////////////////////////////// - - inline std::string makeSharedIdent( ResKind kind_r, - const std::string & name_r, - Edition edition_r, - Arch arch_r ) - { - std::string ret( kind_r.asString() ); - ret += ":"; - ret += name_r; - ret += "-"; - ret += edition_r.asString(); - ret += "."; - ret += arch_r.asString(); - return ret; - } - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : FileReaderBase::BaseImpl - // - /** Common base for susetags::FileReader implementations. */ - class FileReaderBase::BaseImpl : private base::NonCopyable - { - public: - BaseImpl( const FileReaderBase & parent_r ) - : _parent( parent_r ) - {} - virtual ~BaseImpl() - {} - - public: - - template - void depAddLine( const std::string & line_r, - data::DependencyList & deps_r ) - { - depAddLine( line_r, ResTraits<_Res>::kind, deps_r ); - } - - void depAddLine( const std::string & line_r, - ResKind refers_r, - data::DependencyList & deps_r ) - { - deps_r.insert( Capability( line_r, refers_r ) ); - } - - - template - void depParse( const MultiTagPtr & tag_r, - data::DependencyList & deps_r ) - { - depParse( tag_r, ResTraits<_Res>::kind, deps_r ); - } - - void depParse( const MultiTagPtr & tag_r, - ResKind refers_r, - data::DependencyList & deps_r ) - { - std::for_each( tag_r->value.begin(), - tag_r->value.end(), - boost::bind( &BaseImpl::depAddLine, this, _1, refers_r, boost::ref(deps_r) ) ); - } - - public: - ParseException error( const SingleTagPtr & tag_r, - const std::string & msg_r = std::string() ) const - { return ParseException( _parent.errPrefix( tag_r, msg_r ) ); } - - ParseException error( const MultiTagPtr & tag_r, - const std::string & msg_r = std::string() ) const - { return ParseException( _parent.errPrefix( tag_r, msg_r ) ); } - - private: - const FileReaderBase & _parent; - }; - /////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////// - } // namespace susetags - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - } // namespace parser - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// -} // namespace zypp -/////////////////////////////////////////////////////////////////// -#endif // ZYPP_PARSER_SUSETAGS_FILEREADERBASEIMPL_H diff --git a/zypp/parser/susetags/PackagesDuFileReader.cc b/zypp/parser/susetags/PackagesDuFileReader.cc deleted file mode 100644 index 425a5e5..0000000 --- a/zypp/parser/susetags/PackagesDuFileReader.cc +++ /dev/null @@ -1,305 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/susetags/PackagesDuFileReader.cc - * -*/ -#include -#include -#include "zypp/base/Easy.h" -#include "zypp/base/Regex.h" -#include "zypp/base/Logger.h" -#include "zypp/base/String.h" -#include "zypp/ZYppFactory.h" - -#include "zypp/parser/susetags/PackagesDuFileReader.h" -#include "zypp/parser/susetags/FileReaderBaseImpl.h" - -using std::endl; -#undef ZYPP_BASE_LOGGER_LOGGROUP -#define ZYPP_BASE_LOGGER_LOGGROUP "parser::susetags" - -/////////////////////////////////////////////////////////////////// -namespace zypp -{ ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace parser - { ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace susetags - { ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PackagesDuFileReader::Impl - // - /** PackagesDuFileReader implementation. */ - class PackagesDuFileReader::Impl : public BaseImpl - { - public: - Impl( const PackagesDuFileReader & parent_r ) - : BaseImpl( parent_r ) - { - _mounts = getZYpp()->getPartitions(); - - for ( DiskUsageCounter::MountPointSet::const_iterator it = _mounts.begin(); - it != _mounts.end(); - ++ it ) - { - MIL << "Partition " << *it << endl; - } - - } - - virtual ~Impl() - {} - - bool hasPackage() const - { return _pkgData; } - - bool hasSourcepackage() const - { return _srcpkgData; } - - data::Package_Ptr handoutPackage() - { - data::Package_Ptr ret; - ret.swap( _pkgData ); - _srcpkgData = 0; - _data = 0; - return ret; - } - - data::SrcPackage_Ptr handoutSourcepackage() - { - data::SrcPackage_Ptr ret; - ret.swap( _srcpkgData ); - _pkgData = 0; - _data = 0; - return ret; - } - - public: // single tags - /** Consume =Ver:. */ - void consumeVer( const SingleTagPtr & tag_r ) - { /* NOP */; } - - /** Consume =Pkg:. */ - void consumePkg( const SingleTagPtr & tag_r ) - { - std::vector words; - if ( str::split( tag_r->value, std::back_inserter(words) ) != 4 ) - { - ZYPP_THROW( error( tag_r, "Expected [name version release arch]") ); - } - - if ( words[3] == "src" || words[3] == "nosrc") - { - ++_c_srcpkg; - _data = _srcpkgData = new data::SrcPackage; - _pkgData = 0; - // _data->arch is arch_noarch per default - } - else - { - ++_c_pkg; - _data = _pkgData = new data::Package; - _srcpkgData = 0; - _data->arch = Arch( words[3] ); - } - _data->name = words[0]; - _data->edition = Edition( words[1], words[2] ); - } - - - public: // multi tags - /** Consume +Dir:. */ - void consumeDir( const MultiTagPtr & tag_r ) - { - static str::regex sizeEntryRX( "^(.*/)[[:space:]]+([[:digit:]]+)[[:space:]]+([[:digit:]]+)[[:space:]]+([[:digit:]]+)[[:space:]]+([[:digit:]]+)[[:space:]]*$" ); - static str::smatch what; - - _data->diskusage; - - for_( it, tag_r->value.begin(), tag_r->value.end() ) - { - if ( str::regex_match( *it, what, sizeEntryRX ) ) - { - bool skip = true; - DiskUsage::Entry entry( what[1], - str::strtonum(what[2]) + str::strtonum(what[3]), - str::strtonum(what[4]) + str::strtonum(what[5]) ); - - // the partitioning is not known or we are running in instsys (see #308659) - if ( _mounts.empty() || (getenv("YAST_IS_RUNNING") && (std::string(getenv("YAST_IS_RUNNING")) == "instsys" ))) - { - // if no mount information, cut off deeper directory - // levels in DiskUsage::Entry to reduce data size. - unsigned level = 3; // number of '/' incl. a trailing one - std::string::size_type pos = 0; // we store absolute pathnames - while ( --level && pos != std::string::npos ) - { - pos = entry.path.find( "/", pos+1 ); - } - if ( pos != std::string::npos ) - { - // found 'level' number of '/'es. - skip = ( entry.path[pos+1] != '\0' ); - } - else - { - // less than 'level' number of '/'es. - skip = false; - } - } - else - { - // Store entries, if they are equal to or parent of a mountpoint. - for ( DiskUsageCounter::MountPointSet::reverse_iterator mit = _mounts.rbegin(); - mit != _mounts.rend(); - ++ mit ) - { - // Entry.path has leading and trailing '/' (asserted by DiskUsage::Entry). - // So we append a '/' to the mountpoint and test for prefix_r. - if ( str::hasPrefix( (mit->dir+"/"), entry.path ) ) - { - skip = false; - break; - } - } - } - // try next entry - if ( skip ) - continue; - - _data->diskusage.add(entry); - } - else - { - ZYPP_THROW( error( tag_r, "Expected du-entry [path num num num num]") ); - } - } - } - - public: - DefaultIntegral _c_pkg; - DefaultIntegral _c_srcpkg; - - private: - data::Packagebase_Ptr _data; - data::Package_Ptr _pkgData; - data::SrcPackage_Ptr _srcpkgData; - DiskUsageCounter::MountPointSet _mounts; - }; - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PackagesDuFileReader - // - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesDuFileReader::PackagesDuFileReader - // METHOD TYPE : Ctor - // - PackagesDuFileReader::PackagesDuFileReader() - {} - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesDuFileReader::~PackagesDuFileReader - // METHOD TYPE : Dtor - // - PackagesDuFileReader::~PackagesDuFileReader() - {} - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesDuFileReader::beginParse - // METHOD TYPE : void - // - void PackagesDuFileReader::beginParse() - { - _pimpl.reset( new Impl(*this) ); - } - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesDuFileReader::consume - // METHOD TYPE : void - // - void PackagesDuFileReader::consume( const SingleTagPtr & tag_r ) - { -#define TAGN(V) tag_r->name == #V -#define TAGFWD(V) ( TAGN(V) ) _pimpl->consume##V( tag_r ) - - if ( TAGN( Pkg ) ) - { - // consume old data - if ( _pimpl->hasPackage() ) - { - if ( _pkgConsumer ) - _pkgConsumer( _pimpl->handoutPackage() ); - } - else if ( _pimpl->hasSourcepackage() ) - { - if ( _srcPkgConsumer ) - _srcPkgConsumer( _pimpl->handoutSourcepackage() ); - } - // start new data - _pimpl->consumePkg( tag_r ); - } - else if TAGFWD( Ver ); - else - { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; } - } - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesDuFileReader::consume - // METHOD TYPE : void - // - void PackagesDuFileReader::consume( const MultiTagPtr & tag_r ) - { - if TAGFWD( Dir ); - else - { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; } - } - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesDuFileReader::lastData - // METHOD TYPE : void - // - void PackagesDuFileReader::endParse() - { - // consume oldData - if ( _pimpl->hasPackage() ) - { - if ( _pkgConsumer ) - _pkgConsumer( _pimpl->handoutPackage() ); - } - else if ( _pimpl->hasSourcepackage() ) - { - if ( _srcPkgConsumer ) - _srcPkgConsumer( _pimpl->handoutSourcepackage() ); - } - MIL << "[PackagesDu]" << "(" << _pimpl->_c_pkg << "|" << _pimpl->_c_srcpkg << ")" << endl; - _pimpl.reset(); - } - - ///////////////////////////////////////////////////////////////// - } // namespace susetags - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - } // namespace parser - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// -} // namespace zypp -/////////////////////////////////////////////////////////////////// diff --git a/zypp/parser/susetags/PackagesDuFileReader.h b/zypp/parser/susetags/PackagesDuFileReader.h deleted file mode 100644 index 1c74afc..0000000 --- a/zypp/parser/susetags/PackagesDuFileReader.h +++ /dev/null @@ -1,94 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/susetags/PackagesDuFileReader.h - * -*/ -#ifndef ZYPP_PARSER_SUSETAGS_PACKAGESDUFILEREADER_H -#define ZYPP_PARSER_SUSETAGS_PACKAGESDUFILEREADER_H - -#include - -#include "zypp/parser/susetags/FileReaderBase.h" - -/////////////////////////////////////////////////////////////////// -namespace zypp -{ ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - namespace data - { ///////////////////////////////////////////////////////////////// - class Package; - DEFINE_PTR_TYPE(Package); - class SrcPackage; - DEFINE_PTR_TYPE(SrcPackage); - ///////////////////////////////////////////////////////////////// - } // namespace data - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - namespace parser - { ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace susetags - { ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PackagesDuFileReader - // - /** */ - class PackagesDuFileReader : public FileReaderBase - { - public: - typedef function PkgConsumer; - typedef function SrcPkgConsumer; - - public: - /** Default ctor */ - PackagesDuFileReader(); - /** Dtor */ - virtual ~PackagesDuFileReader(); - - public: - /** Consumer to call when a (binary) package entry was parsed. */ - void setPkgConsumer( const PkgConsumer & fnc_r ) - { _pkgConsumer = fnc_r; } - - /** Consumer to call when a (source) package entry was parsed. */ - void setSrcPkgConsumer( const SrcPkgConsumer & fnc_r ) - { _srcPkgConsumer = fnc_r; } - - private: - /** Called when start parsing. */ - virtual void beginParse(); - /** Called when a single-tag is found. */ - virtual void consume( const SingleTagPtr & tag_r ); - /** Called when a multi-tag is found. */ - virtual void consume( const MultiTagPtr & tag_r ); - /** Called when the parse is done. */ - virtual void endParse(); - - private: - class Impl; - RW_pointer > _pimpl; - PkgConsumer _pkgConsumer; - SrcPkgConsumer _srcPkgConsumer; - }; - /////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////// - } // namespace susetags - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - } // namespace parser - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// -} // namespace zypp -/////////////////////////////////////////////////////////////////// -#endif // ZYPP_PARSER_SUSETAGS_PACKAGESDUFILEREADER_H diff --git a/zypp/parser/susetags/PackagesFileReader.cc b/zypp/parser/susetags/PackagesFileReader.cc deleted file mode 100644 index 203e388..0000000 --- a/zypp/parser/susetags/PackagesFileReader.cc +++ /dev/null @@ -1,445 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/susetags/PackagesFileReader.cc - * -*/ -#include -#include "zypp/base/Logger.h" -#include "zypp/ZConfig.h" - -#include "zypp/parser/susetags/PackagesFileReader.h" -#include "zypp/parser/susetags/FileReaderBaseImpl.h" - -using std::endl; -#undef ZYPP_BASE_LOGGER_LOGGROUP -#define ZYPP_BASE_LOGGER_LOGGROUP "parser::susetags" - -/////////////////////////////////////////////////////////////////// -namespace zypp -{ ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace parser - { ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace susetags - { ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PackagesFileReader::Impl - // - /** PackagesFileReader implementation. */ - class PackagesFileReader::Impl : public BaseImpl - { - public: - Impl( const PackagesFileReader & parent_r ) - : BaseImpl( parent_r ) - , _sysarch( ZConfig::instance().systemArchitecture() ) - {} - - virtual ~Impl() - {} - - bool hasPackage() const - { return _pkgData; } - - bool hasSourcepackage() const - { return _srcpkgData; } - - data::Package_Ptr handoutPackage() - { - data::Package_Ptr ret; - ret.swap( _pkgData ); - _srcpkgData = 0; - _data = 0; - // Filter unwanted stuff - if ( ret - && ! Arch(ret->arch).compatibleWith( _sysarch ) ) - { - return 0; - } - return ret; - } - - data::SrcPackage_Ptr handoutSourcepackage() - { - data::SrcPackage_Ptr ret; - ret.swap( _srcpkgData ); - _pkgData = 0; - _data = 0; - return ret; - } - - public: // single tags - /** Consume =Ver:. */ - void consumeVer( const SingleTagPtr & tag_r ) - { /* NOP */; } - - /** Consume =Pkg:. */ - void consumePkg( const SingleTagPtr & tag_r ) - { - std::vector words; - if ( str::split( tag_r->value, std::back_inserter(words) ) != 4 ) - { - ZYPP_THROW( error( tag_r, "Expected [name version release arch]") ); - } - - if ( words[3] == "src" || words[3] == "nosrc") - { - ++_c_srcpkg; - _data = _srcpkgData = new data::SrcPackage; - _pkgData = 0; - // _data->arch is arch_noarch per default - } - else - { - ++_c_pkg; - _data = _pkgData = new data::Package; - _srcpkgData = 0; - _data->arch = Arch( words[3] ); - } - _data->name = words[0]; - _data->edition = Edition( words[1], words[2] ); - } - - /** Consume =Cks:. */ - void consumeCks( const SingleTagPtr & tag_r ) - { - std::vector words; - if ( str::split( tag_r->value, std::back_inserter(words) ) != 2 ) - { - ZYPP_THROW( error( tag_r, "Expected [type checksum]") ); - } - _data->repositoryLocation.setChecksum(CheckSum( words[0], words[1] )); - } - - /** Consume =Grp:. */ - void consumeGrp( const SingleTagPtr & tag_r ) - { - _data->group = tag_r->value; - } - - /** Consume =Vnd:. */ - void consumeVnd( const SingleTagPtr & tag_r ) - { - _data->vendor = tag_r->value; - } - - /** Consume =Lic:. */ - void consumeLic( const SingleTagPtr & tag_r ) - { - _data->license = tag_r->value; - } - - /** Consume =Src:. */ - void consumeSrc( const SingleTagPtr & tag_r ) - { - if ( ! _pkgData ) - { - ZYPP_THROW( error( tag_r, "Unexpected sourcepackage definition for sourcepackage") ); - } - - std::vector words; - if ( str::split( tag_r->value, std::back_inserter(words) ) != 4 ) - { - ZYPP_THROW( error( tag_r, "Expected sourcepackages [name version release arch]") ); - } - - _pkgData->srcPackageIdent = NVR( words[0], Edition( words[1],words[2] ) ); - } - - /** Consume =Tim:. */ - void consumeTim( const SingleTagPtr & tag_r ) - { - _data->buildTime = str::strtonum( tag_r->value ); - } - - /** Consume =Loc:. */ - void consumeLoc( const SingleTagPtr & tag_r ) - { - std::vector words; - switch ( str::split( tag_r->value, std::back_inserter(words) ) ) - { - case 2: // [medianr filename] - _data->repositoryLocation.setLocation( Pathname(_data->arch.asString()) / words[1], - str::strtonum(words[0]) ); - break; - - case 3: // [medianr filename dir] - _data->repositoryLocation.setLocation( Pathname(words[2]) / words[1], - str::strtonum(words[0]) ); - break; - - default: - ZYPP_THROW( error( tag_r, "Expected [medianr filename dir]") ); - break; - } - } - - /** Consume =Siz:. */ - void consumeSiz( const SingleTagPtr & tag_r ) - { - std::vector words; - if ( str::split( tag_r->value, std::back_inserter(words) ) != 2 ) - { - ZYPP_THROW( error( tag_r, "Expected [archivesize size]") ); - } - _data->repositoryLocation.setDownloadSize(str::strtonum( words[0] )); - _data->installedSize = str::strtonum( words[1] ); - } - - /** Consume =Shr:. - * Raw data to identify the object is the string - * kind:name-version-realease.arch. - */ - void consumeShr( const SingleTagPtr & tag_r ) - { - std::vector words; - if ( str::split( tag_r->value, std::back_inserter(words) ) != 4 ) - { - ZYPP_THROW( error( tag_r, "Expected [name version release arch]") ); - } - - if ( words[3] == "src" || words[3] == "nosrc") - { - _data->sharedDataTag = makeSharedIdent( ResTraits::kind, - words[0], - Edition( words[1], words[2] ), - Arch_noarch ); - } - else - { - _data->sharedDataTag = makeSharedIdent( ResTraits::kind, - words[0], - Edition( words[1], words[2] ), - Arch( words[3] ) ); - } - } - - public: // multi tags - /** Consume +Req:. */ - void consumeReq( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::REQUIRES] ); - } - - /** Consume +Prq:. */ - void consumePrq( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::PREREQUIRES] ); - } - - /** Consume +Prv:. */ - void consumePrv( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::PROVIDES] ); - } - - /** Consume +Con:. */ - void consumeCon( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::CONFLICTS] ); - } - - /** Consume +Obs:. */ - void consumeObs( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::OBSOLETES] ); - } - - /** Consume +Rec:. */ - void consumeRec( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::RECOMMENDS] ); - } - - /** Consume +Fre:. */ - void consumeFre( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::FRESHENS] ); - } - - /** Consume +Enh:. */ - void consumeEnh( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::ENHANCES] ); - } - - /** Consume +Sug:. */ - void consumeSug( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::SUGGESTS] ); - } - - /** Consume +Sup:. */ - void consumeSup( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::SUPPLEMENTS] ); - } - - /** Consume +Kwd:. */ - void consumeKwd( const MultiTagPtr & tag_r ) - { - std::copy( tag_r->value.begin(), - tag_r->value.end(), - std::inserter(_data->keywords, _data->keywords.begin()) ); - } - - /** Consume +Aut:. */ - void consumeAut( const MultiTagPtr & tag_r ) - { - _data->authors.swap( tag_r->value ); - } - - public: - DefaultIntegral _c_pkg; - DefaultIntegral _c_srcpkg; - - private: - data::Packagebase_Ptr _data; - data::Package_Ptr _pkgData; - data::SrcPackage_Ptr _srcpkgData; - Arch _sysarch; - }; - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PackagesFileReader - // - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesFileReader::PackagesFileReader - // METHOD TYPE : Ctor - // - PackagesFileReader::PackagesFileReader() - {} - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesFileReader::~PackagesFileReader - // METHOD TYPE : Dtor - // - PackagesFileReader::~PackagesFileReader() - {} - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesFileReader::beginParse - // METHOD TYPE : void - // - void PackagesFileReader::beginParse() - { - _pimpl.reset( new Impl(*this) ); - } - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesFileReader::consume - // METHOD TYPE : void - // - void PackagesFileReader::consume( const SingleTagPtr & tag_r ) - { -#define TAGN(V) tag_r->name == #V -#define TAGFWD(V) ( TAGN(V) ) _pimpl->consume##V( tag_r ) - - if ( TAGN( Pkg ) ) - { - // consume old data - if ( _pimpl->hasPackage() ) - { - if ( _pkgConsumer ) - { - data::Package_Ptr ptr = _pimpl->handoutPackage(); - if ( ptr ) - _pkgConsumer( ptr ); - } - } - else if ( _pimpl->hasSourcepackage() ) - { - if ( _srcPkgConsumer ) - _srcPkgConsumer( _pimpl->handoutSourcepackage() ); - } - // start new data - _pimpl->consumePkg( tag_r ); - } - else if TAGFWD( Cks ); - else if TAGFWD( Grp ); - else if TAGFWD( Vnd ); - else if TAGFWD( Lic ); - else if TAGFWD( Src ); - else if TAGFWD( Tim ); - else if TAGFWD( Loc ); - else if TAGFWD( Siz ); - else if TAGFWD( Shr ); - else if TAGFWD( Ver ); - else - { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; } - } - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesFileReader::consume - // METHOD TYPE : void - // - void PackagesFileReader::consume( const MultiTagPtr & tag_r ) - { - if TAGFWD( Req ); - else if TAGFWD( Prq ); - else if TAGFWD( Prv ); - else if TAGFWD( Con ); - else if TAGFWD( Obs ); - else if TAGFWD( Rec ); - else if TAGFWD( Fre ); - else if TAGFWD( Enh ); - else if TAGFWD( Sug ); - else if TAGFWD( Sup ); - else if TAGFWD( Kwd ); - else if TAGFWD( Aut ); - else - { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; } - } - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesFileReader::lastData - // METHOD TYPE : void - // - void PackagesFileReader::endParse() - { - // consume oldData - if ( _pimpl->hasPackage() ) - { - if ( _pkgConsumer ) - { - data::Package_Ptr ptr = _pimpl->handoutPackage(); - if ( ptr ) - _pkgConsumer( ptr ); - } - } - else if ( _pimpl->hasSourcepackage() ) - { - if ( _srcPkgConsumer ) - _srcPkgConsumer( _pimpl->handoutSourcepackage() ); - } - MIL << "[Packages]" << "(" << _pimpl->_c_pkg << "|" << _pimpl->_c_srcpkg << ")" << endl; - _pimpl.reset(); - } - - ///////////////////////////////////////////////////////////////// - } // namespace susetags - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - } // namespace parser - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// -} // namespace zypp -/////////////////////////////////////////////////////////////////// diff --git a/zypp/parser/susetags/PackagesFileReader.h b/zypp/parser/susetags/PackagesFileReader.h deleted file mode 100644 index 8c24491..0000000 --- a/zypp/parser/susetags/PackagesFileReader.h +++ /dev/null @@ -1,94 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/susetags/PackagesFileReader.h - * -*/ -#ifndef ZYPP_PARSER_SUSETAGS_PACKAGESFILEREADER_H -#define ZYPP_PARSER_SUSETAGS_PACKAGESFILEREADER_H - -#include - -#include "zypp/parser/susetags/FileReaderBase.h" - -/////////////////////////////////////////////////////////////////// -namespace zypp -{ ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - namespace data - { ///////////////////////////////////////////////////////////////// - class Package; - DEFINE_PTR_TYPE(Package); - class SrcPackage; - DEFINE_PTR_TYPE(SrcPackage); - ///////////////////////////////////////////////////////////////// - } // namespace data - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - namespace parser - { ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace susetags - { ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PackagesFileReader - // - /** */ - class PackagesFileReader : public FileReaderBase - { - public: - typedef function PkgConsumer; - typedef function SrcPkgConsumer; - - public: - /** Default ctor */ - PackagesFileReader(); - /** Dtor */ - virtual ~PackagesFileReader(); - - public: - /** Consumer to call when a (binary) package entry was parsed. */ - void setPkgConsumer( const PkgConsumer & fnc_r ) - { _pkgConsumer = fnc_r; } - - /** Consumer to call when a (source) package entry was parsed. */ - void setSrcPkgConsumer( const SrcPkgConsumer & fnc_r ) - { _srcPkgConsumer = fnc_r; } - - private: - /** Called when start parsing. */ - virtual void beginParse(); - /** Called when a single-tag is found. */ - virtual void consume( const SingleTagPtr & tag_r ); - /** Called when a multi-tag is found. */ - virtual void consume( const MultiTagPtr & tag_r ); - /** Called when the parse is done. */ - virtual void endParse(); - - private: - class Impl; - RW_pointer > _pimpl; - PkgConsumer _pkgConsumer; - SrcPkgConsumer _srcPkgConsumer; - }; - /////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////// - } // namespace susetags - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - } // namespace parser - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// -} // namespace zypp -/////////////////////////////////////////////////////////////////// -#endif // ZYPP_PARSER_SUSETAGS_PACKAGESFILEREADER_H diff --git a/zypp/parser/susetags/PackagesLangFileReader.cc b/zypp/parser/susetags/PackagesLangFileReader.cc deleted file mode 100644 index 2bf4df7..0000000 --- a/zypp/parser/susetags/PackagesLangFileReader.cc +++ /dev/null @@ -1,257 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/susetags/PackagesLangFileReader.cc - * -*/ -#include -#include "zypp/base/Easy.h" -#include "zypp/base/Logger.h" -#include "zypp/base/LogTools.h" -#include "zypp/parser/susetags/PackagesLangFileReader.h" -#include "zypp/parser/susetags/FileReaderBaseImpl.h" - -using std::endl; -#undef ZYPP_BASE_LOGGER_LOGGROUP -#define ZYPP_BASE_LOGGER_LOGGROUP "parser::susetags" - -/////////////////////////////////////////////////////////////////// -namespace zypp -{ ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace parser - { ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace susetags - { ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PackagesLangFileReader::Impl - // - /** PackagesLangFileReader implementation. */ - class PackagesLangFileReader::Impl : public BaseImpl - { - public: - Impl( const PackagesLangFileReader & parent_r, - const Locale & locale_r ) - : BaseImpl( parent_r ), _locale( locale_r ) - {} - - virtual ~Impl() - {} - - bool hasPackage() const - { return _pkgData; } - - bool hasSourcepackage() const - { return _srcpkgData; } - - data::Package_Ptr handoutPackage() - { - data::Package_Ptr ret; - ret.swap( _pkgData ); - _srcpkgData = 0; - _data = 0; - return ret; - } - - data::SrcPackage_Ptr handoutSourcepackage() - { - data::SrcPackage_Ptr ret; - ret.swap( _srcpkgData ); - _pkgData = 0; - _data = 0; - return ret; - } - - public: // single tags - /** Consume =Ver:. */ - void consumeVer( const SingleTagPtr & tag_r ) - { /*NOP*/ } - - /** Consume =:Pkg. */ - void consumePkg( const SingleTagPtr & tag_r ) - { - std::vector words; - if ( str::split( tag_r->value, std::back_inserter(words) ) != 4 ) - { - ZYPP_THROW( error( tag_r, "Expected [name version release arch]") ); - } - - if ( words[3] == "src" || words[3] == "nosrc") - { - ++_c_srcpkg; - _data = _srcpkgData = new data::SrcPackage; - _pkgData = 0; - // _data->arch is arch_noarch per default - } - else - { - ++_c_pkg; - _data = _pkgData = new data::Package; - _srcpkgData = 0; - _data->arch = Arch( words[3] ); - } - _data->name = words[0]; - _data->edition = Edition( words[1], words[2] ); - } - - /** Consume =Sum:. */ - void consumeSum( const SingleTagPtr & tag_r ) - { - _data->summary.setText( tag_r->value, _locale ); - } - - public: // multi tags - /** Consume +Des:. */ - void consumeDes( const MultiTagPtr & tag_r ) - { - _data->description.setText( tag_r->value, _locale ); - } - - /** Consume +Eul:. */ - void consumeEul( const MultiTagPtr & tag_r ) - { - _data->licenseToConfirm.setText( tag_r->value, _locale ); - } - - /** Consume +Ins:. */ - void consumeIns( const MultiTagPtr & tag_r ) - { - _data->insnotify.setText( tag_r->value, _locale ); - } - - /** Consume +Del:. */ - void consumeDel( const MultiTagPtr & tag_r ) - { - _data->delnotify.setText( tag_r->value, _locale ); - } - - public: - DefaultIntegral _c_pkg; - DefaultIntegral _c_srcpkg; - - private: - Locale _locale; - data::Packagebase_Ptr _data; - data::Package_Ptr _pkgData; - data::SrcPackage_Ptr _srcpkgData; - }; - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PackagesLangFileReader - // - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesLangFileReader::PackagesLangFileReader - // METHOD TYPE : Ctor - // - PackagesLangFileReader::PackagesLangFileReader() - {} - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesLangFileReader::~PackagesLangFileReader - // METHOD TYPE : Dtor - // - PackagesLangFileReader::~PackagesLangFileReader() - {} - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesLangFileReader::beginParse - // METHOD TYPE : void - // - void PackagesLangFileReader::beginParse() - { - _pimpl.reset( new Impl( *this, _locale ) ); - } - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesLangFileReader::consume - // METHOD TYPE : void - // - void PackagesLangFileReader::consume( const SingleTagPtr & tag_r ) - { -#define TAGN(V) tag_r->name == #V -#define TAGFWD(V) ( TAGN(V) ) _pimpl->consume##V( tag_r ) - - if ( TAGN( Pkg ) ) - { - // consume old data - if ( _pimpl->hasPackage() ) - { - if ( _pkgConsumer ) - _pkgConsumer( _pimpl->handoutPackage() ); - } - else if ( _pimpl->hasSourcepackage() ) - { - if ( _srcPkgConsumer ) - _srcPkgConsumer( _pimpl->handoutSourcepackage() ); - } - // start new data - _pimpl->consumePkg( tag_r ); - } - else if TAGFWD( Sum ); - else if TAGFWD( Ver ); - else - { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; } - } - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesLangFileReader::consume - // METHOD TYPE : void - // - void PackagesLangFileReader::consume( const MultiTagPtr & tag_r ) - { - if TAGFWD( Des ); - else if TAGFWD( Eul ); - else if TAGFWD( Ins ); - else if TAGFWD( Del ); - else - { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; } - } - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PackagesLangFileReader::lastData - // METHOD TYPE : void - // - void PackagesLangFileReader::endParse() - { - // consume oldData - if ( _pimpl->hasPackage() ) - { - if ( _pkgConsumer ) - _pkgConsumer( _pimpl->handoutPackage() ); - } - else if ( _pimpl->hasSourcepackage() ) - { - if ( _srcPkgConsumer ) - _srcPkgConsumer( _pimpl->handoutSourcepackage() ); - } - MIL << "[PackagesLang]" << "(" << _pimpl->_c_pkg << "|" << _pimpl->_c_srcpkg << ")" << endl; - _pimpl.reset(); - } - - ///////////////////////////////////////////////////////////////// - } // namespace susetags - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - } // namespace parser - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// -} // namespace zypp -/////////////////////////////////////////////////////////////////// diff --git a/zypp/parser/susetags/PackagesLangFileReader.h b/zypp/parser/susetags/PackagesLangFileReader.h deleted file mode 100644 index da8161d..0000000 --- a/zypp/parser/susetags/PackagesLangFileReader.h +++ /dev/null @@ -1,100 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/susetags/PackagesLangFileReader.h - * -*/ -#ifndef ZYPP_PARSER_SUSETAGS_PACKAGESLANGFILEREADER_H -#define ZYPP_PARSER_SUSETAGS_PACKAGESLANGFILEREADER_H - -#include - -#include "zypp/parser/susetags/FileReaderBase.h" -#include "zypp/Locale.h" - -/////////////////////////////////////////////////////////////////// -namespace zypp -{ ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - namespace data - { ///////////////////////////////////////////////////////////////// - class Package; - DEFINE_PTR_TYPE(Package); - class SrcPackage; - DEFINE_PTR_TYPE(SrcPackage); - ///////////////////////////////////////////////////////////////// - } // namespace data - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - namespace parser - { ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace susetags - { ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PackagesLangFileReader - // - /** */ - class PackagesLangFileReader : public FileReaderBase - { - public: - typedef function PkgConsumer; - typedef function SrcPkgConsumer; - - public: - /** Default ctor */ - PackagesLangFileReader(); - /** Dtor */ - virtual ~PackagesLangFileReader(); - - public: - /** Locale to parse. */ - void setLocale( const Locale & locale_r ) - { _locale = locale_r; } - - /** Consumer to call when a (binary) package entry was parsed. */ - void setPkgConsumer( const PkgConsumer & fnc_r ) - { _pkgConsumer = fnc_r; } - - /** Consumer to call when a (source) package entry was parsed. */ - void setSrcPkgConsumer( const SrcPkgConsumer & fnc_r ) - { _srcPkgConsumer = fnc_r; } - - private: - /** Called when start parsing. */ - virtual void beginParse(); - /** Called when a single-tag is found. */ - virtual void consume( const SingleTagPtr & tag_r ); - /** Called when a multi-tag is found. */ - virtual void consume( const MultiTagPtr & tag_r ); - /** Called when the parse is done. */ - virtual void endParse(); - - private: - class Impl; - RW_pointer > _pimpl; - Locale _locale; - PkgConsumer _pkgConsumer; - SrcPkgConsumer _srcPkgConsumer; - }; - /////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////// - } // namespace susetags - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - } // namespace parser - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// -} // namespace zypp -/////////////////////////////////////////////////////////////////// -#endif // ZYPP_PARSER_SUSETAGS_PACKAGESLANGFILEREADER_H diff --git a/zypp/parser/susetags/PatternFileReader.cc b/zypp/parser/susetags/PatternFileReader.cc deleted file mode 100644 index 535fe5c..0000000 --- a/zypp/parser/susetags/PatternFileReader.cc +++ /dev/null @@ -1,373 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/susetags/PatternFileReader.cc - * -*/ -#include -#include "zypp/base/Logger.h" - -#include "zypp/parser/susetags/PatternFileReader.h" -#include "zypp/parser/susetags/FileReaderBaseImpl.h" - -using std::endl; -#undef ZYPP_BASE_LOGGER_LOGGROUP -#define ZYPP_BASE_LOGGER_LOGGROUP "parser::susetags" - -/////////////////////////////////////////////////////////////////// -namespace zypp -{ ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace parser - { ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace susetags - { ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PatternFileReader::Impl - // - /** PatternFileReader implementation. */ - class PatternFileReader::Impl : public BaseImpl - { - public: - Impl( const PatternFileReader & parent_r ) - : BaseImpl( parent_r ) - {} - - virtual ~Impl() - {} - - bool hasData() const - { return _data; } - - data::Pattern_Ptr handoutData() - { - data::Pattern_Ptr ret; - ret.swap( _data ); - return ret; - } - - public: // single tags - /** Consume =Ver:. */ - void consumeVer( const SingleTagPtr & tag_r ) - { /* NOP */; } - - /** Consume =Pat:. */ - void consumePat( const SingleTagPtr & tag_r ) - { - std::vector words; - if ( str::split( tag_r->value, std::back_inserter(words) ) != 4 ) - { - ZYPP_THROW( error( tag_r, "Expected [name version release arch]") ); - } - - _data = new data::Pattern; - _data->name = words[0]; - _data->edition = Edition( words[1], words[2] ); - _data->arch = Arch( words[3] ); - } - - /** Consume =Sum:. */ - void consumeSum( const SingleTagPtr & tag_r ) - { - _data->summary.setText( tag_r->value, Locale(tag_r->modifier) ); - } - - /** Consume =Vis:. */ - void consumeVis( const SingleTagPtr & tag_r ) - { - _data->userVisible = ( tag_r->value == "true" ); - } - - /** Consume =Cat:. */ - void consumeCat( const SingleTagPtr & tag_r ) - { - _data->category.setText( tag_r->value, Locale(tag_r->modifier) ); - } - - /** Consume =Ico:. */ - void consumeIco( const SingleTagPtr & tag_r ) - { - _data->icon = tag_r->value; - } - - /** Consume =Ord:. */ - void consumeOrd( const SingleTagPtr & tag_r ) - { - _data->order = tag_r->value; - } - - public: // multi tags - /** Consume +Req:. */ - void consumeReq( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::REQUIRES] ); - } - - /** Consume +Prv:. */ - void consumePrv( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::PROVIDES] ); - } - - /** Consume +Con:. */ - void consumeCon( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::CONFLICTS] ); - } - - /** Consume +Obs:. */ - void consumeObs( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::OBSOLETES] ); - } - - /** Consume +Rec:. */ - void consumeRec( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::RECOMMENDS] ); - } - - /** Consume +Fre:. */ - void consumeFre( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::FRESHENS] ); - } - - /** Consume +Enh:. */ - void consumeEnh( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::ENHANCES] ); - } - - /** Consume +Sug:. */ - void consumeSug( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::SUGGESTS] ); - } - - /** Consume +Sup:. */ - void consumeSup( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::SUPPLEMENTS] ); - } - - // package related dependencies: - - /** Consume +Prq:. */ - void consumePrq( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::REQUIRES] ); - } - - /** Consume +Pcn:. */ - void consumePcn( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::CONFLICTS] ); - } - - /** Consume +Pob:. */ - void consumePob( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::OBSOLETES] ); - } - - /** Consume +Prc:. */ - void consumePrc( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::RECOMMENDS] ); - } - - /** Consume +Pfr:. */ - void consumePfr( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::FRESHENS] ); - } - - /** Consume +Pen:. */ - void consumePen( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::ENHANCES] ); - } - - /** Consume +Psg:. */ - void consumePsg( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::SUGGESTS] ); - } - - /** Consume +Psp:. */ - void consumePsp( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->deps[Dep::SUPPLEMENTS] ); - } - - // non dependency tags - - /** Consume +Des:. */ - void consumeDes( const MultiTagPtr & tag_r ) - { - _data->description.setText( tag_r->value, Locale(tag_r->modifier) ); - } - - /** Consume +Inc:. */ - void consumeInc( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->includes ); - } - - /** Consume +Ext:. */ - void consumeExt( const MultiTagPtr & tag_r ) - { - depParse( tag_r, _data->extends ); - } - - private: - data::Pattern_Ptr _data; - }; - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PatternFileReader - // - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PatternFileReader::PatternFileReader - // METHOD TYPE : Ctor - // - PatternFileReader::PatternFileReader() - {} - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PatternFileReader::~PatternFileReader - // METHOD TYPE : Dtor - // - PatternFileReader::~PatternFileReader() - {} - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PatternFileReader::beginParse - // METHOD TYPE : void - // - void PatternFileReader::beginParse() - { - _pimpl.reset( new Impl(*this) ); - } - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PatternFileReader::consume - // METHOD TYPE : void - // - void PatternFileReader::consume( const SingleTagPtr & tag_r ) - { -#define TAGN(V) tag_r->name == #V -#define TAGFWD(V) ( TAGN(V) ) _pimpl->consume##V( tag_r ) - - if ( TAGN( Pat ) ) - { - // consume old data - if ( _pimpl->hasData() ) - { - if ( _consumer ) - _consumer( _pimpl->handoutData() ); - } - // start new data - _pimpl->consumePat( tag_r ); - } - else - { - if ( _pimpl->hasData() ) - { - if TAGFWD( Sum ); - else if TAGFWD( Vis ); - else if TAGFWD( Cat ); - else if TAGFWD( Ico ); - else if TAGFWD( Ord ); - else - { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; } - } - else - { - if TAGFWD( Ver ); - else - { WAR << errPrefix( tag_r, "Unknown header tag" ) << endl; } - } - } - } - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PatternFileReader::consume - // METHOD TYPE : void - // - void PatternFileReader::consume( const MultiTagPtr & tag_r ) - { - if ( _pimpl->hasData() ) - { - if TAGFWD( Req ); - else if TAGFWD( Prv ); - else if TAGFWD( Con ); - else if TAGFWD( Obs ); - else if TAGFWD( Rec ); - else if TAGFWD( Fre ); - else if TAGFWD( Enh ); - else if TAGFWD( Sug ); - else if TAGFWD( Sup ); - // package related dependencies - else if TAGFWD( Prq ); // requires - else if TAGFWD( Pcn ); // conflicts - else if TAGFWD( Pob ); // obsoletes - else if TAGFWD( Prc ); // recommends - else if TAGFWD( Pfr ); // freshens - else if TAGFWD( Pen ); // enhances - else if TAGFWD( Psg ); // suggests - else if TAGFWD( Psp ); // supplements - // - else if TAGFWD( Des ); - else if TAGFWD( Inc ); // UI hint: includes - else if TAGFWD( Ext ); // UI hint: extends - else - { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; } - } - else - { WAR << errPrefix( tag_r, "Unknown header tag" ) << endl; } - } - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : PatternFileReader::lastData - // METHOD TYPE : void - // - void PatternFileReader::endParse() - { - // consume data - if ( _pimpl->hasData() ) - { - if ( _consumer ) - _consumer( _pimpl->handoutData() ); - } - _pimpl.reset(); - } - - ///////////////////////////////////////////////////////////////// - } // namespace susetags - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - } // namespace parser - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// -} // namespace zypp -/////////////////////////////////////////////////////////////////// diff --git a/zypp/parser/susetags/PatternFileReader.h b/zypp/parser/susetags/PatternFileReader.h deleted file mode 100644 index 48f6fe3..0000000 --- a/zypp/parser/susetags/PatternFileReader.h +++ /dev/null @@ -1,87 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/susetags/PatternFileReader.h - * -*/ -#ifndef ZYPP_PARSER_SUSETAGS_PATTERNFILEREADER_H -#define ZYPP_PARSER_SUSETAGS_PATTERNFILEREADER_H - -#include - -#include "zypp/parser/susetags/FileReaderBase.h" - -/////////////////////////////////////////////////////////////////// -namespace zypp -{ ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - namespace data - { ///////////////////////////////////////////////////////////////// - class Pattern; - DEFINE_PTR_TYPE(Pattern); - ///////////////////////////////////////////////////////////////// - } // namespace data - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - namespace parser - { ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace susetags - { ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PatternFileReader - // - /** */ - class PatternFileReader : public FileReaderBase - { - public: - typedef function Consumer; - - public: - /** Default ctor */ - PatternFileReader(); - /** Dtor */ - virtual ~PatternFileReader(); - - public: - /** Consumer to call when a pattern was parsed. */ - void setConsumer( const Consumer & fnc_r ) - { _consumer = fnc_r; } - - private: - /** Called when start parsing. */ - virtual void beginParse(); - /** Called when a single-tag is found. */ - virtual void consume( const SingleTagPtr & tag_r ); - /** Called when a multi-tag is found. */ - virtual void consume( const MultiTagPtr & tag_r ); - /** Called when the parse is done. */ - virtual void endParse(); - - private: - class Impl; - RW_pointer > _pimpl; - - Consumer _consumer; - }; - /////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////// - } // namespace susetags - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - } // namespace parser - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// -} // namespace zypp -/////////////////////////////////////////////////////////////////// -#endif // ZYPP_PARSER_SUSETAGS_PATTERNFILEREADER_H diff --git a/zypp/parser/susetags/RepoParser.cc b/zypp/parser/susetags/RepoParser.cc deleted file mode 100644 index df5f684..0000000 --- a/zypp/parser/susetags/RepoParser.cc +++ /dev/null @@ -1,602 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/susetags/RepoParser.cc - * -*/ -#include -#include "zypp/base/Easy.h" -#include "zypp/base/Logger.h" -#include "zypp/base/LogTools.h" -#include "zypp/base/Iterator.h" -#include "zypp/base/String.h" -#include "zypp/base/Gettext.h" - -#include "zypp/parser/susetags/FileReaderBaseImpl.h" -#include "zypp/parser/susetags/RepoParser.h" -#include "zypp/parser/susetags/ContentFileReader.h" -#include "zypp/parser/susetags/PackagesFileReader.h" -#include "zypp/parser/susetags/PackagesLangFileReader.h" -#include "zypp/parser/susetags/PackagesDuFileReader.h" -#include "zypp/parser/susetags/PatternFileReader.h" -#include "zypp/parser/susetags/RepoIndex.h" -#include "zypp/parser/ParseException.h" - -#include "zypp/ZConfig.h" - -using std::endl; -#undef ZYPP_BASE_LOGGER_LOGGROUP -#define ZYPP_BASE_LOGGER_LOGGROUP "parser::susetags" - -/////////////////////////////////////////////////////////////////// -namespace zypp -{ ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace parser - { ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace susetags - { ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : RepoParser::Impl - // - /** RepoParser implementation. - * \todo Clean data on exeption. - */ - class RepoParser::Impl - { - public: - Impl( const std::string & repositoryId_r, - data::ResolvableDataConsumer & consumer_r, - const ProgressData::ReceiverFnc & fnc_r ) - : _repositoryId( repositoryId_r ) - , _consumer( consumer_r ) - { - _ticks.sendTo( fnc_r ); - } - - /** Main entry to parser. */ - void parse( const Pathname & reporoot_r ); - - /** \name FileReader callbacks delivering data. */ - //@{ - /////////////////////////////////////////////////////////////////// - void consumeIndex( const RepoIndex_Ptr & data_r ) - { - //SEC << "[Index]" << data_r << endl; - _repoIndex = data_r; - } - - /////////////////////////////////////////////////////////////////// - void consumeProd( const data::Product_Ptr & data_r ) - { - MIL << "[Product] " << data_r << endl; - ++_stats.prod; - _prodData = data_r; - _defaultVendor = data_r->vendor; - _consumer.consumeProduct( data_r ); - } - - /////////////////////////////////////////////////////////////////// - void consumePkg( const data::Package_Ptr & data_r ) - { - fixVendor( data_r ); - fixLocationPath( data_r ); - resolveSharedDataTag( data_r ); - - ++_stats.pack; - data::RecordId newid = _consumer.consumePackage( data_r ); - - // remember for later reference - idMapAdd( makeSharedIdent( ResTraits::kind, - data_r->name, - data_r->edition, - data_r->arch ), - newid ); - } - - /////////////////////////////////////////////////////////////////// - void consumeSrcPkg( const data::SrcPackage_Ptr & data_r ) - { - fixVendor( data_r ); - fixLocationPath( data_r ); - resolveSharedDataTag( data_r ); - - ++_stats.srcp; - data::RecordId newid = _consumer.consumeSourcePackage( data_r ); - - // remember for later reference - idMapAdd( makeSharedIdent( ResTraits::kind, - data_r->name, - data_r->edition, - data_r->arch), - newid ); - } - - /////////////////////////////////////////////////////////////////// - void consumePkgLang( const data::Package_Ptr & data_r ) - { - data::RecordId id = idMapGet( makeSharedIdent( ResTraits::kind, - data_r->name, - data_r->edition, - data_r->arch ) ); - if ( id != data::noRecordId ) - { - _consumer.updatePackageLang( id, data_r ); - } - } - - /////////////////////////////////////////////////////////////////// - void consumeSrcPkgLang( const data::SrcPackage_Ptr & data_r ) - { - data::RecordId id = idMapGet( makeSharedIdent( ResTraits::kind, - data_r->name, - data_r->edition, - data_r->arch ) ); - if ( id != data::noRecordId ) - { - _consumer.updatePackageLang( id, data_r ); - } - } - - /////////////////////////////////////////////////////////////////// - void consumePkgDu( const data::Package_Ptr & data_r ) - { - data::RecordId id = idMapGet( makeSharedIdent( ResTraits::kind, - data_r->name, - data_r->edition, - data_r->arch ) ); - if ( id != data::noRecordId ) - { - _consumer.consumeDiskUsage( id, data_r->diskusage ); - } - } - - /////////////////////////////////////////////////////////////////// - void consumeSrcPkgDu( const data::SrcPackage_Ptr & data_r ) - { - data::RecordId id = idMapGet( makeSharedIdent( ResTraits::kind, - data_r->name, - data_r->edition, - data_r->arch ) ); - if ( id != data::noRecordId ) - { - _consumer.consumeDiskUsage( id, data_r->diskusage ); - } - } - - /////////////////////////////////////////////////////////////////// - void consumePat( const data::Pattern_Ptr & data_r ) - { - //SEC << "[Pattern]" << data_r << endl; - fixVendor( data_r ); - ++_stats.patt; - _consumer.consumePattern( data_r ); - } - //@} - - public: - /** Use products vendor if vendor was not specified. */ - void fixVendor( const data::ResObject_Ptr & data_r ) - { - if ( data_r->vendor.empty() && ! _defaultVendor.empty() ) - { - data_r->vendor = _defaultVendor; - } - } - - /** Prepend location with 'datadir'. */ - void fixLocationPath( const data::Packagebase_Ptr & data_r ) - { - Pathname tofix( data_r->repositoryLocation.filename() ); - data_r->repositoryLocation.changeFilename( _datadir / tofix ); - } - - /** Resolve shared data tag. */ - void resolveSharedDataTag( const data::Packagebase_Ptr & data_r ) - { - if ( ! data_r->sharedDataTag.empty() ) - { - data_r->shareDataWith = idMapGet( data_r->sharedDataTag ); - } - } - - public: - /** Throw \ref ParseException if a required file is not - * available below \ref _reporoot on disk. - */ - Pathname assertMandatoryFile( const Pathname & file_r, bool lookgz = true ) const - { - if ( lookgz ) - { - PathInfo gzinputfile( _reporoot / (file_r.extend(".gz")) ); - if ( !gzinputfile.isFile() ) - { - WAR << _reporoot << ": Skip gz required file (will look for non-gz): " << file_r.extend(".gz").asString() << endl; - } - else - { - return gzinputfile.path(); - } - } - PathInfo inputfile( _reporoot / file_r ); - if ( ! inputfile.isFile() ) - { - ZYPP_THROW( ParseException( _reporoot.asString() + ": " + _("Required file is missing: ") + file_r.asString() ) ); - } - return inputfile.path(); - } - - /** Print a warning if an optional file is not - * available below \ref _reporoot on disk. - */ - Pathname getOptionalFile( const Pathname & file_r, bool lookgz = true ) const - { - if ( lookgz ) - { - PathInfo gzinputfile( _reporoot / (file_r.extend(".gz")) ); - if ( !gzinputfile.isFile() ) - { - //WAR << _reporoot << ": Skip optional file: " << file_r.extend(".gz").asString() << endl; - } - else - { - return gzinputfile.path(); - } - } - PathInfo inputfile( _reporoot / file_r ); - if ( ! inputfile.isFile() ) - { - //WAR << _reporoot << ": Skip optional file: " << file_r.asString() << endl; - return Pathname(); - } - return inputfile.path(); - } - - bool isPatternFile( const std::string & name_r ) const - { - return( - (name_r.size() > 4 && name_r.substr( name_r.size() - 4 ) == ".pat" ) - || (name_r.size() > 7 && name_r.substr( name_r.size() - 7 ) == ".pat.gz" ) - ); - } - - /** Test for \c packages.lang in \ref _repoIndex.*/ - bool haveLocale( const Locale & locale_r ) const - { - std::string searchFor( "packages." + locale_r.code() ); - for ( RepoIndex::FileChecksumMap::const_iterator it = _repoIndex->metaFileChecksums.begin(); - it != _repoIndex->metaFileChecksums.end(); ++it ) - { - if ( it->first == searchFor ) - { - // got it - PathInfo inputfile( _reporoot / _descrdir / searchFor ); - if ( ! inputfile.isFile() ) - { - WAR << "Known and desired file is not on disk: " << inputfile << endl; - } - else - return true; // got it - } - - if ( it->first == (searchFor+".gz") ) - { - // got it - PathInfo inputfile( _reporoot / _descrdir / (searchFor+".gz") ); - if ( ! inputfile.isFile() ) - { - WAR << "Known and desired file is not on disk: " << inputfile << endl; - } - else - return true; // got it - } - } - return false; // not found - } - - /** Take care translations for \a locale_r or an appropriate - * fallback were parsed. - */ - void parseLocaleIf( const Locale & locale_r ) - { - Locale toParse( locale_r ); - bool alreadyParsed = false; - - while ( toParse != Locale::noCode ) - { - alreadyParsed = ( _parsedLocales.find( toParse ) != _parsedLocales.end() ); - if ( alreadyParsed || haveLocale( toParse ) ) - break; // no return because we want to log in case of a fallback - toParse = toParse.fallback(); - } - - if ( toParse != locale_r ) - { - WAR << "Using fallback locale " << toParse << " for " << locale_r << endl; - } - - if ( alreadyParsed ) - { - return; // now return... - } - // ...or parse - _parsedLocales.insert( toParse ); // don't try again. - - Pathname inputfile( getOptionalFile( _descrdir / ("packages." + toParse.code()) ) ); - if ( ! inputfile.empty() ) - { - PackagesLangFileReader reader; - reader.setLocale( toParse ); - reader.setPkgConsumer( bind( &Impl::consumePkgLang, this, _1 ) ); - reader.setSrcPkgConsumer( bind( &Impl::consumeSrcPkgLang, this, _1 ) ); - CombinedProgressData progress( _ticks, PathInfo(inputfile).size() ); - reader.parse( inputfile, progress ); - } - - if ( ! _ticks.incr( PathInfo(inputfile).size() ) ) - ZYPP_THROW( AbortRequestException() ); - } - - private: - void idMapAdd( const std::string & key_r, data::RecordId value_r ) - { - if ( _idMap[key_r] != data::noRecordId ) - { - WAR << "Multiple record ids for " << key_r - << " (first " << _idMap[key_r] << ", now " << value_r << ")" << endl; - } - _idMap[key_r] = value_r; - } - - data::RecordId idMapGet( const std::string & key_r ) - { - data::RecordId ret = _idMap[key_r]; - if ( ret == data::noRecordId ) - { - //WAR << "No record id for " << key_r << endl; - } - return ret; - } - - private: - std::string _repositoryId; - data::ResolvableDataConsumer & _consumer; - ProgressData _ticks; - - private: // these (and _ticks) are actually scoped per parse() run. - RepoIndex_Ptr _repoIndex; - data::Product_Ptr _prodData; - std::string _defaultVendor; - Pathname _reporoot; // full path - Pathname _descrdir; // path below reporoot - Pathname _datadir; // path below reporoot - - /** Translations processed by \ref parseLocaleIf so far.*/ - std::set _parsedLocales; - - /** Remember the record ids of created packages and soucepackages. */ - std::map _idMap; - - struct Stats { - DefaultIntegral prod; - DefaultIntegral patt; - DefaultIntegral pack; - DefaultIntegral srcp; - }; - Stats _stats; - }; - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : RepoParser::Impl::parse - // METHOD TYPE : void - // - void RepoParser::Impl::parse( const Pathname & reporoot_r ) - { - _prodData = 0; - _repoIndex = 0; - _defaultVendor.clear(); - _reporoot = reporoot_r; - _descrdir = _datadir = Pathname(); - _parsedLocales.clear(); - - // Content file first to get the repoindex - { - Pathname inputfile( assertMandatoryFile( "content" ) ); - ContentFileReader content; - content.setProductConsumer( bind( &Impl::consumeProd, this, _1 ) ); - content.setRepoIndexConsumer( bind( &Impl::consumeIndex, this, _1 ) ); - content.parse( inputfile ); - } - if ( ! _repoIndex ) - { - ZYPP_THROW( ParseException( reporoot_r.asString() + ": " + "No repository index in content file." ) ); - } - DBG << _repoIndex << endl; - - // Prepare parsing - _descrdir = _repoIndex->descrdir; // path below reporoot - _datadir = _repoIndex->datadir; // path below reporoot - - _ticks.name( "Parsing susetags repo at " + reporoot_r.asString() ); - - // calculate progress range based on file sizes to parse - int jobssize = 0; - for ( RepoIndex::FileChecksumMap::const_iterator it = _repoIndex->metaFileChecksums.begin(); - it != _repoIndex->metaFileChecksums.end(); ++it ) - { - // here the paths already contain the gz extension - jobssize += PathInfo(getOptionalFile(_descrdir / it->first, false)).size(); - - } - MIL << "Total job size: " << jobssize << endl; - - _ticks.range(jobssize); - - if ( ! _ticks.toMin() ) - ZYPP_THROW( AbortRequestException() ); - - // Start with packages - { - // Even the packages file is optional, see e.g. bug #309235 - Pathname inputfile( getOptionalFile( _descrdir / "packages" ) ); - if (!inputfile.empty()) - { - PackagesFileReader reader; - reader.setPkgConsumer( bind( &Impl::consumePkg, this, _1 ) ); - reader.setSrcPkgConsumer( bind( &Impl::consumeSrcPkg, this, _1 ) ); - - CombinedProgressData progress( _ticks, PathInfo(inputfile).size() ); - reader.parse( inputfile, progress ); - - // Now process packages.lang. Always parse 'en'. - // At least packages.en is mandatory if packages exists, because the - // file might contain license texts. - assertMandatoryFile( _descrdir / "packages.en" ); - parseLocaleIf( Locale("en") ); - // For each wanted locale at least - // some fallback, if locale is not present. - parseLocaleIf( ZConfig::instance().textLocale() ); - - // Now process packages.DU. - //if ( 0 ) // remove the if to enable, but leave the {} around. - { - Pathname inputfile( getOptionalFile( _descrdir / "packages.DU" ) ); - if ( ! inputfile.empty() ) - { - PackagesDuFileReader reader; - reader.setPkgConsumer( bind( &Impl::consumePkgDu, this, _1 ) ); - reader.setSrcPkgConsumer( bind( &Impl::consumeSrcPkgDu, this, _1 ) ); - - CombinedProgressData progress( _ticks, PathInfo(inputfile).size() ); - reader.parse( inputfile, progress ); - } - } - } - } - - // Now process the rest of RepoIndex - for ( RepoIndex::FileChecksumMap::const_iterator it = _repoIndex->metaFileChecksums.begin(); - it != _repoIndex->metaFileChecksums.end(); ++it ) - { - Pathname inputfile; - inputfile = ""; - - if ( it->first == "patterns.pat" - || it->first == "patterns.pat.gz" ) - { - // read all patterns in one go - inputfile = getOptionalFile( _descrdir / it->first, false /*filename already contains .gz */ ); - } - else if ( isPatternFile( it->first ) ) - { - // *** see also zypp/repo/susetags/Downloader.cc *** - - // omit unwanted patterns, see https://bugzilla.novell.com/show_bug.cgi?id=298716 - // expect "..pat[.gz]", might contain additional dots - // split at dots, take .pat or .pat.gz into account - - // vector of splitted pattern filename elements - std::vector patparts; - - // this is the offset from the last element of patparts - unsigned archoff = 2; - - unsigned count = str::split( it->first, std::back_inserter( patparts ), "." ); - - if ( patparts[count-1] == "gz" ) - archoff++; - - if ( count > archoff ) - { - try // might by an invalid architecture - { - Arch patarch( patparts[count-archoff] ); - if ( !patarch.compatibleWith( ZConfig::instance().systemArchitecture() ) ) - { - // discard, if not compatible - MIL << "Discarding pattern " << it->first << endl; - continue; - } - } - catch ( const Exception & excpt ) - { - WAR << "Pattern file name does not contain recognizable architecture: " << it->first << endl; - // keep .pat file if it doesn't contain an recognizable arch - } - } - inputfile = getOptionalFile( _descrdir / it->first, false /*filename already contains .gz */ ); - - } - if ( ! inputfile.empty() ) - { - PatternFileReader reader; - reader.setConsumer( bind( &Impl::consumePat, this, _1 ) ); - CombinedProgressData progress( _ticks, PathInfo(inputfile).size() ); - reader.parse( inputfile, progress ); - } - } - - // Done - if ( ! _ticks.toMax() ) - ZYPP_THROW( AbortRequestException() ); - - MIL << "DONE " << reporoot_r << "(" - << _stats.prod << " products, " - << _stats.patt << " patterns, " - << _stats.pack << " packages, " - << _stats.srcp << " srcpackages)" << endl; - } - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : RepoParser - // - /////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : RepoParser::RepoParser - // METHOD TYPE : Ctor - // - RepoParser::RepoParser( const std::string & repositoryId_r, - data::ResolvableDataConsumer & consumer_r, - const ProgressData::ReceiverFnc & fnc_r ) - : _pimpl( new Impl( repositoryId_r, consumer_r, fnc_r ) ) - {} - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : RepoParser::~RepoParser - // METHOD TYPE : Dtor - // - RepoParser::~RepoParser() - {} - - /////////////////////////////////////////////////////////////////// - // - // METHOD NAME : RepoParser::parse - // METHOD TYPE : void - // - void RepoParser::parse( const Pathname & reporoot_r ) - { - _pimpl->parse( reporoot_r ); - } - - ///////////////////////////////////////////////////////////////// - } // namespace susetags - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - } // namespace parser - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// -} // namespace zypp -/////////////////////////////////////////////////////////////////// diff --git a/zypp/parser/susetags/RepoParser.h b/zypp/parser/susetags/RepoParser.h deleted file mode 100644 index ea314a9..0000000 --- a/zypp/parser/susetags/RepoParser.h +++ /dev/null @@ -1,103 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/susetags/RepoParser.h - * -*/ -#ifndef ZYPP2_PARSER_SUSETAGS_REPOPARSER_H -#define ZYPP2_PARSER_SUSETAGS_REPOPARSER_H - -#include - -#include "zypp/base/PtrTypes.h" -#include "zypp/base/NonCopyable.h" - -#include "zypp/data/RecordId.h" -#include "zypp/data/ResolvableDataConsumer.h" - -#include "zypp/ProgressData.h" - -/////////////////////////////////////////////////////////////////// -namespace zypp -{ ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace parser - { ///////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////// - namespace susetags - { ///////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : RepoParser - // - /** SuseTags metadata parser. - * - * Reads a \c content file to get the \ref data::Product and a \Ref RepoIndex. - * Then parses the remaining files and feeds them to a \ref data::ResolvableDataConsumer - * (typically to store them in a database). - * - * \see \ref ContentFileReader and \ref FileReaderBase - * - * \code - * Pathname dbdir( "store" ); - * Pathname reporoot( "lmd" ); - * - * cache::CacheStore store( dbdir ); - * data::RecordId catalogId = store.lookupOrAppendRepository( Url("dir:///somewhere"), "/" ); - * - * parser::susetags::RepoParser repo( catalogId, store ); - * repo.parse( reporoot ); - * - * store.commit(); - * \endcode - * - * \todo Improve selection of Languages to parse - * \todo Improve feeding of translations into Cachestore. Add specialized consumer, for Du too. - * \todo DiskUsage filereader and parsing - * \todo more doc and Exception specification - */ - class RepoParser : private base::NonCopyable - { - public: - /** Ctor. - * - * \param repositoryId_r repository identifier - * \param consumer_r consumer of parsed data - * \param fnc_r progress reporting function - */ - RepoParser( const std::string &repositoryId_r, - data::ResolvableDataConsumer & consumer_r, - const ProgressData::ReceiverFnc & fnc_r = ProgressData::ReceiverFnc() ); - /** Dtor */ - ~RepoParser(); - - /** Parse a local repository located at \a reporoot_r. - * - * \param reporoot_r The local repositories root directory. - * \throw Exception on errors. - */ - void parse( const Pathname & reporoot_r ); - - public: - class Impl; - private: - RW_pointer > _pimpl; - }; - /////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////// - } // namespace susetags - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// - } // namespace parser - /////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////// -} // namespace zypp -/////////////////////////////////////////////////////////////////// -#endif // ZYPP2_PARSER_SUSETAGS_REPOPARSER_H diff --git a/zypp/parser/yum/FileReaderBase.h b/zypp/parser/yum/FileReaderBase.h deleted file mode 100644 index 2b3df47..0000000 --- a/zypp/parser/yum/FileReaderBase.h +++ /dev/null @@ -1,43 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/FileReaderBase.h - * - */ -#ifndef ZYPP_PARSER_YUM_FILEREADERBASE_H_ -#define ZYPP_PARSER_YUM_FILEREADERBASE_H_ - -#include "zypp/base/PtrTypes.h" -#include "zypp/base/NonCopyable.h" - -namespace zypp -{ - namespace parser - { - namespace yum - { - - - /** - * Base for yum::*FileReaders. Implements parsing methods for common metadata. - */ - class FileReaderBase : private base::NonCopyable - { - protected: - class BaseImpl; - }; - - - } // ns yum - } // ns parser -} // ns zypp - - -#endif /*ZYPP_PARSER_YUM_FILEREADERBASE_H_*/ - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/FileReaderBaseImpl.cc b/zypp/parser/yum/FileReaderBaseImpl.cc deleted file mode 100644 index 31d9443..0000000 --- a/zypp/parser/yum/FileReaderBaseImpl.cc +++ /dev/null @@ -1,480 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/FileReaderBaseImpl.cc - * Implementation of shared code for yum::*FileReaders. - */ -#include - -#include "zypp/base/Logger.h" -#include "zypp/base/Function.h" -#include "zypp/Arch.h" -#include "zypp/Edition.h" -#include "zypp/TranslatedText.h" -#include "zypp/ByteCount.h" - -#include "zypp/parser/ParseException.h" -#include "zypp/parser/yum/FileReaderBaseImpl.h" - -using namespace std; -using namespace zypp::xml; - -namespace zypp -{ - namespace parser - { - namespace yum - { - - - FileReaderBase::BaseImpl::BaseImpl() - : _expect_rpm_entry(false), _dtype(zypp::Dep::REQUIRES) - {} - - // -------------------------------------------------------------------------- - - /* - * xpath and multiplicity of processed nodes are included in the code - * for convenience: - * - * // xpath: (?|*|+) - * - * if multiplicity is ommited, then the node has multiplicity 'one'. - */ - - // -------------------------------------------------------------------------- - - bool FileReaderBase::BaseImpl::consumePackageNode(xml::Reader & reader_r, data::Packagebase_Ptr & package_ptr) - { - // DBG << "**node: " << reader_r->name() << " (" << reader_r->nodeType() << ") tagpath = " << _tagpath << endl; - if (!isBeingProcessed(tag_package)) - ZYPP_THROW(ParseException("consumePackageNode() called outside of package element")); - - if (isBeingProcessed(tag_format) && consumeFormatNode(reader_r, package_ptr)) - return true; - - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - // xpath: //package/name - if (reader_r->name() == "name") - { - package_ptr->name = reader_r.nodeText().asString(); - return true; - } - - // xpath: //package/arch - if (reader_r->name() == "arch") - { - string arch = reader_r.nodeText().asString(); - // create SrcPackage instead of Package for source packages - if (arch == "src" || arch == "nosrc") - { - arch = "noarch"; - data::Packagebase_Ptr srcpkg = new data::SrcPackage; - // we have read name only so far, copying only the name - srcpkg->name = package_ptr->name; - // package_ptr will point to a SrcPackage from now on - package_ptr.swap(srcpkg); - } - package_ptr->arch = Arch( arch ); - return true; - } - - // xpath: //package/version - if (reader_r->name() == "version") - { - package_ptr->edition = Edition( reader_r->getAttribute("ver").asString(), - reader_r->getAttribute("rel").asString(), - reader_r->getAttribute("epoch").asString() ); - return true; - } - - // xpath: //package/checksum - if (reader_r->name() == "checksum") - { - package_ptr->repositoryLocation.setChecksum(CheckSum( - reader_r->getAttribute("type").asString(), - reader_r.nodeText().asString())); - // ignoring pkgid attribute - return true; - } - - // xpath: //package/summary (*) - if (reader_r->name() == "summary") - { - Locale locale(reader_r->getAttribute("lang").asString()); - package_ptr->summary.setText( - reader_r.nodeText().asString(), locale); - return true; - } - - // xpath: //package/description (*) - if (reader_r->name() == "description") - { - Locale locale(reader_r->getAttribute("lang").asString()); - package_ptr->description.setText( - reader_r.nodeText().asString(), locale); - return true; - } - - // xpath: //package/packager - if (reader_r->name() == "packager") - { - package_ptr->packager = reader_r.nodeText().asString(); - return true; - } - - // xpath: //package/url - if (reader_r->name() == "url") - { - package_ptr->url = reader_r.nodeText().asString(); - return true; - } - - // xpath: //package/time - if (reader_r->name() == "time") - { - package_ptr->buildTime = reader_r->getAttribute("build").asString(); - // ignoring reader_r->getAttribute("file").asString(); (rpm file timestamp) - return true; - } - - // xpath: //package/size - if (reader_r->name() == "size") - { - //! \todo what's 'archive' size of the package (it is neither the rpm file size nor its installed size) - // reader_r->getAttribute("archive").asString(); - - // installed size - package_ptr->installedSize = str::strtonum( reader_r->getAttribute("installed").asString() ); - - // rpm package size - package_ptr->repositoryLocation.setDownloadSize(str::strtonum( reader_r->getAttribute("package").asString() )); - - return true; - } - - // xpath: //package/location - if (reader_r->name() == "location") - { - package_ptr->repositoryLocation.setLocation(reader_r->getAttribute("href").asString(), 1); - return true; - } - - // xpath: //package/format - if (reader_r->name() == "format") - { - tag(tag_format); - return true; - } - } - - else if ( reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT ) - { - // xpath: //package - if (reader_r->name() == "package") - { - // indicate that further processing is required - // e.g. caller needs to to check for to trigger some action - return false; - } - } - - return true; - } - - // --------------( consume tag )------------------------------------ - - bool FileReaderBase::BaseImpl::consumeFormatNode( - xml::Reader & reader_r, data::Packagebase_Ptr & package_ptr) - { - if (consumeDependency(reader_r, package_ptr->deps)) - // this node has been a dependency, which has been handled by - // consumeDependency(), so return right away. - return true; - - // DBG << "format subtag: " << reader_r->name() << endl; - - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - // xpath: //format/rpm:license - if (reader_r->name() == "rpm:license") - { - package_ptr->license = reader_r.nodeText().asString(); - return true; - } - - // xpath: //format/rpm:vendor - if (reader_r->name() == "rpm:vendor") - { - package_ptr->vendor = reader_r.nodeText().asString(); - return true; - } - - // xpath: //format/rpm:group - if (reader_r->name() == "rpm:group") - { - package_ptr->group = reader_r.nodeText().asString(); - return true; - } - - // xpath: //format/rpm:buildhost - if (reader_r->name() == "rpm:buildhost") - { - package_ptr->buildhost = reader_r.nodeText().asString(); - return true; - } - - //! \todo xpath: //format/rpm:sourcerpm where to store this? - if (reader_r->name() == "rpm:sourcerpm") - { - //package->source = reader_r.nodeText().asString(); - return true; - } - - //! \todo xpath: //format/rpm:header-range what is this? - if (reader_r->name() == "rpm:header-range") - { - //reader_r->getAttribute("start").asString(), - //reader_r->getAttribute("end").asString(), - return true; - } - - // file entries listed outside of filelists.xml to be treated - // like rpm:provides - // xpath: //format/file (*) - if (reader_r->name() == "file") - { - // insert file dependency into the list - package_ptr->deps[Dep::PROVIDES].insert( Capability( reader_r.nodeText().asString(), Capability::PARSED ) ); - return true; - } - - // xpath: //format/suse:authors/suse:author (+) - // but tolerating multiplicity (*) - if (reader_r->name() == "suse:author") - { - package_ptr->authors.push_back(reader_r.nodeText().asString()); - return true; - } - - // xpath: //format/suse:keywords (?) - // xpath: //format/suse:keywords/suse:keyword (+) - if (reader_r->name() == "suse:keyword") - { - package_ptr->keywords.insert(reader_r.nodeText().asString()); - return true; - } - - //! \todo xpath: //format/suse:dirsizes (?) - - // xpath: //format/suse:install-only (?) - if (reader_r->name() == "suse:install-only") - { - package_ptr->installOnly = true; - return true; - } - - // xpath: //format/suse:license-to-confirm (*) - //! \todo this is ambiguous - fix the rnc schema - if (reader_r->name() == "suse:license-to-confirm") - { - Locale locale(reader_r->getAttribute("lang").asString()); - package_ptr->licenseToConfirm.setText( - reader_r.nodeText().asString(), locale); - return true; - } - } - else if (reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT) - { - // xpath: //format - if (reader_r->name() == "format") - { - toParentTag(); - return true; - } - } - - return true; - } - - // -------------------------------------------------------------------------- - - bool FileReaderBase::BaseImpl::consumeDependency( - xml::Reader & reader_r, data::Dependencies & deps_r) - { - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - // xpath: //format/*/rpm:entry | //format/suse-freshens/suse:entry (+) - if (reader_r->name() == "rpm:entry" || reader_r->name() == "suse:entry") - { - if (!_expect_rpm_entry) - ZYPP_THROW(ParseException("rpm:entry found when not expected")); - - // read kind of resolvable this entry refers, default to Package - ResKind kind( reader_r->getAttribute("kind").asString() ); - if ( ! kind ) - kind = ResKind::package; - - // Check whether this is actually a prerequires dependency. - // If so, it will be stored in deps_r as Dep::PREREQUIRES - // instead of Dep::REQUIRES (a prerequires can appear as part - // of requires dependencies only). - bool pre = false; - if (reader_r->getAttribute("pre").asString() == "1") - { - if (_dtype.inSwitch() != Dep::REQUIRES_e) - ZYPP_THROW(ParseException("pre=\"1\" found for non-requires dependency")); - pre = true; - } - - string version = reader_r->getAttribute("ver").asString(); - - if (version.empty()) - { - // insert unversion dependency into the list - deps_r[pre ? Dep::PREREQUIRES : _dtype].insert( - Capability( reader_r->getAttribute("name").asString(), kind, Capability::PARSED ) - ); - } - else - { - Edition edition( - version, - reader_r->getAttribute("rel").asString(), - reader_r->getAttribute("epoch").asString() - ); - - // insert versioned dependency into the list - deps_r[pre ? Dep::PREREQUIRES : _dtype].insert( - Capability( reader_r->getAttribute("name").asString(), - Rel( reader_r->getAttribute("flags").asString() ), - edition, - kind ) - ); - } - - //! \todo check - } - - // xpath: //format/rpm:provides (?) - if (reader_r->name() == "rpm:provides") - { - _dtype = zypp::Dep::PROVIDES; - _expect_rpm_entry = true; - return true; - } - // xpath: //format/rpm:conflicts (?) - if (reader_r->name() == "rpm:conflicts") - { - _dtype = zypp::Dep::CONFLICTS; - _expect_rpm_entry = true; - return true; - } - // xpath: //format/rpm:obsoletes (?) - if (reader_r->name() == "rpm:obsoletes") - { - _dtype = zypp::Dep::OBSOLETES; - _expect_rpm_entry = true; - return true; - } - // xpath: //format/rpm:requires (?) - if (reader_r->name() == "rpm:requires") - { - _dtype = zypp::Dep::REQUIRES; - _expect_rpm_entry = true; - return true; - } - // xpath: //format/rpm:recommends (?) - if (reader_r->name() == "rpm:recommends") - { - _dtype = zypp::Dep::RECOMMENDS; - _expect_rpm_entry = true; - return true; - } - // xpath: //format/rpm:enhances (?) - if (reader_r->name() == "rpm:enhances") - { - _dtype = zypp::Dep::ENHANCES; - _expect_rpm_entry = true; - return true; - } - // xpath: //format/rpm:supplements (?) - if (reader_r->name() == "rpm:supplements") - { - _dtype = zypp::Dep::SUPPLEMENTS; - _expect_rpm_entry = true; - return true; - } - // xpath: //format/rpm:suggests (?) - if (reader_r->name() == "rpm:suggests") - { - _dtype = zypp::Dep::SUGGESTS; - _expect_rpm_entry = true; - return true; - } - // xpath: //format/suse:freshens (?) - if (reader_r->name() == "suse:freshens") - { - _dtype = zypp::Dep::FRESHENS; - _expect_rpm_entry = true; - } - } - else if (reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT) - { - // xpath: //format/* (?) - if (reader_r->name() == "rpm:requires" - || reader_r->name() == "rpm:provides" - || reader_r->name() == "rpm:conflicts" - || reader_r->name() == "rpm:obsoletes" - || reader_r->name() == "rpm:recommends" - || reader_r->name() == "rpm:enhances" - || reader_r->name() == "rpm:supplements" - || reader_r->name() == "rpm:suggests" - || reader_r->name() == "suse:freshens") - { - _expect_rpm_entry = false; - return true; - } - } - - // tell the caller this has not been a dependency tag (i.e. not processed) - return false; - } - - // -------------------------------------------------------------------------- - - string FileReaderBase::BaseImpl::TagPath::asString() - { - ostringstream s; - - s << "("; - - if (depth()) - { - TagList::const_iterator p = path.begin(); - s << *p; - ++p; - - for (; p != path.end(); ++p) - s << "," << *p; - } - else - s << "empty"; - - s << ")"; - - return s.str(); - } - - - } // ns yum - } // ns parser -} // ns zypp - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/FileReaderBaseImpl.h b/zypp/parser/yum/FileReaderBaseImpl.h deleted file mode 100644 index a273c70..0000000 --- a/zypp/parser/yum/FileReaderBaseImpl.h +++ /dev/null @@ -1,164 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/FileReaderBaseImpl.h - * Implementation interface of shared code for yum::*FileReaders. - */ -#ifndef ZYPP_PARSER_YUM_FILEREADERBASEIMPL_H_ -#define ZYPP_PARSER_YUM_FILEREADERBASEIMPL_H_ - -#include "zypp/data/ResolvableData.h" -#include "zypp/parser/xml/Reader.h" - -#include "zypp/parser/yum/FileReaderBase.h" - -namespace zypp -{ - namespace parser - { - namespace yum - { - - - class FileReaderBase::BaseImpl : private base::NonCopyable - { - public: - - /** - * Enumeration of some YUM metadata xml tags. - */ - enum Tag - { - tag_NONE, - tag_package, - tag_format, - tag_patch, - tag_atoms, - tag_script, - tag_message, - tag_pkgfiles, - tag_deltarpm, - tag_patchrpm, - tag_pattern, - tag_product - }; - - /** - * Lightweight object for remembering currently processed tag. - * - * Usage: - * - * - call \ref append() on opening tag - * - use \ref contains() to check if the given tag is being processed - * - call \ref remove() on closing tag - * - * \note the above works only if the path elements are unique. To support - * also non-unique elements, an equals() method will need to be implemented - * and used instead of \ref contains(). - * - * \note tags you want to use with TagPath must be enumerated in \ref Tag - * enum. - */ - struct TagPath - { - typedef std::list TagList; - - void append(const Tag tag) { path.push_back(tag); } - void remove() { if (!path.empty()) path.pop_back(); } - unsigned depth() const { return path.size(); } - Tag currentTag() const - { - if (!path.empty()) return path.back(); - return tag_NONE; - } - bool contains(const Tag tag) const - { - TagList::const_iterator result = find(path.begin(), path.end(), tag); - return result != path.end(); - } - std::string asString(); - - TagList path; - }; - - - public: - /** CTOR */ - BaseImpl(); - - /** - * Process package node and its subtree. - * This method can be extended for specific implementations. - * - * \param reader_r - * \param package_ptr This can be either data::Package or data::SrcPackage. - * \return true if the package node or current subnode has been consumed - * (no further processing is required), false otherwise. - * \throws ParseException if a serious error is encountered while parsing - */ - bool consumePackageNode(xml::Reader & reader_r, data::Packagebase_Ptr & package_ptr); - - /** - * Function for processing all format tag subtree nodes. - * - * \return true if the package node or current subnode has been consumed - * (no further processing is required), false otherwise. - */ - bool consumeFormatNode(xml::Reader & reader_r, data::Packagebase_Ptr & package_ptr); - - /** - * Processes RPM dependency tags (rpm:entry, rpm:requires, ...). - * - * \return true if a dependency tag has been encountered, false otherwise. - * \throws ParseException if a serious error is encountered while parsing - */ - bool consumeDependency(xml::Reader & reader_r, data::Dependencies & deps_r); - - void editionStringFromAttrs( xml::Reader & reader_r, Edition & edition ) const - { edition = Edition( reader_r->getAttribute("ver").asString(), - reader_r->getAttribute("rel").asString(), - reader_r->getAttribute("epoch").asString() ); } - - public: - /** Appends \a tag to \ref _tagpath. */ - void tag(const Tag tag) { _tagpath.append(tag); } - - /** Check whether we are currently processing given \a tag. */ - bool isBeingProcessed(Tag tag) const { return _tagpath.contains(tag); } - - /** Move to parent tag in the \ref _tagpath. */ - void toParentTag() { _tagpath.remove(); } - - /** Getter of the tagpath object. */ - const TagPath & tagPath() const { return _tagpath; } - - - private: - /** Used to remember the tag beeing currently processed. */ - TagPath _tagpath; - - /** - * Used to remember whether we are expecting an rpm:entry tag - * e.g. for rpm:requires - */ - bool _expect_rpm_entry; - - /** - * Type of dependecy beeing processed. - */ - Dep _dtype; - }; - - - } // ns yum - } // ns parser -} // ns zypp - -#endif /*ZYPP_PARSER_YUM_FILEREADERBASEIMPL_H_*/ - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/FilelistsFileReader.cc b/zypp/parser/yum/FilelistsFileReader.cc deleted file mode 100644 index 39fcaf6..0000000 --- a/zypp/parser/yum/FilelistsFileReader.cc +++ /dev/null @@ -1,212 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/FilelistsFileReader.cc - * Implementation of filelists.xml.gz file reader. - */ -#include "zypp/base/Logger.h" -#include "zypp/parser/xml/Reader.h" -#include "zypp/base/UserRequestException.h" - -#include "zypp/parser/yum/FilelistsFileReader.h" -#include "zypp/parser/yum/FileReaderBaseImpl.h" - -#undef ZYPP_BASE_LOGGER_LOGGROUP -#define ZYPP_BASE_LOGGER_LOGGROUP "parser::yum" - -using namespace std; -using namespace zypp::xml; - -namespace zypp -{ - namespace parser - { - namespace yum - { - - - /////////////////////////////////////////////////////////////////////// - // - // CLASS NAME : FilelistsFileReader::Impl - // - class FilelistsFileReader::Impl : public BaseImpl - { - public: - Impl( - const Pathname & filelists_file, - const ProcessPackage & callback, - const ProgressData::ReceiverFnc & progress = ProgressData::ReceiverFnc()); - - public: - - /** - * Callback provided to the XML parser. - */ - bool consumeNode(xml::Reader & reader_r); - - /** - * Creates a new \ref data::Resolvable_Ptr, swaps its contents with - * \ref _resolvable and returns it. Used to hand-out the data object to its consumer - * (a \ref ProcessPackage function) after it has been read. - */ - data::Resolvable_Ptr handoutResolvable(); - - private: - - /** - * Pointer to the \ref zypp::data::Resolvable object for storing the NVRA - * data. - */ - zypp::data::Resolvable_Ptr _resolvable; - - /** - * Changelog of \ref _resolvable. - */ - data::Filenames _filenames; - - /** - * Callback for processing package metadata. Passed in through constructor. - */ - ProcessPackage _callback; - - /** - * Progress reporting object. - */ - ProgressData _ticks; - }; - /////////////////////////////////////////////////////////////////////// - - FilelistsFileReader::Impl::Impl( - const Pathname & filelists_file, - const ProcessPackage & callback, - const ProgressData::ReceiverFnc & progress) - : - _callback(callback) - { - _ticks.sendTo(progress); - _ticks.name("filelist.xml.gz"); - - Reader reader(filelists_file); - MIL << "Reading " << filelists_file << endl; - reader.foreachNode(bind(&FilelistsFileReader::Impl::consumeNode, this, _1)); - } - - // -------------------------------------------------------------------------- - - /* - * xpath and multiplicity of processed nodes are included in the code - * for convenience: - * - * // xpath: (?|*|+) - * - * if multiplicity is ommited, then the node has multiplicity 'one'. - */ - - // -------------------------------------------------------------------------- - - - bool FilelistsFileReader::Impl::consumeNode(Reader & reader_r) - { - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - // xpath: /filelists - if (reader_r->name() == "filelists") - { - unsigned total_packages; - zypp::str::strtonum(reader_r->getAttribute("packages").asString(), total_packages); - _ticks.range(total_packages); - _ticks.toMin(); - return true; - } - - // xpath: /filelists/package (+) - if (reader_r->name() == "package") - { - _resolvable = new data::Resolvable; - _filenames.clear(); - - _resolvable->name = reader_r->getAttribute("name").asString(); - _resolvable->arch = Arch( reader_r->getAttribute("arch").asString() ); - - return true; - } - - // xpath: /filelists/package/version - if (reader_r->name() == "version") - { - editionStringFromAttrs( reader_r, _resolvable->edition ); - return true; - } - - // xpath: /filelists/package/file (*) - if (reader_r->name() == "file") - { - // ignoring type dir/ghost reader_r->getAttribute("type").asString(); - _filenames.push_back(reader_r.nodeText().asString()); - return true; - } - } - - else if (reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT) - { - // xpath: /filelists/package - if (reader_r->name() == "package") - { - if (_callback && !_filenames.empty()) - _callback(handoutResolvable(), _filenames); - - if (!_ticks.incr()) - ZYPP_THROW(AbortRequestException()); - - return true; - } - - // xpath: /filelists - if (reader_r->name() == "filelists") - { - _ticks.toMax(); - return true; - } - } - - return true; - } - - // -------------------------------------------------------------------------- - - data::Resolvable_Ptr FilelistsFileReader::Impl::handoutResolvable() - { - data::Resolvable_Ptr ret; - ret.swap(_resolvable); - return ret; - } - - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : FilelistsFileReader - // - /////////////////////////////////////////////////////////////////// - - FilelistsFileReader::FilelistsFileReader( - const Pathname & filelists_file, - const ProcessPackage & callback, - const ProgressData::ReceiverFnc & progress) - : - _pimpl(new Impl(filelists_file, callback, progress)) - {} - - FilelistsFileReader::~FilelistsFileReader() - {} - - - } // ns yum - } // ns parser -} // ns zypp - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/FilelistsFileReader.h b/zypp/parser/yum/FilelistsFileReader.h deleted file mode 100644 index d08c108..0000000 --- a/zypp/parser/yum/FilelistsFileReader.h +++ /dev/null @@ -1,86 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/FilelistsFileReader.h - * Interface of filelists.xml.gz file reader. - */ -#ifndef ZYPP_PARSER_YUM_FILELISTFILEREADER_H_ -#define ZYPP_PARSER_YUM_FILELISTFILEREADER_H_ - -#include "zypp/base/PtrTypes.h" -#include "zypp/base/NonCopyable.h" -#include "zypp/base/Function.h" -#include "zypp/data/ResolvableData.h" - -#include "zypp/ProgressData.h" - -#include "zypp/parser/yum/FileReaderBase.h" - -namespace zypp -{ - namespace parser - { - namespace yum - { - - - /** - * Reads through a filelists.xml.gz file and collects list of file contained - * in packages. - * - * After each package is read, a \ref data::Resolvable - * and \ref data::Filenames is prepared and \ref _callback - * is called with these two objects passed in. - * - * The \ref _callback is provided on construction. - * - * \code - * FilelistsFileReader reader(filelists_file, - * bind(&SomeClass::callbackfunc, &SomeClassInstance, _1, _2)); - * \endcode - */ - class FilelistsFileReader : FileReaderBase - { - public: - /** - * Callback definition. - */ - typedef function ProcessPackage; - - /** - * CTOR. Creates also \ref xml::Reader and starts reading. - * - * \param filelists_file the filelists.xml.gz file you want to read - * \param callback function to process \ref _resolvable data. - * \param progress progress reporting object - * - * \see FilelistsFileReader::ProcessPackage - */ - FilelistsFileReader( - const Pathname & filelists_file, - const ProcessPackage & callback, - const ProgressData::ReceiverFnc & progress = ProgressData::ReceiverFnc()); - - /** - * DTOR. - */ - ~FilelistsFileReader(); - - private: - class Impl; - RW_pointer > _pimpl; - }; - - - } // ns zypp - } // ns parser -} // ns yum - -#endif /*ZYPP_PARSER_YUM_FILELISTFILEREADER_H_*/ - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/OtherFileReader.cc b/zypp/parser/yum/OtherFileReader.cc deleted file mode 100644 index 779d3a7..0000000 --- a/zypp/parser/yum/OtherFileReader.cc +++ /dev/null @@ -1,216 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/OtherFileReader.cc - * Implementation of other.xml.gz file reader. - */ -#include "zypp/base/Logger.h" -#include "zypp/parser/xml/Reader.h" -#include "zypp/data/ResolvableData.h" -#include "zypp/Changelog.h" -#include "zypp/base/UserRequestException.h" - -#include "zypp/parser/yum/OtherFileReader.h" -#include "zypp/parser/yum/FileReaderBaseImpl.h" - -#undef ZYPP_BASE_LOGGER_LOGGROUP -#define ZYPP_BASE_LOGGER_LOGGROUP "parser::yum" - -using namespace std; -using namespace zypp::xml; - -namespace zypp -{ - namespace parser - { - namespace yum - { - - - /////////////////////////////////////////////////////////////////////// - // - // CLASS NAME : OtherFileReader::Impl - // - class OtherFileReader::Impl : public BaseImpl - { - public: - Impl( - const Pathname & other_file, - const ProcessPackage & callback, - const ProgressData::ReceiverFnc & progress); - - public: - - /** - * Callback provided to the XML parser. - */ - bool consumeNode(xml::Reader & reader_r); - - /** - * Creates a new \ref data::Resolvable_Ptr, swaps its contents with - * \ref _resolvable and returns it. Used to hand-out the data object to its consumer - * (a \ref ProcessPackage function) after it has been read. - */ - data::Resolvable_Ptr handoutResolvable(); - - private: - - /** - * Pointer to the \ref zypp::data::Resolvable object for storing the NVRA - * data. - */ - zypp::data::Resolvable_Ptr _resolvable; - - /** - * Changelog of \ref _resolvable. - */ - Changelog _changelog; - - /** - * Callback for processing package metadata passed in through constructor. - */ - ProcessPackage _callback; - - /** - * Progress reporting object. - */ - ProgressData _ticks; - }; - /////////////////////////////////////////////////////////////////////// - - OtherFileReader::Impl::Impl( - const Pathname & other_file, - const ProcessPackage & callback, - const ProgressData::ReceiverFnc & progress) - : - _callback(callback) - { - _ticks.sendTo(progress); - _ticks.name("other.xml.gz"); - - Reader reader(other_file); - MIL << "Reading " << other_file << endl; - reader.foreachNode(bind(&OtherFileReader::Impl::consumeNode, this, _1)); - } - - // -------------------------------------------------------------------------- - - /* - * xpath and multiplicity of processed nodes are included in the code - * for convenience: - * - * // xpath: (?|*|+) - * - * if multiplicity is ommited, then the node has multiplicity 'one'. - */ - - // -------------------------------------------------------------------------- - - bool OtherFileReader::Impl::consumeNode(Reader & reader_r) - { - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - // xpath: /otherdata - if (reader_r->name() == "otherdata") - { - unsigned total_packages; - zypp::str::strtonum(reader_r->getAttribute("packages").asString(), total_packages); - _ticks.range(total_packages); - _ticks.toMin(); - return true; - } - - // xpath: /otherdata/package (+) - if (reader_r->name() == "package") - { - _resolvable = new data::Resolvable; - _changelog.clear(); - - _resolvable->name = reader_r->getAttribute("name").asString(); - _resolvable->arch = Arch( reader_r->getAttribute("arch").asString() ); - - return true; - } - - // xpath: /otherdata/package/version - if (reader_r->name() == "version") - { - editionStringFromAttrs( reader_r, _resolvable->edition ); - return true; - } - - // xpath: /otherdata/package/changelog (*) - if (reader_r->name() == "changelog") - { - ChangelogEntry entry( - Date(reader_r->getAttribute("date").asString()), - reader_r->getAttribute("author").asString(), - reader_r.nodeText().asString()); - _changelog.push_back(entry); - return true; - } - } - - else if (reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT) - { - // xpath: /otherdata/package - if (reader_r->name() == "package") - { - if (_callback && !_changelog.empty()) - _callback(handoutResolvable(), _changelog); - - if (!_ticks.incr()) - ZYPP_THROW(AbortRequestException()); - - return true; - } - - // xpath: /otherdata - if (reader_r->name() == "otherdata") - { - _ticks.toMax(); - return true; - } - } - - return true; - } - - // -------------------------------------------------------------------------- - - data::Resolvable_Ptr OtherFileReader::Impl::handoutResolvable() - { - data::Resolvable_Ptr ret; - ret.swap(_resolvable); - return ret; - } - - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : OtherFileReader - // - /////////////////////////////////////////////////////////////////// - - OtherFileReader::OtherFileReader( - const Pathname & other_file, - const ProcessPackage & callback, - const ProgressData::ReceiverFnc & progress) - : - _pimpl(new Impl(other_file, callback, progress)) - {} - - OtherFileReader::~OtherFileReader() - {} - - - } // ns yum - } // ns parser -} // ns zypp - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/OtherFileReader.h b/zypp/parser/yum/OtherFileReader.h deleted file mode 100644 index 8ef59c3..0000000 --- a/zypp/parser/yum/OtherFileReader.h +++ /dev/null @@ -1,86 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/OtherFileReader.h - * Interface of other.xml.gz file reader. - */ -#ifndef OTHERFILEREADER_H_ -#define OTHERFILEREADER_H_ - -#include "zypp/base/PtrTypes.h" -#include "zypp/base/NonCopyable.h" -#include "zypp/data/ResolvableData.h" -#include "zypp/base/Function.h" -#include "zypp/ProgressData.h" - -#include "zypp/parser/yum/FileReaderBase.h" - - -namespace zypp -{ - namespace parser - { - namespace yum - { - - - /** - * Reads through a other.xml file and collects additional package data - * (changelogs). - * - * After a package is read, a \ref data::Resolvable - * and \ref Changelog is prepared and \ref _callback - * is called with these two objects passed in. - * - * The \ref _callback is provided on construction. - * - * \code - * OtherFileReader reader(other_file, - * bind(&SomeClass::callbackfunc, &SomeClassInstance, _1, _2)); - * \endcode - */ - class OtherFileReader : FileReaderBase - { - public: - /** - * Callback definition. - */ - typedef function ProcessPackage; - - /** - * CTOR. Creates also \ref xml::Reader and starts reading. - * - * \param other_file the other.xml.gz file you want to read - * \param callback function to process \ref _resolvable data. - * \param progress progress reporting object - * - * \see OtherFileReader::ProcessPackage - */ - OtherFileReader( - const Pathname & other_file, - const ProcessPackage & callback, - const ProgressData::ReceiverFnc & progress = ProgressData::ReceiverFnc()); - - /** - * DTOR - */ - ~OtherFileReader(); - - private: - class Impl; - RW_pointer > _pimpl; - }; - - - } // ns zypp - } // ns parser -} // ns yum - -#endif /*OTHERFILEREADER_H_*/ - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/PatchFileReader.cc b/zypp/parser/yum/PatchFileReader.cc deleted file mode 100644 index 1dbc301..0000000 --- a/zypp/parser/yum/PatchFileReader.cc +++ /dev/null @@ -1,876 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/PatchFileReader.cc - * Implementation of patch XML file reader. - */ -#include "zypp/base/Logger.h" -#include "zypp/parser/xml/Reader.h" -#include "zypp/data/ResolvableData.h" - -#include "zypp/parser/yum/PatchFileReader.h" -#include "zypp/parser/yum/FileReaderBaseImpl.h" - -#include "zypp/ZConfig.h" - -#undef ZYPP_BASE_LOGGER_LOGGROUP -#define ZYPP_BASE_LOGGER_LOGGROUP "parser::yum" - -using namespace std; -using namespace zypp::xml; - -namespace zypp -{ - namespace parser - { - namespace yum - { - - - /////////////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PatchFileReader::Impl - // - class PatchFileReader::Impl : public BaseImpl - { - public: - /** CTOR */ - Impl(const Pathname & patch_file, - const ProcessPatch & callback); - - /** - * Callback provided to the XML reader. - * - * \param the xml reader object reading the file - * \return true to tell the reader to continue, false to tell it to stop - * - * \see PrimaryFileReader::consumeNode(xml::Reader) - */ - bool consumeNode(xml::Reader & reader_r); - - /** - * Process atoms node and all of its children. - * - * \param reader_r XML file reader reading the patch file. - * \return true if current node has been completely processed, false - * if additional processing is required outside of the method. - */ - bool consumeAtomsNode(xml::Reader & reader_r); - - /** - * Process package node and all of its children. This method - * uses \ref FileReaderBase::consumePackageNode(xml::Reader,data::Package_Ptr) - * method and adds pkgfiles element processing. - * - * \param reader_r XML file reader reading the patch file. - * \return true if current node has been completely processed, false - * if additional processing is required outside of the method. - */ - bool consumePackageNode(xml::Reader & reader_r); - - /** - * Process patchrpm node and all of its children. - * - * \param reader_r XML file reader reading the patch file. - * \return true if current node has been completely processed, false - * if additional processing is required outside of the method. - */ - bool consumePatchrpmNode(xml::Reader & reader_r); - - /** - * Process deltarpm node and all of its children. - * - * \param reader_r XML file reader reading the patch file. - * \return true if current node has been completely processed, false - * if additional processing is required outside of the method. - */ - bool consumeDeltarpmNode(xml::Reader & reader_r); - - /** - * Process message node and all of its children. - * - * \param reader_r XML file reader reading the patch file. - * \return true if current node has been completely processed, false - * if additional processing is required outside of the method. - */ - bool consumeMessageNode(xml::Reader & reader_r); - - /** - * Process script node and all of its children. - * - * \param reader_r XML file reader reading the patch file. - * \return true if current node has been completely processed, false - * if additional processing is required outside of the method. - */ - bool consumeScriptNode(xml::Reader & reader_r); - - /** - * Creates a new \ref data::Patch_Ptr, swaps its contents with \ref _patch - * and returns it. Used to hand-out the data object to its consumer - * (a \ref ProcessPatch function) after it has been read. - */ - data::Patch_Ptr handoutPatch(); - - /** - * Creates a new \ref data::ResObject_Ptr, swap its contents with - * \ref _tmpResObj and inserts it into _patch.atoms. Used - * after an atom is read. - */ - void saveAtomInPatch(); - - /** - * - */ - void copyPackageAtomFromTmpObj(data::Atom_Ptr & atom_ptr) const; - - private: - /** - * Callback for processing patch metadata passed in through constructor. - */ - ProcessPatch _callback; - - /** - * Pointer to the \ref zypp::data::Patch object for storing the patch - * metada (except of depencencies). - */ - data::Patch_Ptr _patch; - - /** - * Pointer to an atom currently being read. This can be either - * a \ref data::PackageAtom, \ref data::Message, or \ref data::Script. - * - * \see data::Patch::atoms - */ - data::ResObject_Ptr _tmpResObj; - - /** Data object for storing patchrpm data */ - data::PatchRpm_Ptr _patchrpm; - - /** Data object for storing deltarpm data */ - data::DeltaRpm_Ptr _deltarpm; - }; - /////////////////////////////////////////////////////////////////////////// - - PatchFileReader::Impl::Impl( - const Pathname & patch_file, - const ProcessPatch & callback) - : - _callback(callback) - { - Reader reader(patch_file); - MIL << "Reading " << patch_file << endl; - reader.foreachNode(bind(&PatchFileReader::Impl::consumeNode, this, _1)); - } - - // -------------------------------------------------------------------------- - - /* - * xpath and multiplicity of processed nodes are included in the code - * for convenience: - * - * // xpath: (?|*|+) - * - * if multiplicity is ommited, then the node has multiplicity 'one'. - */ - - // -------------------------------------------------------------------------- - - bool PatchFileReader::Impl::consumeNode(Reader & reader_r) - { - if (isBeingProcessed(tag_atoms) && consumeAtomsNode(reader_r)) - return true; - - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - // xpath: /patch - if (reader_r->name() == "patch") - { - tag(tag_patch); - - _patch = new data::Patch; - - _patch->id = reader_r->getAttribute("patchid").asString(); - _patch->timestamp = Date(reader_r->getAttribute("timestamp").asString()); - // reader_r->getAttribute("timestamp").asString() ? - return true; - } - - // xpath: /patch/yum:name - if (reader_r->name() == "yum:name") - { - _patch->name = reader_r.nodeText().asString(); - return true; - } - - // xpath: /patch/summary - if (reader_r->name() == "summary") - { - Locale locale(reader_r->getAttribute("lang").asString()); - _patch->summary.setText(reader_r.nodeText().asString(), locale); - return true; - } - - // xpath: /patch/description - if (reader_r->name() == "description") - { - Locale locale(reader_r->getAttribute("lang").asString()); - _patch->description.setText(reader_r.nodeText().asString(), locale); - return true; - } - - // xpath: /patch/licence-to-confirm (*) - if (reader_r->name() == "license-to-confirm") - { - // TODO support several licenses in several languages? - Locale locale(reader_r->getAttribute("lang").asString()); - _patch->licenseToConfirm.setText(reader_r.nodeText().asString(), locale); - return true; - } - - // xpath: /patch/yum:version - if (reader_r->name() == "yum:version") - { - editionStringFromAttrs( reader_r, _patch->edition ); - return true; - } - - // dependency block nodes - if (consumeDependency(reader_r, _patch->deps)) - return true; - - // xpath: /patch/category - if (reader_r->name() == "category") - { - _patch->category = reader_r.nodeText().asString(); - return true; - } - - // xpath: /patch/reboot-needed (?) - if (reader_r->name() == "reboot-needed") - { - _patch->rebootNeeded = true; - return true; - } - - // xpath: /patch/package-manager (?) - if (reader_r->name() == "package-manager") - { - _patch->affectsPkgManager = true; - return true; - } - - // xpath: /patch/update-script (?) - if (reader_r->name() == "update-script") - { - _patch->updateScript = reader_r.nodeText().asString(); - } - - // xpath: /patch/atoms (+) - if (reader_r->name() == "atoms") - { - // remember that we are processing atoms from now on - // xpath: /patch/atoms/* - tag(tag_atoms); - // no need to further process this node so not calling - // consumeAtomsNode() here - return true; - } - } - else if (reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT) - { - // xpath: /patch - if (reader_r->name() == "patch") - { - if (!_patch->atoms.size()) - WAR << "No atoms found for patch " << _patch->name << " " << _patch->edition << endl; - - if (_callback) - _callback(handoutPatch()); - - toParentTag(); // just for the case of reuse somewhere/sometimes - - return true; - } - } - - return true; - } - - // -------------------------------------------------------------------------- - - bool PatchFileReader::Impl::consumeAtomsNode(Reader & reader_r) - { - /* - Implementation note: - - !!! do _NOT_ filter out incompatible architectures of atoms !!! - - See https://bugzilla.novell.com/show_bug.cgi?id=300569#c11 - */ - - // consumePackageNode - if (isBeingProcessed(tag_package) && consumePackageNode(reader_r)) - return true; - // consumeMessageNode - else if (isBeingProcessed(tag_message) && consumeMessageNode(reader_r)) - return true; - // consumeScriptNode - else if (isBeingProcessed(tag_script) && consumeScriptNode(reader_r)) - return true; - - - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - // xpath: /patch/atoms/package - if (reader_r->name() == "package") - { - // remember that we are processing package from now on - // xpath: /patch/atoms/package/* - tag(tag_package); - // DBG << "Atom node, tagpath: " << tagPath() << endl; - _tmpResObj = new data::PackageAtom; - // process also the package node attributes - consumePackageNode(reader_r); - return true; - } - - // xpath: /patch/atoms/message - if (reader_r->name() == "message") - { - // remember that we are processing message from now on - // xpath: /patch/atoms/message/* - tag(tag_message); - // DBG << "Message node, tagpath: " << tagPath() << endl; - _tmpResObj = new data::Message; - return true; - } - - // xpath: /patch/atoms/script - if (reader_r->name() == "script") - { - // remember that we are processing script from now on - // xpath: /patch/atoms/script/* - tag(tag_script); - // DBG << "Script node, tagpath: " << tagPath() << endl; - _tmpResObj = new data::Script; - return true; - } - } - else if (reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT) - { - // xpath: /patch/atoms/package - if (reader_r->name() == "package") - { - // DBG << "Atom " << _tmpResObj->name << " " << _tmpResObj->edition << " successfully read." << endl; - - saveAtomInPatch(); - toParentTag(); // back to processing of previous tag (atoms) - return true; - } - - // xpath: /patch/atoms/message - if (reader_r->name() == "message") - { - // DBG << "Message " << _tmpResObj->name << " " << _tmpResObj->edition << " successfully read." << endl; - - saveAtomInPatch(); - toParentTag(); // back to processing of previous tag (atoms) - return true; - } - - // xpath: /patch/atoms/script - if (reader_r->name() == "script") - { - // DBG << "Script " << _tmpResObj->name << " " << _tmpResObj->edition << " successfully read." << endl; - - saveAtomInPatch(); - toParentTag(); // back to processing of previous tag (atoms) - return true; - } - - // xpath: /patch/atoms - if (reader_r->name() == "atoms") - { - toParentTag(); // back to processing of previous tag (patch) - return true; - } - } - - return true; - } - - // -------------------------------------------------------------------------- - - bool PatchFileReader::Impl::consumePackageNode(Reader & reader_r) - { - /* - Implementation note: - - !!! do _NOT_ filter out incompatible architectures of atoms !!! - - See https://bugzilla.novell.com/show_bug.cgi?id=300569#c11 - */ - - if (isBeingProcessed(tag_patchrpm) && consumePatchrpmNode(reader_r)) - return true; - else if (isBeingProcessed(tag_deltarpm) && consumeDeltarpmNode(reader_r)) - return true; - - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - // xpath: /patch/atoms/package/pkgfiles - if (reader_r->name() == "pkgfiles") - { - tag(tag_pkgfiles); - return true; - } - - // xpath: /patch/atoms/package/pkgfiles/patchrpm (*) - if (reader_r->name() == "patchrpm") - { - tag(tag_patchrpm); - _patchrpm = new data::PatchRpm; - return true; - } - - // xpath: /patch/atoms/package/pkgfiles/deltarpm (*) - if (reader_r->name() == "deltarpm") - { - tag(tag_deltarpm); - _deltarpm = new data::DeltaRpm; - return true; - } - - // xpath: /patch/atoms/package/license-to-confirm (*) - if (reader_r->name() == "license-to-confirm") - { - DBG << "got license-to-confirm, lang: " << reader_r->getAttribute("lang").asString(); - - // no way to determine which translation is associated - // with another, all previous will be overwritten with - // the last one - // TODO introduce an identifier in YUM data - // TODO make this rely on tag order as a temporary solution? - - _tmpResObj->licenseToConfirm.setText( - reader_r.nodeText().asString(), - Locale(reader_r->getAttribute("lang").asString())); - - return true; - } - } - - else if (reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT) - { - // xpath: /patch/atoms/package/pkgfiles - if (reader_r->name() == "pkgfiles") - { - toParentTag(); - return true; - } - - // xpath: /patch/atoms/package/pkgfiles/patchrpm (*) - if (reader_r->name() == "patchrpm") - { - data::PatchRpm_Ptr tmp; - tmp.swap(_patchrpm); - data::PackageAtom_Ptr patom_ptr = zypp::dynamic_pointer_cast(_tmpResObj); - if (patom_ptr && Arch(patom_ptr->arch).compatibleWith( ZConfig::instance().systemArchitecture() )) - { - // Patch and delta rpms are standalone objects. - // We must store the target packages NVRA. - // We don't store incompatible archs. - tmp->name = patom_ptr->name; - tmp->edition = Edition(patom_ptr->edition); - tmp->arch = Arch(patom_ptr->arch); - patom_ptr->patchRpms.insert(tmp); - } - toParentTag(); - return true; - } - - // xpath: /patch/atoms/package/pkgfiles/deltarpm (*) - if (reader_r->name() == "deltarpm") - { - data::DeltaRpm_Ptr tmp; - tmp.swap(_deltarpm); - data::PackageAtom_Ptr patom_ptr = zypp::dynamic_pointer_cast(_tmpResObj); - if (patom_ptr && Arch(patom_ptr->arch).compatibleWith( ZConfig::instance().systemArchitecture() )) - { - // Patch and delta rpms are standalone objects. - // We must store the target packages NVRA. - // We don't store incompatible archs. - tmp->name = patom_ptr->name; - tmp->edition = Edition(patom_ptr->edition); - tmp->arch = Arch(patom_ptr->arch); - patom_ptr->deltaRpms.insert(tmp); - } - toParentTag(); - return true; - } - } - - // FileReaderBase::consumePackageNode() call here, otherwise the pkgfiles - // would not be read. - data::Packagebase_Ptr package_ptr = zypp::dynamic_pointer_cast(_tmpResObj); - if (package_ptr) - { - // xpath: /patch/atoms/package/* (except pkgfiles/* and license-to-confirm) (*) - if (isBeingProcessed(tag_package)) - return FileReaderBase::BaseImpl::consumePackageNode(reader_r, package_ptr); - } - else - { - ZYPP_THROW(Exception("Error in parser code. Package atom object not found.")); - } - - return true; - } - - // -------------------------------------------------------------------------- - - bool PatchFileReader::Impl::consumePatchrpmNode(Reader & reader_r) - { - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - // xpath: /patch/atoms/package/patchrpm/location - if (reader_r->name() == "location") - { - _patchrpm->location.setLocation(reader_r->getAttribute("href").asString(), 1); - // ignoring attribute 'base' - return true; - } - - // xpath: /patch/atoms/package/patchrpm/checksum - if (reader_r->name() == "checksum") - { - _patchrpm->location.setChecksum(CheckSum( - reader_r->getAttribute("type").asString(), - reader_r.nodeText().asString())); - return true; - } - - // xpath: /patch/atoms/package/patchrpm/time - if (reader_r->name() == "time") - { - _patchrpm->buildTime = - Date(reader_r->getAttribute("build").asString()); - - _patchrpm->fileTime = - Date(reader_r->getAttribute("file").asString()); - - return true; - } - - // xpath: /patch/atoms/package/patchrpm/size - if (reader_r->name() == "size") - { - // size of the rpm file - _patchrpm->location.setDownloadSize(str::strtonum( - reader_r->getAttribute("package").asString())); - - // size of ?? - _patchrpm->archiveSize = str::strtonum( - reader_r->getAttribute("archive").asString()); - - return true; - } - - // xpath: /patch/atoms/package/patchrpm/base-version (+) - if (reader_r->name() == "base-version") - { - data::BaseVersion_Ptr base_ptr = new data::BaseVersion; - - // size of the rpm file - base_ptr->edition = Edition(reader_r->getAttribute("ver").asString(), - reader_r->getAttribute("rel").asString(), - reader_r->getAttribute("epoch").asString()); - - _patchrpm->baseVersions.insert(base_ptr); - return true; - } - } - - else if (reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT) - { - // xpath: /patch/atoms/package/pkgfiles/patchrpm - if (reader_r->name() == "patchrpm") - { - return false; - } - } - - return true; - } - - // -------------------------------------------------------------------------- - - bool PatchFileReader::Impl::consumeDeltarpmNode(Reader & reader_r) - { - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - // xpath: /patch/atoms/package/deltarpm/location - if (reader_r->name() == "location") - { - _deltarpm->location.setLocation(reader_r->getAttribute("href").asString(), 1); - // ignoring attribute 'base' - return true; - } - - // xpath: /patch/atoms/package/deltarpm/checksum - if (reader_r->name() == "checksum") - { - _deltarpm->location.setChecksum(CheckSum( - reader_r->getAttribute("type").asString(), - reader_r.nodeText().asString())); - return true; - } - - // xpath: /patch/atoms/package/deltarpm/time - if (reader_r->name() == "time") - { - _deltarpm->buildTime = - Date(reader_r->getAttribute("build").asString()); - - _deltarpm->fileTime = - Date(reader_r->getAttribute("file").asString()); - - return true; - } - - // xpath: /patch/atoms/package/deltarpm/size - if (reader_r->name() == "size") - { - // size of the rpm file - _deltarpm->location.setDownloadSize(str::strtonum( - reader_r->getAttribute("package").asString())); - - // size of ?? - _deltarpm->archiveSize = str::strtonum( - reader_r->getAttribute("archive").asString()); - - return true; - } - - // xpath: /patch/atoms/package/deltarpm/base-version - if (reader_r->name() == "base-version") - { - // size of the rpm file - _deltarpm->baseVersion.edition = Edition(reader_r->getAttribute("ver").asString(), - reader_r->getAttribute("rel").asString(), - reader_r->getAttribute("epoch").asString()); - // checksum - _deltarpm->baseVersion.checkSum = - CheckSum("md5", reader_r->getAttribute("md5sum").asString()); - - // build time - _deltarpm->baseVersion.buildTime = - Date(reader_r->getAttribute("buildtime").asString()); - - // sequence info - _deltarpm->baseVersion.sequenceInfo = - reader_r->getAttribute("sequence_info").asString(); - - return true; - } - } - - else if (reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT) - { - // xpath: /patch/atoms/package/pkgfiles/deltarpm - if (reader_r->name() == "deltarpm") - { - return false; - } - } - - return true; - } - - // -------------------------------------------------------------------------- - - bool PatchFileReader::Impl::consumeMessageNode(Reader & reader_r) - { - if (consumeDependency(reader_r, _tmpResObj->deps)) - return true; - - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - // xpath: /patch/atoms/message/yum:name - if (reader_r->name() == "yum:name") - { - _tmpResObj->name = reader_r.nodeText().asString(); - return true; - } - - // xpath: /patch/atoms/message/yum:name - if (reader_r->name() == "yum:version") - { - editionStringFromAttrs( reader_r, _tmpResObj->edition ); - return true; - } - - // xpath: /patch/atoms/message//text - if (reader_r->name() == "text") - { - data::Message_Ptr message = dynamic_pointer_cast(_tmpResObj); - if (message) - message->text.setText( - reader_r.nodeText().asString(), - Locale(reader_r->getAttribute("lang").asString())); - return true; - } - } - - else if (reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT) - { - // xpath: /patch/atoms/message - if (reader_r->name() == "message") - { - return false; - } - } - - return true; - } - - // -------------------------------------------------------------------------- - - bool PatchFileReader::Impl::consumeScriptNode(Reader & reader_r) - { - if (consumeDependency(reader_r, _tmpResObj->deps)) - return true; - - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - data::Script_Ptr script = dynamic_pointer_cast(_tmpResObj); - if (!script) - { - WAR << "data::Script object expected, but not found" << endl; - return true; - } - - // xpath: /patch/atoms/script/yum:name - if (reader_r->name() == "yum:name") - { - _tmpResObj->name = reader_r.nodeText().asString(); - return true; - } - - // xpath: /patch/atoms/script/yum:version - if (reader_r->name() == "yum:version") - { - editionStringFromAttrs( reader_r, _tmpResObj->edition ); - return true; - } - - // xpath: /patch/atoms/script/do - if (reader_r->name() == "do") - { - script->doScript = reader_r.nodeText().asString(); - return true; - } - - // xpath: /patch/atoms/script/undo - if (reader_r->name() == "undo") - { - script->undoScript = reader_r.nodeText().asString(); - return true; - } - - // xpath: /patch/atoms/script/do-location - if (reader_r->name() == "do-location") - { - // xsd:anyURI do script file path base (not used) - // ignoring reader_r->getAttribute("xml:base").asString(); - - // xsd:anyURI do script file path - script->doScriptLocation.setLocation(reader_r->getAttribute("href").asString(), 1); - return true; - } - - // xpath: /patch/atoms/script/do-checksum - if (reader_r->name() == "do-checksum") - { - script->doScriptLocation.setChecksum(CheckSum( - reader_r->getAttribute("type").asString(), - reader_r.nodeText().asString())); - return true; - } - - // xpath: /patch/atoms/script/undo-location - if (reader_r->name() == "undo-location") - { - // xsd:anyURI undo script file path base (not used) - // ignoring reader_r->getAttribute("xml:base").asString(); - - // xsd:anyURI undo script file path - script->undoScriptLocation.setLocation(reader_r->getAttribute("href").asString(), 1); - return true; - } - - // xpath: /patch/atoms/script/undo-checksum - if (reader_r->name() == "undo-checksum") - { - script->undoScriptLocation.setChecksum(CheckSum( - reader_r->getAttribute("type").asString(), - reader_r.nodeText().asString())); - return true; - } - } - - else if (reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT) - { - // xpath: /patch/atoms/script - if (reader_r->name() == "script") - { - return false; - } - } - - return true; - } - - // -------------------------------------------------------------------------- - - data::Patch_Ptr PatchFileReader::Impl::handoutPatch() - { - data::Patch_Ptr ret; - ret.swap(_patch); - return ret; - } - - // -------------------------------------------------------------------------- - - void PatchFileReader::Impl::saveAtomInPatch() - { - data::ResObject_Ptr tmp; - tmp.swap(_tmpResObj); - _patch->atoms.insert(tmp); - } - - - /////////////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PatchFileReader::Impl - // - /////////////////////////////////////////////////////////////////////////// - - PatchFileReader::PatchFileReader(const Pathname & patch_file, ProcessPatch callback) - : _pimpl(new PatchFileReader::Impl(patch_file, callback)) - {} - - PatchFileReader::~PatchFileReader() - {} - - - } // ns yum - } // ns parser -} // ns zypp - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/PatchFileReader.h b/zypp/parser/yum/PatchFileReader.h deleted file mode 100644 index 15fa17f..0000000 --- a/zypp/parser/yum/PatchFileReader.h +++ /dev/null @@ -1,74 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/PatchFileReader.h - * Interface definition of patch XML file reader. - */ -#ifndef PATCHFILEREADER_H_ -#define PATCHFILEREADER_H_ - -#include "zypp/base/Function.h" -#include "zypp/parser/yum/FileReaderBase.h" - -namespace zypp -{ - - namespace data - { - class Patch; - DEFINE_PTR_TYPE(Patch); - } // ns data - - - namespace parser - { - namespace yum - { - - - /** - * Reader of patch.xml files conforming to schema definition located - * at zypp/parser/yum/schema/patch.rnc. - * - * \see zypp::data::Patch - * \see zypp::parser::xml::Reader - */ - class PatchFileReader : FileReaderBase - { - public: - - /** - * Consumer callback definition. Function which will process the read - * data must be of this type. - */ - typedef function ProcessPatch; - - /** - * CTOR. Creates also \ref xml::Reader and starts reading. - * - * \param patch_file patch.xml file to read. - * \param callback Function which will process read data. - */ - PatchFileReader(const Pathname & patch_file, ProcessPatch callback); - - /** - * DTOR. - */ - ~PatchFileReader(); - - private: - class Impl; - RW_pointer > _pimpl; - }; - - - } // ns yum - } // ns parser -} // ns zypp - -#endif /*PATCHFILEREADER_H_*/ diff --git a/zypp/parser/yum/PatternFileReader.cc b/zypp/parser/yum/PatternFileReader.cc deleted file mode 100644 index 16bce14..0000000 --- a/zypp/parser/yum/PatternFileReader.cc +++ /dev/null @@ -1,218 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/PatternFileReader.cc - * Implementation of patterns.xml file reader. - */ -#include "zypp/base/Logger.h" -#include "zypp/data/ResolvableData.h" -#include "zypp/parser/xml/Reader.h" - -#include "zypp/parser/yum/FileReaderBaseImpl.h" -#include "zypp/parser/yum/PatternFileReader.h" - -#undef ZYPP_BASE_LOGGER_LOGGROUP -#define ZYPP_BASE_LOGGER_LOGGROUP "parser::yum" - -using namespace std; -using namespace zypp::xml; - -namespace zypp -{ - namespace parser - { - namespace yum - { - - - /////////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PatternFileReader::Impl - // - class PatternFileReader::Impl : public BaseImpl - { - public: - Impl(const Pathname & pattern_file, - const ProcessPattern & callback); - - /** - * Callback provided to the XML reader. - * - * \param the xml reader object reading the file - * \return true to tell the reader to continue, false to tell it to stop - * - * \see PrimaryFileReader::consumeNode(xml::Reader) - */ - bool consumeNode(xml::Reader & reader_r); - - /** - * Creates a new \ref data::Pattern_Ptr, swaps its contents with \ref _pattern - * and returns it. Used to hand-out the data object to its consumer - * (a \ref ProcessPattern function) after it has been read. - */ - data::Pattern_Ptr handoutPattern(); - - private: - /** - * Callback for processing pattern metadata. - */ - ProcessPattern _callback; - - /** - * Pointer to the \ref zypp::data::Pattern object for storing the pattern - * metada. - */ - data::Pattern_Ptr _pattern; - }; - ////////////////////////////////////////////////////////////////////////// - - PatternFileReader::Impl::Impl( - const Pathname & pattern_file, - const ProcessPattern & callback) - : - _callback(callback) - { - Reader reader(pattern_file); - MIL << "Reading " << pattern_file << endl; - reader.foreachNode(bind(&PatternFileReader::Impl::consumeNode, this, _1)); - } - - // -------------------------------------------------------------------------- - - /* - * xpath and multiplicity of processed nodes are included in the code - * for convenience: - * - * // xpath: (?|*|+) - * - * if multiplicity is ommited, then the node has multiplicity 'one'. - */ - - // -------------------------------------------------------------------------- - - bool PatternFileReader::Impl::consumeNode(Reader & reader_r) - { - // dependency block nodes - if (consumeDependency(reader_r, _pattern->deps)) - return true; - - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - // xpath: /patterns/pattern - if (reader_r->name() == "pattern") - { - tag(tag_pattern); // just for the case of reuse somewhere/sometimes - _pattern = new data::Pattern; - return true; - } - - // xpath: /patterns/pattern/name - if (reader_r->name() == "name") - { - _pattern->name = reader_r.nodeText().asString(); - return true; - } - - // xpath: /patterns/pattern/summary (+) - if (reader_r->name() == "summary") - { - Locale locale(reader_r->getAttribute("lang").asString()); - _pattern->summary.setText(reader_r.nodeText().asString(), locale); - return true; - } - - // xpath: /patterns/pattern/description (+) - if (reader_r->name() == "description") - { - Locale locale(reader_r->getAttribute("lang").asString()); - _pattern->description.setText(reader_r.nodeText().asString(), locale); - return true; - } - - // xpath: /patterns/pattern/default (?) - if (reader_r->name() == "default") - { - _pattern->isDefault = true; - } - - // xpath: /patterns/pattern/uservisible (?) - if (reader_r->name() == "uservisible") - { - _pattern->userVisible = true; - return true; - } - - // xpath: /patterns/pattern/category - if (reader_r->name() == "category") - { - Locale locale(reader_r->getAttribute("lang").asString()); - _pattern->category.setText(reader_r.nodeText().asString(), locale); - return true; - } - - // xpath: /patterns/pattern/icon (?) - if (reader_r->name() == "icon") - { - _pattern->icon = reader_r.nodeText().asString(); - return true; - } - - // xpath: /patterns/pattern/script (?) - if (reader_r->name() == "script") - { - _pattern->script = reader_r.nodeText().asString(); - return true; - } - } - - else if (reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT) - { - // xpath: /patterns/pattern - if (reader_r->name() == "pattern") - { - if (_callback) - _callback(handoutPattern()); - - toParentTag(); // just for the case of reuse somewhere/sometimes - - return true; - } - } - - return true; - } - - // -------------------------------------------------------------------------- - - data::Pattern_Ptr PatternFileReader::Impl::handoutPattern() - { - data::Pattern_Ptr ret; - ret.swap(_pattern); - return ret; - } - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PatternFileReader - // - /////////////////////////////////////////////////////////////////// - - PatternFileReader::PatternFileReader(const Pathname & pattern_file, ProcessPattern callback) - : _pimpl(new PatternFileReader::Impl(pattern_file, callback)) - {} - - - PatternFileReader::~PatternFileReader() - {} - - - } // ns yum - } // ns parser -} // ns zypp - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/PatternFileReader.h b/zypp/parser/yum/PatternFileReader.h deleted file mode 100644 index 33f1aae..0000000 --- a/zypp/parser/yum/PatternFileReader.h +++ /dev/null @@ -1,75 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/PatternFileReader.h - * Interface of patterns.xml file reader. - */ -#ifndef ZYPP_PARSER_YUM_PATTERNFILEREADER_H_ -#define ZYPP_PARSER_YUM_PATTERNFILEREADER_H_ - -#include "zypp/parser/yum/FileReaderBase.h" - -namespace zypp -{ - - namespace data - { - class Pattern; - DEFINE_PTR_TYPE(Pattern); - } // ns data - - - namespace parser - { - namespace yum - { - - - /** - * Reader of patterns.xml file conforming to schema definition located - * at zypp/parser/yum/schema/patterns.rnc. - * - * \see zypp::data::Pattern - * \see zypp::parser::xml::Reader - */ - class PatternFileReader : FileReaderBase - { - public: - - /** - * Consumer callback definition. Function which will process the read - * data must be of this type. - */ - typedef function ProcessPattern; - - /** - * CTOR. Creates also \ref xml::Reader and starts reading. - * - * \param pattern_file pattern.xml file to read. - * \param callback Function which will process read data. - */ - PatternFileReader(const Pathname & pattern_file, ProcessPattern callback); - - /** - * DTOR. - */ - ~PatternFileReader(); - - private: - class Impl; - RW_pointer > _pimpl; - }; - - - } // ns yum - } // ns parser -} // ns zypp - -#endif /*ZYPP_PARSER_YUM_PATTERNFILEREADER_H_*/ - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/PrimaryFileReader.cc b/zypp/parser/yum/PrimaryFileReader.cc deleted file mode 100644 index 0bed85a..0000000 --- a/zypp/parser/yum/PrimaryFileReader.cc +++ /dev/null @@ -1,206 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/PrimaryFileReader.cc - * Implementation of primary.xml.gz file reader. - */ -#include "zypp/base/Logger.h" -#include "zypp/ZConfig.h" - -#include "zypp/parser/xml/Reader.h" -#include "zypp/data/ResolvableData.h" -#include "zypp/base/UserRequestException.h" - -#include "zypp/parser/yum/FileReaderBaseImpl.h" -#include "zypp/parser/yum/PrimaryFileReader.h" - -#undef ZYPP_BASE_LOGGER_LOGGROUP -#define ZYPP_BASE_LOGGER_LOGGROUP "parser::yum" - -using namespace std; -using namespace zypp::xml; - -namespace zypp -{ - namespace parser - { - namespace yum - { - - - /////////////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PrimaryFileReader::Impl - // - class PrimaryFileReader::Impl : public BaseImpl - { - public: - /** CTOR */ - Impl(const Pathname & primary_file, - const ProcessPackage & callback, - const ProgressData::ReceiverFnc & progress); - - /** - * Callback provided to the XML reader. - * - * This is the main parsing method which gets envoked by the \ref xml::Reader - * to process each node, one at a time. It is responsible for parsing the - * node and calling all other consume* methods. - * - * \param the xml reader object reading the file - * \return true to tell the reader to continue, false to tell it to stop - * \throws AbortRequestException if user request for aborting the parsing - * has been received through progress reporting callback. - * - * \note Semantics of this method's return value also differs from other - * consume* methods. While this method's return value tells the the - * xml reader to continue or stop, return value of the rest tells - * their callers if further - */ - bool consumeNode(xml::Reader & reader_r); - - private: - /** - * Creates a new \ref data::Package_Ptr, swaps its contents with \ref - * _package and returns it. Used to hand-out the data object to its consumer - * (a \ref ProcessPackage function) after it has been read. - */ - data::Packagebase_Ptr handoutPackage(); - - private: - /** - * Callback for processing package metadata passed in through constructor. - */ - ProcessPackage _callback; - - /** - * \ref zypp::data::Packagebase object for storing the package metada. - * This can be either a data::Package or data::SrcPackage - */ - data::Packagebase_Ptr _package; - - /** - * Progress reporting object. - */ - ProgressData _ticks; - - /** - * system architecture, to filter out incompatible packages - */ - Arch _sysarch; - }; - /////////////////////////////////////////////////////////////////////////// - - - PrimaryFileReader::Impl::Impl( - const Pathname & primary_file, - const ProcessPackage & callback, - const ProgressData::ReceiverFnc & progress) - : - _callback(callback) - , _sysarch( ZConfig::instance().systemArchitecture() ) - { - _ticks.sendTo(progress); - - Reader reader(primary_file); - MIL << "Reading " << primary_file << endl; - reader.foreachNode(bind( &PrimaryFileReader::Impl::consumeNode, this, _1 )); - } - - // -------------------------------------------------------------------------- - - bool PrimaryFileReader::Impl::consumeNode(Reader & reader_r) - { -// DBG << "**node: " << reader_r->name() << " (" << reader_r->nodeType() << ")" << endl; - if (isBeingProcessed(tag_package) && consumePackageNode(reader_r, _package)) - return true; - - - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - // xpath: /metadata - if (reader_r->name() == "metadata") - { - unsigned total_packages; - zypp::str::strtonum(reader_r->getAttribute("packages").asString(), total_packages); - _ticks.range(total_packages); - _ticks.toMin(); - return true; - } - - // xpath: /metadata/package (+) - if (reader_r->name() == "package") - { - tag(tag_package); - // DBG << "got " << reader_r->getAttribute("type") << " package" << endl; - _package = new data::Package; - - return consumePackageNode(reader_r, _package); - } - } - - else if ( reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT ) - { - // xpath: /metadata/package (+) - if (reader_r->name() == "package") - { - if (_package && _callback - && Arch(_package->arch).compatibleWith( _sysarch )) - { - _callback(handoutPackage()); - } - if (!_ticks.incr()) - ZYPP_THROW(AbortRequestException()); - - toParentTag(); - return true; - } - - // xpath: /metdata - if (reader_r->name() == "metadata") - { - _ticks.toMax(); - return true; - } - } - - return true; - } - - // -------------------------------------------------------------------------- - - data::Packagebase_Ptr PrimaryFileReader::Impl::handoutPackage() - { - data::Packagebase_Ptr ret; - ret.swap(_package); - return ret; - } - - /////////////////////////////////////////////////////////////////////////// - // - // CLASS NAME : PrimaryFileReader - // - /////////////////////////////////////////////////////////////////////////// - - PrimaryFileReader::PrimaryFileReader( - const Pathname & primary_file, - const ProcessPackage & callback, - const ProgressData::ReceiverFnc & progress) - : _pimpl(new PrimaryFileReader::Impl(primary_file, callback, progress)) - {} - - - PrimaryFileReader::~PrimaryFileReader() - {} - - - } // ns yum - } // ns parser -} //ns zypp - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/PrimaryFileReader.h b/zypp/parser/yum/PrimaryFileReader.h deleted file mode 100644 index a5eb821..0000000 --- a/zypp/parser/yum/PrimaryFileReader.h +++ /dev/null @@ -1,89 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/PrimaryFileReader.h - * Interface definition of primary.xml.gz file reader. - */ -#ifndef ZYPP_PARSER_YUM_PRIMARYFILEPARSER_H -#define ZYPP_PARSER_YUM_PRIMARYFILEPARSER_H - -#include "zypp/ProgressData.h" - -#include "zypp/parser/yum/FileReaderBase.h" - -namespace zypp -{ - - namespace data - { - class Packagebase; - DEFINE_PTR_TYPE(Packagebase); - } // ns data - - - namespace parser - { - namespace yum - { - - /** - * Reads through a primary.xml.gz file and collects package data including - * dependencies. - * - * After a package is read, a \ref zypp::data::Package object is prepared - * and \ref _callback is called with this object passed in. - * - * The \ref _callback is provided on construction. - * - * \code - * PrimaryFileReader reader(repomd_file, - * bind(&SomeClass::callbackfunc, &object, _1)); - * \endcode - */ - class PrimaryFileReader : public FileReaderBase - { - public: - /** - * Callback definition. - */ - typedef function ProcessPackage; - - /** - * CTOR. Creates also \ref xml::Reader and starts reading. - * - * \param primary_file the primary.xml.gz file you want to read - * \param callback function to process \ref _package data. - * \param progress progress reporting function - * \throws AbortRequestException if user request for aborting the parsing - * has been received through progress reporting callback. - * - * \see PrimaryFileReader::ProcessPackage - */ - PrimaryFileReader( - const Pathname & primary_file, - const ProcessPackage & callback, - const ProgressData::ReceiverFnc & progress = ProgressData::ReceiverFnc()); - - /** - * DTOR. - */ - ~PrimaryFileReader(); - - private: - class Impl; - RW_pointer > _pimpl; - }; - - - } // ns zypp - } // ns parser -} // ns yum - -#endif /* ZYPP_PARSER_YUM_PRIMARYFILEPARSER_H */ - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/ProductFileReader.cc b/zypp/parser/yum/ProductFileReader.cc deleted file mode 100644 index eb5b7f0..0000000 --- a/zypp/parser/yum/ProductFileReader.cc +++ /dev/null @@ -1,288 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ - -#include "zypp/base/Logger.h" -#include "zypp/parser/xml/Reader.h" -#include "zypp/data/ResolvableData.h" -#include "zypp/ZConfig.h" - -#include "zypp/parser/yum/FileReaderBaseImpl.h" -#include "zypp/parser/yum/ProductFileReader.h" - -#undef ZYPP_BASE_LOGGER_LOGGROUP -#define ZYPP_BASE_LOGGER_LOGGROUP "parser::yum" - -using namespace std; -using namespace zypp::xml; - -namespace zypp -{ - namespace parser - { - namespace yum - { - - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : ProductFileReader::Impl - // - class ProductFileReader::Impl : public BaseImpl - { - public: - Impl(const Pathname & products_file, - const ProcessProduct & callback); - - /** - * Callback provided to the XML reader. - * - * \param the xml reader object reading the file - * \return true to tell the reader to continue, false to tell it to stop - * - * \see PrimaryFileReader::consumeNode(xml::Reader) - */ - bool consumeNode(xml::Reader & reader_r); - - /** - * Creates a new \ref data::Product_Ptr, swaps its contents with \ref _product - * and returns it. Used to hand-out the data object to its consumer - * (a \ref ProcessProduct function) after it has been read. - */ - data::Product_Ptr handoutProduct(); - - private: - /** - * Callback for processing product metadata. - */ - ProcessProduct _callback; - - /** - * Pointer to the \ref zypp::data::Product object for storing the product - * metada. - */ - data::Product_Ptr _product; - }; - /////////////////////////////////////////////////////////////////// - - ProductFileReader::Impl::Impl( - const Pathname & products_file, - const ProcessProduct & callback) - : - _callback(callback) - { - Reader reader(products_file); - MIL << "Reading " << products_file << endl; - reader.foreachNode(bind(&ProductFileReader::Impl::consumeNode, this, _1)); - } - - // -------------------------------------------------------------------------- - - /* - * xpath and multiplicity of processed nodes are included in the code - * for convenience: - * - * // xpath: (?|*|+) - * - * if multiplicity is ommited, then the node has multiplicity 'one'. - */ - - // -------------------------------------------------------------------------- - - bool ProductFileReader::Impl::consumeNode(Reader & reader_r) - { - // dependency block nodes - if (_product && consumeDependency(reader_r, _product->deps)) - return true; - - if (reader_r->nodeType() == XML_READER_TYPE_ELEMENT) - { - // xpath: /products/product - if (reader_r->name() == "product") - { - tag(tag_product); // just for the case of reuse somewhere/sometimes - _product = new data::Product; - return true; - } - - // xpath: /products/product/name - if (reader_r->name() == "name") - { - _product->name = reader_r.nodeText().asString(); - // product type (base, add-on) - _product->type = reader_r->getAttribute("type").asString(); - return true; - } - - // xpath: /products/product/vendor - if (reader_r->name() == "vendor") - { - _product->vendor = reader_r.nodeText().asString(); - } - - // xpath: /products/product/version - if (reader_r->name() == "version") - { - editionStringFromAttrs( reader_r, _product->edition ); - } - - // xpath: /products/product/displayname (+) - if (reader_r->name() == "displayname") - { - Locale locale(reader_r->getAttribute("lang").asString()); - _product->longName.setText(reader_r.nodeText().asString(), locale); - return true; - } - - // xpath: /products/product/shortname (*) - if (reader_r->name() == "shortname") - { - Locale locale(reader_r->getAttribute("lang").asString()); - _product->shortName.setText(reader_r.nodeText().asString(), locale); - return true; - } - - // xpath: /products/product/description (+) - if (reader_r->name() == "description") - { - Locale locale(reader_r->getAttribute("lang").asString()); - _product->description.setText(reader_r.nodeText().asString(), locale); - return true; - } - - // xpath: /products/product/distribution-name (+) - if (reader_r->name() == "distribution-name") - { - _product->distributionName = reader_r.nodeText().asString(); - return true; - } - - // xpath: /products/product/distribution-edition (+) - if (reader_r->name() == "distribution-edition") - { - _product->distributionEdition = Edition( reader_r.nodeText().asString() ); - return true; - } - - // xpath: /products/product/release-notes-url (+) - if (reader_r->name() == "release-notes-url") - { - string value = reader_r.nodeText().asString(); - - for( std::string::size_type pos = value.find("%a"); - pos != std::string::npos; - pos = value.find("%a") ) - { - value.replace( pos, 2, ZConfig::instance().systemArchitecture().asString() ); - } - try - { - _product->releasenotesUrl = value; - } - catch( const Exception & excpt_r ) - { - WAR << "Malformed url ignored: '" << value << "' " << excpt_r.asString() << endl; - } - return true; - } - - // xpath: /products/product/update-url (*) - if (reader_r->name() == "update-url") - { - string value = reader_r.nodeText().asString(); - - try - { - _product->updateUrls.push_back(Url(value)); - } - catch( const Exception & excpt_r ) - { - WAR << "Malformed url ignored: '" << value << "' " << excpt_r.asString() << endl; - } - return true; - } - - // xpath: /products/product/extra-url (*) - if (reader_r->name() == "extra-url") - { - string value = reader_r.nodeText().asString(); - - try - { - _product->extraUrls.push_back(Url(value)); - } - catch( const Exception & excpt_r ) - { - WAR << "Malformed url ignored: '" << value << "' " << excpt_r.asString() << endl; - } - return true; - } - - // xpath: /products/product/optional-url (*) - if (reader_r->name() == "optional-url") - { - string value = reader_r.nodeText().asString(); - - try - { - _product->optionalUrls.push_back(Url(value)); - } - catch( const Exception & excpt_r ) - { - WAR << "Malformed url ignored: '" << value << "' " << excpt_r.asString() << endl; - } - return true; - } - } - - else if (reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT) - { - // xpath: /products/product - if (reader_r->name() == "product") - { - if (_callback) - _callback(handoutProduct()); - - toParentTag(); // just for the case of reuse somewhere/sometimes - - return true; - } - } - - return true; - } - - // -------------------------------------------------------------------------- - - data::Product_Ptr ProductFileReader::Impl::handoutProduct() - { - data::Product_Ptr ret; - ret.swap(_product); - return ret; - } - - /////////////////////////////////////////////////////////////////// - // - // CLASS NAME : ProductFileReader - // - /////////////////////////////////////////////////////////////////// - - ProductFileReader::ProductFileReader(const Pathname & product_file, ProcessProduct callback) - : _pimpl(new ProductFileReader::Impl(product_file, callback)) - {} - - - ProductFileReader::~ProductFileReader() - {} - - - } // ns yum - } // ns parser -} // ns zypp - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/ProductFileReader.h b/zypp/parser/yum/ProductFileReader.h deleted file mode 100644 index f542871..0000000 --- a/zypp/parser/yum/ProductFileReader.h +++ /dev/null @@ -1,71 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ - -#ifndef ZYPP_PARSER_YUM_PRODUCTFILEREADER_H_ -#define ZYPP_PARSER_YUM_PRODUCTFILEREADER_H_ - -#include "zypp/parser/yum/FileReaderBase.h" - -namespace zypp -{ - - namespace data - { - class Product; - DEFINE_PTR_TYPE(Product); - } // ns data - - - namespace parser - { - namespace yum - { - - - /** - * Reader of products.xml file conforming to RNC definition located - * at zypp/parser/yum/schema/products.rnc. - * - * \see zypp::data::Product - * \see zypp::parser::xml::Reader - */ - class ProductFileReader : FileReaderBase - { - public: - - /** - * Consumer callback definition. Function which will process the read - * data must be of this type. - */ - typedef function ProcessProduct; - - /** - * CTOR. Creates also \ref xml::Reader and starts reading. - * - * \param products_file products.xml file to read. - * \param callback Function which will process read data. - */ - ProductFileReader(const Pathname & products_file, ProcessProduct callback); - - /** - * DTOR. - */ - ~ProductFileReader(); - - private: - class Impl; - RW_pointer > _pimpl; - }; - - - } // ns yum - } // ns parser -} // ns zypp - -#endif /*ZYPP_PARSER_YUM_PRODUCTFILEREADER_H_*/ diff --git a/zypp/parser/yum/RepoParser.cc b/zypp/parser/yum/RepoParser.cc deleted file mode 100644 index 275dbad..0000000 --- a/zypp/parser/yum/RepoParser.cc +++ /dev/null @@ -1,486 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/RepoParser.cc - * YUM repository metadata parser implementation. - */ -#include - -#include "zypp/ZConfig.h" -#include "zypp/base/Logger.h" -#include "zypp/PathInfo.h" -#include "zypp/base/UserRequestException.h" -#include "zypp/repo/yum/ResourceType.h" -#include "zypp/data/ResolvableData.h" - -#include "zypp/parser/yum/RepomdFileReader.h" -#include "zypp/parser/yum/PrimaryFileReader.h" -#include "zypp/parser/yum/PatchesFileReader.h" -#include "zypp/parser/yum/PatchFileReader.h" -#include "zypp/parser/yum/PatternFileReader.h" -#include "zypp/parser/yum/ProductFileReader.h" -#include "zypp/parser/yum/OtherFileReader.h" -#include "zypp/parser/yum/FilelistsFileReader.h" - -#include "zypp/parser/yum/RepoParser.h" - - -#undef ZYPP_BASE_LOGGER_LOGGROUP -#define ZYPP_BASE_LOGGER_LOGGROUP "parser::yum" - -using namespace std; -using zypp::repo::yum::ResourceType; - -namespace zypp -{ - namespace parser - { - namespace yum - { - - /** - * Structure encapsulating YUM parser data type and filename. - */ - struct RepoParserJob - { - RepoParserJob(const Pathname & filename, const ResourceType & type) - : _filename(filename), _type(type) {} - - const Pathname & filename() const { return _filename; } - const ResourceType & type() const { return _type; } - - private: - /** File to be processed */ - Pathname _filename; - /** Type of YUM file */ - ResourceType _type; - }; - - - /////////////////////////////////////////////////////////////////////////// - // - // CLASS NAME : RepoParser::Impl - // - class RepoParser::Impl : private base::NonCopyable - { - public: - /** CTOR */ - Impl( - const std::string &repo_id, - data::ResolvableDataConsumer & consumer, - const RepoParserOpts & options = RepoParserOpts(), - const ProgressData::ReceiverFnc & progress = ProgressData::ReceiverFnc() - ); - - /** Implementation of \ref RepoParser::parse(Pathname) */ - void parse(const Pathname &cache_dir); - - /** - * Iterates through parser \ref _jobs and executes them using - * *FileReader classes. - * - * \param path location of the raw repository cache - */ - void doJobs(const Pathname & path); - - /** - * Callback for processing data returned from \ref RepomdFileReader. - * Adds returned files to parser job list (\ref _jobs). - * - * \param loc location of discovered data file - * \param dtype YUM data type - */ - bool repomd_CB(const OnMediaLocation & loc, const ResourceType & dtype); - - /** - * Callback for processing packages returned from \ref PrimaryFileReader. - * Uses \ref _consumer to process read package data. - * - * \param package_r pointer to package data - */ - bool primary_CB(const data::Packagebase_Ptr & package_r); - - /** - * Callback for processing data returned from \ref PatchesFileReader. - * Adds discovered patch*.xml files to parser \ref _jobs. - * - * \param loc location of discovered patch file - * \param patch_id (not used so far) - */ - bool patches_CB(const OnMediaLocation &loc, const std::string & patch_id); - - /** - * Callback for processing data returned from \ref PatchFileReader. - * Uses \ref _consumer to process read patch data. - * - * \param patch pointer to patch data - */ - bool patch_CB(const data::Patch_Ptr & patch); - - /** - * Callback for processing data returned from \ref OtherFileReader. - * Uses \ref _consumer to process read changelog data. - * - * \param res_ptr resolvable to which the changelog belongs - * \param changelog read changelog - */ - bool other_CB(const data::Resolvable_Ptr & res_ptr, const Changelog & changelog); - - /** - * Callback for processing data returned from \ref FilelistsFileReader. - * Uses \ref _consumer to process read filelist. - * - * \param res_ptr resolvable to which the filelist belongs. - * \param filenames the read filelist - */ - bool filelist_CB(const data::Resolvable_Ptr & res_ptr, const data::Filenames & filenames); - - /** - * Callback for processing data returned from \ref PatternFileReader. - * Uses \ref _consumer to process read pattern. - * - * \param pattern_ptr pointer to pattern data object - */ - bool pattern_CB(const data::Pattern_Ptr & pattern_ptr); - - /** - * Callback for processing data returned from \ref ProductFileReader. - * Uses \ref _consumer to process read product. - * - * \param product_ptr pointer to product data object - */ - bool product_CB(const data::Product_Ptr & product_ptr); - - private: - /** ID of the repository record in the DB (repositories.id) */ - string _repository_id; - - /** Object for processing the read data */ - data::ResolvableDataConsumer & _consumer; - - /** List of parser jobs read from repomd.xml and patches.xml files. */ - std::list _jobs; - - /** Progress reporting object for overall YUM parser progress. */ - ProgressData _ticks; - - /** */ - const RepoParserOpts & _options; - }; - /////////////////////////////////////////////////////////////////////////// - - - RepoParser::Impl::Impl( - const std::string & repository_id, - data::ResolvableDataConsumer & consumer, - const RepoParserOpts & options, - const ProgressData::ReceiverFnc & progress) - : - _repository_id(repository_id), _consumer(consumer), _options(options) - { - _ticks.name("YUM RepoParser"); - _ticks.sendTo(progress); - } - - // ------------------------------------------------------------------------- - - bool RepoParser::Impl::repomd_CB( - const OnMediaLocation & loc, const ResourceType & dtype) - { - DBG << "Adding " << dtype - << " (" << loc.filename() << ") to RepoParser jobs " << endl; - - _jobs.push_back(RepoParserJob(loc.filename(), dtype)); - - return true; - } - - // ------------------------------------------------------------------------- - - bool RepoParser::Impl::primary_CB(const data::Packagebase_Ptr & package_r) - { - data::Package_Ptr pkg = dynamic_pointer_cast(package_r); - if (pkg) - _consumer.consumePackage(pkg); - else - _consumer.consumeSourcePackage(dynamic_pointer_cast(package_r)); - -/* MIL << "got package " - << package.name << package.edition << " " - << package.arch - << endl; - MIL << "checksum: " << package.checksum << endl; - MIL << "summary: " << package.summary << endl;*/ - - return true; - } - - // ------------------------------------------------------------------------- - - bool RepoParser::Impl::patches_CB( - const OnMediaLocation & loc, const string & patch_id) - { - DBG << "Adding patch " << loc.filename() << " to RepoParser jobs " << endl; - - _jobs.push_back(RepoParserJob(loc.filename(), ResourceType::PATCH)); - - return true; - } - - // ------------------------------------------------------------------------- - - bool RepoParser::Impl::patch_CB(const data::Patch_Ptr & patch) - { - _consumer.consumePatch( patch ); - - MIL << "got patch " - << patch->name << patch->edition << " " - << patch->arch - << endl; - - return true; - } - - // ------------------------------------------------------------------------- - - bool RepoParser::Impl::other_CB( - const data::Resolvable_Ptr & res_ptr, const Changelog & changelog) - { - //_consumer.consumeChangelog(_repository_id, res_ptr, changelog); -/* - DBG << "got changelog for " - << res_ptr->name << res_ptr->edition << " " - << res_ptr->arch - << endl; - - DBG << "last entry: " << changelog.front() << endl; -*/ - return true; - } - - // ------------------------------------------------------------------------- - - bool RepoParser::Impl::filelist_CB( - const data::Resolvable_Ptr & res_ptr, const data::Filenames & filenames) - { - //_consumer.consumeFilelist(_repository_id, res_ptr, filenames); -/* - DBG << "got filelist for " - << res_ptr->name << res_ptr->edition << " " - << res_ptr->arch - << endl; - - DBG << "last entry: " << filenames.front() << endl; -*/ - return true; - } - - // -------------------------------------------------------------------------- - - bool RepoParser::Impl::pattern_CB(const data::Pattern_Ptr & product_ptr) - { - _consumer.consumePattern(product_ptr); - - MIL << "got pattern " << product_ptr->name << endl; - - return true; - } - - // -------------------------------------------------------------------------- - - bool RepoParser::Impl::product_CB(const data::Product_Ptr & product_ptr) - { - _consumer.consumeProduct(product_ptr); - - MIL << "got product " << product_ptr->name - << "-" << product_ptr->edition << endl; - - return true; - } - - // -------------------------------------------------------------------------- - - void RepoParser::Impl::parse(const Pathname &cache_dir) - { - zypp::parser::yum::RepomdFileReader( - cache_dir + "/repodata/repomd.xml", - bind(&RepoParser::Impl::repomd_CB, this, _1, _2)); - - long long totalsize = 0; - for(list::const_iterator it = _jobs.begin(); - it != _jobs.end(); ++it) - { - RepoParserJob job = *it; - totalsize += PathInfo(cache_dir + job.filename()).size(); - } - - MIL << "Total files size: " << totalsize << endl; - _ticks.range(totalsize); - _ticks.toMin(); - - doJobs(cache_dir); - - _ticks.toMax(); - } - - // -------------------------------------------------------------------------- - - void RepoParser::Impl::doJobs(const Pathname &cache_dir) - { - for(list::const_iterator it = _jobs.begin(); - it != _jobs.end(); ++it) - { - RepoParserJob job = *it; - // FIXME better way to do progress here? - int jobsize = PathInfo(cache_dir + job.filename()).size(); - - MIL << "going to parse " << job.type() << " file " - << job.filename() << " (" << jobsize << " bytes)" << endl; - - switch(job.type().toEnum()) - { - // parse primary.xml.gz - case ResourceType::PRIMARY_e: - { - CombinedProgressData jobrcv( _ticks, jobsize ); - PrimaryFileReader( - cache_dir + job.filename(), - bind(&RepoParser::Impl::primary_CB, this, _1), - jobrcv); - break; - } - - case ResourceType::PATCHES_e: - { - PatchesFileReader( - cache_dir + job.filename(), - bind(&RepoParser::Impl::patches_CB, this, _1, _2)); - // reset progress reporter max value (number of jobs changed if - // there are patches to parse) - _ticks.range( _ticks.max() + jobsize ); - // increase in the total bytes of the file - if (!_ticks.incr( jobsize )) - ZYPP_THROW(AbortRequestException()); - break; - } - - case ResourceType::PATCH_e: - { - PatchFileReader( - cache_dir + job.filename(), - bind(&RepoParser::Impl::patch_CB, this, _1)); - // increase in the total bytes of the file - if (!_ticks.incr( jobsize )) - ZYPP_THROW(AbortRequestException()); - break; - } - - case ResourceType::OTHER_e: - { - if (!_options.skipOther) - { - CombinedProgressData jobrcv( _ticks, jobsize ); - OtherFileReader( - cache_dir + job.filename(), - bind(&RepoParser::Impl::other_CB, this, _1, _2), - jobrcv); - } - else - { - MIL << "skipping other.xml.gz" << endl; - // increase in the total bytes of the file - if (!_ticks.incr( jobsize )) - ZYPP_THROW(AbortRequestException()); - } - break; - } - - case ResourceType::FILELISTS_e: - { - if (!_options.skipFilelists) - { - CombinedProgressData jobrcv( _ticks, jobsize ); - FilelistsFileReader( - cache_dir + job.filename(), - bind(&RepoParser::Impl::filelist_CB, this, _1, _2), - jobrcv); - } - else - { - MIL << "skipping filelists.xml.gz"; - // increase in the total bytes of the file - if (!_ticks.incr( jobsize )) - ZYPP_THROW(AbortRequestException()); - } - break; - } - - case ResourceType::PATTERNS_e: - { - PatternFileReader( - cache_dir + job.filename(), - bind(&RepoParser::Impl::pattern_CB, this, _1)); - // increase in the total bytes of the file - if (!_ticks.incr( jobsize )) - ZYPP_THROW(AbortRequestException()); - break; - } - - case ResourceType::PRODUCT_e: - { - ProductFileReader( - cache_dir + job.filename(), - bind(&RepoParser::Impl::product_CB, this, _1)); - // increase in the total bytes of the file - if (!_ticks.incr( jobsize )) - ZYPP_THROW(AbortRequestException()); - break; - } - - default: - { - WAR << "Don't know how to read " - << job.type() << " file " - << job.filename() << endl; - } - } - } - } - - - /////////////////////////////////////////////////////////////////// - // - // CLASS : RepoParser - // - /////////////////////////////////////////////////////////////////// - - RepoParser::RepoParser( - const std::string & repository_id, - data::ResolvableDataConsumer & consumer, - const RepoParserOpts & options, - const ProgressData::ReceiverFnc & progress) - : - _pimpl(new Impl(repository_id, consumer, options, progress)) - {} - - - RepoParser::~RepoParser() - {} - - - void RepoParser::parse(const Pathname & cache_dir) - { - _pimpl->parse(cache_dir); - } - - - } // ns yum - } // ns parser -} // ns zypp - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/RepoParser.h b/zypp/parser/yum/RepoParser.h deleted file mode 100644 index d8b5285..0000000 --- a/zypp/parser/yum/RepoParser.h +++ /dev/null @@ -1,105 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp2/parser/yum/RepoParser.h - * YUM repository metadata parser public API definition. - */ -#ifndef ZYPP_PARSER_YUM_REPOPARSER_H_ -#define ZYPP_PARSER_YUM_REPOPARSER_H_ - -#include "zypp/base/PtrTypes.h" -#include "zypp/base/NonCopyable.h" - -#include "zypp/data/RecordId.h" -#include "zypp/data/ResolvableDataConsumer.h" - -#include "zypp/ProgressData.h" -#include "zypp/parser/yum/RepoParserOpts.h" - - -namespace zypp -{ - namespace parser - { - namespace yum - { - - - /** - * Main YUM repository metada parser. - * - * Reads repomd.xml file to get the list of files to parse and enques them - * as RepoParserJobs. Then uses *FileReader classes to parse the files and - * a \ref ResolvableDataConsumer to process the read data (typically to - * store them in a database). - * - * - * \code - * - * cache::CacheStore store(dbdir); - * data::RecordId repository_id = store.lookupOrAppendRepository(sourceurl, "/"); - * - * RepoParser parser(repository_id, store, &progress_function); - * parser.parse(source_cache_dir); - * - * store.commit(); - * - * \code - * - * \todo make the parser configurable, e.g. exclude(FILELISTS_e)? - * - * \see RepomdFileReader, PrimaryFileReader, OtherFileReader - * \see FilelistsFileReader, PatchesFileReader, PatchFileReader - * \see PatternFileReader, ProductFileReader - */ - class RepoParser : private base::NonCopyable - { - public: - - /** - * CTOR - * - * \param repository_id repository identifier - * \param consumer consumer of parsed data - * \param progress progress reporting function - */ - RepoParser( - const std::string &repo_id, - data::ResolvableDataConsumer & consumer, - const RepoParserOpts & options = RepoParserOpts(), - const ProgressData::ReceiverFnc & progress = ProgressData::ReceiverFnc() - ); - - /** - * DTOR - */ - ~RepoParser(); - - /** - * Starts parsing of repository cache dir located at \a path. - * - * This method uses RepomdFileReader to get a list of parser jobs - * and calls \ref Impl::doJobs(Pathname) to do them. - * - * \param path location of the raw repository cache - */ - void parse(const Pathname & path); - - private: - class Impl; - RW_pointer > _pimpl; - }; - - - } // ns yum - } // ns parser -} // ns zypp - -#endif /*ZYPP_PARSER_YUM_REPOPARSER_H_*/ - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/RepoParserOpts.h b/zypp/parser/yum/RepoParserOpts.h deleted file mode 100644 index 6d90098..0000000 --- a/zypp/parser/yum/RepoParserOpts.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef ZYPP_PARSER_YUM_REPOPARSEROPTS_H_ -#define ZYPP_PARSER_YUM_REPOPARSEROPTS_H_ - -#include "zypp/base/DefaultIntegral.h" - -namespace zypp -{ - namespace parser - { - namespace yum - { - - - /** YUM parser options */ - struct RepoParserOpts - { - /** Skip parsing of other.xml.gz */ - DefaultIntegral skipOther; - - /** Skip parsing of filelists.xml.gz */ - DefaultIntegral skipFilelists; - }; - - - } // ns yum - } // ns parser -} // ns zypp - -#endif /*ZYPP_PARSER_YUM_REPOPARSEROPTS_H_*/ - -// vim: set ts=2 sts=2 sw=2 et ai: diff --git a/zypp/parser/yum/schemanames.h b/zypp/parser/yum/schemanames.h deleted file mode 100644 index 54629c6..0000000 --- a/zypp/parser/yum/schemanames.h +++ /dev/null @@ -1,40 +0,0 @@ -/*---------------------------------------------------------------------\ -| ____ _ __ __ ___ | -| |__ / \ / / . \ . \ | -| / / \ V /| _/ _/ | -| / /__ | | | | | | | -| /_____||_| |_| |_| | -| | -\---------------------------------------------------------------------*/ -/** \file zypp/parser/yum/schemanames.h - * -*/ - - -#ifndef schemanames_h -#define schemanames_h - -namespace zypp -{ -namespace parser -{ -namespace yum -{ -/* FIXME: How do I do this properly? */ -#define SCHEMABASE "/usr/share/zypp/schema/yum/" -#define REPOMDSCHEMA (SCHEMABASE "repomd.rng") -#define PRIMARYSCHEMA (SCHEMABASE "suse-primary.rng") -#define GROUPSCHEMA (SCHEMABASE "groups.rng") -#define PATTERNSCHEMA (SCHEMABASE "patterns.rng") -#define FILELISTSCHEMA (SCHEMABASE "filelists.rng") -#define OTHERSCHEMA (SCHEMABASE "other.rng") -#define PATCHSCHEMA (SCHEMABASE "patch.rng") -#define PATCHESSCHEMA (SCHEMABASE "patches.rng") -#define PRODUCTSCHEMA (SCHEMABASE "product.rng") -#define REPOINDEXSCHEMA (SCHEMABASE "product.rng") -} // namespace yum -} // namespace parser -} // namespace zypp - - -#endif