Do not split --include values again in run_download and run_install

Closes: #1028977
This commit is contained in:
Johannes Schauer Marin Rodrigues 2023-01-16 12:13:21 +01:00
parent 3db3779b6a
commit f27ed490d6
Signed by untrusted user: josch
GPG key ID: F2CBA5C78FBD83E1
4 changed files with 27 additions and 28 deletions

View file

@ -358,3 +358,7 @@ Needs-QEMU: true
Test: jessie-or-older Test: jessie-or-older
Needs-QEMU: true Needs-QEMU: true
Variants: essential apt minbase Variants: essential apt minbase
Test: apt-patterns
Test: apt-patterns-custom

View file

@ -2374,18 +2374,7 @@ sub run_download() {
info "nothing to download -- skipping..."; info "nothing to download -- skipping...";
return ([], \@cached_debs); return ([], \@cached_debs);
} }
my @apt_argv = ('install'); my @apt_argv = ('install', @{ $options->{include} });
for my $incl (@{ $options->{include} }) {
for my $pkg (split /[,\s]+/, $incl) {
# strip leading and trailing whitespace
$pkg =~ s/^\s+|\s+$//g;
# skip if the remainder is an empty string
if ($pkg eq '') {
next;
}
push @apt_argv, $pkg;
}
}
@dl_debs = run_apt_download_progress({ @dl_debs = run_apt_download_progress({
APT_ARGV => [@apt_argv], APT_ARGV => [@apt_argv],
@ -2913,20 +2902,9 @@ sub run_essential() {
sub run_install() { sub run_install() {
my $options = shift; my $options = shift;
my %pkgs_to_install; my @pkgs_to_install = (@{ $options->{include} });
for my $incl (@{ $options->{include} }) {
for my $pkg (split /[,\s]+/, $incl) {
# strip leading and trailing whitespace
$pkg =~ s/^\s+|\s+$//g;
# skip if the remainder is an empty string
if ($pkg eq '') {
next;
}
$pkgs_to_install{$pkg} = ();
}
}
if ($options->{variant} eq 'buildd') { if ($options->{variant} eq 'buildd') {
$pkgs_to_install{'build-essential'} = (); push @pkgs_to_install, 'build-essential';
} }
if (any { $_ eq $options->{variant} } if (any { $_ eq $options->{variant} }
('required', 'important', 'standard', 'buildd')) { ('required', 'important', 'standard', 'buildd')) {
@ -2943,7 +2921,8 @@ sub run_install() {
$priority = '?and(?or(~prequired,~pimportant,~pstandard),' $priority = '?and(?or(~prequired,~pimportant,~pstandard),'
. '?not(?essential))'; . '?not(?essential))';
} }
$pkgs_to_install{ push @pkgs_to_install,
(
"?narrow(" "?narrow("
. ( . (
length($options->{suite}) length($options->{suite})
@ -2955,9 +2934,8 @@ sub run_install() {
) )
. "?architecture($options->{nativearch})," . "?architecture($options->{nativearch}),"
. "$priority)" . "$priority)"
} = (); );
} }
my @pkgs_to_install = keys %pkgs_to_install;
if ($options->{mode} eq 'chrootless') { if ($options->{mode} eq 'chrootless') {
if (scalar @pkgs_to_install > 0) { if (scalar @pkgs_to_install > 0) {

8
tests/apt-patterns Normal file
View file

@ -0,0 +1,8 @@
#!/bin/sh
set -eu
export LC_ALL=C.UTF-8
trap "rm -f /tmp/debian-chroot.tar" EXIT INT TERM
{{ CMD }} --mode={{ MODE }} --variant=essential \
--include '?or(?exact-name(dummy-does-not-exist),?exact-name(apt))' \
{{ DIST }} /tmp/debian-chroot.tar {{ MIRROR }}
tar -tf /tmp/debian-chroot.tar | sort | grep -v ./var/lib/apt/extended_states | diff -u tar1.txt -

View file

@ -0,0 +1,9 @@
#!/bin/sh
set -eu
export LC_ALL=C.UTF-8
trap "rm -f /tmp/debian-chroot.tar" EXIT INT TERM
{{ CMD }} --mode={{ MODE }} --variant=custom \
--include '?narrow(?archive(^{{ DIST }}$),?essential)' \
--include apt \
{{ DIST }} /tmp/debian-chroot.tar {{ MIRROR }}
tar -tf /tmp/debian-chroot.tar | sort | diff -u tar1.txt -