From b45b0092699f801bae7d59e1806d052bc03fcd7e Mon Sep 17 00:00:00 2001 From: Angelo Naselli Date: Sat, 27 Jun 2015 00:01:08 +0200 Subject: Rpmdragora extension of urpmi_backend::DB --- MANIFEST | 1 + lib/ManaTools/Rpmdragora/DB.pm | 201 +++++++++++++++++++++++++++++++++++++++++ t/06-rpmdragora.t | 5 + 3 files changed, 207 insertions(+) create mode 100644 lib/ManaTools/Rpmdragora/DB.pm diff --git a/MANIFEST b/MANIFEST index 6815b1d..9fc82d5 100644 --- a/MANIFEST +++ b/MANIFEST @@ -47,6 +47,7 @@ lib/ManaTools/Module/Services.pm lib/ManaTools/Module/Users.pm lib/ManaTools/Privileges.pm lib/ManaTools/rpmdragora.pm +lib/ManaTools/Rpmdragora/DB.pm lib/ManaTools/Rpmdragora/edit_urpm_sources.pm lib/ManaTools/Rpmdragora/formatting.pm lib/ManaTools/Rpmdragora/gui.pm diff --git a/lib/ManaTools/Rpmdragora/DB.pm b/lib/ManaTools/Rpmdragora/DB.pm new file mode 100644 index 0000000..f1aad19 --- /dev/null +++ b/lib/ManaTools/Rpmdragora/DB.pm @@ -0,0 +1,201 @@ +# vim: set et ts=4 sw=4: +package ManaTools::Rpmdragora::DB; + +#============================================================= -*-perl-*- + +=head1 NAME + + ManaTools::Rpmdragora::DB - Rpmdragora extension of urpm DB object + +=head1 SYNOPSIS + + use ManaTools::Rpmdragora::DB; + + my $db_man = ManaTools::Rpmdragora::DB->new(); + my $urpm = $db_man->fast_open_urpmi_db(); + + +=head1 DESCRIPTION + + This module is the Rpmdragora extension for the backend to urpm open db + +=head1 SUPPORT + + You can find documentation for this module with the perldoc command: + + perldoc ManaTools::Rpmdragora::DB + +=head1 SEE also + + ManaTools::Shared::urpmi_backend::DB + + +=head1 AUTHOR + + Angelo Naselli + +=head1 COPYRIGHT and LICENSE + +Copyright (c) 2015 Angelo Naselli + from Rpmdrake::open_db: + Copyright (c) 2002 Guillaume Cottenceau + Copyright (C) 2008 Aurelien Lefebvre + Copyright (c) 2002-2014 Thierry Vignaud + 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. + +=head1 METHODS + +=cut + +use Sys::Syslog; +use MDK::Common::File qw(cat_ mkdir_p);use ManaTools::rpmdragora; +use MDK::Common::Func qw(if_); + +use Moose; +extends 'ManaTools::Shared::urpmi_backend::DB'; +use feature 'state'; + +#============================================================= + +=head2 open_rpm_db + +=head3 OUTPUT + + URPM::DB: an URPM opened dataase + +=head3 DESCRIPTION + + this method return an URPM::DB object + +=cut + +#============================================================= +override 'open_rpm_db' => sub { + my ($self, $o_force) = @_; + + $self->rpm_root($::rpmdragora_options{'rpm-root'}[0]) if $::rpmdragora_options{'rpm-root'}[0]; + + my $host; + Sys::Syslog::syslog('info|local1', "opening the RPM database"); + if ($::rpmdragora_options{parallel} && ((undef, $host) = @{$::rpmdragora_options{parallel}})) { + state $done; + 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 { + my $db; + if ($::env) { + #- URPM has same methods as URPM::DB and empty URPM will be seen as empty URPM::DB. + $db = new URPM; + $db->parse_synthesis("$::env/rpmdb.cz"); + } else { + $db = super(); + } + $db or die "Couldn't open RPM DB (" . ($::env ? "$::env/rpmdb.cz" : $::rpmdragora_options{'rpm-root'}[0]) . ")"; + } +}; + +#============================================================= + +=head2 fast_open_urpmi_db + +=head3 OUTPUT + +urpm: an urpm object + +=head3 DESCRIPTION + + this method return an urpm object + +=cut + +#============================================================= +override 'fast_open_urpmi_db' => sub { + my $self = shift; + + $self->urpmi_root($::rpmdragora_options{'urpmi-root'}[0]) if $::rpmdragora_options{'urpmi-root'}[0]; + $self->rpm_root($::rpmdragora_options{'rpm-root'}[0]) if $::rpmdragora_options{'rpm-root'}[0]; + $self->wait_lock($::rpmdragora_options{'wait-lock'}) if $::rpmdragora_options{'wait-lock'}; + $self->verify_rpm(!$::rpmdragora_options{'no-verify-rpm'}) if defined $::rpmdragora_options{'no-verify-rpm'}; + $self->auto($::rpmdragora_options{auto}) if $::rpmdragora_options{auto}; + $self->set_verbosity(1); + $self->justdb($::rpmdragora_options{justdb}) if $::rpmdragora_options{justdb}; + + my $urpm = super(); + + if ($::rpmdragora_options{env} && $::rpmdragora_options{env}[0]) { + $::env = $::rpmdragora_options{env}[0]; + # prevent crashing in URPM.pm prevent when using --env: + $::env = "$ENV{PWD}/$::env" if $::env !~ m!^/!; + urpm::set_env($urpm, $::env); + } + + foreach (@{$urpm->{media}}) { + next if $_->{ignore}; + urpm::media::_tempignore($_, 1) if $ignore_debug_media->[0] && $_->{name} =~ /debug/i; + } + + # TODO check if no media present and find a way to run edit urpm media + + return $urpm; +}; + +#============================================================= + +=head2 open_urpmi_db + +=head3 INPUT + + %urpmi_options: urpmi options used to open and lock urpmi + db. + +=head3 DESCRIPTION + + This method returns an urpm option with a lcok on db, + this method totally overrides the super class + +=cut + +#============================================================= +override 'open_urpmi_db' => sub { + my ($self, %urpmi_options) = @_; + my $urpm = $self->fast_open_urpmi_db(); + + my $searchmedia = $urpmi_options{update} ? undef : join(',', $self->get_inactive_backport_media($urpm)); + my $media = ref $::rpmdragora_options{media} ? join(',', @{$::rpmdragora_options{media}}) : ''; + + $self->lock($urpm) if !$::env; + + my $previous = $::rpmdragora_options{'previous-priority-upgrade'}; + urpm::select::set_priority_upgrade_option($urpm, (ref $previous ? join(',', @$previous) : ())); + urpm::media::configure($urpm, media => $media, MDK::Common::Func::if_($searchmedia, searchmedia => $searchmedia), %urpmi_options); + + return $urpm; +}; + + +1; diff --git a/t/06-rpmdragora.t b/t/06-rpmdragora.t index 49ff7c5..ddaf26a 100644 --- a/t/06-rpmdragora.t +++ b/t/06-rpmdragora.t @@ -5,8 +5,13 @@ use Test::More; BEGIN { use_ok( 'ManaTools::rpmdragora' ) || print "ManaTools::rpmdragora failed!\n"; + use_ok( 'ManaTools::Rpmdragora::DB' ) || print "ManaTools::Rpmdragora::DB failed!\n"; } +ok ( my $obj = ManaTools::Rpmdragora::DB->new(), 'db_new'); +is ( ref($obj->open_rpm_db()), 'URPM::DB', 'open_rpm_db'); +is ( ref($obj->fast_open_urpmi_db()), 'urpm', 'fast_open_urpmi_db'); +is ( ref($obj->open_urpmi_db()), 'urpm', 'open_urpmi_db'); SKIP: { #remember to skip the righ number of tests -- cgit v1.2.1