Imported Upstream version 14.48.2
[platform/upstream/libzypp.git] / devel / devel.ma / CleandepsOnRemove.cc
1 #include "Tools.h"
2
3 #include <zypp/PoolQuery.h>
4 #include <zypp/target/rpm/librpmDb.h>
5 #include <zypp/parser/ProductFileReader.h>
6
7 #include "zypp/sat/WhatObsoletes.h"
8 #include "zypp/ExternalProgram.h"
9
10 ///////////////////////////////////////////////////////////////////
11
12 //static const Pathname sysRoot( getenv("SYSROOT") ? getenv("SYSROOT") : "/Local/ROOT" );
13 //static const Pathname sysRoot( "/tmp/ToolScanRepos" );
14 static const Pathname sysRoot( "/" );
15
16 ///////////////////////////////////////////////////////////////////
17
18 bool solve()
19 {
20   bool rres = false;
21   {
22     //zypp::base::LogControl::TmpLineWriter shutUp;
23     //getZYpp()->resolver()->setOnlyRequires( true );
24     rres = getZYpp()->resolver()->resolvePool();
25   }
26   if ( ! rres )
27   {
28     ERR << "resolve " << rres << endl;
29     getZYpp()->resolver()->problems();
30     return false;
31   }
32   MIL << "resolve " << rres << endl;
33   return true;
34 }
35
36 bool upgrade()
37 {
38   bool rres = false;
39   {
40     //zypp::base::LogControl::TmpLineWriter shutUp;
41     Measure x( "Upgrade" );
42     rres = getZYpp()->resolver()->doUpgrade();
43   }
44   if ( ! rres )
45   {
46     Measure x( "Upgrade Error" );
47     ERR << "upgrade " << rres << endl;
48     getZYpp()->resolver()->problems();
49     return false;
50   }
51   MIL << "upgrade " << rres << endl;
52   return true;
53 }
54
55 namespace zypp
56 {
57   namespace target
58   {
59     void writeUpgradeTestcase();
60   }
61 }
62
63 std::ostream & operator<<( std::ostream & str, const sat::Solvable::SplitIdent & obj )
64 {
65   str << "{" << obj.ident() << "}{" << obj.kind() << "}{" << obj.name () << "}" << endl;
66   return str;
67 }
68
69 namespace zypp {
70 std::ostream & dumpOn( std::ostream & str, const Url & obj )
71 {
72   str << "{" << obj.getHost() << "}{" << obj.getPort() << "}";
73   return str;
74 }
75 }
76
77 int main( int argc, char * argv[] )
78 try {
79   --argc,++argv;
80   zypp::base::LogControl::instance().logToStdErr();
81   INT << "===[START]==========================================" << endl;
82   ///////////////////////////////////////////////////////////////////
83   if ( sysRoot == "/" )
84     ::unsetenv( "ZYPP_CONF" );
85   ResPool   pool( ResPool::instance() );
86   sat::Pool satpool( sat::Pool::instance() );
87   ///////////////////////////////////////////////////////////////////
88   dumpRange( WAR << "satpool.multiversion " , satpool.multiversionBegin(), satpool.multiversionEnd() ) << endl;
89   TestSetup::LoadSystemAt( sysRoot, Arch_i586 );
90   ///////////////////////////////////////////////////////////////////
91
92   char * fix[] = {
93       "test"
94   };
95   argv = fix;
96   argc = arraySize(fix);
97   for ( ; argc; --argc,++argv )
98   {
99     ui::Selectable::Ptr p( getSel<Package>( *argv ) );
100     if ( p )
101       USR << p->setToDelete() << endl;
102     else
103       ERR << p << endl;
104   }
105
106   std::set<PoolItem> todel;
107   {
108     getZYpp()->resolver()->setCleandepsOnRemove( false );
109     SEC << "=== Solve noclean:" << endl;
110     solve();
111     std::copy( make_filter_begin<resfilter::ByTransact>(pool),
112                make_filter_end<resfilter::ByTransact>(pool),
113                std::inserter( todel, todel.begin() ) );
114     WAR << todel << endl;
115   }
116   {
117     getZYpp()->resolver()->setCleandepsOnRemove( true );
118     SEC << "=== Solve clean:" << endl;
119     solve();
120     SEC << "========================================================" << endl;
121     for_( it, make_filter_begin<resfilter::ByTransact>(pool), make_filter_end<resfilter::ByTransact>(pool) )
122     {
123       ( todel.find( *it ) == todel.end() ? INT : USR ) << *it << endl;
124     }
125     SEC << "========================================================" << endl;
126   }
127
128
129
130   ///////////////////////////////////////////////////////////////////
131   INT << "===[END]============================================" << endl << endl;
132   zypp::base::LogControl::instance().logNothing();
133   return 0;
134 }
135 catch ( const Exception & exp )
136 {
137   INT << exp << endl << exp.historyAsString();
138 }
139 catch (...)
140 {}
141