Changeset 127


Ignore:
Timestamp:
12/16/10 07:42:22 (13 years ago)
Author:
nanardon
Message:
  • add user/folder to store user's rpms
  • make solver working
Location:
server/trunk/web
Files:
3 added
2 edited

Legend:

Unmodified
Added
Removed
  • server/trunk/web/lib/Sophie/Controller/Analysis.pm

    r125 r127  
    22use Moose; 
    33use namespace::autoclean; 
    4 use XML::Simple; 
    5 use MIME::Base64; 
    64 
    75BEGIN {extends 'Catalyst::Controller'; } 
     
    3028} 
    3129 
    32 sub load_rpm : XMLRPCLocal { 
    33     my ($self, $c, $string) = @_; 
    34  
    35     my $ref = XMLin($string, ForceArray => 1); 
    36     my $tags = $ref->{rpmTag} or return; 
    37  
    38  
    39     my $User = $c->user 
    40         ? $c->model('Base')->resultset('Users')->find( { mail => $c->user->mail } ) 
    41         : undef; 
    42     $c->session; 
    43     $c->store_session_data('session:' . $c->sessionid, $c->session); 
    44  
    45     my $pkgid = unpack('H*',MIME::Base64::decode($tags->{Sigmd5}{base64}[0])); 
    46  
    47     my $newrpm = $c->model('Base::UsersRpms')->create( 
    48         { 
    49             name => $tags->{Name}{string}[0], 
    50             evr => sprintf('%s%s-%s', 
    51                 defined($tags->{Epoch}{integer}[0]) ? 
    52                 $tags->{Epoch}{integer}[0] . ':' : '', 
    53                 $tags->{Version}{string}[0], 
    54                 $tags->{Release}{string}[0], 
    55             ), 
    56             user_fkey => $User, 
    57             sessions_fkey => 'session:' . $c->sessionid, 
    58             pkgid => $pkgid, 
    59         } 
    60     ); 
    61     { 
    62         my @populate; 
    63         foreach my $fcount (0 .. $#{$tags->{Basenames}{string}}) { 
    64             push(@populate, 
    65                 { 
    66                     pid => $newrpm->id, 
    67                     basename => $tags->{Basenames}{string}[$fcount], 
    68                     dirname  => $tags->{Dirnames}{string}[ 
    69                         $tags->{Dirindexes}{integer}[$fcount] 
    70                     ], 
    71                 } 
    72             ); 
    73         } 
    74         $c->model('Base::UsersFiles')->populate(\@populate) if(@populate); 
    75     } 
    76     { 
    77         my @populate; 
    78         foreach my $dtype (qw(Provide Require Conflict Obsolete Suggest Enhanced)) { 
    79             my $initial = substr($dtype, 0, 1); 
    80             $tags->{"${dtype}name"} or next; 
    81             foreach my $fcount (0 .. $#{$tags->{"${dtype}name"}{string}}) { 
    82                 push(@populate, 
    83                     { 
    84                         pid => $newrpm->id, 
    85                         deptype => $initial, 
    86                         depname => $tags->{"${dtype}name"}{string}[$fcount], 
    87                         evr => ref $tags->{"${dtype}version"}{string}[$fcount] 
    88                         ? '' 
    89                         : $tags->{"${dtype}version"}{string}[$fcount], 
    90                         flags => $tags->{"${dtype}flags"}{integer}[$fcount] || 0, 
    91                     } 
    92                 ); 
    93             } 
    94         } 
    95         $c->model('Base::UsersDeps')->populate(\@populate) if(@populate); 
    96     } 
    97     $c->model('Base')->storage->dbh->commit; 
    98  
    99     $c->stash->{xmlrpc} = $newrpm->id; 
    100 } 
    101  
    10230sub find_requirements : XMLRPC { 
    10331    my ($self, $c, $string) = @_; 
    10432 
    105     my $id = $c->forward('load_rpm', [ $string ]); 
     33    my $id = $c->forward('/user/folder/load_rpm', [ $string ]); 
    10634 
    10735    my @deplist; 
     
    12452    } 
    12553 
    126     $c->forward('/analysis/solver/find_requirements', [ {}, 'P', \@deplist ]); 
     54    $c->forward('/analysis/solver/find_requirements', [ {}, 'P', \@deplist, $id ]); 
    12755} 
    12856 
  • server/trunk/web/lib/Sophie/Controller/Analysis/Solver.pm

    r125 r127  
    2929 
    3030sub find_requirements : XMLRPC { 
    31     my ($self, $c, $searchspec, $over, $deplist) = @_; 
     31    my ($self, $c, $searchspec, $over, $deplist, $pool) = @_; 
    3232 
    3333    $searchspec->{nopager} = 1; 
    3434    my %need_pkgid; 
     35    my %need_pool; 
    3536    my @unresolved; 
    3637    foreach my $dep (@{ $deplist || []}) { 
     
    4243 
    4344        $depname =~ /^rpmlib\(/ and next; 
    44         my $res = $c->forward('/search/bydep', [ $searchspec, $over, 
    45                 $depname, 
    46                 $sense, 
    47                 $evr ]); 
    48         if (@{$res->{results}}) { 
    49             foreach (@{$res->{results}}) { 
    50                 $need_pkgid{$_} = 1; 
     45        my $found = 0; 
     46        if ($depname =~ /^\//) { 
     47            my $res = $c->forward('/search/byfile', [ $searchspec, $depname, ]); 
     48            if (@{$res->{results}}) { 
     49                $found = 1; 
     50                foreach (@{$res->{results}}) { 
     51                    $need_pkgid{$_} = 1; 
     52                } 
     53            }  
     54            if ($pool) { 
     55                $res = $c->forward('/user/folder/byfile', [ $pool, $depname, ]); 
     56                if (@{$res}) { 
     57                    $found = 1; 
     58                    foreach (@{$res}) { 
     59                        $need_pool{$_} = 1; 
     60                    } 
     61                } 
    5162            } 
    5263        } else { 
     64            my $res = $c->forward('/search/bydep', [ $searchspec, $over, 
     65                    $depname, 
     66                    $sense, 
     67                    $evr ]); 
     68            if (@{$res->{results}}) { 
     69                $found = 1; 
     70                foreach (@{$res->{results}}) { 
     71                    $need_pkgid{$_} = 1; 
     72                } 
     73            }  
     74            if ($pool) { 
     75                $res = $c->forward('/user/folder/bydep', [ $pool, $over, 
     76                        $depname, 
     77                        $sense, 
     78                        $evr ] 
     79                ); 
     80                if (@{$res}) { 
     81                    $found = 1; 
     82                    foreach (@{$res}) { 
     83                        $need_pool{$_} = 1; 
     84                    } 
     85                } 
     86            } 
     87        } 
     88        if (!$found) { 
    5389            push(@unresolved, 
    5490                $depname . ( 
     
    64100        unresolved => \@unresolved, 
    65101        pkg => [ keys %need_pkgid ], 
     102        pool => [ keys %need_pool ], 
    66103    }; 
    67104} 
Note: See TracChangeset for help on using the changeset viewer.