chiark / gitweb /
Dgit.pm: Break out parsechangelog_loop from dgit
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Jul 2018 19:01:50 +0000 (20:01 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Jul 2018 21:51:37 +0000 (22:51 +0100)
git-debrebase is going to want this.

No functional change except to some debugging messages.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Debian/Dgit.pm
dgit

index 8f069f7575e64739be6d9a25237d2f0640f3dff6..066915b4e6008692c7265b1cc8ce2702a4bc9142 100644 (file)
@@ -31,6 +31,7 @@ use Data::Dumper;
 use IPC::Open2;
 use File::Path;
 use File::Basename;
+use Dpkg::Control::Hash;
 
 BEGIN {
     use Exporter   ();
@@ -67,7 +68,7 @@ BEGIN {
                      changedir git_slurp_config_src
                      gdr_ffq_prev_branchinfo
                      parsecontrolfh parsecontrol parsechangelog
-                     getfield
+                     getfield parsechangelog_loop
                      playtree_setup);
     # implicitly uses $main::us
     %EXPORT_TAGS = ( policyflags => [qw(NOFFCHECK FRESHREPO NOCOMMITCHECK)],
@@ -609,6 +610,27 @@ sub getfield ($$) {
     fail "missing field $field in ".$dctrl->get_option('name');
 }
 
+sub parsechangelog_loop ($$$) {
+    my ($clogcmd, $descbase, $fn) = @_;
+    # @$clogcmd is qw(dpkg-parsechangelog ...some...options...)
+    # calls $fn->($thisstanza, $desc);
+    debugcmd "|",@$clogcmd;
+    open CLOGS, "-|", @$clogcmd or die $!;
+    for (;;) {
+       my $stanzatext = do { local $/=""; <CLOGS>; };
+       printdebug "clogp stanza ".Dumper($stanzatext) if $debuglevel>1;
+       last if !defined $stanzatext;
+
+       my $desc = "$descbase, entry no.$.";
+       open my $stanzafh, "<", \$stanzatext or die;
+       my $thisstanza = parsecontrolfh $stanzafh, $desc, 1;
+
+       $fn->($thisstanza, $desc);
+    }
+    die $! if CLOGS->error;
+    close CLOGS or $?==SIGPIPE or failedcmd @$clogcmd;
+}      
+
 # ========== playground handling ==========
 
 # terminology:
diff --git a/dgit b/dgit
index c813a11f4f5fa842278e4e96169e7f95dd597080..79e37672ff6ed41f1d995d436015849f76e5b010 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -2289,22 +2289,14 @@ sub generate_commits_from_dsc () {
     }
 
     my @clogcmd = qw(dpkg-parsechangelog --format rfc822 --all);
-    debugcmd "|",@clogcmd;
-    open CLOGS, "-|", @clogcmd or die $!;
-
     my $clogp;
     my $r1clogp;
 
     printdebug "import clog search...\n";
+    parsechangelog_loop \@clogcmd, "package changelog", sub {
+       my ($thisstanza, $desc) = @_;
+       no warnings qw(exiting);
 
-    for (;;) {
-       my $stanzatext = do { local $/=""; <CLOGS>; };
-       printdebug "import clogp ".Dumper($stanzatext) if $debuglevel>1;
-       last if !defined $stanzatext;
-
-       my $desc = "package changelog, entry no.$.";
-       open my $stanzafh, "<", \$stanzatext or die;
-       my $thisstanza = parsecontrolfh $stanzafh, $desc, 1;
        $clogp //= $thisstanza;
 
        printdebug "import clog $thisstanza->{version} $desc...\n";
@@ -2339,9 +2331,7 @@ sub generate_commits_from_dsc () {
        $r1clogp = $thisstanza;
 
        printdebug "import clog $r1clogp->{version} becomes r1\n";
-    }
-    die $! if CLOGS->error;
-    close CLOGS or $?==SIGPIPE or failedcmd @clogcmd;
+    };
 
     $clogp or fail "package changelog has no entries!";