X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=Debian%2FDgit.pm;h=066915b4e6008692c7265b1cc8ce2702a4bc9142;hb=98f793a762f743f59663dcf61935a3648719fc4c;hp=8f069f7575e64739be6d9a25237d2f0640f3dff6;hpb=4d87a7d43579ecd11d31116e6e9dab4e6adb1af3;p=dgit.git diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm index 8f069f75..066915b4 100644 --- a/Debian/Dgit.pm +++ b/Debian/Dgit.pm @@ -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 $/=""; ; }; + 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: