summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaouda Lo <daouda@mandriva.com>2005-02-18 14:45:14 +0000
committerDaouda Lo <daouda@mandriva.com>2005-02-18 14:45:14 +0000
commit6d9606670226a03f9c8240fdd4b2a8123dc34e1b (patch)
treebba85b760e427860f2dfbf9c75e89c8262abbdb6
parent6f8e3bf4c6cc7238a4bdb5dd885e7cad5539bef8 (diff)
downloadmgaonline-6d9606670226a03f9c8240fdd4b2a8123dc34e1b.tar
mgaonline-6d9606670226a03f9c8240fdd4b2a8123dc34e1b.tar.gz
mgaonline-6d9606670226a03f9c8240fdd4b2a8123dc34e1b.tar.bz2
mgaonline-6d9606670226a03f9c8240fdd4b2a8123dc34e1b.tar.xz
mgaonline-6d9606670226a03f9c8240fdd4b2a8123dc34e1b.zip
- mdkupdate --noX = MandrakeUpdate with mdkonline in text mode
-rwxr-xr-xmdkupdate64
1 files changed, 63 insertions, 1 deletions
diff --git a/mdkupdate b/mdkupdate
index 9590b696a..8de76036 100755
--- a/mdkupdate
+++ b/mdkupdate
@@ -24,6 +24,8 @@ use POSIX;
use lib qw(/usr/lib/libDrakX /usr/lib/libDrakX/drakfirsttime);
use common;
use mdkonline;
+use interactive;
+use urpm;
BEGIN { unshift @::textdomains, 'mdkupdate' }
@@ -62,12 +64,13 @@ usage:
") . N(" --auto - Mandrakeupdate launched automatically.
") . N(" --applet - launch Mandrakeupdate.
") . N(" --mnf - launch mnf specific scripts.
+") . N(" --noX - MandrakeUpdate newt version.
");
exit(0);
}
my ($opt) = @ARGV;
-@ARGV == 1 && ($opt eq '--auto' || $opt eq '--applet' || $opt eq '--mnf') or usage();
+@ARGV == 1 && member($opt, qw(--auto --applet --mnf --noX)) or usage();
-s $conffile or die N("No %s file found. Run mdkonline wizard first", $conffile);
@@ -98,6 +101,11 @@ if ($o{LOGIN} && $o{PASS} && $o{LOGIN} !~ /\s+/ && $o{PASS} !~ /\s+/) {
-f $currentrpm or rpm_qa($currentrpm);
if ($opt eq '--applet') {
system "/usr/bin/MandrakeUpdate", "--no-confirmation", "--media=update_source", "--pkg-sel=$scheduled", "--pkg-nosel=$noscheduled"
+ } elsif ($opt eq '--noX') {
+ my $in = interactive->vnew;
+ my $pkgs = ask_pkgs($in);
+ install_pkgs($in, $pkgs) if $pkgs;
+ $in->exit(0);
} elsif ($opt eq '--auto') {
$o{AUTO} eq 'TRUE' and auto_install_rpms($c2h->{sched})
}
@@ -133,6 +141,60 @@ if ($o{LOGIN} && $o{PASS} && $o{LOGIN} !~ /\s+/ && $o{PASS} !~ /\s+/) {
} else {
my $ret = -1;
}
+sub ask_pkgs {
+ my ($in) = @_;
+ my $pkgs = get_updatable_pkgs();
+ $in->ask_browse_tree_info('Mdkupdate', N("Choose which packages should be installed and Press Ok"),
+ {
+ node_state => sub { $pkgs->{$_[0]}{selected} ? 'selected' : 'unselected' },
+ build_tree => sub {
+ my ($add_node, $flat) = @_;
+ $add_node->($_, undef) foreach sort keys %{$pkgs};
+ },
+ grep_unselected => sub { grep { !$pkgs->{$_}{selected} } @_ },
+ toggle_nodes => sub {
+ my ($set_state, @nodes) = @_;
+ my $new_state = !$pkgs->{$nodes[0]}{selected};
+ foreach (@nodes) {
+ $set_state->($_, $new_state ? 'selected' : 'unselected');
+ $pkgs->{$_}{selected} = $new_state;
+ }
+ },
+ get_info => sub {},
+ }) or return keys %{$pkgs}; #- no change on cancel.
+ [ grep { $pkgs->{$_}{selected} } keys %{$pkgs} ];
+}
+sub install_pkgs {
+ my ($in, $choosed) = @_;
+ print foreach @{$choosed};
+ auto_install_rpms(@{$choosed});
+}
+sub get_updatable_pkgs() {
+ my $urpm = new urpm;
+ $urpm->read_config;
+ my %installable_pkgs; my @update_medias;
+ my ($medium) = grep { $_->{name} eq "update_source" } @{$urpm->{media}};
+
+ if ($medium) {
+ $urpm->configure(media => $medium->{name});
+ @update_medias = grep { !$_->{ignore} && $_->{update} } @{$urpm->{media}};
+ $urpm->compute_installed_flags(URPM::DB::open);
+ foreach my $pkg (@{$urpm->{depslist}}) {
+ $pkg->flag_upgrade or next;
+ my $selected = 0;
+ $pkg->flag_installed or next;
+ any { $pkg->id >= $_->{start} && $pkg->id <= $_->{end} } @update_medias or next;
+ $selected = member($pkg->name, qw(perl-URPM, urpmi, mdkonline, drakxtools)) ? 1 : 0;
+ $installable_pkgs{my_fullname($pkg)} = { selected => $selected, pkg => $pkg };
+ }
+ }
+ \%installable_pkgs;
+}
+sub my_fullname {
+ return '?-?-?' unless ref $_[0];
+ my ($name, $version, $release) = $_[0]->fullname;
+ "$name-$version-$release";
+}
sub split_contents {
my $cont = shift;
my ($elem, $s);