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

Dpkg::Deps: Do not generate perl warnings on undef versions in deps_compare()

Ref: #737731
Guillem Jover лет назад: 12
Родитель
Сommit
1469ab6fc9
3 измененных файлов с 11 добавлено и 3 удалено
  1. 2 0
      debian/changelog
  2. 4 2
      scripts/Dpkg/Deps.pm
  3. 5 1
      scripts/t/Dpkg_Deps.t

+ 2 - 0
debian/changelog

@@ -23,6 +23,8 @@ dpkg (1.17.7) UNRELEASED; urgency=low
     Closes: #736778
   * Document is_pgp_signed as a public Dpkg::Control::Hash option.
     Closes: #735975
+  * Do not generate perl warnings on undef versions in
+    Dpkg::Deps::deps_compare(). See: #737731
 
   [ Updated dpkg translations ]
   * German (Sven Joachim).

+ 4 - 2
scripts/Dpkg/Deps.pm

@@ -1,5 +1,5 @@
 # Copyright © 2007-2009 Raphaël Hertzog <hertzog@debian.org>
-# Copyright © 2012 Guillem Jover <guillem@debian.org>
+# Copyright © 2008-2009,2012-2014 Guillem Jover <guillem@debian.org>
 #
 # This program is free software; you may redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -343,9 +343,11 @@ sub deps_compare {
     }
     my $ar = $a->{relation} // 'undef';
     my $br = $b->{relation} // 'undef';
+    my $av = $a->{version} // '';
+    my $bv = $a->{version} // '';
     return (($a->{package} cmp $b->{package}) ||
 	    ($relation_ordering{$ar} <=> $relation_ordering{$br}) ||
-	    ($a->{version} cmp $b->{version}));
+	    ($av cmp $bv));
 }
 
 

+ 5 - 1
scripts/t/Dpkg_Deps.t

@@ -16,7 +16,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 25;
+use Test::More tests => 26;
 use Dpkg::Arch qw(get_host_arch);
 
 use_ok('Dpkg::Deps');
@@ -31,6 +31,10 @@ my $dep_multiline = deps_parse($field_multiline);
 $dep_multiline->sort();
 is($dep_multiline->output(), $field_multiline_sorted, 'Parse, sort and output');
 
+my $dep_sorted = deps_parse('pkgz, pkgz | pkga, pkga (>= 1.0), pkgz (<= 2.0)');
+$dep_sorted->sort();
+is($dep_sorted->output(), 'pkga (>= 1.0), pkgz, pkgz | pkga, pkgz (<= 2.0)', 'Check sort() algorithm');
+
 my $dep_subset = deps_parse('libatk1.0-0 (>> 1.10), libc6, libcairo2');
 is($dep_multiline->implies($dep_subset), 1, 'Dep implies subset of itself');
 is($dep_subset->implies($dep_multiline), undef, "Subset doesn't imply superset");