chiark / gitweb /
Dgit.pm: Move $maindir* up the file.
[dgit.git] / Debian / Dgit.pm
index f68b7c9113404ae7fb46c0475daaaf90da5cdf31..69db866f2a1db8734ed0ca13209503669e91a4f5 100644 (file)
@@ -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 () {