@@ -4,6 +4,7 @@ use warnings;
44
55use  App::cpm::CircularDependency;
66use  App::cpm::Distribution;
7+ use  App::cpm::Logger::Terminal;
78use  App::cpm::Logger;
89use  App::cpm::Task;
910use  App::cpm::version;
@@ -40,7 +41,7 @@ sub new {
4041        } else  {
4142            my  $msg  = " You don't have Module::CoreList. " 
4243                    . " The local-lib may result in incomplete self-contained directory."  ;
43-             App::cpm::Logger -> log ( result   =>   " WARN " ,  message   =>   $msg ) ;
44+             warn   " $msg \n "  ;
4445        }
4546    }
4647    $self ;
@@ -123,15 +124,33 @@ sub register_result {
123124
124125    %{$task } = %{$result }; #  XXX
125126
126-     my  $logged  = $self -> info($task );
127+     # my $logged = $self->info($task);
127128    my  $method  = " _register_@{[$task ->{type}]}_result"  ;
128129    $self -> $method ($task );
129130    $self -> remove_task($task );
130-     $self -> _show_progress if  $logged  && $self -> {show_progress };
131+     # $self->_show_progress if $logged && $self->{show_progress};
132+     $self -> log_task($task );
131133
132134    return  1;
133135}
134136
137+ sub  log_task  {
138+     my  ($self , @done ) = @_ ;
139+     my  $terminal  = $self -> {terminal } ||= App::cpm::Logger::Terminal-> new(@{$self -> {_pids }});
140+     my  $lines  = $terminal -> new_lines;
141+     for  my  $pid  (@{$self -> {_pids }}) {
142+         my  ($task ) = grep  { $_ -> in_charge == $pid  } @done , $self -> tasks; #  maybe task is undef
143+         $lines -> set_worker($pid , $task );
144+     }
145+     $lines -> set_summary((0+keys  %{$self -> {distributions }}), $self -> installed_distributions);
146+     $terminal -> write ($lines );
147+ }
148+ 
149+ sub  log_task_finalize  {
150+     my  $self  = shift ;
151+     $self -> {terminal }-> clear;
152+ }
153+ 
135154sub  info  {
136155    my  ($self , $task ) = @_ ;
137156    my  $type  = $task -> type;
@@ -226,7 +245,6 @@ sub _calculate_tasks {
226245                my  $msg  = sprintf  " %s  requires perl %s , but you have only %s "  ,
227246                    $dist -> distvname, $req -> {version_range }, $self -> {target_perl } || $] ;
228247                $self -> {logger }-> log ($msg );
229-                 App::cpm::Logger-> log (result  =>  " FAIL"  , message  =>  $msg );
230248                $self -> {_fail_install }{$dist -> distfile}++;
231249            }
232250        }
@@ -264,7 +282,6 @@ sub _calculate_tasks {
264282                my  $msg  = sprintf  " %s  requires perl %s , but you have only %s "  ,
265283                    $dist -> distvname, $req -> {version_range }, $self -> {target_perl } || $] ;
266284                $self -> {logger }-> log ($msg );
267-                 App::cpm::Logger-> log (result  =>  " FAIL"  , message  =>  $msg );
268285                $self -> {_fail_install }{$dist -> distfile}++;
269286            }
270287        }
@@ -330,14 +347,7 @@ sub is_core {
330347    my  $target_perl  = $self -> {target_perl };
331348    if  (exists  $Module::CoreList::version {$target_perl }{$package }) {
332349        if  (!exists  $Module::CoreList::version {$] }{$package }) {
333-             if  (!$self -> {_removed_core }{$package }++) {
334-                 my  $t  = App::cpm::version-> parse($target_perl )-> normal;
335-                 my  $v  = App::cpm::version-> parse($] )-> normal;
336-                 App::cpm::Logger-> log (
337-                     result  =>  " WARN"  ,
338-                     message  =>  " $package  used to be core in $t , but not in $v , so will be installed"  ,
339-                 );
340-             }
350+             #  $package used to be core in $target_perl, but not in $], so will be installed
341351            return ;
342352        }
343353        return  1 unless  $version_range ;
@@ -363,7 +373,19 @@ sub is_satisfied {
363373        }
364374        next  if  $self -> {target_perl } and  $self -> is_core($package , $version_range );
365375        next  if  $self -> is_installed($package , $version_range );
366-         my  ($resolved ) = grep  { $_ -> providing($package , $version_range ) } @distributions ;
376+ 
377+         my  $resolved ;
378+         for  my  $dist  (@distributions ) {
379+             my  ($ok , $err ) = $dist -> providing($package , $version_range );
380+             if  ($ok ) {
381+                 $resolved  = $dist ;
382+                 last ;
383+             }
384+             if  ($err ) {
385+                 $self -> {logger }-> log ($err );
386+                 last ;
387+             }
388+         }
367389        next  if  $resolved  && $resolved -> installed;
368390
369391        $is_satisfied  = 0 if  defined  $is_satisfied ;
@@ -397,11 +419,6 @@ sub _register_resolve_result {
397419    if  ($task -> {distfile } and  $task -> {distfile } =~ m { /perl-5[^/]+$}  ) {
398420        my  $message  = " $task ->{package} is a core module."  ;
399421        $self -> {logger }-> log ($message );
400-         App::cpm::Logger-> log (
401-             result  =>  " DONE"  ,
402-             type  =>  " install"  ,
403-             message  =>  $message ,
404-         );
405422        return ;
406423    }
407424
@@ -415,11 +432,6 @@ sub _register_resolve_result {
415432                : "  is up to date. ($local )" 
416433            );
417434            $self -> {logger }-> log ($message );
418-             App::cpm::Logger-> log (
419-                 result  =>  " DONE"  ,
420-                 type  =>  " install"  ,
421-                 message  =>  $message ,
422-             );
423435            return ;
424436        }
425437    }
0 commit comments