瀏覽代碼

dpkg-gencontrol: now indicates which package is concerned by the substvars warnings

Enhance Dpkg::Substvarst to be able to display a prefix before its
warnings and errors and make use of that facility in dpkg-gencontrol to be
explicit about where the substitution is done.
Raphaël Hertzog 16 年之前
父節點
當前提交
c9ccd372fb
共有 4 個文件被更改,包括 31 次插入9 次删除
  1. 2 0
      debian/changelog
  2. 2 2
      scripts/Dpkg/Control/Hash.pm
  3. 23 5
      scripts/Dpkg/Substvars.pm
  4. 4 2
      scripts/dpkg-gencontrol.pl

+ 2 - 0
debian/changelog

@@ -41,6 +41,8 @@ dpkg (1.15.6) UNRELEASED; urgency=low
   * dpkg-gencontrol no longer warns if a substitution variable provided by -V
   * dpkg-gencontrol no longer warns if a substitution variable provided by -V
     is not used (the warning is meant to catch unused substitutions coming
     is not used (the warning is meant to catch unused substitutions coming
     from the file, those are package specific with debhelper). Closes: #557133
     from the file, those are package specific with debhelper). Closes: #557133
+  * dpkg-gencontrol now indicates which package is concerned by the substvars
+    warning that it displays. Closes: #566837
 
 
   [ Guillem Jover ]
   [ Guillem Jover ]
   * Handle argument parsing in dpkg-checkbuilddeps and dpkg-scanpackages
   * Handle argument parsing in dpkg-checkbuilddeps and dpkg-scanpackages

+ 2 - 2
scripts/Dpkg/Control/Hash.pm

