"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
James Cook <falsifian@falsifian.org>
Subject:
Re: three bugs related to merge commits
To:
Mark Jamsek <mark@jamsek.com>, gameoftrees@openbsd.org
Date:
Mon, 17 Apr 2023 16:20:26 +0000

Download raw body.

Thread
On Mon, Apr 17, 2023 at 04:06:00PM +0000, James Cook wrote:
> > Thanks!
> > Below is a fix with your test adjusted to expect correct behaviour.
> > 
> > The bug is that the first parent's object ID was derived from the work
> > tree's base commit. It should be derived from the branch tip commit.
> > The comitted tree is already based on the branch tip's tree which is
> > why the added file did not disappear.
> > 
> > It is unfortunate that the test suite didn't already catch such a basic
> > problem, but here we are. All other tests are still passing for me.
> 
> Thanks, that fixes the first bug! The other two still seem to be present
> though.
> 
> Here's a patch adding regress tests for the other two.
> test_merge_same_change (for the third bug) seems to almost directly
> contradict test_merge_no_op, though, so maybe the third bug is intended
> behaviour? It would be nice to have a way to create a merge commit in
> this situation. (I think it's actually come up for me, but now I forget
> how).
> 
> test_send_merge_commit is for the second bug.

Updated patch:
- Dropped the test for the third bug (test_merge_same_change).
- Fixed test_send_merge_commit:
	- Merge origin/master into master, not vice versa.
	- Check return value of got up && got merge, just in case.

-- 
James


diff /home/falsifian/co/got
commit - 2b70695630ead3274d31727f6b477f3544dc9c9a
path + /home/falsifian/co/got
blob - db8ed49392c78fe028db90d4d5c318b3d0fa8130
file + regress/cmdline/send.sh
--- regress/cmdline/send.sh
+++ regress/cmdline/send.sh
@@ -322,6 +322,44 @@ test_send_delete() {
 	test_done "$testroot" "$ret"
 }
 
+test_send_merge_commit() {
+	local testroot=`test_init send_merge_commit`
+	local testurl=ssh://127.0.0.1/$testroot
+
+	if ! got clone -q "$testurl/repo" "$testroot/repo-clone"; then
+		echo "got clone command failed unexpectedly" >&2
+		test_done "$testroot" 1
+		return 1
+	fi
+
+	echo 'upstream change' > $testroot/repo/alpha
+	git_commit $testroot/repo -m 'upstream change'
+
+	got checkout $testroot/repo-clone $testroot/wt-clone > /dev/null
+	echo 'downstream change' > $testroot/wt-clone/beta
+	(cd $testroot/wt-clone && got commit -m 'downstream change' > /dev/null)
+
+	got fetch -q -r $testroot/repo-clone
+	(cd $testroot/wt-clone && got up && got merge origin/master > /dev/null)
+	ret=$?
+	if [ $ret -ne 0 ]; then
+		echo "got merge command failed unexpectedly" >&2
+		test_done "$testroot" "$ret"
+		return 1
+	fi
+
+	(cd $testroot/repo && git config receive.denyCurrentBranch ignore)
+
+	got send -r $testroot/repo-clone > /dev/null
+	ret=$?
+	if [ $ret -ne 0 ]; then
+		test_done "$testroot" "$ret"
+		return 1
+	fi
+
+	test_done "$testroot" 0
+}
+
 test_send_delete() {
 	local testroot=`test_init send_delete`
 	local testurl=ssh://127.0.0.1/$testroot
@@ -1583,6 +1621,7 @@ run_test test_send_delete
 run_test test_send_basic
 run_test test_send_rebase_required
 run_test test_send_rebase_required_overwrite
+run_test test_send_merge_commit
 run_test test_send_delete
 run_test test_send_clone_and_send
 run_test test_send_tags