summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--urpm.pm177
-rwxr-xr-xurpmi160
-rw-r--r--urpmi.spec28
-rwxr-xr-xurpmq38
4 files changed, 244 insertions, 159 deletions
diff --git a/urpm.pm b/urpm.pm
index d2292529..f6721479 100644
--- a/urpm.pm
+++ b/urpm.pm
@@ -532,41 +532,107 @@ sub configure {
my ($urpm, %options) = @_;
$urpm->clean;
- $urpm->read_config(%options);
- if ($options{media}) {
- $urpm->select_media(split ',', $options{media});
- foreach (grep { !$_->{modified} } @{$urpm->{media} || []}) {
- #- this is only a local ignore that will not be saved.
- $_->{ignore} = 1;
- }
- }
- foreach (grep { !$_->{ignore} && (!$options{update} || $_->{update}) } @{$urpm->{media} || []}) {
- delete @{$_}{qw(start end)};
- if ($options{callback}) {
- if (-s "$urpm->{statedir}/$_->{hdlist}" > 32) {
- $urpm->{log}(_("examining hdlist file [%s]", "$urpm->{statedir}/$_->{hdlist}"));
- eval { ($_->{start}, $_->{end}) = $urpm->parse_hdlist("$urpm->{statedir}/$_->{hdlist}", 0) };
- }
- unless (defined $_->{start} && defined $_->{end}) {
- $urpm->{error}(_("problem reading hdlist file of medium \"%s\"", $_->{name}));
+ if ($options{synthesis}) {
+ #- synthesis take precedence over media, update options.
+ $options{media} || $options{update} || $options{parallel} and
+ $urpm->{fatal}(1, _("--synthesis cannot be used with --media, --update or --parallel"));
+ $urpm->parse_synthesis($options{synthesis});
+ } else {
+ $urpm->read_config(%options);
+ if ($options{media}) {
+ $urpm->select_media(split ',', $options{media});
+ foreach (grep { !$_->{modified} } @{$urpm->{media} || []}) {
+ #- this is only a local ignore that will not be saved.
$_->{ignore} = 1;
+ }
+ }
+ $options{parallel} and unlink "$urpm->{cachedir}/partial/parallel.cz";
+ foreach (grep { !$_->{ignore} && (!$options{update} || $_->{update}) } @{$urpm->{media} || []}) {
+ delete @{$_}{qw(start end)};
+ if ($options{callback}) {
+ if (-s "$urpm->{statedir}/$_->{hdlist}" > 32) {
+ $urpm->{log}(_("examining hdlist file [%s]", "$urpm->{statedir}/$_->{hdlist}"));
+ eval { ($_->{start}, $_->{end}) = $urpm->parse_hdlist("$urpm->{statedir}/$_->{hdlist}", 0) };
+ }
+ unless (defined $_->{start} && defined $_->{end}) {
+ $urpm->{error}(_("problem reading hdlist file of medium \"%s\"", $_->{name}));
+ $_->{ignore} = 1;
+ } else {
+ #- medium has been read correclty, now call the callback for each packages.
+ #- it is the responsability of callback to pack the header.
+ foreach ($_->{start} .. $_->{end}) {
+ $options{callback}->($urpm, $_, %options);
+ }
+ }
} else {
- #- medium has been read correclty, now call the callback for each packages.
- #- it is the responsability of callback to pack the header.
- foreach ($_->{start} .. $_->{end}) {
- $options{callback}->($urpm, $_, %options);
+ if (-s "$urpm->{statedir}/synthesis.$_->{hdlist}" > 32) {
+ $urpm->{log}(_("examining synthesis file [%s]", "$urpm->{statedir}/synthesis.$_->{hdlist}"));
+ eval { ($_->{start}, $_->{end}) = $urpm->parse_synthesis("$urpm->{statedir}/synthesis.$_->{hdlist}") };
+ }
+ unless (defined $_->{start} && defined $_->{end}) {
+ $urpm->{error}(_("problem reading synthesis file of medium \"%s\"", $_->{name}));
+ $_->{ignore} = 1;
+ } else {
+ $options{parallel} and system "cat '$urpm->{statedir}/synthesis.$_->{hdlist}' >> $urpm->{cachedir}/partial/parallel.cz";
}
}
- } else {
- if (-s "$urpm->{statedir}/synthesis.$_->{hdlist}" > 32) {
- $urpm->{log}(_("examining synthesis file [%s]", "$urpm->{statedir}/synthesis.$_->{hdlist}"));
- eval { ($_->{start}, $_->{end}) = $urpm->parse_synthesis("$urpm->{statedir}/synthesis.$_->{hdlist}") };
+ }
+ }
+ if ($options{bug}) {
+ #- and a dump of rpmdb itself as synthesis file.
+ my $db = URPM::DB::open($options{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 >'$options{bug}/rpmdb.cz'";
+ $db->traverse(sub{
+ my ($p) = @_;
+ #- this is not right but may be enough.
+ my $files = join '@', grep { exists $urpm->{provides}{$_} } $p->files;
+ $p->pack_header;
+ $p->build_info(fileno *RPMDB, $files);
+ });
+ close RPMDB;
+ }
+ if ($options{parallel}) {
+ my ($parallel_options, $parallel_handler);
+ #- handle parallel configuration, examine all module available that
+ #- will handle the parallel mode (configuration is /etc/urpmi/parallel.cfg).
+ local ($_, *PARALLEL);
+ open PARALLEL, "/etc/urpmi/parallel.cfg";
+ while (<PARALLEL>) {
+ chomp; s/#.*$//; s/^\s*//; s/\s*$//;
+ /\s*([^:]*):(.*)/ or $urpm->{error}(_("unable to parse \"%s\" in file [%s]", $_, "/etc/urpmi/parallel.cfg")), next;
+ $1 eq $options{parallel} and $parallel_options = ($parallel_options && "\n") . $2;
+ }
+ close PARALLEL;
+ #- if a configuration options has been found, use it else fatal error.
+ if ($parallel_options) {
+ foreach my $dir (grep { -d $_ } map { "$_/urpm" } @INC) {
+ local *DIR;
+ opendir DIR, $dir;
+ while ($_ = readdir DIR) {
+ -f "$dir/$_" or next;
+ $urpm->{log}->(_("examining parallel handler in file [%s]", "$dir/$_"));
+ eval { require "$dir/$_"; $parallel_handler = $urpm->handle_parallel_options($parallel_options) };
+ $parallel_handler and last;
+ }
+ closedir DIR;
+ $parallel_handler and last;
}
- unless (defined $_->{start} && defined $_->{end}) {
- $urpm->{error}(_("problem reading synthesis file of medium \"%s\"", $_->{name}));
- $_->{ignore} = 1;
+ }
+ if ($parallel_handler) {
+ if ($parallel_handler->{nodes}) {
+ $urpm->{log}->(_("found parallel handler for nodes: %s", join(', ', keys %{$parallel_handler->{nodes}})));
}
+ $urpm->{parallel_handler} = $parallel_handler;
+ } else {
+ $urpm->{fatal}(1, _("unable to use parallel option \"%s\"", $options{parallel}));
}
+ } else {
+ #- parallel is exclusive against root options.
+ $urpm->{root} = $options{root};
}
}
@@ -1432,7 +1498,7 @@ sub relocate_depslist_provides {
#- register local packages for being installed, keep track of source.
sub register_rpms {
my ($urpm, @files) = @_;
- my ($start, $id, $error);
+ my ($start, $id, $error, %requested);
#- examine each rpm and build the depslist for them using current
#- depslist and provides environment.
@@ -1447,8 +1513,9 @@ sub register_rpms {
$urpm->{source}{$id} = $1 ? $_ : "./$_";
}
$error and $urpm->{fatal}(1, _("error registering local packages"));
+ $start <= $id and @requested{($start .. $id)} = (1) x ($id-$start+1);
- $start <= $id ? ($start, $id) : ();
+ %requested;
}
#- search packages registered by their name by storing their id into packages hash.
@@ -1558,6 +1625,35 @@ sub search_packages {
$result;
}
+#- do the resolution of dependencies.
+sub resolve_dependencies {
+ my ($urpm, $state, $requested, %options) = @_;
+
+ if ($urpm->{parallel_handler}) {
+ #- let each node determine what is requested, according to handler given.
+ $urpm->{parallel_handler}->parallel_resolve_dependencies("$urpm->{cachedir}/partial/parallel.cz", @_);
+ } else {
+ my $db;
+
+ if ($options{rpmdb}) {
+ $db = new URPM;
+ $db->parse_synthesis($options{rpmdb});
+ } else {
+ $db = URPM::DB::open($urpm->{root});
+ }
+
+ my $sig_handler = sub { undef $db; exit 3 };
+ local $SIG{INT} = $sig_handler;
+ local $SIG{QUIT} = $sig_handler;
+
+ require URPM::Resolve;
+ #- auto select package for upgrading the distribution.
+ $options{auto_select} and $urpm->request_packages_to_upgrade($db, $state, $requested, requested => undef);
+
+ $urpm->resolve_requested($db, $state, $requested, %options);
+ }
+}
+
#- get out of package that should not be upgraded.
sub deselect_unwanted_packages {
my ($urpm, $packages, %options) = @_;
@@ -1598,11 +1694,8 @@ sub get_source_packages {
#- examine each medium to search for packages.
#- now get rpm file name in hdlist to match list file.
- foreach my $medium (@{$urpm->{media} || []}) {
- foreach ($medium->{start} .. $medium->{end}) {
- my $pkg = $urpm->{depslist}[$_];
- $file2fullnames{($pkg->filename =~ /(.*)\.rpm$/ && $1) || $pkg->fullname}{$pkg->fullname} = undef;
- }
+ foreach my $pkg (@{$urpm->{depslist} || []}) {
+ $file2fullnames{($pkg->filename =~ /(.*)\.rpm$/ && $1) || $pkg->fullname}{$pkg->fullname} = undef;
}
#- examine the local repository, which is trusted.
@@ -1675,7 +1768,7 @@ sub download_source_packages {
my (%sources, @distant_sources, %media, %removables);
#- make sure everything is correct on input...
- @{$urpm->{media}} == @$list or return;
+ @{$urpm->{media} || []} == @$list or return;
#- examine if given medium is already inside a removable device.
my $check_notfound = sub {
@@ -1863,9 +1956,9 @@ sub install_logger {
#- install packages according to each hashes (install or upgrade).
sub install {
- my ($urpm, $prefix, $remove, $install, $upgrade, %options) = @_;
- my $db = URPM::DB::open($prefix, 1); #- open in read/write mode.
- my $trans = $db->create_transaction($prefix);
+ my ($urpm, $remove, $install, $upgrade, %options) = @_;
+ my $db = URPM::DB::open($urpm->{root}, 1); #- open in read/write mode.
+ my $trans = $db->create_transaction($urpm->{root});
my @l;
local *F;
@@ -1911,4 +2004,10 @@ sub install {
@l = $trans->run($urpm, %options);
}
+#- install all files to node as remembered according to resolving done.
+sub parallel_install {
+ my ($urpm, $remove, $install, $upgrade, %options) = @_;
+ $urpm->{parallel_handler}->parallel_install(@_);
+}
+
1;
diff --git a/urpmi b/urpmi
index e621dd7a..6dc07801 100755
--- a/urpmi
+++ b/urpmi
@@ -24,13 +24,15 @@ import urpm _;
#- default options.
my $update = 0;
-my $media = 0;
+my $media = '';
+my $synthesis = '';
my $auto = 0;
my $allow_medium_change = 0;
my $auto_select = 0;
my $force = 0;
my $allow_nodeps = 0;
my $allow_force = 0;
+my $parallel = '';
my $sync = undef;
my $X = 0;
my $WID = 0;
@@ -66,6 +68,7 @@ usage:
", $urpm::VERSION) . _(" --help - print this help message.
") . _(" --update - use only update media.
") . _(" --media - use only the media listed by comma.
+") . _(" --synthesis - use the synthesis given instead of urpmi db.
") . _(" --auto - automatically select a package in choices.
") . _(" --auto-select - automatically select packages to upgrade the system.
") . _(" --fuzzy - impose fuzzy search (same as -y).
@@ -76,6 +79,7 @@ usage:
dependencies checking.
") . _(" --allow-force - allow asking user to install packages without
dependencies checking and integrity.
+") . _(" --parallel - distributed urpmi accross machines of alias.
") . _(" --wget - use wget to retrieve distant files.
") . _(" --curl - use curl to retrieve distant files.
") . _(" --proxy - use specified HTTP proxy, the port number is assumed
@@ -107,6 +111,7 @@ while (defined($_ = shift @ARGV)) {
/^--update$/ and do { $update = 1; next };
/^--media$/ and do { push @nextargv, \$media; next };
/^--mediums$/ and do { push @nextargv, \$media; next };
+ /^--synthesis$/ and do { push @nextargv, \$synthesis; next };
/^--auto$/ and do { $auto = 1; next };
/^--allow-medium-change$/ and do { $allow_medium_change = 1; next };
/^--auto-select$/ and do { $auto_select = 1; next };
@@ -116,6 +121,7 @@ while (defined($_ = shift @ARGV)) {
/^--force$/ and do { $force = 1; next };
/^--allow-nodeps$/ and do { $allow_nodeps = 1; next };
/^--allow-force$/ and do { $allow_force = 1; next };
+ /^--parallel$/ and do { push @nextargv, \$parallel; next };
/^--wget$/ and do { $sync = sub { my $options = shift @_;
if (ref $options) { $options->{prefer} = 'wget' }
else { $options = { dir => $options, prefer => 'wget' } }
@@ -266,33 +272,15 @@ $verbose or $urpm->{log} = sub {};
$urpm->configure(nocheck_access => $env || $uid > 0,
media => $media,
+ synthesis => $synthesis,
update => $update,
+ root => $root,
+ bug => $bug,
+ parallel => $parallel,
);
-my ($start, $end) = $urpm->register_rpms(@files, @src_files);
-
-if ($bug) {
- #- 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) = @_;
- #- this is not right but may be enough.
- my $files = join '@', grep { exists $urpm->{provides}{$_} } $p->files;
- $p->pack_header;
- $p->build_info(fileno *RPMDB, $files);
- });
- close RPMDB;
-}
-
-#- select individual files.
my $state = {};
-my %requested;
-defined $start && defined $end and @requested{($start .. $end)} = (1) x ($end-$start+1);
+my %requested = $urpm->register_rpms(@files, @src_files);
#- search the packages according the selection given by the user,
#- basesystem is added to the list so if it need to be upgraded,
@@ -303,7 +291,7 @@ if (@names) {
all => $all,
use_provides => $use_provides,
fuzzy => $fuzzy)
- or $force or exit 1;
+ or $force or exit 1;
}
if (@src_names) {
$urpm->search_packages(\%requested, [ @src_names ],
@@ -311,7 +299,7 @@ if (@src_names) {
use_provides => $use_provides,
fuzzy => $fuzzy,
src => 1)
- or $force or exit 1;
+ or $force or exit 1;
}
#- filter to add in packages selected required packages.
@@ -343,29 +331,13 @@ sub ask_choice {
$choices->[$n - 1];
};
-#- open/close of database should be moved here, in order to allow testing
-#- some bogus case and check for integrity.
-{
- my $db;
-
- #- take care of specific environment.
- if ($env) {
- $db = new URPM;
- $db->parse_synthesis("$env/rpmdb.cz");
- } else {
- $db = URPM::DB::open($root);
- }
-
- my $sig_handler = sub { undef $db; exit 3 };
- local $SIG{INT} = $sig_handler;
- local $SIG{QUIT} = $sig_handler;
-
- require URPM::Resolve;
- #- auto select package for upgrading the distribution.
- $auto_select and $urpm->request_packages_to_upgrade($db, $state, \%requested, requested => undef);
-
- $urpm->resolve_requested($db, $state, \%requested, callback_choices => \&ask_choice);
-}
+#- do the resolution of dependencies between requested package (and auto selection if any).
+#- handle parallel option if any.
+$urpm->resolve_dependencies($state, \%requested,
+ rpmdb => $env && "$env/rpmdb.cz",
+ auto_select => $auto_select,
+ callback_choices => \&ask_choice,
+ );
if (%{$state->{ask_unselect} || {}}) {
unless ($auto) {
@@ -414,7 +386,7 @@ my $sum = 0;
my @root_only;
foreach my $pkg (sort { $a->name cmp $b->name } @{$urpm->{depslist}}[keys %{$state->{selected}}]) {
- $ask_user ||= $pkg->flag_required || $auto_select;
+ $ask_user ||= $pkg->flag_required || $auto_select || $parallel;
my $fullname = $pkg->fullname;
if (!$env && $uid > 0 && $pkg->arch ne 'src') {
@@ -507,55 +479,63 @@ if (%sources_install || %sources) {
}
}
- message(_("installing %s\n", join(' ', values %sources_install, values %sources)));
- log_it(scalar localtime, " ", join(' ', values %sources_install, values %sources), "\n");
#- check for local files.
foreach (values %sources_install, values %sources) {
m|^/| && ! -e $_ or next;
message(_("Installation failed, some files are missing.\nYou may want to update your urpmi database"));
exit 2;
}
- $urpm->{log}("starting installing packages");
- if ($uid > 0) {
- system("rpm", "-i$rpm_opt", values %sources_install, values %sources, ($root ? ("--root", $root) : ()));
- $? and message(_("Installation failed")), exit 1;
- exit 0;
+
+ if ($parallel) {
+ message(_("distributing %s\n", join(' ', values %sources_install, values %sources)));
+ #- no remove are handle here, automatically done by each distant node.
+ $urpm->{log}("starting distributed install");
+ $urpm->parallel_install([ keys %{$state->{ask_remove} || {}} ], \%sources_install, \%sources);
} else {
- if ($X && !$root) {
- system("rpm", "-e", "--nodeps", keys %{$state->{ask_remove} || {}}, ($root ? ("--root", $root) : ()));
- system("grpmi", $WID ? ("--WID=$WID") : (),
- (map { ("-noupgrade", $_) } values %sources_install), values %sources);
- if ($?) {
- #- grpmi handles --nodeps and --force by itself,
- #- and $WID is defined when integrated in rpminst.
- $WID or message(_("Installation failed"));
- exit(($? >> 8) + 32); #- forward grpmi error + 32
- }
+ message(_("installing %s\n", join(' ', values %sources_install, values %sources)));
+ log_it(scalar localtime, " ", join(' ', values %sources_install, values %sources), "\n");
+ $urpm->{log}("starting installing packages");
+ if ($uid > 0) {
+ system("rpm", "-i$rpm_opt", values %sources_install, values %sources, ($root ? ("--root", $root) : ()));
+ $? and message(_("Installation failed")), exit 1;
+ exit 0;
} else {
- my @l = $urpm->install($root, [ keys %{$state->{ask_remove} || {}} ], \%sources_install, \%sources,
- translate_message => 1);
- if (@l) {
- message(_("Installation failed") . ":\n" . join("\n", map { "\t$_" } @l));
-
- m|^/| && !-e $_ and exit 2 foreach values %sources_install, values %sources; #- missing local file
- $auto || !$allow_nodeps && !$allow_force and exit 1; #- if auto has been set, avoid asking user.
-
- $noexpr = _("Nn");
- $yesexpr = _("Yy");
- message_input(_("Try installation without checking dependencies? (y/N) "), $force && $yesexpr) =~ /[$yesexpr]/
- or exit 1;
- $urpm->{log}("starting installing packages without deps");
- @l = $urpm->install($root, [ keys %{$state->{ask_remove} || {}} ], \%sources_install, \%sources,
- translate_message => 1, nodeps => 1);
+ if ($X && !$root) {
+ system("rpm", "-e", "--nodeps", keys %{$state->{ask_remove} || {}}, ($root ? ("--root", $root) : ()));
+ system("grpmi", $WID ? ("--WID=$WID") : (),
+ (map { ("-noupgrade", $_) } values %sources_install), values %sources);
+ if ($?) {
+ #- grpmi handles --nodeps and --force by itself,
+ #- and $WID is defined when integrated in rpminst.
+ $WID or message(_("Installation failed"));
+ exit(($? >> 8) + 32); #- forward grpmi error + 32
+ }
+ } else {
+ my @l = $urpm->install([ keys %{$state->{ask_remove} || {}} ], \%sources_install, \%sources,
+ translate_message => 1);
if (@l) {
- message(_("Installation failed") . ":\n" . join("\n", map { "\t$_" } @l));
- !$allow_force and exit 1;
- message_input(_("Try installation even more strongly (--force)? (y/N) "), $force && $yesexpr) =~ /[$yesexpr]/
- or exit 1;
- $urpm->{log}("starting force installing packages without deps");
- @l = $urpm->install($root, [ keys %{$state->{ask_remove} || {}} ], \%sources_install, \%sources,
- translate_message => 1, nodeps => 1, force => 1);
- @l and $urpm->fatal(2, _("Installation failed") . ":\n" . join("\n", map { "\t$_" } @l));
+ message(_("Installation failed") . ":\n" . join("\n", map { "\t$_" } @l));
+
+ m|^/| && !-e $_ and exit 2 foreach values %sources_install, values %sources; #- missing local file
+ $auto || !$allow_nodeps && !$allow_force and exit 1; #- if auto has been set, avoid asking user.
+
+ $noexpr = _("Nn");
+ $yesexpr = _("Yy");
+ message_input(_("Try installation without checking dependencies? (y/N) "), $force && $yesexpr) =~ /[$yesexpr]/
+ or exit 1;
+ $urpm->{log}("starting installing packages without deps");
+ @l = $urpm->install([ keys %{$state->{ask_remove} || {}} ], \%sources_install, \%sources,
+ translate_message => 1, nodeps => 1);
+ if (@l) {
+ message(_("Installation failed") . ":\n" . join("\n", map { "\t$_" } @l));
+ !$allow_force and exit 1;
+ message_input(_("Try installation even more strongly (--force)? (y/N) "), $force && $yesexpr) =~ /[$yesexpr]/
+ or exit 1;
+ $urpm->{log}("starting force installing packages without deps");
+ @l = $urpm->install([ keys %{$state->{ask_remove} || {}} ], \%sources_install, \%sources,
+ translate_message => 1, nodeps => 1, force => 1);
+ @l and $urpm->fatal(2, _("Installation failed") . ":\n" . join("\n", map { "\t$_" } @l));
+ }
}
}
}
diff --git a/urpmi.spec b/urpmi.spec
index f8a55f3d..d6e15501 100644
--- a/urpmi.spec
+++ b/urpmi.spec
@@ -1,14 +1,14 @@
%define group System/Configuration/Packaging
Name: urpmi
-Version: 3.9
-Release: 8mdk
+Version: 4.0
+Release: 1mdk
License: GPL
Source0: %{name}.tar.bz2
Source1: %{name}.logrotate
Summary: User mode rpm install
Requires: eject webfetch perl-DateManip >= 5.40
-PreReq: perl-Locale-gettext rpmtools >= 4.3-6mdk perl-URPM >= 0.50-5mdk
+PreReq: perl-Locale-gettext rpmtools >= 4.3-6mdk perl-URPM >= 0.70-1mdk
BuildRequires: bzip2-devel gettext rpm-devel >= 4.0.3
BuildRoot: %{_tmppath}/%{name}-buildroot
BuildArch: noarch
@@ -34,6 +34,14 @@ gurpmi is a graphical front-end to urpmi
#%description -n autoirpm
#Auto install of rpm on demand
+%package -n urpmi-parallel-ka-run
+Summary: Parallel extensions to urpmi using ka-run
+Requires: urpmi >= 4.0 ka-run >= 2.0-6mdk
+Group: %{group}
+%description -n urpmi-parallel-ka-run
+urpmi-parallel-ka-run is an extensions module to urpmi for handling
+distributed installation using ka-run tools.
+
%prep
%setup -q -n %{name}
@@ -63,6 +71,8 @@ EOF
mkdir -p $RPM_BUILD_ROOT%{perl_vendorlib}
install -m 644 urpm.pm $RPM_BUILD_ROOT%{perl_vendorlib}/urpm.pm
+mkdir -p $RPM_BUILD_ROOT%{perl_vendorlib}/urpm
+install -m 644 urpm.pm $RPM_BUILD_ROOT%{perl_vendorlib}/urpm/parallel_ka_run.pm
mkdir -p $RPM_BUILD_ROOT%{_mandir}/man3
pod2man urpm.pm >$RPM_BUILD_ROOT%{_mandir}/man3/urpm.3
@@ -142,8 +152,20 @@ fi
#%{_bindir}/_irpm
#%doc README-autoirpm-icons autoirpm.README
+%files -n urpmi-parallel-ka-run
+%defattr(-,root,root)
+%{perl_vendorlib}/urpm/parallel_ka_run.pm
+
%changelog
+* Fri Aug 23 2002 François Pons <fpons@mandrakesoft.com> 4.0-1mdk
+- added --parallel options for distributed urpmi.
+- added urpmi module extensions support (only --parallel).
+- added --synthesis options for urpmq/urpmi to use a specific
+ environment.
+- use cache files even if no medium have been defined (for use
+ with --synthesis).
+
* Tue Aug 13 2002 François Pons <fpons@mandrakesoft.com> 3.9-8mdk
- fixed development log still done for progression status, now
removed.
diff --git a/urpmq b/urpmq
index 43718324..0df80787 100755
--- a/urpmq
+++ b/urpmq
@@ -50,6 +50,7 @@ usage:
") . _(" -f - print version, release and arch with name.
") . "\n" . _(" --update - use only update media.
") . _(" --media - use only the media listed by comma.
+") . _(" --synthesis - use the synthesis given instead of urpmi db.
") . _(" --auto-select - automatically select packages to upgrade the system.
") . _(" --fuzzy - impose fuzzy search (same as -y).
") . _(" --list - list available packages.
@@ -79,7 +80,8 @@ for (@ARGV) {
/^--update$/ and do { $query->{update} = 1; next };
/^--media$/ and do { push @nextargv, \$query->{media}; next };
/^--mediums$/ and do { push @nextargv, \$query->{media}; next };
- /^--auto-select$/ and do { $query->{auto_select} = 1; next };
+ /^--synthesis$/ and do { push @nextargv, \$query->{synthesis}; next };
+ /^--auto-select$/ and do { $query->{upgrade} = $query->{auto_select} = 1; next };
/^--fuzzy$/ and do { $query->{fuzzy} = 1; next };
/^--list$/ and do { $query->{list} = 1; next };
/^--src$/ and do { $query->{src} = 1; next };
@@ -137,10 +139,10 @@ $query->{verbose} or $urpm->{log} = sub {};
$urpm->configure(nocheck_access => 1,
media => $query->{media},
+ synthesis => $query->{synthesis},
update => $query->{update},
);
-
my $state = {};
my %requested;
@@ -148,10 +150,7 @@ my %requested;
if ($query->{list}) {
@{$state->{selected}}{0 .. $#{$urpm->{depslist}}} = ();
} else {
- my ($start, $end) = $urpm->register_rpms(@files);
-
- #- select individual files.
- defined $start && defined $end and @requested{($start .. $end)} = ();
+ %requested = $urpm->register_rpms(@files);
#- search the packages according the selection given by the user,
#- basesystem is added to the list so if it need to be upgraded, all its dependency
@@ -176,28 +175,13 @@ if ($query->{list}) {
$state->{selected}{join '|', sort { $a <=> $b } map { $_ ? ($_->id) : () } @$choices} = 0;
};
#- open/close of database should be moved here, in order to allow testing
- #- some bogus case and check for integrity.
+ #- some bogus case and check for integrity. (note auto_select implies upgrade).
if ($query->{auto_select} || $query->{upgrade}) {
- my $db = URPM::DB::open($query->{root});
- my $sig_handler = sub { undef $db; exit 3 };
- local $SIG{INT} = $sig_handler;
- local $SIG{QUIT} = $sig_handler;
-
- require URPM::Resolve;
- #- auto select package for upgrading the distribution.
- if ($query->{auto_select}) {
- my (%to_remove, %keep_files);
-
- $urpm->request_packages_to_upgrade($db, $state, \%requested, requested => 0);
- }
-
- #- filter to add in packages selected required packages.
- if ($query->{upgrade}) {
- $urpm->resolve_requested($db, $state, \%requested, callback_choices => $stop_on_choices);
- #- dependancies are not asked, just clean selected part with added value (undef).
- $query->{deps} or delete @{$state->{selected}}{grep { exists $state->{selected}{$_} &&
- ! defined $state->{selected}{$_}} keys %{$state->{selected}}};
- }
+ $urpm->resolve_dependencies($state, \%requested,
+ auto_select => $query->{auto_select},
+ callback_choices => $stop_on_choices);
+ $query->{deps} or delete @{$state->{selected}}{grep { exists $state->{selected}{$_} &&
+ ! defined $state->{selected}{$_}} keys %{$state->{selected}}};
} elsif ($query->{deps}) {
#- only deps required.
my $empty_db = new URPM; #- URPM has same methods as URPM::DB and empty URPM will be seen as empty URPM::DB.