Mailinglist Archive: zypp-devel (68 mails)

< Previous Next >
Re: [zypp-devel] Re: [zypp-commit] r5561 - in /trunk/libzypp: devel/devel.ma/ zypp/ zypp/parser/ zypp/parser/susetags/
  • From: Stanislav Visnovsky <visnov@xxxxxxx>
  • Date: Thu, 17 May 2007 11:58:38 +0200
  • Message-id: <200705171158.38316.visnov@xxxxxxx>
Sorry for the noise, I've noticed the other mail too late :(

Stano

Dňa Št 17. Máj 2007 11:56 Stanislav Visnovsky napísal:
> Dňa St 16. Máj 2007 21:47 mlandres@xxxxxxxxxxxxxxxx napísal:
> > Author: mlandres
> > Date: Wed May 16 21:47:19 2007
> > New Revision: 5561
> >
> > URL: http://svn.opensuse.org/viewcvs/zypp?rev=5561&view=rev
> > Log:
> > - Parser update
> > - added class ZConfig
>
> Did anyone review the added classes?
>
> Stano
>
> > Added:
> >     trunk/libzypp/zypp/ZConfig.cc
> >     trunk/libzypp/zypp/ZConfig.h
> >     trunk/libzypp/zypp/parser/susetags/ContentFileReader.cc
> >     trunk/libzypp/zypp/parser/susetags/ContentFileReader.h
> >     trunk/libzypp/zypp/parser/susetags/RepoIndex.cc
> >     trunk/libzypp/zypp/parser/susetags/RepoIndex.h
> > Modified:
> >     trunk/libzypp/devel/devel.ma/Parse.cc
> >     trunk/libzypp/zypp/CMakeLists.txt
> >     trunk/libzypp/zypp/parser/TagParser.cc
> >     trunk/libzypp/zypp/parser/TagParser.h
> >     trunk/libzypp/zypp/parser/susetags/PackagesFileReader.cc
> >     trunk/libzypp/zypp/parser/susetags/PackagesLangFileReader.cc
> >     trunk/libzypp/zypp/parser/susetags/PatternFileReader.cc
> >
> > Modified: trunk/libzypp/devel/devel.ma/Parse.cc
> > URL:
> > http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/devel/devel.ma/Parse.c
> >c? rev=5561&r1=5560&r2=5561&view=diff
> > =========================================================================
> >== === --- trunk/libzypp/devel/devel.ma/Parse.cc (original)
> > +++ trunk/libzypp/devel/devel.ma/Parse.cc Wed May 16 21:47:19 2007
> > @@ -26,6 +26,8 @@
> >  #include "zypp/parser/susetags/PackagesFileReader.h"
> >  #include "zypp/parser/susetags/PackagesLangFileReader.h"
> >  #include "zypp/parser/susetags/PatternFileReader.h"
> > +#include "zypp/parser/susetags/ContentFileReader.h"
> > +#include "zypp/parser/susetags/RepoIndex.h"
> >
> >  using namespace std;
> >  using namespace zypp;
> > @@ -122,7 +124,7 @@
> >  }
> >
> >  #include "zypp/ProgressData.h"
> > -
> > +#include "zypp2/cache/CacheStore.h"
> >  ///////////////////////////////////////////////////////////////////
> >  namespace zypp
> >  { /////////////////////////////////////////////////////////////////
> > @@ -133,14 +135,72 @@
> >     ///////////////////////////////////////////////////////////////////
> >      namespace susetags
> >      { /////////////////////////////////////////////////////////////////
> > -
> > -      bool exampleReceiver( ProgressData::value_type v )
> > +#if 0
> > +      class RepoParser
> >        {
> > -  WAR << "got ->" << v << "%" << endl;
> > -  return true;
> > -      }
> > +  public:
> > +    RepoParser( const Pathname & reporoot_r, data::RecordId catalogId_r,
> > const Pathname & dbdir_r ) +     : _reporoot( reporoot_r )
> > +    , _catalogId( catalogId_r )
> > +    , _store( store_r );
> > +    {
> > +      if ( 1 )
> > +      {
> > +        std::string file( "content" );
> > +        Measure x( file );
> > +
> > +        ContentFileReader tp;
> > +
> > +
> > +      }
> > +
> > +
> > +      if ( 1 )
> > +      {
> > +        std::string file("packages");
> > +        Measure x( file );
> > +
> > +        PackagesFileReader tp;
> > +        tp.setPkgConsumer   ( bind( &RepoParser::consumePkg, this, _1 )
> > ); +             tp.setSrcPkgConsumer( bind( &RepoParser::consumeSrcPkg , this,
> > _1 ) ); +        tp.parse(repodescr()/file );
> > +      }
> > +    }
> > +
> > +
> > +  public:
> > +    const Pathname & reporoot() const
> > +    { return _reporoot; }
> > +
> > +    Pathname repodescr() const
> > +    { return _reporoot/"suse/setup/descr"; }
> > +
> > +    Pathname repodata() const
> > +    { return _reporoot/"suse"; }
> > +
> > +  private:
> > +    void consumePkg( const data::Package_Ptr & pkg_r )
> > +    {
> > +            MIL << "[Pkg]" << pkg_r << endl;
> > +    }
> > +
> > +    void consumeSrcPkg( const data::SrcPackage_Ptr & pkg_r )
> > +    {
> > +            //DBG << "[Src]" << pkg_r << endl;
> > +    }
> > +
> > +    void consumePat( const data::Pattern_Ptr & pat_r )
> > +    {
> > +      MIL << "[Pat]" << pat_r << endl;
> > +    }
> > +  public:
> > +    Pathname          _reporoot;
> > +    data::RecordId    _catalogId;
> > +    cache::CacheStore _store;
> >
> > +      };
> >
> > +#endif
> >
> >        /////////////////////////////////////////////////////////////////
> >      } // namespace susetags
> > @@ -153,23 +213,17 @@
> >  ///////////////////////////////////////////////////////////////////
> >
> >  using namespace zypp::parser::susetags;
> > -
> >  #include "zypp2/cache/CacheStore.h"
> > -///////////////////////////////////////////////////////////////////
> > -namespace zypp
> > -{ /////////////////////////////////////////////////////////////////
> > -  namespace str
> > -  { /////////////////////////////////////////////////////////////////
> > -    template<typename _It>
> > -      inline _It strtonum( const std::string & str );
> > -    template<>
> > -    inline ByteCount strtonum<ByteCount>( const std::string & str )
> > -    { return strtonum<ByteCount::SizeType>( str ); }
> > -    /////////////////////////////////////////////////////////////////
> > -  } // namespace str
> > -  /////////////////////////////////////////////////////////////////
> > -} // namespace zypp
> > -///////////////////////////////////////////////////////////////////
> > +
> > +void consumeIndex( const parser::susetags::RepoIndex_Ptr & index_r )
> > +{
> > +  SEC << "[Index]" << index_r << endl;
> > +}
> > +
> > +void consumeProd( const data::Product_Ptr & prod_r )
> > +{
> > +  SEC << "[Prod]" << prod_r << endl;
> > +}
> >
> >  void consumePkg( const data::Package_Ptr & pkg_r )
> >  {
> > @@ -222,22 +276,32 @@
> >    //zypp::base::LogControl::instance().logfile( "log.restrict" );
> >    INT << "===[START]==========================================" << endl;
> >
> > +  Pathname p( "lmd/content" );
> > +
> > +  Measure x( p.basename() );
> > +  ContentFileReader tp;
> > +  tp.setProductConsumer( consumeProd );
> > +  tp.setRepoIndexConsumer( consumeIndex );
> > +  //tp.setSrcPkgConsumer( consumeSrcPkg );
> > +  tp.parse( p );
> > +
> > +
> >  #if 0
> >    //try
> >    {
> >      //Pathname dbdir(
> > "/Local/ma/zypp-TRUNK/BUILD/libzypp/devel/devel.ma/store" ); -   
> > Pathname dbdir( "./store" );
> > -    //filesystem::clean_dir( dbdir );
> > +
> > +
> > +    Pathname dbdir( "store" );
> > +    Pathname metadir( "lmd" );
> > +
> >      cache::CacheStore store( dbdir );
> > +    data::RecordId catalogId = store.lookupOrAppendCatalog(
> > Url("http://www.google.com";), "/" );
> >
> > -    data::Resolvable_Ptr a;
> > -    data::Script_Ptr aa;
> > +    RepoParser( metadir, catalogId, store );
> >
> > -    INT << a << endl;
> > -    INT << aa << endl;
> >    }
> >
> > -#if 0
> >      try
> >      {
> >        ZYpp::Ptr z = getZYpp();
> > @@ -261,7 +325,6 @@
> >    INT << "===[END]============================================" << endl
> > << endl; zypp::base::LogControl::instance().logNothing();
> >    return 0;
> > -#endif
> >
> >    Pathname proot( "lmd/suse/setup/descr" );
> >
> >
> > Modified: trunk/libzypp/zypp/CMakeLists.txt
> > URL:
> > http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/CMakeLists.txt?re
> >v= 5561&r1=5560&r2=5561&view=diff
> > =========================================================================
> >== === --- trunk/libzypp/zypp/CMakeLists.txt (original)
> > +++ trunk/libzypp/zypp/CMakeLists.txt Wed May 16 21:47:19 2007
> > @@ -11,6 +11,7 @@
> >  ADD_DEFINITIONS(-DLOCALEDIR=\\\"/usr/share/libzypp\\\"
> > -DTEXTDOMAIN=\\\"zypp\\\" )
> >
> >  SET( zypp_SRCS
> > +  ZConfig.cc
> >    LanguageCode.cc
> >    Arch.cc
> >    Atom.cc
> > @@ -87,7 +88,8 @@
> >    Fetcher.cc
> >  )
> >
> > -SET( zypp_HEADERS
> > +SET( zypp_HEADERSZ
> > +  ZConfig.h
> >    Arch.h
> >    Atom.h
> >    AutoDispose.h
> > @@ -448,12 +450,16 @@
> >  )
> >
> >  SET( zypp_parser_susetags_SRCS
> > +  parser/susetags/RepoIndex.cc
> > +  parser/susetags/ContentFileReader.cc
> >    parser/susetags/PackagesFileReader.cc
> >    parser/susetags/PackagesLangFileReader.cc
> >    parser/susetags/PatternFileReader.cc
> >  )
> >
> >  SET( zypp_parser_susetags_HEADERS
> > +  parser/susetags/RepoIndex.h
> > +  parser/susetags/ContentFileReader.h
> >    parser/susetags/FileReaderBase.h
> >    parser/susetags/FileReaderBaseImpl.h
> >    parser/susetags/PackagesFileReader.h
> >
> > Added: trunk/libzypp/zypp/ZConfig.cc
> > URL:
> > http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/ZConfig.cc?rev=55
> >61 &view=auto
> > =========================================================================
> >== === --- trunk/libzypp/zypp/ZConfig.cc (added)
> > +++ trunk/libzypp/zypp/ZConfig.cc Wed May 16 21:47:19 2007
> > @@ -0,0 +1,36 @@
> > +/*---------------------------------------------------------------------\
> > +|                          ____ _   __ __ ___                          |
> > +|                         |__  / \ / / . \ . \                         |
> > +|                           / / \ V /|  _/  _/                         |
> > +|                          / /__ | | | | | |                           |
> > +|                         /_____||_| |_| |_|                           |
> > +|                                                                      |
> > +\---------------------------------------------------------------------*/
> > +/** \file zypp/ZConfig.cc
> > + *
> > +*/
> > +#include <iostream>
> > +#include "zypp/base/Logger.h"
> > +
> > +#include "zypp/ZConfig.h"
> > +#include "zypp/ZYppFactory.h"
> > +
> > +using std::endl;
> > +
> > +///////////////////////////////////////////////////////////////////
> > +namespace zypp
> > +{ /////////////////////////////////////////////////////////////////
> > +
> > +  ///////////////////////////////////////////////////////////////////
> > +  //
> > +  //      METHOD NAME : ZConfig::systemArchitecture
> > +  //      METHOD TYPE : Arch
> > +  //
> > +  Arch ZConfig::systemArchitecture() const
> > +  {
> > +    return getZYpp()->architecture();
> > +  }
> > +
> > +  /////////////////////////////////////////////////////////////////
> > +} // namespace zypp
> > +///////////////////////////////////////////////////////////////////
> >
> > Added: trunk/libzypp/zypp/ZConfig.h
> > URL:
> > http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/ZConfig.h?rev=556
> >1& view=auto
> > =========================================================================
> >== === --- trunk/libzypp/zypp/ZConfig.h (added)
> > +++ trunk/libzypp/zypp/ZConfig.h Wed May 16 21:47:19 2007
> > @@ -0,0 +1,43 @@
> > +/*---------------------------------------------------------------------\
> > +|                          ____ _   __ __ ___                          |
> > +|                         |__  / \ / / . \ . \                         |
> > +|                           / / \ V /|  _/  _/                         |
> > +|                          / /__ | | | | | |                           |
> > +|                         /_____||_| |_| |_|                           |
> > +|                                                                      |
> > +\---------------------------------------------------------------------*/
> > +/** \file zypp/ZConfig.h
> > + *
> > +*/
> > +#ifndef ZYPP_ZCONFIG_H
> > +#define ZYPP_ZCONFIG_H
> > +
> > +#include <iosfwd>
> > +
> > +#include "zypp/Arch.h"
> > +#include "zypp/Pathname.h"
> > +
> > +///////////////////////////////////////////////////////////////////
> > +namespace zypp
> > +{ /////////////////////////////////////////////////////////////////
> > +
> > +  ///////////////////////////////////////////////////////////////////
> > +  //
> > +  //      CLASS NAME : ZConfig
> > +  //
> > +  /** Interim helper class to collect global options and settings.
> > +   * Use it to avoid hardcoded values and calls to getZypp() just
> > +   * to retrieve some value like architecture, languages or tmppath.
> > +  */
> > +  class ZConfig
> > +  {
> > +    public:
> > +      /** The system architecture. */
> > +      Arch systemArchitecture() const;
> > +  };
> > +  ///////////////////////////////////////////////////////////////////
> > +
> > +  /////////////////////////////////////////////////////////////////
> > +} // namespace zypp
> > +///////////////////////////////////////////////////////////////////
> > +#endif // ZYPP_ZCONFIG_H
> >
> > Modified: trunk/libzypp/zypp/parser/TagParser.cc
> > URL:
> > http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/parser/TagParser.
> >cc ?rev=5561&r1=5560&r2=5561&view=diff
> > =========================================================================
> >== === --- trunk/libzypp/zypp/parser/TagParser.cc (original)
> > +++ trunk/libzypp/zypp/parser/TagParser.cc Wed May 16 21:47:19 2007
> > @@ -126,7 +126,7 @@
> >      std::string TagParser::errPrefix( const MultiTagPtr & tag_r,
> >                                  const std::string & msg_r ) const
> >      {
> > -      return str::form( "%s:%u:+%s (@%lu) | %s",
> > +      return str::form( "%s:%u:+%s (@%u) | %s",
> >                    _inputname.c_str(),
> >                    tag_r->lineNo,
> >                    tag_r->asString().c_str(),
> > @@ -325,7 +325,6 @@
> >      break;
> >    }
> >
> > -
> >    if ( ! ticks.set( input_r.stream().tellg() ) )
> >      userRequestedAbort( line.lineNo() );
> >        }
> >
> > Modified: trunk/libzypp/zypp/parser/TagParser.h
> > URL:
> > http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/parser/TagParser.
> >h? rev=5561&r1=5560&r2=5561&view=diff
> > =========================================================================
> >== === --- trunk/libzypp/zypp/parser/TagParser.h (original)
> > +++ trunk/libzypp/zypp/parser/TagParser.h Wed May 16 21:47:19 2007
> > @@ -87,7 +87,7 @@
> >         * Invokes \ref consume for each tag. \ref consume might throw
> >         * other exceptions as well.
> >        */
> > -      virtual void parse( const InputStream & imput_r,
> > +      virtual void parse( const InputStream & input_r,
> >                      const ProgressData::ReceiverFnc & fnc_r =
> > ProgressData::ReceiverFnc() );
> >
> >      protected:
> >
> > Added: trunk/libzypp/zypp/parser/susetags/ContentFileReader.cc
> > URL:
> > http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/parser/susetags/C
> >on tentFileReader.cc?rev=5561&view=auto
> > =========================================================================
> >== === --- trunk/libzypp/zypp/parser/susetags/ContentFileReader.cc (added)
> > +++ trunk/libzypp/zypp/parser/susetags/ContentFileReader.cc Wed May 16
> > 21:47:19 2007 @@ -0,0 +1,476 @@
> > +/*---------------------------------------------------------------------\
> > +|                          ____ _   __ __ ___                          |
> > +|                         |__  / \ / / . \ . \                         |
> > +|                           / / \ V /|  _/  _/                         |
> > +|                          / /__ | | | | | |                           |
> > +|                         /_____||_| |_| |_|                           |
> > +|                                                                      |
> > +\---------------------------------------------------------------------*/
> > +/** \file zypp/parser/susetags/ContentFileReader.cc
> > + *
> > +*/
> > +#include <iostream>
> > +#include <sstream>
> > +
> > +#include "zypp/base/LogTools.h"
> > +#include "zypp/base/String.h"
> > +#include "zypp/base/IOStream.h"
> > +#include "zypp/base/UserRequestException.h"
> > +#include "zypp/parser/tagfile/ParseException.h"
> > +
> > +#include "zypp/parser/susetags/ContentFileReader.h"
> > +#include "zypp/parser/susetags/RepoIndex.h"
> > +#include "zypp/data/ResolvableData.h"
> > +#include "zypp/CapFactory.h"
> > +
> > +#include "zypp/ZConfig.h"
> > +
> > +using std::endl;
> > +
> > +///////////////////////////////////////////////////////////////////
> > +namespace zypp
> > +{ /////////////////////////////////////////////////////////////////
> > +  ///////////////////////////////////////////////////////////////////
> > +  namespace parser
> > +  { /////////////////////////////////////////////////////////////////
> > +    ///////////////////////////////////////////////////////////////////
> > +    namespace susetags
> > +    { /////////////////////////////////////////////////////////////////
> > +
> > +     
> > /////////////////////////////////////////////////////////////////// +    
> >  //
> > +      //  CLASS NAME : ContentFileReader::Impl
> > +      //
> > +      /** ContentFileReader implementation. */
> > +      struct ContentFileReader::Impl
> > +      {
> > +  public:
> > +    Impl( const ContentFileReader & parent_r )
> > +    : _parent( parent_r )
> > +    {}
> > +
> > +    data::Product & product()
> > +    {
> > +      if ( !_product )
> > +        _product = new data::Product;
> > +      return *_product;
> > +    }
> > +
> > +    RepoIndex & repoindex()
> > +    {
> > +      if ( !_repoindex )
> > +        _repoindex = new RepoIndex;
> > +      return *_repoindex;
> > +    }
> > +
> > +    bool hasProduct() const
> > +    { return _product; }
> > +
> > +    bool hasRepoIndex() const
> > +    { return _repoindex; }
> > +
> > +    data::Product_Ptr handoutProduct()
> > +    {
> > +      data::Product_Ptr ret;
> > +      ret.swap( _product );
> > +      _product = 0;
> > +      return ret;
> > +    }
> > +
> > +    RepoIndex_Ptr handoutRepoIndex()
> > +    {
> > +      RepoIndex_Ptr ret;
> > +      ret.swap( _repoindex );
> > +      _repoindex = 0;
> > +      return ret;
> > +    }
> > +
> > +  public:
> > +    bool isRel( const std::string & rel_r ) const
> > +    {
> > +      try
> > +      {
> > +        Rel( rel_r );
> > +        return true;
> > +      }
> > +      catch (...)
> > +      {}
> > +      return false;
> > +    }
> > +
> > +    bool setUrlList( std::list<Url> & list_r, const std::string & value )
> > const +      {
> > +      bool errors = false;
> > +      std::list<std::string> urls;
> > +      if ( str::split( value, std::back_inserter(urls) ) )
> > +      {
> > +        for ( std::list<std::string>::const_iterator it = urls.begin();
> > +              it != urls.end(); ++it )
> > +        {
> > +          try
> > +          {
> > +            list_r.push_back( *it );
> > +          }
> > +          catch( const Exception & excpt_r )
> > +          {
> > +            WAR << *it << ": " << excpt_r << endl;
> > +            errors = true;
> > +          }
> > +        }
> > +      }
> > +      return errors;
> > +    }
> > +
> > +    void setDependencies( data::DependencyList & deplist_r,const
> > std::string & value ) const +    {
> > +      std::list<std::string> words;
> > +      str::split( value, std::back_inserter( words ) );
> > +
> > +      for ( std::list<std::string>::const_iterator it = words.begin();
> > +            it != words.end(); ++it )
> > +      {
> > +        Resolvable::Kind kind( ResTraits<Package>::kind );
> > +
> > +        std::string name = *it;
> > +        std::string::size_type colon = name.find( ":" );
> > +        if ( colon != std::string::npos )
> > +        {
> > +          std::string skind( name, 0, colon );
> > +          name.erase( 0, colon+1 );
> > +
> > +          if ( skind == ResTraits<Pattern>::kind )
> > +            kind = ResTraits<Pattern>::kind;
> > +          else if ( skind == ResTraits<Patch>::kind )
> > +            kind = ResTraits<Patch>::kind;
> > +          else if ( skind == ResTraits<Product>::kind )
> > +            kind = ResTraits<Product>::kind;
> > +          else if ( skind == ResTraits<Selection>::kind )
> > +            kind = ResTraits<Selection>::kind;
> > +          else if ( skind != ResTraits<Package>::kind )
> > +          {
> > +            // colon but no kind ==> colon in a name
> > +            name = skind + ":" + name;
> > +          }
> > +        }
> > +
> > +        // check for Rel:
> > +        std::list<std::string>::const_iterator next = it;
> > +        if ( ++next != words.end()
> > +             && (*next).find_first_of( "<>=" ) != std::string::npos )
> > +        {
> > +          std::string op = *next;
> > +          if ( ++next != words.end() )
> > +          {
> > +            name += " ";
> > +            name += op;
> > +            name += " ";
> > +            name += *next;
> > +            it = next;
> > +          }
> > +        }
> > +
> > +        // Add the dependency
> > +        deplist_r.insert( capability::parse( kind, name ) );
> > +      }
> > +    }
> > +
> > +  public:
> > +    std::string _inputname;
> > +
> > +  private:
> > +    const ContentFileReader & _parent;
> > +    data::Product_Ptr  _product;
> > +    RepoIndex_Ptr      _repoindex;
> > +      };
> > +     
> > /////////////////////////////////////////////////////////////////// +
> > +     
> > /////////////////////////////////////////////////////////////////// +    
> >  //
> > +      //  CLASS NAME : ContentFileReader
> > +      //
> > +     
> > /////////////////////////////////////////////////////////////////// +
> > +     
> > /////////////////////////////////////////////////////////////////// +    
> >  //
> > +      //  METHOD NAME : ContentFileReader::ContentFileReader
> > +      //  METHOD TYPE : Ctor
> > +      //
> > +      ContentFileReader::ContentFileReader()
> > +      {}
> > +
> > +     
> > /////////////////////////////////////////////////////////////////// +    
> >  //
> > +      //  METHOD NAME : ContentFileReader::~ContentFileReader
> > +      //  METHOD TYPE : Dtor
> > +      //
> > +      ContentFileReader::~ContentFileReader()
> > +      {}
> > +
> > +     
> > /////////////////////////////////////////////////////////////////// +    
> >  //
> > +      //  METHOD NAME : ContentFileReader::beginParse
> > +      //  METHOD TYPE : void
> > +      //
> > +      void ContentFileReader::beginParse()
> > +      {
> > +  _pimpl.reset( new Impl(*this) );
> > +      }
> > +
> > +     
> > /////////////////////////////////////////////////////////////////// +    
> >  //
> > +      //  METHOD NAME : ContentFileReader::endParse
> > +      //  METHOD TYPE : void
> > +      //
> > +      void ContentFileReader::endParse()
> > +      {
> > +  // consume oldData
> > +  if ( _pimpl->hasProduct() )
> > +  {
> > +    if ( _productConsumer )
> > +      _productConsumer( _pimpl->handoutProduct() );
> > +  }
> > +  if ( _pimpl->hasRepoIndex() )
> > +  {
> > +    if ( _repoIndexConsumer )
> > +      _repoIndexConsumer( _pimpl->handoutRepoIndex() );
> > +  }
> > +
> > +  MIL << "[Content]" << endl;
> > +  _pimpl.reset();
> > +      }
> > +
> > +     
> > /////////////////////////////////////////////////////////////////// +    
> >  //
> > +      //  METHOD NAME : ContentFileReader::userRequestedAbort
> > +      //  METHOD TYPE : void
> > +      //
> > +      void ContentFileReader::userRequestedAbort( unsigned lineNo_r )
> > +      {
> > +  ZYPP_THROW( AbortRequestException( errPrefix( lineNo_r ) ) );
> > +      }
> > +
> > +     
> > /////////////////////////////////////////////////////////////////// +    
> >  //
> > +      //  METHOD NAME : ContentFileReader::errPrefix
> > +      //  METHOD TYPE : std::string
> > +      //
> > +      std::string ContentFileReader::errPrefix( unsigned lineNo_r,
> > +                                          const std::string & msg_r,
> > +                                          const std::string & line_r ) const
> > +      {
> > +  return str::form( "%s:%u:%s | %s",
> > +                    _pimpl->_inputname.c_str(),
> > +                    lineNo_r,
> > +                    line_r.c_str(),
> > +                    msg_r.c_str() );
> > +      }
> > +
> > +     
> > /////////////////////////////////////////////////////////////////// +    
> >  //
> > +      //  METHOD NAME : ContentFileReader::parse
> > +      //  METHOD TYPE : void
> > +      //
> > +      void ContentFileReader::parse( const InputStream & input_r,
> > +                               const ProgressData::ReceiverFnc & fnc_r )
> > +      {
> > +  MIL << "Start parsing " << input_r << endl;
> > +  beginParse();
> > +  _pimpl->_inputname = input_r.name();
> > +
> > +  ProgressData ticks( makeProgressData( input_r ) );
> > +  ticks.sendTo( fnc_r );
> > +  if ( ! ticks.toMin() )
> > +    userRequestedAbort( 0 );
> > +
> > +  iostr::EachLine line( input_r );
> > +  for( ; line; line.next() )
> > +  {
> > +    // strip 1st word from line to separate tag and value.
> > +    std::string value( *line );
> > +    std::string key( str::stripFirstWord( value, /*ltrim_first*/true ) );
> > +
> > +    if ( key.empty() || *key.c_str() == '#' ) // empty or comment line
> > +    {
> > +      continue;
> > +    }
> > +
> > +    // strip modifier if exists
> > +    std::string modifier;
> > +    std::string::size_type pos = key.rfind( '.' );
> > +    if ( pos != std::string::npos )
> > +    {
> > +      modifier = key.substr( pos+1 );
> > +      key.erase( pos );
> > +    }
> > +
> > +    if ( key == "PRODUCT" )
> > +    {
> > +      std::replace( value.begin(), value.end(), ' ', '_' );
> > +      _pimpl->product().name = value;
> > +    }
> > +    else if ( key == "VERSION" )
> > +    {
> > +      _pimpl->product().edition = value;
> > +    }
> > +    else if ( key == "DISTPRODUCT" )
> > +    {
> > +      _pimpl->product().distributionName = value;
> > +    }
> > +    else if ( key == "DISTVERSION" )
> > +    {
> > +      _pimpl->product().distributionEdition = value;
> > +    }
> > +    else if ( key == "VENDOR" )
> > +    {
> > +      _pimpl->product().vendor = value;
> > +    }
> > +    else if ( key == "SHORTLABEL" )
> > +    {
> > +      _pimpl->product().shortName.setText( value, Locale(modifier) );
> > +    }
> > +    else if ( key == "RELNOTESURL" )
> > +    {
> > +      for( std::string::size_type pos = value.find("%a");
> > +           pos != std::string::npos;
> > +           pos = value.find("%a") )
> > +      {
> > +        value.replace( pos, 2, ZConfig().systemArchitecture().asString()
> > ); +           }
> > +      try
> > +      {
> > +        _pimpl->product().releasenotesUrl = value;
> > +      }
> > +      catch( const Exception & excpt_r )
> > +      {
> > +        WAR << errPrefix( line.lineNo(), excpt_r.asString(), *line ) <<
> > endl; +        }
> > +    }
> > +    else if ( key == "UPDATEURLS" )
> > +    {
> > +      if ( _pimpl->setUrlList( _pimpl->product().updateUrls, value ) )
> > +      {
> > +        WAR << errPrefix( line.lineNo(), "Ignored malformed URL(s)",
> > *line ) << endl; +       }
> > +    }
> > +    else if ( key == "EXTRAURLS" )
> > +    {
> > +      if ( _pimpl->setUrlList( _pimpl->product().extraUrls, value ) )
> > +      {
> > +        WAR << errPrefix( line.lineNo(), "Ignored malformed URL(s)",
> > *line ) << endl; +       }
> > +    }
> > +    else if ( key == "OPTIONALURLS" )
> > +    {
> > +      if ( _pimpl->setUrlList( _pimpl->product().optionalUrls, value ) )
> > +      {
> > +        WAR << errPrefix( line.lineNo(), "Ignored malformed URL(s)",
> > *line ) << endl; +       }
> > +    }
> > +    else if ( key == "ARCH" )
> > +    {
> > +      /*unused ?*/;
> > +    }
> > +    else if ( key == "DEFAULTBASE" )
> > +    {
> > +      /*unused ?*/;
> > +    }
> > +    else if ( key == "PREREQUIRES" )
> > +    {
> > +      _pimpl->setDependencies( _pimpl->product().deps[Dep::PREREQUIRES],
> > value ); +   }
> > +    else if ( key == "REQUIRES" )
> > +    {
> > +      _pimpl->setDependencies( _pimpl->product().deps[Dep::REQUIRES],
> > value ); +   }
> > +    else if ( key == "PROVIDES" )
> > +    {
> > +      _pimpl->setDependencies( _pimpl->product().deps[Dep::PROVIDES],
> > value ); +   }
> > +    else if ( key == "CONFLICTS" )
> > +    {
> > +      _pimpl->setDependencies( _pimpl->product().deps[Dep::CONFLICTS],
> > value ); +   }
> > +    else if ( key == "OBSOLETES" )
> > +    {
> > +      _pimpl->setDependencies( _pimpl->product().deps[Dep::OBSOLETES],
> > value ); +   }
> > +    else if ( key == "RECOMMENDS" )
> > +    {
> > +      _pimpl->setDependencies( _pimpl->product().deps[Dep::RECOMMENDS],
> > value ); +   }
> > +    else if ( key == "SUGGESTS" )
> > +    {
> > +      _pimpl->setDependencies( _pimpl->product().deps[Dep::SUGGESTS],
> > value ); +   }
> > +    else if ( key == "SUPPLEMENTS" )
> > +    {
> > +      _pimpl->setDependencies( _pimpl->product().deps[Dep::SUPPLEMENTS],
> > value ); +   }
> > +    else if ( key == "ENHANCES" )
> > +    {
> > +      _pimpl->setDependencies( _pimpl->product().deps[Dep::ENHANCES],
> > value ); +   }
> > +    else if ( key == "LINGUAS" )
> > +    {
> > +      /*unused ?*/;
> > +    }
> > +    else if ( key == "LABEL" )
> > +    {
> > +      _pimpl->product().summary.setText( value, Locale(modifier) );
> > +    }
> > +    else if ( key == "DESCRDIR" )
> > +    {
> > +      /*unused ?*/;
> > +    }
> > +    else if ( key == "DATADIR" )
> > +    {
> > +      /*unused ?*/;
> > +    }
> > +    else if ( key == "FLAGS" )
> > +    {
> > +      /*unused ?*/;
> > +    }
> > +    else if ( key == "LANGUAGE" )
> > +    {
> > +      /*unused ?*/;
> > +    }
> > +    else if ( key == "TIMEZONE" )
> > +    {
> > +      /*unused ?*/;
> > +    }
> > +    else if ( key == "META" )
> > +    {
> > +      /*unused ?*/;
> > +    }
> > +    else if ( key == "KEY" )
> > +    {
> > +      /*unused ?*/;
> > +    }
> > +    else if ( key == "VOLATILE_CONTENT" )
> > +    {
> > +      /*unused ? add to FLAGS*/;
> > +    }
> > +    else
> > +    { WAR << errPrefix( line.lineNo(), "Unknown tag", *line ) << endl; }
> > +
> > +
> > +    if ( ! ticks.set( input_r.stream().tellg() ) )
> > +      userRequestedAbort( line.lineNo() );
> > +  }
> > +
> > +  if ( ! ticks.toMax() )
> > +    userRequestedAbort( line.lineNo() );
> > +
> > +  endParse();
> > +  MIL << "Done parsing " << input_r << endl;
> > +      }
> > +
> > +      /////////////////////////////////////////////////////////////////
> > +    } // namespace susetags
> > +    ///////////////////////////////////////////////////////////////////
> > +    /////////////////////////////////////////////////////////////////
> > +  } // namespace parser
> > +  ///////////////////////////////////////////////////////////////////
> > +  /////////////////////////////////////////////////////////////////
> > +} // namespace zypp
> > +///////////////////////////////////////////////////////////////////
> >
> > Added: trunk/libzypp/zypp/parser/susetags/ContentFileReader.h
> > URL:
> > http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/parser/susetags/C
> >on tentFileReader.h?rev=5561&view=auto
> > =========================================================================
> >== === --- trunk/libzypp/zypp/parser/susetags/ContentFileReader.h (added)
> > +++ trunk/libzypp/zypp/parser/susetags/ContentFileReader.h Wed May 16
> > 21:47:19 2007 @@ -0,0 +1,115 @@
> > +/*---------------------------------------------------------------------\
> > +|                          ____ _   __ __ ___                          |
> > +|                         |__  / \ / / . \ . \                         |
> > +|                           / / \ V /|  _/  _/                         |
> > +|                          / /__ | | | | | |                           |
> > +|                         /_____||_| |_| |_|                           |
> > +|                                                                      |
> > +\---------------------------------------------------------------------*/
> > +/** \file zypp/parser/susetags/ContentFileReader.h
> > + *
> > +*/
> > +#ifndef ZYPP_PARSER_SUSETAGS_CONTENTFILEREADER_H
> > +#define ZYPP_PARSER_SUSETAGS_CONTENTFILEREADER_H
> > +
> > +#include <iosfwd>
> > +
> > +#include "zypp/base/PtrTypes.h"
> > +#include "zypp/base/Function.h"
> > +#include "zypp/base/InputStream.h"
> > +
> > +#include "zypp/ProgressData.h"
> > +
> > +///////////////////////////////////////////////////////////////////
> > +namespace zypp
> > +{ /////////////////////////////////////////////////////////////////
> > +
> > +  ///////////////////////////////////////////////////////////////////
> > +  namespace data
> > +  { /////////////////////////////////////////////////////////////////
> > +    class Product;
> > +    DEFINE_PTR_TYPE(Product);
> > +    /////////////////////////////////////////////////////////////////
> > +  } // namespace data
> > +  ///////////////////////////////////////////////////////////////////
> > +
> > +  ///////////////////////////////////////////////////////////////////
> > +  namespace parser
> > +  { /////////////////////////////////////////////////////////////////
> > +    ///////////////////////////////////////////////////////////////////
> > +    namespace susetags
> > +    { /////////////////////////////////////////////////////////////////
> > +
> > +      class RepoIndex;
> > +      DEFINE_PTR_TYPE(RepoIndex);
> > +
> > +     
> > /////////////////////////////////////////////////////////////////// +    
> >  //
> > +      //  CLASS NAME : ContentFileReader
> > +      //
> > +      /** */
> > +      class ContentFileReader
> > +      {
> > +  public:
> > +    typedef function<void(const data::Product_Ptr &)> ProductConsumer;
> > +    typedef function<void(const RepoIndex_Ptr &)> RepoIndexConsumer;
> > +
> > +  public:
> > +    /** Default ctor */
> > +    ContentFileReader();
> > +    /** Dtor */
> > +    virtual ~ContentFileReader();
> > +          /** Parse the stream.
> > +     * \throw ParseExcetion on errors.
> > +     * \throws AbortRequestException on user request.
> > +     * Invokes \ref consume for each tag. \ref consume might throw
> > +     * other exceptions as well.
> > +     */
> > +    virtual void parse( const InputStream & imput_r,
> > +                        const ProgressData::ReceiverFnc & fnc_r =
> > ProgressData::ReceiverFnc() ); +
> > +  public:
> > +    /** Consumer to call when product data were parsed. */
> > +    void setProductConsumer( const ProductConsumer & fnc_r )
> > +    { _productConsumer = fnc_r; }
> > +
> > +    /** Consumer to call when repo index was parsed. */
> > +    void setRepoIndexConsumer( const RepoIndexConsumer & fnc_r )
> > +    { _repoIndexConsumer = fnc_r; }
> > +
> > +  protected:
> > +    /** Called when start parsing. */
> > +    virtual void beginParse();
> > +    /** Called when the parse is done. */
> > +    virtual void endParse();
> > +
> > +  protected:
> > +          /** Called when user(callback) request to abort.
> > +     * \throws AbortRequestException unless overloaded.
> > +     */
> > +    virtual void userRequestedAbort( unsigned lineNo_r );
> > +
> > +  protected:
> > +    /** Prefix exception message with line information. */
> > +    std::string errPrefix( unsigned lineNo_r,
> > +                           const std::string & msg_r = std::string(),
> > +                           const std::string & line_r = "-" ) const;
> > +
> > +  private:
> > +    class Impl;
> > +    scoped_ptr<Impl> _pimpl;
> > +    ProductConsumer _productConsumer;
> > +    RepoIndexConsumer _repoIndexConsumer;
> > +      };
> > +     
> > /////////////////////////////////////////////////////////////////// +
> > +      /////////////////////////////////////////////////////////////////
> > +    } // namespace susetags
> > +    ///////////////////////////////////////////////////////////////////
> > +    /////////////////////////////////////////////////////////////////
> > +  } // namespace parser
> > +  ///////////////////////////////////////////////////////////////////
> > +  /////////////////////////////////////////////////////////////////
> > +} // namespace zypp
> > +///////////////////////////////////////////////////////////////////
> > +#endif // ZYPP_PARSER_SUSETAGS_CONTENTFILEREADER_H
> >
> > Modified: trunk/libzypp/zypp/parser/susetags/PackagesFileReader.cc
> > URL:
> > http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/parser/susetags/P
> >ac kagesFileReader.cc?rev=5561&r1=5560&r2=5561&view=diff
> > =========================================================================
> >== === --- trunk/libzypp/zypp/parser/susetags/PackagesFileReader.cc
> > (original) +++ trunk/libzypp/zypp/parser/susetags/PackagesFileReader.cc
> > Wed May 16 21:47:19 2007 @@ -345,7 +345,7 @@
> >    else if TAGFWD( Shr );
> >    else if TAGFWD( Ver );
> >    else
> > -  { ERR << tag_r << endl; }
> > +  { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; }
> >        }
> >
> >       
> > /////////////////////////////////////////////////////////////////// @@
> > -368,7 +368,7 @@
> >    else if TAGFWD( Kwd );
> >    else if TAGFWD( Aut );
> >    else
> > -  { ERR << tag_r << endl; }
> > +  { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; }
> >        }
> >
> >       
> > ///////////////////////////////////////////////////////////////////
> >
> > Modified: trunk/libzypp/zypp/parser/susetags/PackagesLangFileReader.cc
> > URL:
> > http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/parser/susetags/P
> >ac kagesLangFileReader.cc?rev=5561&r1=5560&r2=5561&view=diff
> > =========================================================================
> >== === --- trunk/libzypp/zypp/parser/susetags/PackagesLangFileReader.cc
> > (original) +++
> > trunk/libzypp/zypp/parser/susetags/PackagesLangFileReader.cc Wed May 16
> > 21:47:19 2007 @@ -203,7 +203,7 @@
> >    else if TAGFWD( Sum );
> >    else if TAGFWD( Ver );
> >    else
> > -  { ERR << tag_r << endl; }
> > +  { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; }
> >        }
> >
> >       
> > /////////////////////////////////////////////////////////////////// @@
> > -218,7 +218,7 @@
> >    else if TAGFWD( Ins );
> >    else if TAGFWD( Del );
> >    else
> > -  { ERR << tag_r << endl; }
> > +  { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; }
> >        }
> >
> >       
> > ///////////////////////////////////////////////////////////////////
> >
> > Modified: trunk/libzypp/zypp/parser/susetags/PatternFileReader.cc
> > URL:
> > http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/parser/susetags/P
> >at ternFileReader.cc?rev=5561&r1=5560&r2=5561&view=diff
> > =========================================================================
> >== === --- trunk/libzypp/zypp/parser/susetags/PatternFileReader.cc
> > (original) +++ trunk/libzypp/zypp/parser/susetags/PatternFileReader.cc
> > Wed May 16 21:47:19 2007 @@ -292,7 +292,7 @@
> >    else if TAGFWD( Ord );
> >    else if TAGFWD( Ver );
> >    else
> > -  { ERR << tag_r << endl; }
> > +  { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; }
> >        }
> >
> >       
> > /////////////////////////////////////////////////////////////////// @@
> > -326,7 +326,7 @@
> >    else if TAGFWD( Inc ); // UI hint: includes
> >    else if TAGFWD( Ext ); // UI hint: extends
> >    else
> > -  { ERR << tag_r << endl; }
> > +  { WAR << errPrefix( tag_r, "Unknown tag" ) << endl; }
> >        }
> >
> >       
> > ///////////////////////////////////////////////////////////////////
> >
> > Added: trunk/libzypp/zypp/parser/susetags/RepoIndex.cc
> > URL:
> > http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/parser/susetags/R
> >ep oIndex.cc?rev=5561&view=auto
> > =========================================================================
> >== === --- trunk/libzypp/zypp/parser/susetags/RepoIndex.cc (added)
> > +++ trunk/libzypp/zypp/parser/susetags/RepoIndex.cc Wed May 16 21:47:19
> > 2007 @@ -0,0 +1,39 @@
> > +/*---------------------------------------------------------------------\
> > +|                          ____ _   __ __ ___                          |
> > +|                         |__  / \ / / . \ . \                         |
> > +|                           / / \ V /|  _/  _/                         |
> > +|                          / /__ | | | | | |                           |
> > +|                         /_____||_| |_| |_|                           |
> > +|                                                                      |
> > +\---------------------------------------------------------------------*/
> > +/** \file zypp/parser/susetags/RepoIndex.cc
> > + *
> > +*/
> > +#include <iostream>
> > +//#include "zypp/base/Logger.h"
> > +
> > +#include "zypp/parser/susetags/RepoIndex.h"
> > +
> > +using std::endl;
> > +
> > +///////////////////////////////////////////////////////////////////
> > +namespace zypp
> > +{ /////////////////////////////////////////////////////////////////
> > +  ///////////////////////////////////////////////////////////////////
> > +  namespace parser
> > +  { /////////////////////////////////////////////////////////////////
> > +    ///////////////////////////////////////////////////////////////////
> > +    namespace susetags
> > +    { /////////////////////////////////////////////////////////////////
> > +
> > +      IMPL_PTR_TYPE(RepoIndex);
> > +
> > +      /////////////////////////////////////////////////////////////////
> > +    } // namespace susetags
> > +    ///////////////////////////////////////////////////////////////////
> > +    /////////////////////////////////////////////////////////////////
> > +  } // namespace parser
> > +  ///////////////////////////////////////////////////////////////////
> > +  /////////////////////////////////////////////////////////////////
> > +} // namespace zypp
> > +///////////////////////////////////////////////////////////////////
> >
> > Added: trunk/libzypp/zypp/parser/susetags/RepoIndex.h
> > URL:
> > http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/parser/susetags/R
> >ep oIndex.h?rev=5561&view=auto
> > =========================================================================
> >== === --- trunk/libzypp/zypp/parser/susetags/RepoIndex.h (added)
> > +++ trunk/libzypp/zypp/parser/susetags/RepoIndex.h Wed May 16 21:47:19
> > 2007 @@ -0,0 +1,59 @@
> > +/*---------------------------------------------------------------------\
> > +|                          ____ _   __ __ ___                          |
> > +|                         |__  / \ / / . \ . \                         |
> > +|                           / / \ V /|  _/  _/                         |
> > +|                          / /__ | | | | | |                           |
> > +|                         /_____||_| |_| |_|                           |
> > +|                                                                      |
> > +\---------------------------------------------------------------------*/
> > +/** \file zypp/parser/susetags/RepoIndex.h
> > + *
> > +*/
> > +#ifndef ZYPP_PARSER_SUSETAGS_REPOINDEX_H
> > +#define ZYPP_PARSER_SUSETAGS_REPOINDEX_H
> > +
> > +#include <iosfwd>
> > +
> > +#include "zypp/base/ReferenceCounted.h"
> > +#include "zypp/base/NonCopyable.h"
> > +#include "zypp/base/PtrTypes.h"
> > +
> > +///////////////////////////////////////////////////////////////////
> > +namespace zypp
> > +{ /////////////////////////////////////////////////////////////////
> > +  ///////////////////////////////////////////////////////////////////
> > +  namespace parser
> > +  { /////////////////////////////////////////////////////////////////
> > +    ///////////////////////////////////////////////////////////////////
> > +    namespace susetags
> > +    { /////////////////////////////////////////////////////////////////
> > +
> > +      DEFINE_PTR_TYPE(RepoIndex);
> > +
> > +     
> > /////////////////////////////////////////////////////////////////// +    
> >  //
> > +      //  CLASS NAME : RepoIndex
> > +      //
> > +      /** Repository content data.
> > +       * File and Checksum definitions required by Downloader and
> > Parser. +      */
> > +      class RepoIndex : public base::ReferenceCounted, private
> > base::NonCopyable +      {
> > +  public:
> > +
> > +  protected:
> > +    /** Overload to realize std::ostream & operator\<\<. */
> > +    //virtual std::ostream & dumpOn( std::ostream & str ) const;
> > +      };
> > +     
> > /////////////////////////////////////////////////////////////////// +
> > +      /////////////////////////////////////////////////////////////////
> > +    } // namespace susetags
> > +    ///////////////////////////////////////////////////////////////////
> > +    /////////////////////////////////////////////////////////////////
> > +  } // namespace parser
> > +  ///////////////////////////////////////////////////////////////////
> > +  /////////////////////////////////////////////////////////////////
> > +} // namespace zypp
> > +///////////////////////////////////////////////////////////////////
> > +#endif // ZYPP_PARSER_SUSETAGS_REPOINDEX_H
--
To unsubscribe, e-mail: zypp-devel+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: zypp-devel+help@xxxxxxxxxxxx

< Previous Next >
References