chiark / gitweb /
Pseudomerge: Break out pseudomerge_version_check and _make_commit
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 22 Sep 2016 12:26:46 +0000 (13:26 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 26 Sep 2016 00:16:59 +0000 (01:16 +0100)
We are going to want to reuse these.  It's a bit tangled, but this
seems better than a single pseudomerge_make function with a bunch of
iffery.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
dgit

diff --git a/dgit b/dgit
index 5dfd97c7fdc45d3a0f4b9f2f53d67669845d8681..483c864dd88d6538f51f45836cf34e8cb994447d 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -2395,6 +2395,44 @@ $anc->[1] ($anc->[0]) .. $desc->[1] ($desc->[0]) is not fast forward
 END
 };
 
+sub pseudomerge_version_check ($$) {
+    my ($clogp, $archive_hash) = @_;
+
+    my $arch_clogp = commit_getclogp $archive_hash;
+    my $i_arch_v = [ (getfield $arch_clogp, 'Version'),
+                    'version currently in archive' ];
+    if (defined $overwrite_version) {
+       infopair_cond_equal([ $overwrite_version, '--overwrite= version' ],
+                           $i_arch_v);
+    }
+    
+    printdebug "pseudomerge_version_check i_arch_v @$i_arch_v\n";
+    return $i_arch_v;
+}
+
+sub pseudomerge_make_commit ($$$$$) {
+    my ($clogp, $dgitview, $archive_hash, $i_arch_v, $msg) = @_;
+    progress "Declaring that HEAD inciudes all changes in $i_arch_v->[0]...";
+
+    my $tree = cmdoutput qw(git rev-parse), "${dgitview}:";
+    my $authline = clogp_authline $clogp;
+
+    mkpath '.git/dgit';
+    my $pmf = ".git/dgit/pseudomerge";
+    open MC, ">", $pmf or die "$pmf $!";
+    print MC <<END, $msg or die $!;
+tree $tree
+parent $dgitview
+parent $archive_hash
+author $authline
+commiter $authline
+
+END
+    close MC or die $!;
+
+    return make_commit($pmf);
+}
+
 sub splitbrain_pseudomerge ($$$$) {
     my ($clogp, $maintview, $dgitview, $archive_hash) = @_;
     # => $merged_dgitview
@@ -2411,20 +2449,13 @@ sub splitbrain_pseudomerge ($$$$) {
     #   this:                                   $dgitview'
     #
 
-    my $arch_clogp = commit_getclogp $archive_hash;
-    my $i_arch_v = [ (getfield $arch_clogp, 'Version'),
-                    'version currently in archive' ];
-    
-    printdebug "splitbrain_pseudomerge i_arch_v @$i_arch_v\n";
+    printdebug "splitbrain_pseudomerge...\n";
+
+    my $i_arch_v = pseudomerge_version_check($clogp, $archive_hash);
 
     return $dgitview unless defined $archive_hash;
 
-    if (defined $overwrite_version) {
-       progress "Declaring that HEAD inciudes all changes in archive...";
-       progress "Checking that $overwrite_version does so...";
-       infopair_cond_equal([ $overwrite_version, '--overwrite= version' ],
-                           $i_arch_v);
-    } else {
+    if (!defined $overwrite_version) {
        progress "Checking that HEAD inciudes all changes in archive...";
     }
 
@@ -2442,37 +2473,20 @@ sub splitbrain_pseudomerge ($$$$) {
     infopair_cond_ff($i_dep14, $i_dgit);
     $overwrite_version // infopair_cond_ff($i_dep14, [ $maintview, 'HEAD' ]);
 
-    my $tree = cmdoutput qw(git rev-parse), "${dgitview}:";
-    my $authline = clogp_authline $clogp;
-
-    mkpath '.git/dgit';
-    my $pmf = ".git/dgit/pseudomerge";
-    open MC, ">", $pmf or die "$pmf $!";
-    print MC <<END or die $!;
-tree $tree
-parent $dgitview
-parent $archive_hash
-author $authline
-commiter $authline
-
-END
-    if (defined $overwrite_version) {
-       print MC <<END;
+    my $r = pseudomerge_make_commit
+       $clogp, $dgitview, $archive_hash, $i_arch_v,
+       (defined $overwrite_version ? <<END_OVERWR : <<END_MAKEFF);
 Declare fast forward from $overwrite_version
 
 [dgit --quilt=$quilt_mode --overwrite-version=$overwrite_version]
-END
-    } else {
-       print MC <<END;
+END_OVERWR
 Make fast forward from $i_arch_v->[0]
 
 [dgit --quilt=$quilt_mode]
-END
-    }
-    close MC or die $!;
+END_MAKEFF
 
-    progress "Making pseudo-merge of $i_arch_v->[0] into dgit view.";
-    return make_commit($pmf);
+    progress "Made pseudo-merge of $i_arch_v->[0] into dgit view.";
+    return $r;
 }      
 
 sub push_parse_changelog ($) {