diff options
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | t/superuser--obsolete-and-conflict.t | 6 | ||||
-rw-r--r-- | urpm/install.pm | 12 | ||||
-rw-r--r-- | urpm/main_loop.pm | 31 |
4 files changed, 14 insertions, 37 deletions
@@ -1,3 +1,5 @@ +- keep a separate counter for erasures + Version 7.17 - 5 February 2013, by Thierry Vignaud - fix counting for erasures diff --git a/t/superuser--obsolete-and-conflict.t b/t/superuser--obsolete-and-conflict.t index be3af8be..5284618d 100644 --- a/t/superuser--obsolete-and-conflict.t +++ b/t/superuser--obsolete-and-conflict.t @@ -31,10 +31,10 @@ sub test1 { my $arch = urpm::cfg::get_arch(); test_urpmi("b c", sprintf(<<'EOF', $arch, $arch)); - 1/3: c - 2/3: b + 1/2: c + 2/2: b removing package a-1-1.%s - 3/3: removing a-1-1.%s + 1/1: removing a-1-1.%s EOF check_installed_and_remove('b', 'c'); } diff --git a/urpm/install.pm b/urpm/install.pm index 9a3ec057..25b96114 100644 --- a/urpm/install.pm +++ b/urpm/install.pm @@ -91,29 +91,33 @@ Standard logger for transactions =cut # install logger callback -my ($erase_logger, $index); +my ($erase_logger, $index, $total_pkg, $uninst_count); sub install_logger { my ($urpm, $type, undef, $subtype, $amount, $total) = @_; - my $total_pkg = $urpm->{nb_install}; local $| = 1; if ($subtype eq 'start') { $urpm->{logger_progress} = 0; if ($type eq 'trans') { + $total_pkg = $urpm->{nb_install}; $urpm->{logger_count} ||= 0; + $uninst_count = 0; my $p = N("Preparing..."); print $p, " " x (33 - length $p); } else { my $pname; + my $cnt; if ($type eq 'uninst') { + $total_pkg = $urpm->{trans}->NElements - $index if !$uninst_count; + $cnt = ++$uninst_count; $pname = N("removing %s", $urpm->{trans}->Element_fullname($index)); $erase_logger->($urpm, undef, undef, $subtype); } else { # index already got bumped in {callback_open}: $pname = $urpm->{trans}->Element_name($index-1); + ++$urpm->{logger_count} if $pname; + $cnt = $pname ? $urpm->{logger_count} : '-'; } - ++$urpm->{logger_count} if $pname; - my $cnt = $pname ? $urpm->{logger_count} : '-'; my $s = sprintf("%9s: %-22s", $cnt . "/" . $total_pkg, $pname); print $s; $s =~ / $/ or printf "\n%9s %-22s", '', ''; diff --git a/urpm/main_loop.pm b/urpm/main_loop.pm index 57290355..ce1ea974 100644 --- a/urpm/main_loop.pm +++ b/urpm/main_loop.pm @@ -29,7 +29,7 @@ use urpm::select; use urpm::orphans; use urpm::get_pkgs; use urpm::signature; -use urpm::util qw(any difference2 find intersection member partition untaint); +use urpm::util qw(difference2 find intersection member partition untaint); #- global boolean options my ($auto_select, $no_install, $install_src, $clean, $noclean, $force, $parallel, $test); @@ -309,32 +309,6 @@ sub _run_transaction { !$fatal; } -# computes the number of packages to install or to erase - -# side-effects: urpm->{nb_install} -my $fullname2name_re = qr/^(.*)-[^\-]*-[^\-]*\.[^\.\-]*$/; -sub _compute_pkg_total { - my ($urpm, $state, $options) = @_; - $urpm->{nb_install} = 0; - - # first account for install/erasures we will schedule (upgrades count twice as they involve erasure of the older package): - foreach my $set (@{$state->{transaction} || []}) { - my ($install, $upgrade) = partition { - my $pkg = $urpm->{depslist}[$_]; - $pkg && !$pkg->flag_installed; - } @{$set->{upgrade}}; - my $remove = $options->{'allow-force'} ? [] : $set->{remove} || []; - my ($rm_count, $inst_count, $up_count) = (scalar(@$remove), scalar(values @$install), scalar(keys @$upgrade)); - $urpm->{nb_install} += $rm_count + $inst_count + 2 * $up_count; - } - - # account for erases added by rpm (removal through obsoletes): - foreach my $fn (keys %{$state->{transaction_state}{rejected} || {}}) { - my ($n) = $fn =~ $fullname2name_re; - next if !keys %{$state->{transaction_state}{rejected}{$fn}{obsoleted}}; - $urpm->{nb_install}++ if any { !/^\Q$n/ } keys %{$state->{transaction_state}{rejected}{$fn}{obsoleted}}; - } -} - =item run($urpm, $state, $something_was_to_be_done, $ask_unselect, $_requested, $callbacks) Run the main urpm loop: @@ -425,9 +399,6 @@ sub run { my $migrate_back_rpmdb_db_version = $urpm->{root} && urpm::select::should_we_migrate_back_rpmdb_db_version($urpm, $state); - #- compute package total: - _compute_pkg_total($urpm, $state, $options); - #- now process each remove/install transaction foreach my $set (@{$state->{transaction} || []}) { |