diff options
author | Christophe Fergeau <cfergeau@mandriva.com> | 2010-03-09 11:23:41 +0000 |
---|---|---|
committer | Christophe Fergeau <cfergeau@mandriva.com> | 2010-03-09 11:23:41 +0000 |
commit | 549a1f50e9199733f79fdaa73945f3ce2b713328 (patch) | |
tree | 807c121ae3a3cf181fc3200b2b7847a7cdaa56ea | |
parent | e4bc8db60fbaeb59fe82337d3b9ad2efc361810b (diff) | |
download | urpmi-549a1f50e9199733f79fdaa73945f3ce2b713328.tar urpmi-549a1f50e9199733f79fdaa73945f3ce2b713328.tar.gz urpmi-549a1f50e9199733f79fdaa73945f3ce2b713328.tar.bz2 urpmi-549a1f50e9199733f79fdaa73945f3ce2b713328.tar.xz urpmi-549a1f50e9199733f79fdaa73945f3ce2b713328.zip |
remember which media local packages came from
It's sometimes possible that a package is available from both a
local medium (CDROM) and a distant one. This causes problems
when the package isn't signed with the same key (this is bad
but happens on MES5 install CDs) as urpmi tends to get confused
about where a package comes from and then check the package against
the wrong key.
Packages are assigned IDs by urpmi, and these IDs are
used to figure out the package media. This ID is also used as an
identifier to "recognize" identical packages coming from different
media, so we need to be careful when manipulating it. In particular,
we can't assign the right ID to every package right away because then
this would break package downloading (we'd download packages available
on local media).
When processing packages to download, if we encounter a local
package, we assign it the right ID. This assumes the list of media
in the blist are sorted by order of relevance (ie prioritary ones
first).
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | urpm/get_pkgs.pm | 7 |
2 files changed, 10 insertions, 1 deletions
@@ -1,3 +1,7 @@ +- urpmi + o don't confuse media/media keys when a package is available from different + media (eg CDROM/network) + Version 6.14.15 - 5 June 2009 - urpmi diff --git a/urpm/get_pkgs.pm b/urpm/get_pkgs.pm index adf776d4..8e2a0c16 100644 --- a/urpm/get_pkgs.pm +++ b/urpm/get_pkgs.pm @@ -179,7 +179,12 @@ sub download_packages_of_distant_media { #- examine all files to know what can be indexed on multiple media. while (my ($id, $pkg) = each %{$blist->{pkgs}}) { #- the given URL is trusted, so the file can safely be ignored. - defined $sources->{$id} and next; + if (defined $sources->{$id}) { + $new_sources{$id} = [ $pkg->id, $sources->{$id} ]; + delete $sources->{$id}; + next; + } + exists $new_sources{$id} and next; if (urpm::is_local_medium($blist->{medium})) { my $local_file = file_from_local_url(urpm::blist_pkg_to_url($blist, $pkg)); |