From dd207efc048dbd9e7faa7ed106f564232c31a7c7 Mon Sep 17 00:00:00 2001 From: Thierry Vignaud Date: Tue, 4 Mar 2008 13:44:42 +0000 Subject: handle priority upgrade list --- NEWS | 2 ++ gurpmi.pm | 3 +++ gurpmi2 | 21 +++++++++++++++++++-- urpm/args.pm | 2 +- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index c30a102d..8d8b61fc 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,7 @@ - add infrastructure so that gurpmi & rpmdrake can handle priority upgrade list +- gurpmi: + o handle priority upgrade list Version 5.7 - 3 March 2008, by Pascal "Pixel" Rigaux diff --git a/gurpmi.pm b/gurpmi.pm index b9c3636f..5a882d8b 100644 --- a/gurpmi.pm +++ b/gurpmi.pm @@ -23,11 +23,14 @@ use Gtk2; use urpm::util; use urpm::msg; use urpm::args; +use urpm::select; use Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(create_scrolled_window fatal but quit add_button_box new_label N); +urpm::select::add_packages_to_priority_upgrade_list('gurpmi'); + sub usage () { print <register_rpms(@all_rpms); if (@gurpmi::names) { urpm::select::search_packages($urpm, \%requested, [ @gurpmi::names ]); } -urpm::select::resolve_dependencies($urpm, + +#- return value is true if program should be restarted (in order to take care of important +#- packages being upgraded (problably urpmi and perl-URPM, but maybe rpm too, and glibc also ?). +my $restart_itself = urpm::select::resolve_dependencies($urpm, $state, \%requested, callback_choices => \&ask_choice, auto_select => $::auto_select, + priority_upgrade => $urpm->{options}{'priority-upgrade'}, ); my @ask_unselect = urpm::select::unselected_packages($urpm, $state); @ask_unselect @@ -126,6 +130,7 @@ sub configure_urpm() { $w->run; $w->destroy; }; + urpm::select::set_priority_upgrade_option($urpm, $gurpmi::options{previous_priority_upgrade}) $rpm_lock = urpm::lock::rpm_db($urpm, 'exclusive'); $urpmi_lock = urpm::lock::urpmi_db($urpm); urpm::media::configure($urpm, @@ -254,7 +259,7 @@ sub do_install_3 () { sync(); }; - urpm::main_loop::run($urpm, $state, scalar(@gurpmi::names), \@ask_unselect, \%requested, { + my $exit_code = urpm::main_loop::run($urpm, $state, scalar(@gurpmi::names), \@ask_unselect, \%requested, { bad_signature => sub { my ($msg, $msg2) = @_; ask_continue_blocking("$msg\n$msg2"); @@ -318,4 +323,16 @@ sub do_install_3 () { trans => $callback_inst, } ); + + #- restart gurpmi if needed, keep command line for that. + if ($restart_itself && !$exit_code) { + print N("restarting urpmi"), "\n"; + #- it seems to work correctly with exec instead of system, provided + #- added --previous-priority-upgrade to allow checking if yet if + #- priority-upgrade list has changed. and make sure we don't uselessly restart + @ARGV = ('--previous-priority-upgrade=' . $urpm->{options}{'priority-upgrade'}, + grep { !/^--no-priority-upgrade$|--previous-priority-upgrade=/ } @ARGV); + exec $0, @ARGV; + } + } diff --git a/urpm/args.pm b/urpm/args.pm index 5477a8ca..120118a2 100644 --- a/urpm/args.pm +++ b/urpm/args.pm @@ -370,7 +370,7 @@ sub add_urpmf_parameter { # common options setup -foreach my $k ('allow-medium-change', 'auto', 'auto-select', 'expect-install!', 'root=s', 'test!', 'verify-rpm!') +foreach my $k ('allow-medium-change', 'auto', 'auto-select', 'expect-install!', 'no-priority-upgrade', 'previous-priority-upgrade=s', 'root=s', 'test!', 'verify-rpm!') { $options_spec{gurpmi}{$k} = $options_spec{urpmi}{$k}; } -- cgit v1.2.1