Browse Source

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
Guillem Jover 14 years ago
parent
commit
649c745f7e
2 changed files with 18 additions and 5 deletions
  1. 2 0
      debian/changelog
  2. 16 5
      scripts/Dpkg/Control/HashCore.pm

+ 2 - 0
debian/changelog

@@ -138,6 +138,8 @@ dpkg (1.17.0) UNRELEASED; urgency=low
   * Add new dpkg-shlibdeps -l option to add private shared library directories.
     This should be used instead of abusing LD_LIBRARY_PATH to pass the paths,
     which might be problematic when cross-compiling. Closes: #698881
+  * Only apply empy line and comma cleanups when doing substvar replacements
+    on fields where those are relevant. Closes: #659814
 
   [ Raphaël Hertzog ]
   * Fix dpkg-maintscript-helper rm_conffile and mv_conffile to do nothing

+ 16 - 5
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?