aboutsummaryrefslogtreecommitdiffstats
path: root/Rpmdrake/open_db.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Rpmdrake/open_db.pm')
-rw-r--r--Rpmdrake/open_db.pm87
1 files changed, 87 insertions, 0 deletions
diff --git a/Rpmdrake/open_db.pm b/Rpmdrake/open_db.pm
new file mode 100644
index 00000000..06c12d4e
--- /dev/null
+++ b/Rpmdrake/open_db.pm
@@ -0,0 +1,87 @@
+package Rpmdrake::open_db;
+#*****************************************************************************
+#
+# Copyright (c) 2002 Guillaume Cottenceau
+# Copyright (c) 2002-2007 Thierry Vignaud <tvignaud@mandriva.com>
+# Copyright (c) 2003, 2004, 2005 MandrakeSoft SA
+# Copyright (c) 2005-2007 Mandriva SA
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2, as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+#*****************************************************************************
+#
+# $Id$
+
+use strict;
+use MDK::Common;
+use URPM;
+use urpm;
+
+use Exporter;
+our @ISA = qw(Exporter);
+our @EXPORT = qw(open_rpm_db open_urpmi_db);
+
+
+# because rpm blocks some signals when rpm DB is opened, we don't keep open around:
+sub open_rpm_db {
+ my ($o_force) = @_;
+ my $host;
+ log::explanations("opening the RPM database");
+ if ($::rpmdrake_options{parallel} && ((undef, $host) = @{$::rpmdrake_options{parallel}})) {
+ my $done if 0;
+ my $dblocation = "/var/cache/urpmi/distantdb/$host";
+ if (!$done || $o_force) {
+ print "syncing db from $host to $dblocation...";
+ mkdir_p "$dblocation/var/lib/rpm";
+ system "rsync -Sauz -e ssh $host:/var/lib/rpm/ $dblocation/var/lib/rpm";
+ $? == 0 or die "Couldn't sync db from $host to $dblocation";
+ $done = 1;
+ print "done.\n";
+ }
+ URPM::DB::open($dblocation) or die "Couldn't open RPM DB";
+ } else {
+ URPM::DB::open($::rpmdrake_options{'rpm-root'}[0]) or die "Couldn't open RPM DB ($::rpmdrake_options{'rpm-root'}[0])";
+ }
+}
+
+sub open_urpmi_db() {
+ my $error_happened;
+ my $urpm = urpm->new;
+ $urpm->{options}{'split-level'} ||= 20;
+ $urpm->{options}{'split-length'} ||= 1;
+ $urpm->{options}{'verify-rpm'} = !$::rpmdrake_options{'no-verify-rpm'} if defined $::rpmdrake_options{'no-verify-rpm'};
+ $urpm->{options}{auto} = $::rpmdrake_options{auto} if defined $::rpmdrake_options{auto};
+ urpm::set_files($urpm, $::rpmdrake_options{'urpmi-root'}[0]) if $::rpmdrake_options{'urpmi-root'}[0];
+ urpm::args::set_root($urpm, $::rpmdrake_options{'rpm-root'}[0]) if $::rpmdrake_options{'rpm-root'}[0];
+
+ $urpm::args::rpmdrake_options{justdb} = $::rpmdrake_options{justdb};
+
+ $urpm->{fatal} = sub {
+ $error_happened = 1;
+ interactive_msg(N("Fatal error"),
+ N("A fatal error occurred: %s.", $_[1]));
+ };
+ my $media = ref $::rpmdrake_options{media} ? join(',', @{$::rpmdrake_options{media}}) : '';
+ urpm::media::read_config($urpm);
+
+ my $searchmedia = join(',', map { $_->{name} } grep { $_->{ignore} && $_->{name} =~ /backport/i } @{$urpm->{media}});
+ urpm::media::configure($urpm, media => $media, if_($searchmedia, searchmedia => $searchmedia));
+ if ($error_happened) {
+ touch('/etc/urpmi/urpmi.cfg');
+ exec('edit-urpm-sources.pl');
+ }
+ $urpm;
+}
+
+1;