checkout: fix regression in checkout -b on intitial checkout

When doing a 'checkout -b' do a full checkout including updating the working
tree when doing the initial checkout. As the new test involves an filesystem
access, do it later in the sequence to give chance to other cheaper tests to
leave early. This fixes the regression in behavior caused by fa655d8411
(checkout: optimize "git checkout -b <new_branch>", 2018-08-16).

Signed-off-by: Ben Peart <benpeart@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ben Peart 2019-01-23 15:02:01 -05:00 коммит произвёл Junio C Hamano
Родитель 91e3d7ca9b
Коммит 8424bfd45b
2 изменённых файлов: 9 добавлений и 1 удалений

Просмотреть файл

@ -566,6 +566,14 @@ static int skip_merge_working_tree(const struct checkout_opts *opts,
* Remaining variables are not checkout options but used to track state
*/
/*
* Do the merge if this is the initial checkout. We cannot use
* is_cache_unborn() here because the index hasn't been loaded yet
* so cache_nr and timestamp.sec are always zero.
*/
if (!file_exists(get_index_file()))
return 0;
return 1;
}

Просмотреть файл

@ -198,7 +198,7 @@ test_expect_success 'checkout -B to the current branch works' '
test_dirty_mergeable
'
test_expect_failure 'checkout -b after clone --no-checkout does a checkout of HEAD' '
test_expect_success 'checkout -b after clone --no-checkout does a checkout of HEAD' '
git init src &&
test_commit -C src a &&
rev="$(git -C src rev-parse HEAD)" &&