Changeset 312


Ignore:
Timestamp:
01/15/11 20:58:49 (13 years ago)
Author:
nanardon
Message:
  • more features
Location:
tools/trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • tools/trunk/MANIFEST

    r301 r312  
    55bin/sophie-rpm 
    66lib/Sophie/Client.pm 
     7lib/Sophie/Client/Transaction.pm 
  • tools/trunk/bin/sophie-rpm

    r309 r312  
    136136$sc->login; 
    137137 
    138 my %rpmid; 
     138my $ts = $sc->ts($distrib); 
     139 
    139140foreach my $rpm (@ARGV) { 
    140     my $string = `rpm -qp --qf '[%{*:xml}\n]' $rpm`; 
    141     $string =~ s:<rpmTag name="Changelogname">(.*?)</rpmTag>::sm; 
    142     $string =~ s:<rpmTag name="Changelogtext">(.*?)</rpmTag>::sm; 
    143     $string =~ s:<rpmTag name="Changelogtime">(.*?)</rpmTag>::sm; 
    144     warn "Loading $rpm\n"; 
    145  
    146     my $res = $sc->send_request('user.folder.load_rpm', 
    147         RPC::XML::base64->new($string)); 
    148     if (ref $res && ! $res->is_fault) { 
    149         $rpmid{$res->value} = $rpm; 
    150     } else { 
    151         die((ref $res ? $res->string : $res) . "\n"); 
    152     } 
     141    $ts->add_rpm($rpm) or die "Cannot add $rpm"; 
    153142} 
    154143 
    155 my %pool; 
    156 { 
    157     foreach (@{ $sc->send_request('user.folder.list')->value }) { 
    158         $pool{$_->{id}} = $_->{name} . '-' . $_->{evr};  
    159     } 
    160 } 
    161  
    162 my @unresolved; 
    163 my @dirnotfound; 
    164 foreach my $rpmid (keys %rpmid) { 
    165     warn "Analysing $rpmid{$rpmid}\n"; 
    166     my $analyse = $sc->send_request('analysis.find_requirements', 
    167         $distrib, 
    168         $rpmid, 
    169         [ keys %rpmid ], 
    170     ); 
    171     if (ref $analyse && !$analyse->is_fault) { 
    172         my $result = $analyse->value; 
    173         if ($verbose) { 
    174             print "\nPackage requirements\n"; 
    175             foreach my $dep (keys %{ $result->{bydep} }) { 
    176                 print $dep . ":\n"; 
    177                 foreach (@{ $result->{bydep}{$dep}{pkg} || []}) { 
    178                     print "    " . $sc->send_request('rpms.basicinfo', $_)->value->{filename}; 
    179                     print "\n"; 
    180                 } 
    181                 foreach (@{ $result->{bydep}{$dep}{pool} || [] }) { 
    182                     print "  * " . $pool{$_} . "\n"; 
    183                 } 
    184             } 
    185         } 
    186         if (@{ $result->{unresolved} || []}) { 
    187             push(@unresolved, @{ $result->{unresolved} }); 
    188             print "\nAre unresolved:\n"; 
    189             print  map { " $_\n" }  @{ $result->{unresolved} }; 
    190         } 
    191     } 
    192     my $diranalyse = $sc->send_request('analysis.parentdir', 
    193         $distrib, 
    194         $rpmid, 
    195         [ keys %rpmid ], 
    196     ); 
    197     if (ref $diranalyse && !$diranalyse->is_fault) { 
    198         my $result = $diranalyse->value; 
    199         if ($verbose) { 
    200             print "\nParent directories:\n"; 
    201             foreach my $dir (sort keys %{ $result->{bydir} }) { 
    202                 print $dir . ":\n"; 
    203                 if (@{ $result->{bydir}{$dir}{pkg} || []} > 3) { 
    204                     print "    " . scalar(@{ $result->{bydir}{$dir}{pkg} || []}) . 
    205                     " results in the distribution...\n"; 
    206                 } else { 
    207                     foreach (@{ $result->{bydir}{$dir}{pkg} || []}) { 
    208                         print "    " . $sc->send_request('rpms.basicinfo', $_)->value->{filename}; 
    209                         print "\n"; 
    210                     } 
    211                 } 
    212                 foreach (@{ $result->{bydir}{$dir}{pool} || [] }) { 
    213                     print "  * " . $pool{$_} . "\n"; 
    214                 } 
    215             } 
    216         } 
    217         if (@{ $result->{notfound} || []}) { 
    218             push(@dirnotfound, @{ $result->{notfound} }); 
    219             print "\nUnowned directories:\n"; 
    220             print  map { " $_\n" }  @{ $result->{notfound} }; 
    221         } 
    222     } 
    223     print "\n"; 
    224 } 
    225  
    226 $sc->send_request('user.folder.clear'); 
    227  
    228 if (@dirnotfound) { 
    229     print "Warning, this directory are not owned by any package:\n"; 
    230     print map { " $_\n" } @dirnotfound; 
    231     print "\n"; 
    232 } 
    233 if (@unresolved) { 
    234     print "Error, unresolved:\n"; 
    235     print  map { " $_\n" }  @unresolved; 
    236     print "\n"; 
    237     if ($search) { 
    238         print "\nSearching depedencies in sophie\n"; 
    239         foreach my $dep (@unresolved) { 
    240             my $res = $sc->send_request( 
    241                 'search.rpm.bydep', $searchsp, 'P', split(' ', $dep) 
    242             ); 
    243             if (ref $res && !$res->is_fault) { 
    244                 print "$dep: " . $res->value->{total_entries} . " results\n"; 
    245                 foreach (@{ $res->value->{results} }) { 
    246                     print "    " . $sc->send_request('rpms.basicinfo', $_)->value->{filename}; 
    247                     print "\n"; 
    248                 } 
     144my $res = $ts->run; 
     145$ts->summary if (@ARGV > 1); 
     146print "\nThis transaction would failed\n" if(!$res); 
     147if ($search) { 
     148    print "\nSearching depedencies in sophie\n"; 
     149    foreach my $dep (@{ $ts->{unresolved}} ) { 
     150        my $res = $sc->send_request( 
     151            'search.rpm.bydep', $searchsp, 'P', split(' ', $dep) 
     152        ); 
     153        if (ref $res && !$res->is_fault) { 
     154            print "$dep: " . $res->value->{total_entries} . " results\n"; 
     155            foreach (@{ $res->value->{results} }) { 
     156                print "    " . $sc->send_request('rpms.basicinfo', $_)->value->{filename}; 
     157                print "\n"; 
    249158            } 
    250159        } 
    251160    } 
    252     exit(1); 
    253 } else { 
    254     print "No Error found\n"; 
    255     exit(0); 
    256161} 
    257  
     162exit($res ? 0 : 1); 
    258163 
    259164=head1 AUTHOR 
  • tools/trunk/lib/Sophie/Client.pm

    r300 r312  
    66use RPC::XML; 
    77use base qw(RPC::XML::Client); 
     8use Sophie::Client::Transaction; 
    89$RPC::XML::FORCE_STRING_ENCODING = 1; 
    910 
     
    5657} 
    5758 
     59sub ts { 
     60    my ($self, $distrib) = @_; 
     61    return Sophie::Client::Transaction->new($self, $distrib); 
     62} 
    5863 
    59641; 
Note: See TracChangeset for help on using the changeset viewer.