X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=Debian%2FDgit.pm;h=69db866f2a1db8734ed0ca13209503669e91a4f5;hp=f68b7c9113404ae7fb46c0475daaaf90da5cdf31;hb=070130ead75606bd7e58bec50a84830810a2c194;hpb=d471fbd414ac2d25ae0f6b7693c5f15272cd80ee diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm index f68b7c91..69db866f 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 @@ -104,6 +105,11 @@ our $gdrlast_refprefix = 'debrebase-last'; our $printdebug_when_debuglevel = 1; our $debugcmd_when_debuglevel = 1; +# these three all go together, only valid after record_maindir +our $maindir; +our $maindir_gitdir; +our $maindir_gitcommon; + # policy hook exit status bits # see dgit-repos-server head comment for documentation # 1 is reserved in case something fails with `exit 1' and to spot @@ -687,6 +693,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: @@ -735,11 +763,6 @@ sub parsechangelog_loop ($$$) { # ----- maindir ----- -# these three all go together -our $maindir; -our $maindir_gitdir; -our $maindir_gitcommon; - our $local_git_cfg; sub record_maindir () {