summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--urpm.pm12
-rw-r--r--urpm/args.pm10
-rw-r--r--urpm/cfg.pm1
-rw-r--r--urpm/download.pm7
4 files changed, 23 insertions, 7 deletions
diff --git a/urpm.pm b/urpm.pm
index 0f481f71..34198243 100644
--- a/urpm.pm
+++ b/urpm.pm
@@ -58,11 +58,9 @@ sub new {
}
#- syncing algorithms.
-#- currently wget and curl methods are implemented; trying to find the best
-#- (and one which will work :-)
sub sync_webfetch {
- my $urpm = shift @_;
- my $options = shift @_;
+ my $urpm = shift;
+ my $options = shift;
my %files;
#- currently ftp and http protocols are managed by curl or wget,
#- ssh and rsync protocols are managed by rsync *AND* ssh.
@@ -77,6 +75,9 @@ sub sync_webfetch {
$urpm->{fatal}(10, $@) if $@;
delete @files{qw(removable file)};
}
+ for my $cpt (qw(wget-options curl-options rsync-options)) {
+ $options->{$cpt} = $urpm->{options}{$cpt} if defined $urpm->{options}{$cpt};
+ }
if ($files{ftp} || $files{http} || $files{https}) {
my @webfetch = qw(curl wget);
my @available_webfetch = grep { -x "/usr/bin/$_" } @webfetch;
@@ -174,6 +175,9 @@ sub read_config {
split-level
strict-arch
verify-rpm
+ curl-options
+ rsync-options
+ wget-options
)) {
if (defined $config->{''}{$opt} && !exists $urpm->{options}{$opt}) {
$urpm->{options}{$opt} = $config->{''}{$opt};
diff --git a/urpm/args.pm b/urpm/args.pm
index 4700402a..9b62d1d8 100644
--- a/urpm/args.pm
+++ b/urpm/args.pm
@@ -90,6 +90,9 @@ my %options_spec = (
'parallel=s' => \$::parallel,
wget => sub { $urpm->{options}{downloader} = 'wget' },
curl => sub { $urpm->{options}{downloader} = 'curl' },
+ 'curl-options=s' => sub { $urpm->{options}{'curl-options'} = $_[1] },
+ 'rsync-options=s' => sub { $urpm->{options}{'rsync-options'} = $_[1] },
+ 'wget-options=s' => sub { $urpm->{options}{'wget-options'} = $_[1] },
'limit-rate=s' => sub { $urpm->{options}{'limit-rate'} = $_[1] },
'resume!' => sub { $urpm->{options}{resume} = $_[1] },
'retry=s' => sub { $urpm->{options}{retry} = $_[1] },
@@ -349,13 +352,16 @@ foreach my $k ("help|h", "version", "no-locales", "update", "media|mediums=s",
$options_spec{urpmf}{$k} = $options_spec{urpmi}{$k};
}
-foreach my $k ("help|h", "version", "wget", "curl", "proxy=s", "proxy-user=s") {
+foreach my $k ("help|h", "version", "wget", "curl", "proxy=s", "proxy-user=s",
+ "wget-options=s", "curl-options=s", "rsync-options=s")
+{
$options_spec{'urpmi.update'}{$k} =
$options_spec{urpmq}{$k} = $options_spec{urpmi}{$k};
}
foreach my $k ("help|h", "wget", "curl", "proxy=s", "proxy-user=s", "c", "f", "z",
- "limit-rate=s", "no-md5sum", "update", "norebuild!")
+ "limit-rate=s", "no-md5sum", "update", "norebuild!",
+ "wget-options=s", "curl-options=s", "rsync-options=s")
{
$options_spec{'urpmi.addmedia'}{$k} = $options_spec{'urpmi.update'}{$k};
}
diff --git a/urpm/cfg.pm b/urpm/cfg.pm
index ea233d85..7cf5f62f 100644
--- a/urpm/cfg.pm
+++ b/urpm/cfg.pm
@@ -150,6 +150,7 @@ sub load_config ($;$) {
|prohibit-remove
|downloader
|retry
+ |(?:curl|rsync|wget)-options
)\s*:\s*['"]?(.*?)['"]?$/x
and $config{$medium}{$1} = $2, next;
/^key[-_]ids\s*:\s*['"]?(.*?)['"]?$/
diff --git a/urpm/download.pm b/urpm/download.pm
index c005ede1..afde787e 100644
--- a/urpm/download.pm
+++ b/urpm/download.pm
@@ -220,6 +220,7 @@ sub sync_wget {
"--no-check-certificate",
"--timeout=$CONNECT_TIMEOUT",
"-NP",
+ (defined $options->{'wget-options'} ? split /\s+/, $options->{'wget-options'} : ()),
$options->{dir},
@_
) . " |";
@@ -293,7 +294,9 @@ sub sync_curl {
"--stderr", "-", # redirect everything to stdout
"--disable-epsv",
"--connect-timeout", $CONNECT_TIMEOUT,
- "-s", "-I", @ftp_files) . " |";
+ "-s", "-I",
+ (defined $options->{'curl-options'} ? split /\s+/, $options->{'curl-options'} : ()),
+ @ftp_files) . " |";
while (<$curl>) {
if (/Content-Length:\s*(\d+)/) {
!$cur_ftp_file || exists($ftp_files_info{$cur_ftp_file}{size})
@@ -353,6 +356,7 @@ sub sync_curl {
"-f",
"--disable-epsv",
"--connect-timeout", $CONNECT_TIMEOUT,
+ (defined $options->{'curl-options'} ? split /\s+/, $options->{'curl-options'} : ()),
"--stderr", "-", # redirect everything to stdout
@all_files) . " |";
local $/ = \1; #- read input by only one char, this is slow but very nice (and it works!).
@@ -429,6 +433,7 @@ sub sync_rsync {
($options->{compress} ? qw(-z) : @{[]}),
($options->{ssh} ? qw(-e ssh) : @{[]}),
qw(--partial --no-whole-file),
+ (defined $options->{'rsync-options'} ? split /\s+/, $options->{'rsync-options'} : ()),
"'$file' '$options->{dir}' |");
local $/ = \1; #- read input by only one char, this is slow but very nice (and it works!).
while (<$rsync>) {