chiark / gitweb /
Split tags: Introduce $mktag in push_mktag
[dgit.git] / dgit
diff --git a/dgit b/dgit
index a2771c5c81843bff4c01612b98c0afe4a54eff86..4aefa085a6b3835d16384b1a218ff5cf18f0cf73 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -1941,12 +1941,12 @@ sub push_parse_dsc ($$$) {
 }
 
 sub push_mktag ($$$$$$$) {
-    my ($head,$clogp,$tag,
+    my ($dgithead,$clogp,$dgittag,
        $dscfn,
        $changesfile,$changesfilewhat,
-       $tfn) = @_;
+       $tfnbase) = @_;
 
-    $dsc->{$ourdscfield[0]} = $head;
+    $dsc->{$ourdscfield[0]} = $dgithead;
     $dsc->save("$dscfn.tmp") or die $!;
 
     my $changes = parsecontrol($changesfile,$changesfilewhat);
@@ -1964,8 +1964,12 @@ sub push_mktag ($$$$$$$) {
     my $authline = clogp_authline $clogp;
     my $delibs = join(" ", "",@deliberatelies);
     my $declaredistro = access_basedistro();
-    open TO, '>', $tfn->('.tmp') or die $!;
-    print TO <<END or die $!;
+
+    my $mktag = sub {
+       my ($tfn, $head, $tag) = @_;
+
+       open TO, '>', $tfn->('.tmp') or die $!;
+       print TO <<END or die $!;
 object $head
 type commit
 tag $tag
@@ -1974,35 +1978,39 @@ tagger $authline
 $package release $cversion for $clogsuite ($csuite) [dgit]
 [dgit distro=$declaredistro$delibs]
 END
-    foreach my $ref (sort keys %previously) {
-                   print TO <<END or die $!;
+       foreach my $ref (sort keys %previously) {
+           print TO <<END or die $!;
 [dgit previously:$ref=$previously{$ref}]
 END
-    }
+       }
 
-    close TO or die $!;
+       close TO or die $!;
 
-    my $tagobjfn = $tfn->('.tmp');
-    if ($sign) {
-       if (!defined $keyid) {
-           $keyid = access_cfg('keyid','RETURN-UNDEF');
-       }
-        if (!defined $keyid) {
-           $keyid = getfield $clogp, 'Maintainer';
-        }
-       unlink $tfn->('.tmp.asc') or $!==&ENOENT or die $!;
-       my @sign_cmd = (@gpg, qw(--detach-sign --armor));
-       push @sign_cmd, qw(-u),$keyid if defined $keyid;
-       push @sign_cmd, $tfn->('.tmp');
-       runcmd_ordryrun @sign_cmd;
-       if (act_scary()) {
-           $tagobjfn = $tfn->('.signed.tmp');
-           runcmd shell_cmd "exec >$tagobjfn", qw(cat --),
-               $tfn->('.tmp'), $tfn->('.tmp.asc');
+       my $tagobjfn = $tfn->('.tmp');
+       if ($sign) {
+           if (!defined $keyid) {
+               $keyid = access_cfg('keyid','RETURN-UNDEF');
+           }
+           if (!defined $keyid) {
+               $keyid = getfield $clogp, 'Maintainer';
+           }
+           unlink $tfn->('.tmp.asc') or $!==&ENOENT or die $!;
+           my @sign_cmd = (@gpg, qw(--detach-sign --armor));
+           push @sign_cmd, qw(-u),$keyid if defined $keyid;
+           push @sign_cmd, $tfn->('.tmp');
+           runcmd_ordryrun @sign_cmd;
+           if (act_scary()) {
+               $tagobjfn = $tfn->('.signed.tmp');
+               runcmd shell_cmd "exec >$tagobjfn", qw(cat --),
+                   $tfn->('.tmp'), $tfn->('.tmp.asc');
+           }
        }
-    }
+       return $tagobjfn;
+    };
 
-    return ($tagobjfn);
+    my @r;
+    push @r, $mktag->($tfnbase, $dgithead, $dgittag);
+    return @r;
 }
 
 sub sign_changes ($) {
@@ -2133,7 +2141,7 @@ END
        $tagobjfn = $tfn->('.signed.tmp');
        responder_receive_files('signed-tag', $tagobjfn);
     } else {
-       $tagobjfn =
+       ($tagobjfn) =
            push_mktag($head,$clogp,$tag,
                       $dscpath,
                       $changesfile,$changesfile,
@@ -2567,7 +2575,7 @@ sub i_want_signed_tag {
     $csuite = $&;
     push_parse_dsc $i_dscfn, 'remote dsc', $i_version;
 
-    my $tagobjfn =
+    my ($tagobjfn) =
        push_mktag $head, $i_clogp, $i_tag,
            $i_dscfn,
            $i_changesfn, 'remote changes',