Subject: [PATCH v2 0/3] allow checkout and branch to create branches on a merge base

From: Denton Liu <[email-masked]>
Date: Fri, 26 Apr 2019 12:21:06 -0700

Thanks for your comments, Eric and Junio.

Eric, I've combined the `test_when_finished` calls together so that the
statements within appear in a more "logical" order.

Junio, I've taken your suggestion and moved the change into
`create_branch`. Initially, I didn't want to do this because I didn't
want to change the semantics of git-branch but introducing the merge
base syntax seems to be a positive change so let's do it.

Thanks,

Denton

---

Changes since v1:

* Moved multiple `test_when_finished` calls that appeared in "reverse
  order" into one call that appears in the logical order
* Made create_branch handle merge base revs instead of putting a hack
  into checkout

Denton Liu (3):
  t2018: cleanup in current test
  t2018: demonstrate checkout -b merge base bug
  branch: make create_branch accept a merge base rev

 Documentation/git-branch.txt |  6 +++-
 branch.c                     |  2 +-
 t/t2018-checkout-branch.sh   | 56 +++++++++++++++++++-----------------
 t/t3200-branch.sh            | 14 ++++++---
 4 files changed, 46 insertions(+), 32 deletions(-)

Range-diff against v1:
1:  c0c7171e3d ! 1:  9d04faf29d t2018: cleanup in current test
    @@ -19,8 +19,9 @@
      '
      
      test_expect_success 'checkout -b to a new branch, set to HEAD' '
    -+	test_when_finished test_might_fail git branch -D branch2 &&
    -+	test_when_finished git checkout branch1 &&
    ++	test_when_finished "
    ++		git checkout branch1 &&
    ++		test_might_fail git branch -D branch2" &&
      	do_checkout branch2
      '
      
    @@ -28,8 +29,9 @@
     -	git checkout branch1 &&
     -	git branch -D branch2 &&
     -
    -+	test_when_finished test_might_fail git branch -D branch2 &&
    -+	test_when_finished git checkout branch1 &&
    ++	test_when_finished "
    ++		git checkout branch1 &&
    ++		test_might_fail git branch -D branch2" &&
      	do_checkout branch2 $HEAD1
      '
      
    @@ -45,8 +47,9 @@
      '
      
      test_expect_success 'checkout -f -b to a new branch with unmergeable changes discards changes' '
    -+	test_when_finished test_might_fail git branch -D branch2 &&
    -+	test_when_finished git checkout branch1 &&
    ++	test_when_finished "
    ++		git checkout branch1 &&
    ++		test_might_fail git branch -D branch2" &&
     +
      	# still dirty and on branch1
      	do_checkout branch2 $HEAD1 "-f -b" &&
    @@ -58,9 +61,10 @@
     -
     -	# clean up from previous test
     -	git branch -D branch2 &&
    -+	test_when_finished test_might_fail git branch -D branch2 &&
    -+	test_when_finished git checkout branch1 &&
    -+	test_when_finished git reset --hard &&
    ++	test_when_finished "
    ++		git reset --hard &&
    ++		git checkout branch1 &&
    ++		test_might_fail git branch -D branch2" &&
      
      	setup_dirty_mergeable &&
      	do_checkout branch2 $HEAD1 &&
2:  ff38bdb564 ! 2:  5e8320cd80 t2018: demonstrate checkout -b merge base bug
    @@ -28,21 +28,21 @@
      '
      
     +test_expect_failure 'checkout -b to a merge base' '
    -+	test_when_finished test_might_fail git branch -D branch2 &&
    -+	test_when_finished git checkout branch1 &&
    ++	test_when_finished "
    ++		git checkout branch1 &&
    ++		test_might_fail git branch -D branch2" &&
     +	git checkout -b branch2 branch1...
     +'
     +
      test_expect_success 'checkout -b to a new branch, set to an explicit ref' '
    - 	test_when_finished test_might_fail git branch -D branch2 &&
    - 	test_when_finished git checkout branch1 &&
    + 	test_when_finished "
    + 		git checkout branch1 &&
     @@
      	do_checkout branch2 "" -B
      '
      
     +test_expect_failure 'checkout -B to a merge base' '
     +	git checkout branch1 &&
    -+	git branch -D branch2 &&
     +
     +	git checkout -B branch2 branch1...
     +'
3:  031780431d < -:  ---------- checkout: allow -b/-B to work on a merge base
-:  ---------- > 3:  c91c7535a7 branch: make create_branch accept a merge base rev
-- 
2.21.0.1033.g0e8cc1100c