diff options
-rw-r--r-- | urpm.pm | 10 | ||||
-rwxr-xr-x | urpmi | 62 | ||||
-rw-r--r-- | urpmi.spec | 6 |
3 files changed, 59 insertions, 19 deletions
@@ -2004,7 +2004,7 @@ sub select_packages_to_upgrade { if ($obsoleted > 0) { $urpm->{log}(_("selecting %s using obsoletes", $pkg->fullname)); $obsoletedPackages{$n} = undef; - $packages->{$pkg->id} = undef; + exists $packages->{$pkg->id} or $packages->{$pkg->id} = 1; } } } @@ -2022,7 +2022,7 @@ sub select_packages_to_upgrade { if ($p->compare_pkg($pkg) >= 0) { if ($otherPackage && $p->compare($pkg->version) <= 0) { $toRemove{$otherPackage} = 0; - $packages->{$pkg->id} = undef; + exists $packages->{$pkg->id} or $packages->{$pkg->id} = 1; $urpm->{log}(_("removing %s to upgrade to %s ... since it will not be updated otherwise", $otherPackage, $pkg->name.'-'.$pkg->version.'-'.$pkg->release)); } else { @@ -2031,7 +2031,7 @@ sub select_packages_to_upgrade { } elsif ($upgradeNeedRemove{$pkg->name}) { my $otherPackage = $p->name.'-'.$p->version.'-'.$p->release; $toRemove{$otherPackage} = 0; - $packages->{$pkg->id} = undef; + exists $packages->{$pkg->id} or $packages->{$pkg->id} = 1; $urpm->{log}(_("removing %s to upgrade to %s ... since it will not upgrade correctly!", $otherPackage, $pkg->name.'-'.$pkg->version.'-'.$pkg->release)); } @@ -2058,7 +2058,7 @@ sub select_packages_to_upgrade { unless ($skipThis) { my $cumulSize; - $packages->{$pkg->id} = undef; + exists $packages->{$pkg->id} or $packages->{$pkg->id} = 1; #- keep in mind installed files which are not being updated. doing this costs in #- execution time but use less memory, else hash all installed files and unhash @@ -2107,7 +2107,7 @@ sub select_packages_to_upgrade { if (@deps == 0 || @deps > 0 && (grep { ! exists $packages->{$pkg->id} && ! exists $installed{$_->{id}} } @deps) == 0) { $urpm->{log}(_("selecting %s by selection on files", $pkg->name)); - $packages->{$pkg->id} = undef; + $packages->{$pkg->id} = 1; } else { $urpm->{log}(_("avoid selecting %s as its locales language is not already selected", $pkg->fullname)); } @@ -40,6 +40,8 @@ my $src = 0; my $noclean = 0; my $verbose = 0; my $root = ''; +my $bug = ''; +my $log = ''; my $uid; my @files; @@ -70,6 +72,7 @@ usage: ") . _(" --force - force invocation even if some packages do not exist. ") . _(" --wget - use wget to retrieve distant files. ") . _(" --curl - use curl to retrieve distant files. +") . _(" --bug - output a bug report in directory indicated by next arg. ") . _(" --X - use X interface. ") . _(" --best-output - choose best interface according to the environment: X or text mode. @@ -101,6 +104,7 @@ for (@ARGV) { /^--force$/ and do { $force = 1; next }; /^--wget$/ and do { $sync = \&urpm::sync_wget; next }; /^--curl$/ and do { $sync = \&urpm::sync_curl; next }; + /^--bug$/ and do { push @nextargv, \$bug; next }; /^--X$/ and do { $X = 1; next }; /^--WID=(.*)$/ and do { $WID = $1; next }; /^--WID$/ and do { push @nextargv, \$WID; next }; @@ -142,20 +146,52 @@ for (@ARGV) { my $urpm = new urpm; my ($pid_out, $pid_err); +#- prepare bug report. +if ($bug) { + system("rm", "-rf", $bug); + mkdir $bug or $urpm->{fatal}(8, _("Unable to create directory [%s] for bug report", $bug)); + #- copy all synthesis file used, along with configuration of urpmi + system("cp", "-af", $urpm->{config}, $urpm->{skiplist}, $urpm->{instlist}, $bug); + local *DIR; + opendir DIR, $urpm->{statedir}; + while (defined ($_ = readdir DIR)) { + /synthesis\./ and system "cp", "-af", "$urpm->{statedir}/$_", $bug; + } + closedir DIR; + #- and a dump of rpmdb itself as synthesis file. + my $db = URPM::DB::open($root); + my $sig_handler = sub { undef $db; exit 3 }; + local $SIG{INT} = $sig_handler; + local $SIG{QUIT} = $sig_handler; + local *RPMDB; + open RPMDB, "| " . ($ENV{LD_LOADER} || '') . " gzip -9 >'$bug/rpmdb.cz'"; + $db->traverse(sub{ + my ($p) = @_; + $p->pack_header; + $p->build_info(fileno *RPMDB); + }); + close RPMDB; + #- allow log file. + $log = "$bug/urpmi.log"; +} if ($uid > 0) { #- only src files are installable using urpmi. @names || @files and $urpm->{fatal}(1, _("Only superuser is allowed to install packages")); #- allow installation. @rpms_install = @src_files; -} else { + + #- allow log. + $log = "/var/log/urpmi.log"; +} +if ($log) { #- log only at this point in case of query usage. log_it(scalar localtime, " urpmi called with @ARGV\n"); open SAVEOUT, ">&STDOUT"; select SAVEOUT; $| = 1; open SAVEERR, ">&STDERR"; select SAVEERR; $| = 1; unless ($pid_out = open STDOUT, "|-") { - open F, ">>/var/log/urpmi.log"; select F; $| = 1; + open F, ">>$log"; select F; $| = 1; select SAVEOUT; $| = 1; $/ = \1; while (<STDIN>) { @@ -166,7 +202,7 @@ if ($uid > 0) { exit 0; } unless ($pid_err = open STDERR, "|-") { - open F, ">>/var/log/urpmi.log"; select F; $| = 1; + open F, ">>$log"; select F; $| = 1; select SAVEERR; $| = 1; $/ = \1; while (<STDIN>) { @@ -312,7 +348,7 @@ if (@root_only) { } else { $noexpr = _("Nn"); $yesexpr = _("Yy"); - if ($uid > 0) { + if (!$log) { print STDOUT "$msg:\n@to_install\n$msg2" . _(" (Y/n) "); } else { print SAVEOUT "$msg:\n@to_install\n$msg2" . _(" (Y/n) "); @@ -344,7 +380,7 @@ my %sources = $urpm->download_source_packages($local_sources, $list, ($X ? '' : `gmessage -default $ok -buttons "$ok:0,$cancel:2" "$msg"`; !$?; } else { - if ($uid > 0) { + if (!$log) { print STDOUT "$msg\n$msg2 "; } else { print SAVEOUT "$msg\n$msg2 "; @@ -360,7 +396,7 @@ if ($uid == 0) { } if (@rpms_install || @rpms_upgrade) { - if ($uid > 0) { + if (!$log) { printf STDOUT _("installing %s\n", join(' ', @rpms_install, @rpms_upgrade)); } else { printf SAVEOUT _("installing %s\n", join(' ', @rpms_install, @rpms_upgrade)); @@ -393,7 +429,7 @@ if (@rpms_install || @rpms_upgrade) { $noexpr = _("Nn"); $yesexpr = _("Yy"); - if ($uid > 0) { + if (!$log) { print STDOUT _("Try installation even more strongly (--force)? (y/N) "); } else { print SAVEOUT _("Try installation even more strongly (--force)? (y/N) "); @@ -413,7 +449,7 @@ if (@rpms_install || @rpms_upgrade) { $noexpr = _("Nn"); $yesexpr = _("Yy"); - if ($uid > 0) { + if (!$log) { print STDOUT _("Try installation without checking dependencies? (y/N) "); } else { print SAVEOUT _("Try installation without checking dependencies? (y/N) "); @@ -424,7 +460,7 @@ if (@rpms_install || @rpms_upgrade) { if ($?) { message(_("Installation failed")); - if ($uid > 0) { + if (!$log) { print STDOUT _("Try installation even more strongly (--force)? (y/N) "); } else { print SAVEOUT _("Try installation even more strongly (--force)? (y/N) "); @@ -453,15 +489,15 @@ sub toMb { int $nb + 0.5; } -sub message { $X ? `gmessage -default Ok -buttons Ok "$_[0]"` : $uid > 0 ? print STDOUT "$_[0]\n" : print SAVEOUT "$_[0]\n"; } +sub message { $X ? `gmessage -default Ok -buttons Ok "$_[0]"` : !$log ? print STDOUT "$_[0]\n" : print SAVEOUT "$_[0]\n"; } -sub message_auto { $auto ? ($uid > 0 ? print STDOUT "$_[0]\n" : print SAVEOUT "$_[0]\n") : message($_[0]); } +sub message_auto { $auto ? (!$log ? print STDOUT "$_[0]\n" : print SAVEOUT "$_[0]\n") : message($_[0]); } sub log_it { #- if invoked as a simple user, nothing should be logged. - if ($uid == 0) { + if ($log) { local *LOG; - open LOG, ">>/var/log/urpmi.log" or die "can't output to log file\n"; + open LOG, ">>$log" or die "can't output to log file\n"; print LOG @_; } } @@ -2,7 +2,7 @@ Name: urpmi Version: 3.4 -Release: 7mdk +Release: 8mdk License: GPL Source0: %{name}.tar.bz2 Source1: %{name}.logrotate @@ -144,6 +144,10 @@ fi %changelog +* Mon Jun 10 2002 Fran�ois Pons <fpons@mandrakesoft.com> 3.4-8mdk +- added --bug option to report bug report. +- fixed --auto-select and skip.list. + * Fri Jun 7 2002 Fran�ois Pons <fpons@mandrakesoft.com> 3.4-7mdk - fixed still present log on standard output. |