it is wrong to match the suite for the package set selection if more than one apt index is given (because the suite name might be equal) instead check whether there is more than zero matching and more than zero not-matching suites
This commit is contained in:
parent
2ccd025a25
commit
43ca8a5211
1 changed files with 20 additions and 5 deletions
25
mmdebstrap
25
mmdebstrap
|
@ -1960,7 +1960,8 @@ sub run_download() {
|
|||
my %ess_pkgs;
|
||||
my %ess_pkgs_target;
|
||||
my %pkgs_to_install_target = %pkgs_to_install;
|
||||
my $num_indices = 0;
|
||||
my $num_suite_matches = 0;
|
||||
my $num_suite_mismatch = 0;
|
||||
open(
|
||||
my $pipe_apt,
|
||||
'-|',
|
||||
|
@ -1972,8 +1973,8 @@ sub run_download() {
|
|||
) or error "cannot start apt-get indextargets: $!";
|
||||
while (my $line = <$pipe_apt>) {
|
||||
chomp $line;
|
||||
$num_indices++;
|
||||
my ($codename, $suite, $fname) = split /\t/, $line, 3;
|
||||
debug "processing indextarget output for $codename $suite $fname";
|
||||
my $suite_matches = 0;
|
||||
if (
|
||||
defined $options->{suite}
|
||||
|
@ -1981,6 +1982,9 @@ sub run_download() {
|
|||
($options->{suite} eq $codename or $options->{suite} eq $suite)
|
||||
) {
|
||||
$suite_matches = 1;
|
||||
$num_suite_matches++;
|
||||
} else {
|
||||
$num_suite_mismatch++;
|
||||
}
|
||||
open(my $pipe_cat, '-|', '/usr/lib/apt/apt-helper', 'cat-file',
|
||||
$fname)
|
||||
|
@ -2076,9 +2080,20 @@ sub run_download() {
|
|||
close $pipe_apt;
|
||||
$? == 0 or error "apt-get indextargets failed: $?";
|
||||
|
||||
# comparing the size of both arrays is sufficient because items are
|
||||
# either only added to one or to both
|
||||
if (defined $options->{suite} and $num_indices > 1) {
|
||||
# We now have two package sets, %pkgs_to_install and
|
||||
# %pkgs_to_install_target, where the latter was only filled if the
|
||||
# suite matched the codename or the suite name of one of the given
|
||||
# apt indices.
|
||||
# We only need to bother with this distinction if one or more of the
|
||||
# indices matched and one or more of the indices mismatched. If either
|
||||
# nothing matched or all matched, then we can just use %pkgs_to_install
|
||||
if ( defined $options->{suite}
|
||||
and $num_suite_matches > 0
|
||||
and $num_suite_mismatch > 0) {
|
||||
# Now we know that some matched and some didn't. But we only
|
||||
# replace the results from all indices with the results from those
|
||||
# indices that matched if the results are actually different and
|
||||
# if there is more than zero packages from the indices that matched
|
||||
if (scalar keys %ess_pkgs_target > 0
|
||||
and keys %ess_pkgs != %ess_pkgs_target) {
|
||||
info( "multiple sources defined, using those matching "
|
||||
|
|
Loading…
Reference in a new issue