summaryrefslogtreecommitdiffstats
path: root/urpm
diff options
context:
space:
mode:
Diffstat (limited to 'urpm')
-rw-r--r--urpm/args.pm14
-rw-r--r--urpm/msg.pm109
2 files changed, 118 insertions, 5 deletions
diff --git a/urpm/args.pm b/urpm/args.pm
index 15d246fb..6dc6fb45 100644
--- a/urpm/args.pm
+++ b/urpm/args.pm
@@ -18,6 +18,9 @@ Getopt::Long::Configure(@configuration);
# global urpm object to be passed by the main program
my $urpm;
+# stores the values of the command-line options
+our %options;
+
# options specifications for Getopt::Long
my %options_spec = (
@@ -35,7 +38,9 @@ my %options_spec = (
'excludemedia|exclude-media=s' => \$::excludemedia,
'sortmedia|sort-media=s' => \$::sortmedia,
'synthesis=s' => \$::synthesis,
- auto => \$urpm->{options}{auto},
+ auto => sub {
+ $urpm->{options}{auto} = $::auto = 1;
+ },
'allow-medium-change' => \$::allow_medium_change,
'auto-select' => \$::auto_select,
'no-remove|no-uninstall' => \$::no_remove,
@@ -75,12 +80,12 @@ my %options_spec = (
$value =~ /(.+):(.+)/ or die N("bad proxy declaration on command line\n");
@{$urpm->{proxy}}{qw(user pwd)} = ($1, $2);
},
- 'bug=s' => \$::bug,
+ 'bug=s' => \$options{bug},
'env=s' => \$::env,
- X => \$::X,
+ X => \$options{X},
WID => \$::WID,
'best-output' => sub {
- $::X ||= $ENV{DISPLAY} && system('/usr/X11R6/bin/xtest', '') == 0
+ $options{X} ||= $ENV{DISPLAY} && system('/usr/X11R6/bin/xtest', '') == 0
},
'verify-rpm!' => \$urpm->{options}{'verify-rpm'},
'test!' => \$::test,
@@ -238,7 +243,6 @@ my %options_spec = (
);
# common options setup
-# TODO <> for arguments
foreach my $k ("help|h", "no-locales", "test!", "force", "root=s", "use-distrib=s",
"parallel=s")
diff --git a/urpm/msg.pm b/urpm/msg.pm
new file mode 100644
index 00000000..bf3272e2
--- /dev/null
+++ b/urpm/msg.pm
@@ -0,0 +1,109 @@
+package urpm::msg;
+
+use strict;
+use Exporter;
+our @ISA = 'Exporter';
+our @EXPORT = qw(N log_it to_utf8 message_input gmessage message);
+
+my $noexpr = N("Nn");
+my $yesexpr = N("Yy");
+
+#- I18N.
+eval {
+ require Locale::gettext;
+ use POSIX qw(LC_ALL);
+ setlocale(LC_ALL, "");
+ Locale::gettext::textdomain("urpmi");
+};
+
+sub N {
+ my ($format, @params) = @_;
+ sprintf(eval { Locale::gettext::gettext($format || '') } || $format, @params);
+}
+
+sub log_it {
+ #- if invoked as a simple user, nothing should be logged.
+ if (our $log) {
+ open my $fh, ">>$log" or die "can't output to log file: $!\n";
+ print $fh @_;
+ close $fh;
+ }
+}
+
+sub to_utf8 { Locale::gettext::iconv($_[0], undef, "UTF-8") }
+
+sub gmessage {
+ my ($msg, %params) = @_;
+ my $ok = to_utf8($params{ok} || N("Ok"));
+ my $cancel = to_utf8($params{cancel} || N("Cancel"));
+ $ok =~ s/,/\\,/g; $cancel =~ s/,/\\,/g;
+ my $buttons = $params{ok_only} ? "$ok:0" : "$ok:0,$cancel:2";
+ foreach (@{$params{add_buttons}}) {
+ s/,/\\,/g;
+ $buttons .= ",$_";
+ }
+ $msg = to_utf8($msg);
+ `gmessage -default "$ok" -buttons "$buttons" "$msg"`;
+}
+
+sub message_input {
+ my ($msg, $default_input, %opts) = @_;
+ my $input;
+ if ($urpm::args::options{X} && !$default_input) {
+ #- if a default input is given, the user doesn't have to choose (and being asked).
+ gmessage($msg, ok_only => 1);
+ $urpm::args::options{bug} and log_it($msg);
+ } else {
+ while (1) {
+ if ($urpm::args::options{bug}) {
+ print STDOUT $msg;
+ } else {
+ print SAVEOUT $msg;
+ }
+ if ($default_input) {
+ $urpm::args::options{bug} and log_it($default_input);
+ return $default_input;
+ }
+ $input = <STDIN>;
+ defined $input or return undef;
+ $urpm::args::options{bug} and log_it($input);
+ if ($opts{boolean}) {
+ $input =~ /^[$noexpr$yesexpr]*$/ and last;
+ } elsif ($opts{range}) {
+ 1 <= $input && $input <= $opts{range} and last;
+ } else {
+ last;
+ }
+ message(N("Sorry, bad choice, try again\n"));
+ }
+ }
+ return $input;
+}
+
+sub message {
+ my ($msg, $no_X) = @_;
+ if ($urpm::args::options{X} && !$no_X && !$::auto) {
+ gmessage($msg, ok_only => 1);
+ $urpm::args::options{bug} and log_it($msg);
+ } else {
+ if ($urpm::args::options{bug}) {
+ print STDOUT "$msg\n";
+ } else {
+ print SAVEOUT "$msg\n";
+ }
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+urpm::msg - routines to prompt messages from the urpm* tools
+
+=head1 SYNOPSIS
+
+=head1 DESCRIPTION
+
+=cut