From 649c745f7ea21ec2628e2b039c7590f3934d7195 Mon Sep 17 00:00:00 2001 From: Guillem Jover Date: Tue, 17 Apr 2012 06:49:24 +0200 Subject: Dpkg::Control::HashCore: Correctly apply substvar text cleanups Use the new information to properly apply substvars when outputting control stanzas, and avoid doing text cleanups on field values where those changes are not relevant. Closes: #659814 --- scripts/Dpkg/Control/HashCore.pm | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'scripts/Dpkg/Control') 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? -- cgit v1.2.3