Imported Upstream version 14.48.2
[platform/upstream/libzypp.git] / devel / devel.dmacvicar / YUMReader_tp.cc
1 #include "zypp/ZYpp.h"
2 #include "zypp/ZYppFactory.h"
3 #include "zypp/base/Logger.h"
4 #include "zypp/base/LogControl.h"
5 #include "zypp/CapFactory.h"
6 #include "zypp/data/ResolvableDataConsumer.h"
7 #include "zypp/base/Measure.h"
8 #include "zypp/detail/ResObjectFactory.h"
9 #include "zypp/parser/yum/RepoParser.h"
10 #include "zypp/repo/memory/PackageImpl.h"
11
12
13 #undef ZYPP_BASE_LOGGER_LOGGROUP
14 #define ZYPP_BASE_LOGGER_LOGGROUP "yumparsertest"
15
16 using namespace std;
17 using namespace zypp;
18 using namespace zypp::parser::yum;
19 using zypp::debug::Measure;
20 using namespace zypp::repo::memory;
21
22 bool progress_function(ProgressData::value_type p)
23 {
24   cout << "Parsing YUM source [" << p << "%]" << endl;
25 //  cout << "\rParsing YUM source [" << p << "%]" << flush;
26   return true;
27 }
28
29 class ResolvableConsumer : public data::ResolvableDataConsumer
30 {
31   public:
32     
33   typedef detail::ResImplTraits<PackageImpl>::Ptr PkgImplPtr;
34   typedef detail::ResImplTraits<PackageImpl>::Ptr SrcPkgImplPtr;
35   
36   ResolvableConsumer()
37   {
38   
39   }
40   
41   void collectDeps( Dependencies &deps, const data::Dependencies &data_deps)
42   {
43     CapFactory factory;
44     for ( data::Dependencies::const_iterator i = data_deps.begin(); i != data_deps.end(); ++i )
45     {
46       data::DependencyList list(i->second);
47       zypp::Dep deptype(i->first);
48       for ( data::DependencyList::const_iterator it = list.begin(); it != list.end(); ++it )
49       {
50         deps[deptype].insert(factory.fromImpl(*it));
51       }
52     }
53   }
54   
55   virtual ~ResolvableConsumer()
56   {
57   
58   }
59
60   virtual void consumePackage( const data::RecordId &repository_id, data::Package_Ptr ptr )
61   {
62     PkgImplPtr impl = PkgImplPtr( new PackageImpl(ptr) );
63     Dependencies deps;
64     collectDeps( deps, ptr->deps );
65     
66     Package::Ptr pkg = detail::makeResolvableFromImpl( NVRAD( ptr->name, ptr->edition, ptr->arch, deps), impl );
67     _store.insert(pkg);
68   }
69   virtual void consumeProduct( const data::RecordId &repository_id, data::Product_Ptr )
70   {
71   }
72   virtual void consumePatch( const data::RecordId &repository_id, data::Patch_Ptr )
73   {
74   }
75   virtual void consumeMessage( const data::RecordId &repository_id, data::Message_Ptr )
76   {
77   
78   }
79   
80   virtual void consumeScript( const data::RecordId &repository_id, data::Script_Ptr )
81   {
82   
83   }
84
85   virtual void consumeChangelog( const data::RecordId & repository_id, const data::Resolvable_Ptr &, const Changelog & )
86   {
87   
88   }
89   
90   virtual void consumeFilelist( const data::RecordId & repository_id, const data::Resolvable_Ptr &, const data::Filenames & )
91   {}
92
93   
94   virtual void consumeSourcePackage(const zypp::data::RecordId&, zypp::data::SrcPackage_Ptr)
95   {}
96   
97   virtual void consumePackageAtom(const zypp::data::RecordId&, const zypp::data::PackageAtom_Ptr&)
98   {}
99   
100   virtual void consumePattern(const zypp::data::RecordId&, zypp::data::Pattern_Ptr)
101   {}
102
103     //virtual void consumeSourcePackage( const data::SrcPackage_Ptr ) = 0;
104   ResStore _store;
105 };
106  
107
108 int main(int argc, char **argv)
109 {
110   base::LogControl::instance().logfile("yumparsertest.log");
111   
112   if (argc < 2)
113   {
114     cout << "usage: yumparsertest path/to/yumsourcedir" << endl << endl;
115     return 1;
116   }
117
118   try
119   {
120     ZYpp::Ptr z = getZYpp();
121
122     MIL << "creating PrimaryFileParser" << endl;
123     Measure parse_primary_timer("primary.xml.gz parsing");
124     ResolvableConsumer store;
125     parser::yum::RepoParser parser( 0, store, &progress_function);
126     parser.parse(argv[1]);
127     parse_primary_timer.stop();
128
129     cout << endl;
130   }
131   catch ( const Exception &e )
132   {
133     cout << "Oops! " << e.msg() << std::endl;
134   }
135
136   return 0;
137 }
138
139 // vim: set ts=2 sts=2 sw=2 et ai: