summaryrefslogtreecommitdiffstats
path: root/urpm/media.pm
diff options
context:
space:
mode:
Diffstat (limited to 'urpm/media.pm')
-rw-r--r--urpm/media.pm40
1 files changed, 36 insertions, 4 deletions
diff --git a/urpm/media.pm b/urpm/media.pm
index ac66c3b2..0e056c63 100644
--- a/urpm/media.pm
+++ b/urpm/media.pm
@@ -11,6 +11,7 @@ use MDV::Distribconf;
our @PER_MEDIA_OPT = qw(
+ conf_file__rel_media
downloader
ignore
key-ids
@@ -144,6 +145,7 @@ sub read_config {
#- per-media options
read_config_add_passwords($urpm, $config);
+ my @media;
foreach my $m (@{$config->{media}}) {
my $medium = _only_media_opts_read($m);
@@ -154,9 +156,22 @@ sub read_config {
$medium->{url} or $urpm->{error}("unable to find url in list file $medium->{name}, medium ignored");
}
- add_existing_medium($urpm, $medium);
+ push @media, $medium;
}
+ require File::Glob;
+ # we can't use perl's glob() because we allow spaces in filename
+ foreach my $conf_file (File::Glob::bsd_glob("$urpm->{configs_dir}/*.cfg")) {
+ $urpm->{debug} and $urpm->{debug}("parsing: $conf_file");
+ my $conf = urpm::cfg::load_ini_config_file_raw($conf_file);
+ foreach my $medium (map { _only_media_opts_read($_) } @$conf) {
+ $medium->{conf_file} = $conf_file;
+ push @media, $medium;
+ }
+ }
+
+ add_existing_medium($urpm, $_) foreach @media;
+
eval { require urpm::ldap; urpm::ldap::load_ldap_media($urpm) };
}
@@ -172,7 +187,12 @@ sub check_existing_medium {
N("unable to access list file of \"%s\", medium ignored", $medium->{name});
} elsif (!$medium->{ignore}
&& !-r any_synthesis($urpm, $medium)) {
- $err = N("unable to access synthesis file of \"%s\", medium ignored", $medium->{name});
+ if ($medium->{conf_file} && $< == 0) {
+ # no pb, we create on the fly
+ $medium->{force_auto_update} = 1;
+ } else {
+ $err = N("unable to access synthesis file of \"%s\", medium ignored", $medium->{name});
+ }
}
if ($err) {
$medium->{ignore} = 1;
@@ -406,11 +426,16 @@ sub write_urpmi_cfg {
#- avoid trashing exiting configuration if it wasn't loaded
$urpm->{media} or return;
+ my %media_per_cfg;
+ foreach (grep { !$_->{external} } @{$urpm->{media}}) {
+ push @{$media_per_cfg{$_->{conf_file} || ''}}, _only_media_opts_write($_);
+ }
+
my $config = {
#- global config options found in the config file, without the ones
#- set from the command-line
global => $urpm->{global_config},
- media => [ map { _only_media_opts_write($_) } grep { !$_->{external} } @{$urpm->{media}} ],
+ media => delete $media_per_cfg{''},
};
remove_passwords_and_write_private_netrc($urpm, $config);
@@ -419,6 +444,13 @@ sub write_urpmi_cfg {
$urpm->{log}(N("wrote config file [%s]", $urpm->{config}));
+ foreach my $conf_file (sort keys %media_per_cfg) {
+ urpm::cfg::write_ini_config($conf_file, $media_per_cfg{$conf_file})
+ or $urpm->{fatal}(6, N("unable to write config file [%s]", $conf_file));
+
+ $urpm->{log}(N("wrote config file [%s]", $conf_file));
+ }
+
#- everything should be synced now.
delete $urpm->{modified};
}
@@ -552,7 +584,7 @@ sub _auto_update_media {
my $errors;
foreach (grep { !$_->{ignore} && (!$options{update} || $_->{update}) &&
- _is_remote_virtual($_) } @{$urpm->{media} || []}) {
+ ($_->{force_auto_update} || _is_remote_virtual($_)) } @{$urpm->{media} || []}) {
_update_medium($urpm, $_, %options) or $errors++;
}
!$errors;