commit - 538aebb56b973dea6dee4dbde0ecfc4043bd6738
commit + 1678610c6d5112a48cd47219c8bd4ef423d31e63
blob - c924075eacdb3d7e5ebe3fc11b3c59262e7e120f
blob + 923e489c4fb37899470241b32f5235c9b6652c87
--- got/got.1
+++ got/got.1
once the changes present in the work tree are considered complete.
Alternatively, the merge operation may be aborted which will leave
the work tree's current branch unmodified.
-.Pp
-If a merge conflict is resolved in a way which renders all merged
-changes into no-op changes, the merge operation cannot continue
-and must be aborted.
.Pp
.Cm got merge
will refuse to run if certain preconditions are not met.
blob - a8d2babaa86a60ad22efe11a8b27f7976cea11e9
blob + e02fba3a7dd77de4b2b04a5b483529660338f5f6
--- lib/worktree.c
+++ lib/worktree.c
err = worktree_status(worktree, "", fileindex, repo,
collect_commitables, &cc_arg, NULL, NULL, 1, 0);
if (err)
- goto done;
-
- if (TAILQ_EMPTY(&commitable_paths)) {
- err = got_error_fmt(GOT_ERR_COMMIT_NO_CHANGES,
- "merge of %s cannot proceed", branch_name);
goto done;
- }
TAILQ_FOREACH(pe, &commitable_paths, entry) {
struct got_commitable *ct = pe->data;
blob - 9093dd5b9fb524b14d2d17d4fe754da0ec8ef9f4
blob + 11ffa61f4a12efd380087a03aa5b186b9a745ae2
--- regress/cmdline/merge.sh
+++ regress/cmdline/merge.sh
(cd $testroot/repo && git checkout -q -b newbranch)
echo "modified alpha on branch" > $testroot/repo/alpha
git_commit $testroot/repo -m "committing to alpha on newbranch"
- local branch_commitk=`git_show_branch_head $testroot/repo newbranch`
+ local branch_commit=`git_show_branch_head $testroot/repo newbranch`
got checkout -b master $testroot/repo $testroot/wt > /dev/null
ret=$?
(cd $testroot/wt && got merge -c > $testroot/stdout \
2> $testroot/stderr)
ret=$?
- if [ $ret -eq 0 ]; then
- echo "got merge succeeded unexpectedly" >&2
+ if [ $ret -ne 0 ]; then
+ echo "got merge failed unexpectedly" >&2
test_done "$testroot" "$ret"
return 1
fi
- echo -n "got: merge of refs/heads/newbranch cannot proceed: " \
- > $testroot/stderr.expected
- echo "no changes to commit" >> $testroot/stderr.expected
+ echo -n '' > $testroot/stderr.expected
cmp -s $testroot/stderr.expected $testroot/stderr
ret=$?
if [ $ret -ne 0 ]; then
diff -u $testroot/stderr.expected $testroot/stderr
+ test_done "$testroot" "$ret"
+ return 1
+ fi
+
+ local merge_commit=`git_show_head $testroot/repo`
+ echo -n "Merged refs/heads/newbranch into refs/heads/master: " \
+ > $testroot/stdout.expected
+ echo $merge_commit >> $testroot/stdout.expected
+
+ cmp -s $testroot/stdout.expected $testroot/stdout
+ ret=$?
+ if [ $ret -ne 0 ]; then
+ diff -u $testroot/stdout.expected $testroot/stdout
test_done "$testroot" "$ret"
return 1
fi
ret=$?
if [ $ret -ne 0 ]; then
diff -u $testroot/stdout.expected $testroot/stdout
+ test_done "$testroot" "$ret"
+ return 1
fi
+
+ # We should have created a merge commit with two parents.
+ got log -r $testroot/repo -l1 -c $merge_commit | grep ^parent \
+ > $testroot/stdout
+ echo "parent 1: $master_commit" > $testroot/stdout.expected
+ echo "parent 2: $branch_commit" >> $testroot/stdout.expected
+ cmp -s $testroot/stdout.expected $testroot/stdout
+ ret=$?
+ if [ $ret -ne 0 ]; then
+ diff -u $testroot/stdout.expected $testroot/stdout
+ fi
test_done "$testroot" "$ret"
}