summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--urpm.pm232
-rwxr-xr-xurpmi2
-rwxr-xr-xurpmi.addmedia10
-rw-r--r--urpmi.spec9
4 files changed, 159 insertions, 94 deletions
diff --git a/urpm.pm b/urpm.pm
index 7b8e3f2e..604a782e 100644
--- a/urpm.pm
+++ b/urpm.pm
@@ -441,8 +441,8 @@ sub read_config {
while (<F>) {
chomp; s/#.*$//; s/^\s*//; s/\s*$//;
$_ eq '}' and last;
- /^(hdlist|with_hdlist|list|removable|md5sum|key_ids)\s*:\s*(.*)$/ and $medium->{$1} = $2, next;
- /^(update|ignore|synthesis)\s*$/ and $medium->{$1} = 1, next;
+ /^(hdlist|list|with_hdlist|removable|md5sum|key_ids)\s*:\s*(.*)$/ and $medium->{$1} = $2, next;
+ /^(update|ignore|synthesis|virtual)\s*$/ and $medium->{$1} = 1, next;
/^modified\s*$/ and next;
$_ and $urpm->{error}(N("syntax error in config file at line %s", $.));
}
@@ -531,49 +531,66 @@ sub probe_medium {
$medium->{url} ||= $medium->{clear_url};
- unless ($medium->{ignore} || $medium->{hdlist}) {
- $medium->{hdlist} = "hdlist.$medium->{name}.cz";
- -e "$urpm->{statedir}/$medium->{hdlist}" or $medium->{hdlist} = "hdlist.$medium->{name}.cz2";
- -e "$urpm->{statedir}/$medium->{hdlist}" or
- $medium->{ignore} = 1, $urpm->{error}(N("unable to find hdlist file for \"%s\", medium ignored", $medium->{name}));
- }
- unless ($medium->{ignore} || $medium->{list}) {
- unless (defined $medium->{url}) {
- $medium->{list} = "list.$medium->{name}";
- unless (-e "$urpm->{statedir}/$medium->{list}") {
- $medium->{ignore} = 1, $urpm->{error}(N("unable to find list file for \"%s\", medium ignored", $medium->{name}));
- }
- }
- }
-
- #- there is a little more to do at this point as url is not known, inspect directly list file for it.
- unless ($medium->{url}) {
- my %probe;
- if (-r "$urpm->{statedir}/$medium->{list}") {
- local *L;
- open L, "$urpm->{statedir}/$medium->{list}";
- while (<L>) {
- #- /./ is end of url marker in list file (typically generated by a
- #- find . -name "*.rpm" > list
- #- for exportable list file.
- /^(.*)\/\.\// and $probe{$1} = undef;
- /^(.*)\/[^\/]*$/ and $probe{$1} = undef;
- }
- close L;
- }
- foreach (sort { length($a) <=> length($b) } keys %probe) {
- if ($medium->{url}) {
- $medium->{url} eq substr($_, 0, length($medium->{url})) or
- $medium->{ignore} || $urpm->{error}(N("incoherent list file for \"%s\", medium ignored", $medium->{name})),
- $medium->{ignore} = 1, last;
- } else {
- $medium->{url} = $_;
+ if ($medium->{virtual}) {
+ #- a virtual medium need to have an url available without using a list file.
+ if ($medium->{hdlist} || $medium->{list}) {
+ $medium->{ignore} = 1;
+ $urpm->{error}(N("virtual medium \"%s\" should not have defined hdlist or list file, medium ignored",
+ $medium->{name}));
+ }
+ unless ($medium->{url}) {
+ $medium->{ignore} = 1;
+ $urpm->{error}(N("virtual medium \"%s\" should have a clear url, medium ignored",
+ $medium->{name}));
+ }
+ } else {
+ unless ($medium->{ignore} || $medium->{hdlist}) {
+ $medium->{hdlist} = "hdlist.$medium->{name}.cz";
+ -e "$urpm->{statedir}/$medium->{hdlist}" or $medium->{hdlist} = "hdlist.$medium->{name}.cz2";
+ -e "$urpm->{statedir}/$medium->{hdlist}" or
+ $medium->{ignore} = 1,
+ $urpm->{error}(N("unable to find hdlist file for \"%s\", medium ignored", $medium->{name}));
+ }
+ unless ($medium->{ignore} || $medium->{list}) {
+ unless (defined $medium->{url}) {
+ $medium->{list} = "list.$medium->{name}";
+ unless (-e "$urpm->{statedir}/$medium->{list}") {
+ $medium->{ignore} = 1,
+ $urpm->{error}(N("unable to find list file for \"%s\", medium ignored", $medium->{name}));
+ }
}
}
- unless ($options{nocheck_access}) {
- $medium->{url} or
- $medium->{ignore} || $urpm->{error}(N("unable to inspect list file for \"%s\", medium ignored", $medium->{name})),
- $medium->{ignore} = 1; #, last; keeping it cause perl to exit caller loop ...
+
+ #- there is a little more to do at this point as url is not known, inspect directly list file for it.
+ unless ($medium->{url}) {
+ my %probe;
+ if (-r "$urpm->{statedir}/$medium->{list}") {
+ local *L;
+ open L, "$urpm->{statedir}/$medium->{list}";
+ while (<L>) {
+ #- /./ is end of url marker in list file (typically generated by a
+ #- find . -name "*.rpm" > list
+ #- for exportable list file.
+ /^(.*)\/\.\// and $probe{$1} = undef;
+ /^(.*)\/[^\/]*$/ and $probe{$1} = undef;
+ }
+ close L;
+ }
+ foreach (sort { length($a) <=> length($b) } keys %probe) {
+ if ($medium->{url}) {
+ $medium->{url} eq substr($_, 0, length($medium->{url})) or
+ $medium->{ignore} || $urpm->{error}(N("incoherent list file for \"%s\", medium ignored", $medium->{name})),
+ $medium->{ignore} = 1, last;
+ } else {
+ $medium->{url} = $_;
+ }
+ }
+ unless ($options{nocheck_access}) {
+ $medium->{url} or
+ $medium->{ignore} || $urpm->{error}(N("unable to inspect list file for \"%s\", medium ignored",
+ $medium->{name})),
+ $medium->{ignore} = 1;
+ }
}
}
@@ -642,7 +659,7 @@ sub write_config {
foreach (qw(hdlist with_hdlist list removable md5sum key_ids)) {
$medium->{$_} and printf F " %s: %s\n", $_, $medium->{$_};
}
- foreach (qw(update ignore synthesis modified)) {
+ foreach (qw(update ignore synthesis modified virtual)) {
$medium->{$_} and printf F " %s\n", $_;
}
printf F "}\n\n";
@@ -746,7 +763,23 @@ sub configure {
unless ($options{nodepslist}) {
foreach (grep { !$_->{ignore} && (!$options{update} || $_->{update}) } @{$urpm->{media} || []}) {
delete @{$_}{qw(start end)};
- if ($options{callback}) {
+ if ($_->{virtual}) {
+ my $path = $_->{url} =~ /^file:\/*(\/[^\/].*[^\/])\/*$/ && $1;
+ if ($path) {
+ if ($_->{synthesis}) {
+ $urpm->{log}(N("examining synthesis file [%s]", "$path/$_->{with_hdlist}"));
+ eval { ($_->{start}, $_->{end}) = $urpm->parse_synthesis("$path/$_->{with_hdlist}",
+ callback => $options{callback}) };
+ } else {
+ $urpm->{log}(N("examining hdlist file [%s]", "$path/$_->{with_hdlist}"));
+ eval { ($_->{start}, $_->{end}) = $urpm->parse_hdlist("$path/$_->{with_hdlist}",
+ packing => 1, callback => $options{callback}) };
+ }
+ } else {
+ $urpm->{error}(N("virtual medium \"%s\" is not local, medium ignored", $_->{name}));
+ $_->{ignore} = 1;
+ }
+ } else {
if ($options{hdlist} && -s "$urpm->{statedir}/$_->{hdlist}" > 32) {
$urpm->{log}(N("examining hdlist file [%s]", "$urpm->{statedir}/$_->{hdlist}"));
eval { ($_->{start}, $_->{end}) = $urpm->parse_hdlist("$urpm->{statedir}/$_->{hdlist}",
@@ -761,23 +794,12 @@ sub configure {
packing => 1, callback => $options{callback}) };
}
}
+ }
+ unless ($_->{ignore}) {
unless (defined $_->{start} && defined $_->{end}) {
- $urpm->{error}(N("problem reading hdlist file of medium \"%s\"", $_->{name}));
+ $urpm->{error}(N("problem reading hdlist or synthesis file of medium \"%s\"", $_->{name}));
$_->{ignore} = 1;
}
- } else {
- if (-s "$urpm->{statedir}/synthesis.$_->{hdlist}" > 32) {
- $urpm->{log}(N("examining synthesis file [%s]", "$urpm->{statedir}/synthesis.$_->{hdlist}"));
- eval { ($_->{start}, $_->{end}) = $urpm->parse_synthesis("$urpm->{statedir}/synthesis.$_->{hdlist}") };
- }
- unless (defined $_->{start} && defined $_->{end}) {
- $urpm->{log}(N("examining hdlist file [%s]", "$urpm->{statedir}/$_->{hdlist}"));
- eval { ($_->{start}, $_->{end}) = $urpm->parse_hdlist("$urpm->{statedir}/$_->{hdlist}", packing => 1) };
- unless (defined $_->{start} && defined $_->{end}) {
- $urpm->{error}(N("problem reading synthesis file of medium \"%s\"", $_->{name}));
- $_->{ignore} = 1;
- }
- }
}
}
}
@@ -847,20 +869,30 @@ sub add_medium {
$url =~ s|(.*?)/*$|$1|;
#- creating the medium info.
- $medium = { name => $name,
- url => $url,
- hdlist => "hdlist.$name.cz",
- list => "list.$name",
- update => $options{update},
- modified => 1,
- };
+ if ($options{virtual}) {
+ $url =~ m|^file:/*(/[^/].*)/| or $urpm->{fatal}(5, N("virtual medium need to local"));
+
+ $medium = { name => $name,
+ url => $url,
+ update => $options{update},
+ virtual => 1,
+ };
+ } else {
+ $medium = { name => $name,
+ url => $url,
+ hdlist => "hdlist.$name.cz",
+ list => "list.$name",
+ update => $options{update},
+ modified => 1,
+ };
+
+ #- check to see if the medium is using file protocol or removable medium.
+ $url =~ /^(removable[^:]*|file):\/(.*)/ and $urpm->probe_removable_device($medium);
+ }
#- check if a password is visible, if not set clear_url.
$url =~ m|([^:]*://[^/:\@]*:)[^/:\@]*(\@.*)| or $medium->{clear_url} = $url;
- #- check to see if the medium is using file protocol or removable medium.
- $url =~ /^(removable[^:]*|file):\/(.*)/ and $urpm->probe_removable_device($medium);
-
#- all flags once everything has been computed.
$with_hdlist and $medium->{with_hdlist} = $with_hdlist;
@@ -1077,14 +1109,34 @@ sub update_media {
#- we still need to read it and all synthesis will be written if
#- a unresolved provides is found.
#- to speed up the process, we only read the synthesis at the begining.
- $urpm->{log}(N("examining synthesis file [%s]", "$urpm->{statedir}/synthesis.$medium->{hdlist}"));
- eval { ($medium->{start}, $medium->{end}) = $urpm->parse_synthesis("$urpm->{statedir}/synthesis.$medium->{hdlist}") };
- unless (defined $medium->{start} && defined $medium->{end}) {
- $urpm->{log}(N("examining hdlist file [%s]", "$urpm->{statedir}/$medium->{hdlist}"));
- eval { ($medium->{start}, $medium->{end}) = $urpm->parse_hdlist("$urpm->{statedir}/$medium->{hdlist}", packing => 1) };
+ delete @{$medium}{qw(start end)};
+ if ($medium->{virtual}) {
+ my $path = $medium->{url} =~ /^file:\/*(\/[^\/].*[^\/])\/*$/ && $1;
+ if ($path) {
+ if ($medium->{synthesis}) {
+ $urpm->{log}(N("examining synthesis file [%s]", "$path/$medium->{with_hdlist}"));
+ eval { ($medium->{start}, $medium->{end}) = $urpm->parse_synthesis("$path/$medium->{with_hdlist}") };
+ } else {
+ $urpm->{log}(N("examining hdlist file [%s]", "$path/$medium->{with_hdlist}"));
+ eval { ($medium->{start}, $medium->{end}) = $urpm->parse_hdlist("$path/$medium->{with_hdlist}",
+ packing => 1) };
+ }
+ } else {
+ $urpm->{error}(N("virtual medium \"%s\" is not local, medium ignored", $medium->{name}));
+ $_->{ignore} = 1;
+ }
+ } else {
+ $urpm->{log}(N("examining synthesis file [%s]", "$urpm->{statedir}/synthesis.$medium->{hdlist}"));
+ eval { ($medium->{start}, $medium->{end}) = $urpm->parse_synthesis("$urpm->{statedir}/synthesis.$medium->{hdlist}") };
+ unless (defined $medium->{start} && defined $medium->{end}) {
+ $urpm->{log}(N("examining hdlist file [%s]", "$urpm->{statedir}/$medium->{hdlist}"));
+ eval { ($medium->{start}, $medium->{end}) = $urpm->parse_hdlist("$urpm->{statedir}/$medium->{hdlist}", packing => 1) };
+ }
+ }
+ unless ($medium->{ignore}) {
unless (defined $medium->{start} && defined $medium->{end}) {
#- this is almost a fatal error, ignore it by default?
- $urpm->{error}(N("problem reading synthesis file of medium \"%s\"", $medium->{name}));
+ $urpm->{error}(N("Aproblem reading synthesis file of medium \"%s\"", $medium->{name}));
$medium->{ignore} = 1;
}
}
@@ -1198,7 +1250,7 @@ sub update_media {
eval { ($medium->{start}, $medium->{end}) =
$urpm->parse_hdlist("$urpm->{statedir}/$medium->{hdlist}", packing => 1) };
unless (defined $medium->{start} && defined $medium->{end}) {
- $urpm->{error}(N("problem reading synthesis file of medium \"%s\"", $medium->{name}));
+ $urpm->{error}(N("Bproblem reading synthesis file of medium \"%s\"", $medium->{name}));
$medium->{ignore} = 1;
}
}
@@ -1254,7 +1306,7 @@ sub update_media {
eval { ($medium->{start}, $medium->{end}) =
$urpm->parse_hdlist("$urpm->{statedir}/$medium->{hdlist}", packing => 1) };
unless (defined $medium->{start} && defined $medium->{end}) {
- $urpm->{error}(N("problem reading synthesis file of medium \"%s\"", $medium->{name}));
+ $urpm->{error}(N("Cproblem reading synthesis file of medium \"%s\"", $medium->{name}));
$medium->{ignore} = 1;
}
}
@@ -1407,7 +1459,7 @@ sub update_media {
eval { ($medium->{start}, $medium->{end}) =
$urpm->parse_hdlist("$urpm->{statedir}/$medium->{hdlist}", packing => 1) };
unless (defined $medium->{start} && defined $medium->{end}) {
- $urpm->{error}(N("problem reading synthesis file of medium \"%s\"", $medium->{name}));
+ $urpm->{error}(N("Cproblem reading synthesis file of medium \"%s\"", $medium->{name}));
$medium->{ignore} = 1;
}
}
@@ -1505,7 +1557,7 @@ sub update_media {
eval { ($medium->{start}, $medium->{end}) =
$urpm->parse_hdlist("$urpm->{statedir}/$medium->{hdlist}", packing => 1) };
unless (defined $medium->{start} && defined $medium->{end}) {
- $urpm->{error}(N("problem reading synthesis file of medium \"%s\"", $medium->{name}));
+ $urpm->{error}(N("Dproblem reading synthesis file of medium \"%s\"", $medium->{name}));
$medium->{ignore} = 1;
}
}
@@ -1655,7 +1707,7 @@ sub update_media {
$urpm->{log}(N("examining synthesis file [%s]", "$urpm->{statedir}/synthesis.$medium->{hdlist}"));
eval { ($medium->{start}, $medium->{end}) = $urpm->parse_synthesis("$urpm->{statedir}/synthesis.$medium->{hdlist}") };
unless (defined $medium->{start} && defined $medium->{end}) {
- $urpm->{error}(N("problem reading synthesis file of medium \"%s\"", $medium->{name}));
+ $urpm->{error}(N("Eproblem reading synthesis file of medium \"%s\"", $medium->{name}));
$medium->{ignore} = 1;
}
} else {
@@ -1736,11 +1788,13 @@ sub update_media {
}
#- check if synthesis file can be built.
if (($urpm->{second_pass} || $medium->{modified_synthesis}) && !$medium->{modified}) {
- $urpm->build_synthesis(start => $medium->{start},
- end => $medium->{end},
- synthesis => "$urpm->{statedir}/synthesis.$medium->{hdlist}",
- );
- $urpm->{log}(N("built hdlist synthesis file for medium \"%s\"", $medium->{name}));
+ unless ($medium->{virtual}) {
+ $urpm->build_synthesis(start => $medium->{start},
+ end => $medium->{end},
+ synthesis => "$urpm->{statedir}/synthesis.$medium->{hdlist}",
+ );
+ $urpm->{log}(N("built hdlist synthesis file for medium \"%s\"", $medium->{name}));
+ }
#- keep in mind we have modified database, sure at this point.
$urpm->{modified} = 1;
}
@@ -2870,10 +2924,12 @@ sub unselected_packages {
sub translate_why_unselected {
my ($urpm, $state, @l) = @_;
- map { my @froms = keys %{$state->{rejected}{$_}{backtrack}{closure} || {}};
- my @unsatisfied = @{$state->{rejected}{$_}{backtrack}{unsatisfied} || []};
+ map { my $rb = $state->{rejected}{$_}{backtrack};
+ my @froms = keys %{$rb->{closure} || {}};
+ my @unsatisfied = @{$rb->{unsatisfied} || []};
my $s = join ", ", ((map { N("due to missing %s", $_) } @froms),
- (map { N("due to unsatisfied %s", $_) } @unsatisfied));
+ (map { N("due to unsatisfied %s", $_) } @unsatisfied),
+ $rb->{promote} ? N("trying to promote %s by selection of %s", $rb->{promote}, $rb->{psel}) : @{[]});
$_ . ($s ? " ($s)" : '');
} @l;
}
diff --git a/urpmi b/urpmi
index 034c7ed3..418100d6 100755
--- a/urpmi
+++ b/urpmi
@@ -732,7 +732,7 @@ if ($nok) {
if ($test) {
message(N("Installation is possible"));
} else {
- @{$state->{transaction} || []} == 1 && $verbose >= 0 and message(N("Everything already installed"), $auto);
+ @{$state->{transaction} || []} == 0 && $verbose >= 0 and message(N("Everything already installed"), $auto);
}
}
diff --git a/urpmi.addmedia b/urpmi.addmedia
index fe294a15..7239eb7d 100755
--- a/urpmi.addmedia
+++ b/urpmi.addmedia
@@ -72,6 +72,8 @@ and [options] are from
installed mandrake-release package.
") . N(" --arch - use specified architecture, the default is arch of
mandrake-release package installed.
+") . N(" --virtual - create virtual media wich are always up-to-date,
+ only file:// protocol is allowed.
") . N(" -c - clean headers cache directory.
") . N(" -f - force generation of hdlist files.
");
@@ -113,6 +115,7 @@ and [options] are from
/^--version$/ and $options{version} = shift @_, next;
/^--arch$/ and $options{arch} = shift @_, next;
/^--update$/ and $options{update} = 1, next;
+ /^--virtual$/ and $options{virtual} = 1, next;
/^-/ and die $usage . N("\nunknown options '%s'\n", $_);
($name, $url, $with, $relative_hdlist) = ($_, @_);
last;
@@ -180,13 +183,14 @@ and [options] are from
}
#- sort according to url or location if possible.
!$url || $l && $l =~ /$url/i || $burl =~ /$url/i or next;
- $urpm->add_medium($name, $burl, $relative_hdlist, update => $options{update}, index_name => 0);
+ $urpm->add_medium($name, $burl, $relative_hdlist,
+ virtual => $options{virtual}, update => $options{update}, index_name => 0);
}
close F;
} else {
$with || $relative_hdlist and die N("%s\nno need to give <relative path of hdlist> with --distrib", $usage);
- $urpm->add_distrib_media($name, $url, update => $options{update});
+ $urpm->add_distrib_media($name, $url, virtual => $options{virtual}, update => $options{update});
}
$urpm->update_media(%options, callback => \&urpm::sync_logger);
@@ -207,7 +211,7 @@ and [options] are from
$options{probe_with} || $with eq "with" or die N("%s\n`with' missing for network media\n", $usage);
}
- $urpm->add_medium($name, $url, $relative_hdlist, update => $options{update});
+ $urpm->add_medium($name, $url, $relative_hdlist, virtual => $options{virtual}, update => $options{update});
$urpm->update_media(%options, callback => \&urpm::sync_logger);
#- check creation of media (during update has been successfull)
diff --git a/urpmi.spec b/urpmi.spec
index 814b0c2b..f38e89f7 100644
--- a/urpmi.spec
+++ b/urpmi.spec
@@ -2,14 +2,14 @@
Name: urpmi
Version: 4.4
-Release: 4mdk
+Release: 5mdk
License: GPL
Source0: %{name}.tar.bz2
Source1: %{name}.logrotate
Summary: User mode rpm install
URL: http://cvs.mandrakesoft.com/cgi-bin/cvsweb.cgi/soft/urpmi
Requires: eject webfetch perl-DateManip >= 5.40 gnupg
-PreReq: perl-Locale-gettext >= 1.01-7mdk rpmtools >= 4.3-6mdk perl-URPM >= 0.91-3mdk
+PreReq: perl-Locale-gettext >= 1.01-7mdk rpmtools >= 4.3-6mdk perl-URPM >= 0.91-6mdk
BuildRequires: bzip2-devel gettext rpm-devel >= 4.0.3 perl-MDK-Common-devel
BuildRoot: %{_tmppath}/%{name}-buildroot
BuildArch: noarch
@@ -202,6 +202,11 @@ $urpm->update_media;
%changelog
+* Thu Jun 19 2003 François Pons <fpons@mandrakesoft.com> 4.4-5mdk
+- fixed everything already installed annoying message.
+- added --virtual to urpmi.addmedia to handle virtual media.
+- added promotion message reason for backtrack.
+
* Wed Jun 18 2003 François Pons <fpons@mandrakesoft.com> 4.4-4mdk
- added --env to urpmq and urpmf (simplest to examine now).
- fixed --allow-nodeps and --allow-force no more taken into