Message ID | 20190118185558.17688-3-peartben@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix regression in checkout -b | expand |
Ben Peart <peartben@gmail.com> writes: > From: Ben Peart <benpeart@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 <benpeart@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.
On Fri, Jan 18, 2019 at 01:55:58PM -0500, Ben Peart wrote: > From: Ben Peart <benpeart@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 <benpeart@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; > + > /* > * 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
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. */ 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 ' test_done