On Fri, Jan 18, 2019 at 01:55:58PM -0500, Ben Peart wrote:
> From: Ben Peart <[email protected]>
>
> When doing a 'checkout -b' do a full checkout including updating the working
> tree when doing the initial checkout. This fixes the regression in behavior
> caused by fa655d8411 checkout: optimize "git checkout -b <new_branch>"
>
> Signed-off-by: Ben Peart <[email protected]>
> ---
> builtin/checkout.c | 6 ++++++
> t/t2018-checkout-branch.sh | 2 +-
> 2 files changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/builtin/checkout.c b/builtin/checkout.c
> index 6fadf412e8..af6b5c8336 100644
> --- a/builtin/checkout.c
> +++ b/builtin/checkout.c
> @@ -517,6 +517,12 @@ static int skip_merge_working_tree(const struct
> checkout_opts *opts,
> if (core_apply_sparse_checkout && !checkout_optimize_new_branch)
> return 0;
>
> + /*
> + * We must do the merge if this is the initial checkout
> + */
> + if (is_cache_unborn())
> + return 0;
> +
> /*
> * We must do the merge if we are actually moving to a new commit.
> */
This patch breaks 'checkout -b checkout.optimizeNewBranch interaction'
in 't1090-sparse-checkout-scope.sh':
+ cp .git/info/sparse-checkout .git/info/sparse-checkout.bak
+ test_when_finished
mv -f .git/info/sparse-checkout.bak .git/info/sparse-checkout
git checkout master
+ test 0 = 0
+ test_cleanup={
mv -f .git/info/sparse-checkout.bak .git/info/sparse-checkout
git checkout master
} && (exit "$eval_ret"); eval_ret=$?; :
+ echo /b
+ git ls-files -t b
+ test S b = S b
+ git -c checkout.optimizeNewBranch=true checkout -b fast
Switched to a new branch 'fast'
+ git ls-files -t b
+ test H b = S b
error: last command exited with $?=1
not ok 4 - checkout -b checkout.optimizeNewBranch interaction