summaryrefslogtreecommitdiff
path: root/dgit
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2016-09-22 13:26:46 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2016-09-26 01:16:59 +0100
commitd97ebfc48779689ddbe8b096f4590af99e049ede (patch)
treea57b34a4ed9af58317f0cb4d0725b1134565732c /dgit
parent1d74cb1f1941d3a95a9fb0b9180c796f16c0d5b1 (diff)
Pseudomerge: Break out pseudomerge_version_check and _make_commit
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>
Diffstat (limited to 'dgit')
-rwxr-xr-xdgit84
1 files changed, 49 insertions, 35 deletions
diff --git a/dgit b/dgit
index 5dfd97c..483c864 100755
--- 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 ($) {