summaryrefslogtreecommitdiff
path: root/scripts/Dpkg/Control/HashCore.pm
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/Dpkg/Control/HashCore.pm')
-rw-r--r--scripts/Dpkg/Control/HashCore.pm21
1 files changed, 16 insertions, 5 deletions
diff --git a/scripts/Dpkg/Control/HashCore.pm b/scripts/Dpkg/Control/HashCore.pm
index 597ad371a..236e111b4 100644
--- a/scripts/Dpkg/Control/HashCore.pm
+++ b/scripts/Dpkg/Control/HashCore.pm
@@ -22,6 +22,7 @@ our $VERSION = '1.00';
use Dpkg::Gettext;
use Dpkg::ErrorHandling;
+use Dpkg::Control::FieldsCore;
# This module cannot use Dpkg::Control::Fields, because that one makes use
# of Dpkg::Vendor which at the same time uses this module, which would turn
@@ -373,14 +374,24 @@ sub apply_substvars {
foreach my $f (keys %$self) {
my $v = $substvars->substvars($self->{$f}, %opts);
if ($v ne $self->{$f}) {
+ my $sep;
+
+ $sep = field_get_sep_type($f);
+
# If we replaced stuff, ensure we're not breaking
# a dependency field by introducing empty lines, or multiple
# commas
- $v =~ s/\n[ \t]*(\n|$)/$1/; # Drop empty/whitespace-only lines
- # TODO: do this only for dependency fields
- $v =~ s/,[\s,]*,/,/g;
- $v =~ s/^\s*,\s*//;
- $v =~ s/\s*,\s*$//;
+
+ if ($sep & (FIELD_SEP_COMMA | FIELD_SEP_LINE)) {
+ # Drop empty/whitespace-only lines
+ $v =~ s/\n[ \t]*(\n|$)/$1/;
+ }
+
+ if ($sep & FIELD_SEP_COMMA) {
+ $v =~ s/,[\s,]*,/,/g;
+ $v =~ s/^\s*,\s*//;
+ $v =~ s/\s*,\s*$//;
+ }
}
$v =~ s/\$\{\}/\$/g; # XXX: what for?