This is an automated email from the git hooks/post-receive script.

jamessan pushed a commit to branch master
in repository devscripts.

commit 480904f36a01f3ce5a4597bf0ea8f7bfe759a728
Author: James McCoy <[email protected]>
Date:   Wed Sep 6 21:16:57 2017 -0400

    build-rdeps: Use apt-helper's cat-file to read Sources files
    
    Using cat-file allows us to reliably read the file, regardless of how
    the user may have configured the storage of the lists files (e.g.,
    compression) or future storage format changes.
    
    Closes #698240
    Signed-off-by: James McCoy <[email protected]>
---
 debian/changelog       |  4 ++++
 scripts/build-rdeps.pl | 47 +++++++++++++++++++----------------------------
 2 files changed, 23 insertions(+), 28 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 23610fa..86ae1c7 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -31,6 +31,10 @@ devscripts (2.17.10) UNRELEASED; urgency=medium
     + Add "--" in --help output for debian/rules mode.
   * test_package_lifecycle:
     + Fix expected output when run as root.
+  * build-rdeps:
+    + Use apt interfaces to find and read the sources files, fixing --old
+      (non-dose) behavior when sources files are compressed.  (Closes:
+      #698240)
 
   [ Daniel Shahaf ]
   * bts:
diff --git a/scripts/build-rdeps.pl b/scripts/build-rdeps.pl
index 6fae3a3..c8f7e1d 100755
--- a/scripts/build-rdeps.pl
+++ b/scripts/build-rdeps.pl
@@ -156,10 +156,6 @@ my $opt_hostarch;
 my $opt_without_ceve;
 my $opt_quiet;
 
-if (system('command -v grep-dctrl >/dev/null 2>&1')) {
-    die "$progname: Fatal error. grep-dctrl is not available.\nPlease install 
the 'dctrl-tools' package.\n";
-}
-
 sub version {
     print <<"EOT";
 This is $progname $version, from the Debian devscripts package, v. 
###VERSION###
@@ -349,37 +345,28 @@ sub findreversebuilddeps {
            $count += 1;
        }
     } else {
-       my %packages;
-       my $depending_package;
-       open(PACKAGES, '-|', 'grep-dctrl', '-r', '-F', 
'Build-Depends,Build-Depends-Indep', "\\(^\\|, \\)$package", '-s', 
'Package,Build-Depends,Build-Depends-Indep,Maintainer', $source_file);
+       open(my $out, '-|', '/usr/lib/apt/apt-helper', 'cat-file', $source_file)
+           or die "$progname: Unable to run \"apt-helper cat-file 
'$source_file'\": $!";
 
-       while(<PACKAGES>) {
-           chomp;
-           print STDERR "$_\n" if ($opt_debug);
-           if (/Package: (.*)$/) {
-               $depending_package = $1;
-               $packages{$depending_package}->{'Build-Depends'} = 0;
-           }
-           elsif (/Maintainer: (.*)$/) {
-               if ($depending_package) {
-                   $packages{$depending_package}->{'Maintainer'} = $1;
-               }
+       my %packages;
+       until (eof $out) {
+           my $ctrl = Dpkg::Control->new(type => CTRL_INDEX_SRC);
+           if (!$ctrl->parse($out, 'apt-helper cat-file')) {
+               next;
            }
-           elsif (/Build-Depends: (.*)$/ or /Build-Depends-Indep: (.*)$/) {
-               if ($depending_package) {
-                   print STDERR "$1\n" if ($opt_debug);
-                   if ($1 =~ 
/^(.*\s)?\Q$package\E(?::[a-zA-Z0-9][a-zA-Z0-9-]*)?([\s,]|$)/) {
-                       $packages{$depending_package}->{'Build-Depends'} = 1;
+           print STDERR "$ctrl\n" if ($opt_debug);
+           for my $relation (qw(Build-Depends Build-Depends-Indep)) {
+               if (exists $ctrl->{$relation}) {
+                   if ($ctrl->{$relation} =~ 
m/^(.*\s)?\Q$package\E(?::[a-zA-Z0-9][a-zA-Z0-9-]*)?([\s,]|$)/) {
+                       $packages{$ctrl->{Package}}{Maintainer} = 
$ctrl->{Maintainer};
                    }
                }
            }
        }
 
-       while($depending_package = each(%packages)) {
-           if ($packages{$depending_package}->{'Build-Depends'} != 1) {
-               print STDERR "Ignoring package $depending_package because its 
not really build depending on $package.\n" if ($opt_debug);
-               next;
-           }
+       close($out);
+
+       while (my $depending_package = each(%packages)) {
            print $depending_package;
            if ($opt_maintainer) {
                print " ($packages{$depending_package}->{'Maintainer'})";
@@ -462,6 +449,10 @@ if (!$use_ceve and !$opt_without_ceve) {
 }
 
 if ($use_ceve) {
+    if (system('command -v grep-dctrl >/dev/null 2>&1')) {
+       die "$progname: Fatal error. grep-dctrl is not available.\nPlease 
install the 'dctrl-tools' package.\n";
+    }
+
     # set hostarch and buildarch if they have not been set yet
     if (!$opt_hostarch) {
        $opt_hostarch = `dpkg-architecture --query DEB_HOST_ARCH`;

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/collab-maint/devscripts.git

_______________________________________________
devscripts-devel mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/devscripts-devel

Reply via email to