#!/usr/bin/perl #***************************************************************************** # # Copyright (c) 2004 Guillaume Cottenceau (gc at mandrakesoft dot com) # Copyright (c) 2006-2007 Thierry Vignaud # Copyright (c) 2004-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: gurpmi.addmedia 261187 2009-10-01 14:44:34Z tv $ use strict; BEGIN { @ARGV == 0 || "@ARGV" =~ /-h/ and do { print "usage: gurpmi.addmedia [options] [with ] where is one of [file:/]/ ftp://:\@/ ftp:/// http:/// removable:// and [options] are from --distrib install a set of media from a distribution --silent-success don't show popup window on success --update create an update medium, or discard non-update media (when used with --distrib) --mirrorlist is a mirror list "; exit(0); }; } use ManaTools::Rpmdragora::init; use ManaTools::rpmdragora; use ManaTools::Rpmdragora::open_db; use ManaTools::Rpmdragora::formatting; use ManaTools::Shared::Locales; use ManaTools::Privileges; use urpm::media; use MDK::Common::File qw(cat_); my $loc = ManaTools::rpmdragora::locale(); # if (ManaTools::Privileges::is_root_capability_required()) { require ManaTools::Shared::GUI; my $sh_gui = ManaTools::Shared::GUI->new(); $sh_gui->warningMsgBox({ title => "gurpmi.addmedia", text => $loc->N("root privileges required"), }); exit (-1); } use ManaTools::rpmdragora; use Getopt::Long; ## TODO remove as soon as possible $::isStandalone = 1; ManaTools::rpmdragora::readconf(); my $fromfile; if (@ARGV == 1 && $ARGV[0] =~ /\.urpmi-media$/) { @ARGV = map { s/^\s*//; s/\s*$//; $_ } split /\n/, cat_($ARGV[0]); $fromfile = 1; } my ($update, $distrib, $silent_success) = (0, 0, 0); my ($mirrorlist, $with_dir); GetOptions( 'update' => \$update, 'distrib' => \$distrib, 'silent-success' => \$silent_success, 'mirrorlist=s' => \$mirrorlist, 'urpmi-root=s' => \$::rpmdragora_options{'urpmi-root'}[0], ); # compatibility with -update: if ($ARGV[0] =~ /^-?-update/) { $update = 1; shift @ARGV; } my @addmedia_args; my @names; while (@ARGV) { my ($name, $url) = @ARGV; if ($mirrorlist) { ($with_dir, $url) = ($url, undef); } elsif ($distrib) { ($name, $url) = ('', $name); } elsif ($url !~ m,^(([^:]*):/)?/,) { ManaTools::rpmdragora::interactive_msg('gurpmi.addmedia', ManaTools::Rpmdragora::formatting::escape_text_for_TextView_markup_format( $loc->N("bad (for local directory, the path must be absolute)") . "\n\n$url")); ManaTools::rpmdragora::myexit(-1); } push @addmedia_args, [ $name, $url ]; push @names, $name; shift @ARGV foreach 1 .. 2; } if ($mirrorlist && $distrib && !@addmedia_args) { @addmedia_args = [ '' ]; } $fromfile and do { ManaTools::rpmdragora::interactive_msg('gurpmi.addmedia', $loc->N("%s Is it ok to continue?", $distrib || !@names ? $loc->N("You are about to add new package media. That means you will be able to add new software packages to your system from these new media.") : 1 < @names ? $loc->N("You are about to add new package medium, %s. That means you will be able to add new software packages to your system from these new media.", join ", ", @names) : $loc->N("You are about to add a new package medium, `%s'. That means you will be able to add new software packages to your system from that new medium.", $names[0]) ), yesno => 1) or ManaTools::rpmdragora::myexit(-1); }; my $urpm = ManaTools::Rpmdragora::open_db::fast_open_urpmi_db(); my $success = 1; foreach (@addmedia_args) { #- NB: that short circuits $success = $success && ManaTools::rpmdragora::add_medium_and_check( $urpm, { distrib => $distrib }, $_->[0], $_->[1], MDK::Common::Func::if_(!$distrib, undef), MDK::Common::Func::if_($update, update => $update, only_updates => $update), mirrorlist => $mirrorlist, MDK::Common::Func::if_($with_dir, 'with-dir' => $with_dir), ); } if ($success) { my $message = $distrib ? $loc->N("Successfully added media.") : @names > 1 ? $loc->N("Successfully added media %s.", join ", ", @names) : $loc->N("Successfully added medium `%s'.", $names[0]); ManaTools::rpmdragora::interactive_msg('gurpmi.addmedia', $message) if !$silent_success; ManaTools::rpmdragora::myexit(0); } else { ManaTools::rpmdragora::myexit(-1); }