Просмотр исходного кода

dpkg-gencontrol: improve error message with a bad union dependency

dpkg-gencontrol displays a better error message when an ORed dependency
is used in a union field like Conflicts, Replaces or Breaks.
Raphael Hertzog лет назад: 17
Родитель
Сommit
f65e9c9a2e
3 измененных файлов с 14 добавлено и 3 удалено
  1. 3 0
      debian/changelog
  2. 7 1
      scripts/Dpkg/Deps.pm
  3. 4 2
      scripts/dpkg-gencontrol.pl

+ 3 - 0
debian/changelog

@@ -21,6 +21,9 @@ dpkg (1.15.1) UNRELEASED; urgency=low
   * dpkg-source now ignores all possible vi swap file extensions (and not
     only .swp). The corresponding exclude pattern for -I also got tightened to
     only catch filenames starting with a dot. Closes: #515540
+  * dpkg-gencontrol displays a better error message when an ORed dependency
+    is used in a union field like Conflicts, Replaces or Breaks.
+    Closes: #489238
 
   [ Guillem Jover ]
   * Fix typo in dpkg output (‘unexecpted’ → ‘unexpected’). Closes: #519082

+ 7 - 1
scripts/Dpkg/Deps.pm

@@ -335,7 +335,13 @@ sub parse {
     } else {
 	$dep_and = Dpkg::Deps::AND->new();
     }
-    $dep_and->add($_) foreach (@dep_list);
+    foreach my $dep (@dep_list) {
+        if (not $dep->isa("Dpkg::Deps::Simple")) {
+            warning(_g("an union dependency can only contain simple dependencies"));
+            return undef;
+        }
+        $dep_and->add($dep);
+    }
     return $dep_and;
 }
 

+ 4 - 2
scripts/dpkg-gencontrol.pl

@@ -242,14 +242,16 @@ foreach my $field (@pkg_dep_fields) {
 	if ($dep_field_type{$field} eq 'normal') {
 	    $dep = Dpkg::Deps::parse($field_value, use_arch => 1,
                                      reduce_arch => 1);
-	    error(_g("error occurred while parsing %s"), $field_value) unless defined $dep;
+	    error(_g("error occurred while parsing %s field: %s"), $field,
+                  $field_value) unless defined $dep;
 	    $dep->simplify_deps($facts, @seen_deps);
 	    # Remember normal deps to simplify even further weaker deps
 	    push @seen_deps, $dep if $dep_field_type{$field} eq 'normal';
 	} else {
 	    $dep = Dpkg::Deps::parse($field_value, use_arch => 1,
                                      reduce_arch => 1, union => 1);
-	    error(_g("error occurred while parsing %s"), $field_value) unless defined $dep;
+	    error(_g("error occurred while parsing %s field: %s"), $field,
+                  $field_value) unless defined $dep;
 	    $dep->simplify_deps($facts);
             $dep->sort();
 	}