@@ -339,7 +339,7 @@ the corresponding value stored in the Dpkg::Substvars object.
 =cut
 =cut
 
 
 sub apply_substvars {
 sub apply_substvars {
-    my ($self, $substvars) = @_;
+    my ($self, $substvars, %opts) = @_;
 
 
     # Add substvars to refer to other fields
     # Add substvars to refer to other fields
     foreach my $f (keys %$self) {
     foreach my $f (keys %$self) {
@@ -348,7 +348,7 @@ sub apply_substvars {
     }
     }
 
 
     foreach my $f (keys %$self) {
     foreach my $f (keys %$self) {
-        my $v = $substvars->substvars($self->{$f});
+        my $v = $substvars->substvars($self->{$f}, %opts);
 	if ($v ne $self->{$f}) {
 	if ($v ne $self->{$f}) {
 	    # If we replaced stuff, ensure we're not breaking
 	    # If we replaced stuff, ensure we're not breaking
 	    # a dependency field by introducing empty lines, or multiple
 	    # a dependency field by introducing empty lines, or multiple

+ 23 - 5
scripts/Dpkg/Substvars.pm

@@ -70,6 +70,7 @@ sub new {
             "dpkg:Upstream-Version" => $version,
             "dpkg:Upstream-Version" => $version,
             },
             },
         used => {},
         used => {},
+	msg_prefix => "",
     };
     };
     $self->{'vars'}{'dpkg:Upstream-Version'} =~ s/-[^-]+$//;
     $self->{'vars'}{'dpkg:Upstream-Version'} =~ s/-[^-]+$//;
     bless $self, $class;
     bless $self, $class;
@@ -196,11 +197,13 @@ Substitutes variables in $string and return the result in $newstring.
 =cut
 =cut
 
 
 sub substvars {
 sub substvars {
-    my ($self, $v) = @_;
+    my ($self, $v, %opts) = @_;
     my $lhs;
     my $lhs;
     my $vn;
     my $vn;
     my $rhs = '';
     my $rhs = '';
     my $count = 0;
     my $count = 0;
+    $opts{msg_prefix} = $self->{msg_prefix} unless exists $opts{msg_prefix};
+    $opts{no_warn} = 0 unless exists $opts{no_warn};
 
 
     while ($v =~ m/^(.*?)\$\{([-:0-9a-z]+)\}(.*)$/si) {
     while ($v =~ m/^(.*?)\$\{([-:0-9a-z]+)\}(.*)$/si) {
         # If we have consumed more from the leftover data, then
         # If we have consumed more from the leftover data, then
@@ -208,14 +211,16 @@ sub substvars {
         $count = 0 if (length($3) < length($rhs));
         $count = 0 if (length($3) < length($rhs));
 
 
         $count < $maxsubsts ||
         $count < $maxsubsts ||
-            error(_g("too many substitutions - recursive ? - in \`%s'"), $v);
+            error($opts{msg_prefix} .
+	          _g("too many substitutions - recursive ? - in \`%s'"), $v);
         $lhs = $1; $vn = $2; $rhs = $3;
         $lhs = $1; $vn = $2; $rhs = $3;
         if (defined($self->{'vars'}{$vn})) {
         if (defined($self->{'vars'}{$vn})) {
             $v = $lhs . $self->{'vars'}{$vn} . $rhs;
             $v = $lhs . $self->{'vars'}{$vn} . $rhs;
 	    $self->no_warn($vn);
 	    $self->no_warn($vn);
             $count++;
             $count++;
         } else {
         } else {
-            warning(_g("unknown substitution variable \${%s}"), $vn);
+            warning($opts{msg_prefix} . _g("unknown substitution variable \${%s}"),
+	            $vn) unless $opts{no_warn};
             $v = $lhs . $rhs;
             $v = $lhs . $rhs;
         }
         }
     }
     }
@@ -229,7 +234,8 @@ Issues warning about any variables that were set, but not used
 =cut
 =cut
 
 
 sub warn_about_unused {
 sub warn_about_unused {
-    my ($self) = @_;
+    my ($self, %opts) = @_;
+    $opts{msg_prefix} = $self->{msg_prefix} unless exists $opts{msg_prefix};
 
 
     foreach my $vn (keys %{$self->{'vars'}}) {
     foreach my $vn (keys %{$self->{'vars'}}) {
         next if $self->{'used'}{$vn};
         next if $self->{'used'}{$vn};
@@ -237,10 +243,22 @@ sub warn_about_unused {
         # that they are not required in the current situation
         # that they are not required in the current situation
         # (example: debhelper's misc:Depends in many cases)
         # (example: debhelper's misc:Depends in many cases)
         next if $self->{'vars'}{$vn} eq "";
         next if $self->{'vars'}{$vn} eq "";
-        warning(_g("unused substitution variable \${%s}"), $vn);
+        warning($opts{msg_prefix} . _g("unused substitution variable \${%s}"), $vn);
     }
     }
 }
 }
 
 
+=item $s->set_msg_prefix($prefix)
+
+Define a prefix displayed before all warnings/error messages output
+by the module.
+
+=cut
+
+sub set_msg_prefix {
+    my ($self, $prefix) = @_;
+    $self->{msg_prefix} = $prefix;
+}
+
 =item $s->save($file)
 =item $s->save($file)
 
 
 Store all substitutions variables except the automatic ones in the
 Store all substitutions variables except the automatic ones in the

+ 4 - 2
scripts/dpkg-gencontrol.pl

@@ -156,6 +156,7 @@ if (defined($oppackage)) {
               "@packages");
               "@packages");
     $pkg = $control->get_pkg_by_idx(1);
     $pkg = $control->get_pkg_by_idx(1);
 }
 }
+$substvars->set_msg_prefix(sprintf(_g("package %s: "), $pkg->{Package}));
 
 
 # Scan source package
 # Scan source package
 my $src_fields = $control->get_source();
 my $src_fields = $control->get_source();
@@ -221,7 +222,7 @@ $fields->{'Version'} = $forceversion if defined($forceversion);
 my $facts = Dpkg::Deps::KnownFacts->new();
 my $facts = Dpkg::Deps::KnownFacts->new();
 $facts->add_installed_package($fields->{'Package'}, $fields->{'Version'});
 $facts->add_installed_package($fields->{'Package'}, $fields->{'Version'});
 if (exists $pkg->{"Provides"}) {
 if (exists $pkg->{"Provides"}) {
-    my $provides = deps_parse($substvars->substvars($pkg->{"Provides"}),
+    my $provides = deps_parse($substvars->substvars($pkg->{"Provides"}, no_warn => 1),
                               reduce_arch => 1, union => 1);
                               reduce_arch => 1, union => 1);
     if (defined $provides) {
     if (defined $provides) {
 	foreach my $subdep ($provides->get_deps()) {
 	foreach my $subdep ($provides->get_deps()) {
@@ -240,7 +241,8 @@ foreach my $field (field_list_pkg_dep()) {
     my $reduce_arch = debarch_eq('all', $pkg->{Architecture} || "all") ? 0 : 1;
     my $reduce_arch = debarch_eq('all', $pkg->{Architecture} || "all") ? 0 : 1;
     if (exists $pkg->{$field}) {
     if (exists $pkg->{$field}) {
 	my $dep;
 	my $dep;
-	my $field_value = $substvars->substvars($pkg->{$field});
+	my $field_value = $substvars->substvars($pkg->{$field},
+	    msg_prefix => sprintf(_g("%s field of package %s: "), $field, $pkg->{Package}));
 	if (field_get_dep_type($field) eq 'normal') {
 	if (field_get_dep_type($field) eq 'normal') {
 	    $dep = deps_parse($field_value, use_arch => 1,
 	    $dep = deps_parse($field_value, use_arch => 1,
 			      reduce_arch => $reduce_arch);
 			      reduce_arch => $reduce_arch);