2 #include <zypp/base/Logger.h>
4 ///////////////////////////////////////////////////////////////////
6 #include <zypp/Message.h>
7 #include <zypp/detail/MessageImpl.h>
8 #include <zypp/detail/PatchImpl.h>
9 #include <zypp/Package.h>
10 #include <zypp/detail/PackageImpl.h>
11 #include <zypp/Script.h>
12 #include <zypp/detail/ScriptImpl.h>
13 #include <zypp/Resolvable.h>
14 #include <zypp/detail/ResolvableImpl.h>
15 #include <zypp/Capability.h>
16 #include <zypp/capability/CapabilityImpl.h>
18 #include <zypp/parser/yum/YUMParser.h>
19 #include <zypp/base/Logger.h>
20 #include <zypp/source/yum/YUMScriptImpl.h>
26 #include <zypp/CapFactory.h>
28 using namespace zypp::detail;
32 using namespace zypp::parser::YUM;
33 using namespace zypp::source::YUM;
38 DEFINE_PTR_TYPE(MyMessageImpl)
39 class MyMessageImpl : public detail::MessageImpl
42 MyMessageImpl (string name, string type, std::string text)
51 IMPL_PTR_TYPE(MyMessageImpl)
53 void AddDependency (detail::ResolvableImplPtr res, Capability& cap) {
54 Dependencies deps = res->deps();
55 CapSet req = deps.requires();
57 deps.setRequires( req );
61 void AddAllRequires( detail::ResolvableImplPtr res, list<Capability> & caps) {
62 for (list<Capability>::iterator it = caps.begin();
66 AddDependency( res, *it );
70 DEFINE_PTR_TYPE(MyPatchImpl)
72 class MyPatchImpl : public detail::PatchImpl
75 MyPatchImpl( YUMPatchData & p )
80 // Create a requires capability to the patch itself
81 Capability cap( _f.parse( p.name, ResKind( "patch" )));
86 for (std::list<YUMPatchAtom>::iterator it = p.atoms.begin();
90 if (it->type == "script")
92 ScriptImplPtr impl = new YUMScriptImpl( *it->script );
93 AddDependency(impl, cap);
94 ScriptPtr script = new Script(impl);
95 cout << *script << endl;
96 cout << script->deps() << endl;
97 atoms.push_back(script);
101 /* for (list<PACKAGE>::iterator it = p.pack.begin();
105 detail::PackageImplPtr pi( new detail::PackageImpl(
107 Edition( it->version, it->release ),
109 AddDependency( pi, cap );
110 AddAllRequires( pi, it->requires );
111 PackagePtr p( new Package( pi ));
113 DBG << p->deps() << endl;
114 atoms.push_back( p );
116 for (list<MESSAGE>::iterator it = p.msg.begin();
120 detail::MessageImplPtr pi( new MyMessageImpl(
124 AddDependency( pi, cap );
125 MessagePtr p( new Message( pi ));
127 DBG << p->deps() << endl;
128 atoms.push_back( p );
131 // FIXME mve this piece of code after solutions are selected
132 // this orders the atoms of a patch
133 ResolvablePtr previous;
135 for (atom_list::iterator it = atoms.begin();
141 Dependencies deps = (*it)->deps();
142 CapSet req = deps.prerequires();
143 req.insert( Capability( _f.parse( previous->name(), previous->kind())));
144 deps.setPrerequires( req );
145 (*it)->setDeps( deps );
151 _reboot_needed = false; // FIXME
153 _category = "recommended"; // FIXME
157 IMPL_PTR_TYPE(MyPatchImpl)
160 /******************************************************************
163 ** FUNCTION NAME : main
164 ** FUNCTION TYPE : int
168 int main( int argc, char * argv[] )
170 INT << "===[START]==========================================" << endl;
172 // filling structures
181 foocomp.name = "foo-compat";
182 foocomp.version = "3.0";
183 foocomp.release = "5";
184 foocomp.arch = "noarch";
185 foocomp.requires.push_back( Capability( _f.parse( "foo", ResKind( "package" ))));
196 msg.text = "Hello World";
200 scr.do_script = "/bin/bash";
201 scr.undo_script = "/bin/unbash";
207 pkgs.push_back( foo );
208 pkgs.push_back( foocomp );
209 pkgs.push_back( bar );
210 msgs.push_back( msg );
211 scrs.push_back( scr );
220 YUMPatchParser iter(cin,"");
224 MyPatchImplPtr q(new MyPatchImpl(**iter));
225 patch1 = new Patch (q);
227 if (iter.errorStatus())
228 throw *iter.errorStatus();
234 DBG << patch1 << endl;
235 DBG << *patch1 << endl;
236 atom_list at = patch1->atoms();
237 for (atom_list::iterator it = at.begin();
242 DBG << (**it).deps() << endl;
245 INT << "===[END]============================================" << endl;