Ben Peart <peart...@gmail.com> writes:

> From: Ben Peart <benpe...@microsoft.com>
>
> 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 <benpe...@microsoft.com>
> ---
>  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;
> +

Yup, that's a trivial fix ;-)

>       /*
>        * We must do the merge if we are actually moving to a new commit.
>        */
> diff --git a/t/t2018-checkout-branch.sh b/t/t2018-checkout-branch.sh
> index 35999b3adb..c438889b0c 100755
> --- a/t/t2018-checkout-branch.sh
> +++ b/t/t2018-checkout-branch.sh
> @@ -206,7 +206,7 @@ test_expect_success 'checkout -b after clone 
> --no-checkout does a checkout of HE
>       rev="$(git -C src rev-parse HEAD)" &&
>       git clone --no-checkout src dest &&
>       git -C dest checkout "$rev" -b branch &&
> -     test_must_fail test -f dest/a
> +     test -f dest/a
>  '

This is flipping the wrong thing.  Rather, introduce the whole test
as test_expect_failure that wants to make sure dest/a exists, and
with this 2/2 patch flip test_expect_failure into test_expect_success.

Thanks.

Reply via email to