X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=Debian%2FDgit.pm;h=9d2e471948173fa33f38294b80daced55d5f8b07;hp=3d517e1e56b8d350648f2a8c55252d15a4014708;hb=027613e7a281123f4512ca4c1b99552cc78ca72b;hpb=8047fa8b32e744b4033cdbe451108fdb2ea0e505 diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm index 3d517e1e..9d2e4719 100644 --- a/Debian/Dgit.pm +++ b/Debian/Dgit.pm @@ -57,6 +57,7 @@ BEGIN { git_for_each_tag_referring is_fast_fwd git_check_unmodified git_reflog_action_msg git_update_ref_cmd + make_commit_text $package_re $component_re $deliberately_re $distro_re $versiontag_re $series_filename_re $orig_f_comp_re $orig_f_sig_re $orig_f_tail_re @@ -159,11 +160,21 @@ sub enabledebuglevel ($) { } sub printdebug { + # Prints a prefix, and @_, to DEBUG. @_ should normally contain + # a trailing \n. + + # With no (or only empty) arguments just prints the prefix and + # leaves the caller to do more with DEBUG. The caller should make + # sure then to call printdebug with something ending in "\n" to + # get the prefix right in subsequent calls. + return unless $debuglevel >= $printdebug_when_debuglevel; - print DEBUG $debugprefix; + our $printdebug_noprefix; + print DEBUG $debugprefix unless $printdebug_noprefix; pop @_ while @_ and !length $_[-1]; return unless @_; print DEBUG @_ or die $!; + $printdebug_noprefix = $_[-1] !~ m{\n$}; } sub messagequote ($) { @@ -274,7 +285,7 @@ sub _us () { sub failmsg { my $s = "error: @_\n"; - $s =~ s/\n\n$/\n/; + $s =~ s/\n\n$/\n/g; my $prefix = _us().": "; $s =~ s/^/$prefix/gm; return "\n".$s; @@ -677,6 +688,28 @@ sub parsechangelog_loop ($$$) { close CLOGS or $?==SIGPIPE or failedcmd @$clogcmd; } +sub make_commit_text ($) { + my ($text) = @_; + my ($out, $in); + my @cmd = (qw(git hash-object -w -t commit --stdin)); + debugcmd "|",@cmd; + print Dumper($text) if $debuglevel > 1; + my $child = open2($out, $in, @cmd) or die $!; + my $h; + eval { + print $in $text or die $!; + close $in or die $!; + $h = <$out>; + $h =~ m/^\w+$/ or die; + $h = $&; + printdebug "=> $h\n"; + }; + close $out; + waitpid $child, 0 == $child or die "$child $!"; + $? and failedcmd @cmd; + return $h; +} + # ========== playground handling ========== # terminology: