chiark / gitweb /
wip changes for remote push - introduce calls to responder_* functions, currently...
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 26 Sep 2013 00:57:47 +0000 (01:57 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 26 Sep 2013 00:57:47 +0000 (01:57 +0100)
dgit

diff --git a/dgit b/dgit
index bee98b9231d60c93ead3e6b8e4b2d12a2f06c2ca..a47db911e6a31e2d72a29baf7ea07356084db285 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -42,6 +42,7 @@ our $ignoredirty = 0;
 our $noquilt = 0;
 our $existing_package = 'dpkg';
 our $cleanmode = 'dpkg-source';
+our $we_are_responder;
 
 our %format_ok = map { $_=>1 } ("1.0","3.0 (native)","3.0 (quilt)");
 
@@ -124,6 +125,26 @@ sub progress {
     print @_, "\n";
 }
 
+sub responder_send_file ($$) {
+    my ($keyword, $ourfn) = @_;
+    return unless $we_are_responder;
+    die "responder send file $keyword $ourfn\n";
+}
+
+sub responder_receive_files ($@) {
+    my ($keyword, @ourfns) = @_;
+    die unless $we_are_responder;
+    die 'nyi';
+}
+
+sub responder_send_command ($) {
+    my ($command) = @_;
+    return unless $we_are_responder;
+    # called even without $we_are_responder
+    print DEBUG "responder command $command\n";
+    die;
+}    
+
 sub url_get {
     if (!$ua) {
        $ua = LWP::UserAgent->new();
@@ -910,8 +931,6 @@ sub push_parse_changelog ($) {
     my $clogp = Dpkg::Control::Hash->new();
     $clogp->load($clogpfn);
 
-    responder_send_file('parsed-changelog', $clogpfn);
-
     $package = getfield $clogp, 'Source';
     my $cversion = getfield $clogp, 'Version';
     my $tag = debiantag($cversion);
@@ -986,16 +1005,20 @@ sub dopush () {
     print DEBUG "actually entering push\n";
     prep_ud();
 
-    runcmd shell_cmd "exec >.git/dgit/changelog.822.tmp",
-        qw(dpkg-parsechangelog);
+    my $clogpfn = ".git/dgit/changelog.822.tmp";
+    runcmd shell_cmd "exec >$clogpfn", qw(dpkg-parsechangelog);
+
+    responder_send_file('parsed-changelog', $clogpfn);
 
     my ($clogp, $cversion, $tag, $dscfn) =
-       push_parse_changelog(".git/dgit/changelog.822.tmp");
+       push_parse_changelog("$clogpfn");
 
     stat "../$dscfn" or
        fail "looked for .dsc $dscfn, but $!;".
            " maybe you forgot to build";
 
+    responder_send_file('dsc', "../$dscfn");
+
     push_parse_dsc("../$dscfn", $dscfn, $cversion);
 
     my $format = getfield $dsc, 'Format';
@@ -1043,11 +1066,16 @@ sub dopush () {
        }
     }
 
+    responder_send_file('changes',$changesfn);
+
+    my $tfn = sub { ".git/dgit/tag$_[0]"; };
     my ($tagobjfn) =
-       push_mktag($head,$clogp,$tag,
-                  $dsc,"../$dscfn",
-                  $changesfile,$changesfile,
-                  sub { ".git/dgit/tag$_[0]"; });
+       $we_are_responder
+       ? responder_receive_files('signed-tag', $tfn->('.signed.tmp'))
+       : push_mktag($head,$clogp,$tag,
+                    $dsc,"../$dscfn",
+                    $changesfile,$changesfile,
+                                $tfn);
 
     my $tag_obj_hash = cmdoutput @git, qw(hash-object -w -t tag), $tagobjfn;
     runcmd_ordryrun @git, qw(verify-tag), $tag_obj_hash;
@@ -1059,23 +1087,35 @@ sub dopush () {
     }
     runcmd_ordryrun @git, qw(push),access_giturl(),"HEAD:".rrref();
     runcmd_ordryrun @git, qw(update-ref -m), 'dgit push', lrref(), 'HEAD';
-    if (!$dryrun) {
-       rename "../$dscfn.tmp","../$dscfn" or die "$dscfn $!";
-    } else {
-       progress "[new .dsc left in $dscfn.tmp]";
+
+    if (!$we_are_responder) {
+       if (!$dryrun) {
+           rename "../$dscfn.tmp","../$dscfn" or die "$dscfn $!";
+       } else {
+           progress "[new .dsc left in $dscfn.tmp]";
+       }
     }
 
     if ($sign) {
-       my @debsign_cmd = @debsign;
-       push @debsign_cmd, "-k$keyid" if defined $keyid;
-       push @debsign_cmd, $changesfile;
-       runcmd_ordryrun @debsign_cmd;
+       if ($we_are_responder) {
+           my $dryrunsuffix = $dryrun ? ".tmp" : "";
+           responder_receive_files('signed-changes-dsc',
+                                   "$changesfile$dryrunsuffix",
+                                   "../$dscfn$dryrunsuffix");
+       } else {
+           my @debsign_cmd = @debsign;
+           push @debsign_cmd, "-k$keyid" if defined $keyid;
+           push @debsign_cmd, $changesfile;
+           runcmd_ordryrun @debsign_cmd;
+       }
     }
     runcmd_ordryrun @git, qw(push),access_giturl(),"refs/tags/$tag";
     my $host = access_cfg('upload-host','RETURN-UNDEF');
     my @hostarg = defined($host) ? ($host,) : ();
     runcmd_ordryrun @dput, @hostarg, $changesfile;
     printdone "pushed and uploaded $cversion";
+
+    responder_send_command("complete");
 }
 
 sub cmd_clone {