clone: refuse to clone if --branch points to bogus ref
It's possible that users make a typo in the branch name. Stop and let users recheck. Falling back to remote's HEAD is not documented any way. Except when using remote helper, the pack has not been transferred at this stage yet so we don't waste much bandwidth. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
9e58504601
commit
920b691fe4
@ -518,8 +518,7 @@ static void update_head(const struct ref *our, const struct ref *remote,
|
|||||||
} else if (remote) {
|
} else if (remote) {
|
||||||
/*
|
/*
|
||||||
* We know remote HEAD points to a non-branch, or
|
* We know remote HEAD points to a non-branch, or
|
||||||
* HEAD points to a branch but we don't know which one, or
|
* HEAD points to a branch but we don't know which one.
|
||||||
* we asked for a specific branch but it did not exist.
|
|
||||||
* Detach HEAD in all these cases.
|
* Detach HEAD in all these cases.
|
||||||
*/
|
*/
|
||||||
update_ref(msg, "HEAD", remote->old_sha1,
|
update_ref(msg, "HEAD", remote->old_sha1,
|
||||||
@ -816,12 +815,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
|||||||
our_head_points_at =
|
our_head_points_at =
|
||||||
find_remote_branch(mapped_refs, option_branch);
|
find_remote_branch(mapped_refs, option_branch);
|
||||||
|
|
||||||
if (!our_head_points_at) {
|
if (!our_head_points_at)
|
||||||
warning(_("Remote branch %s not found in "
|
die(_("Remote branch %s not found in upstream %s"),
|
||||||
"upstream %s, using HEAD instead"),
|
|
||||||
option_branch, option_origin);
|
option_branch, option_origin);
|
||||||
our_head_points_at = remote_head_points_at;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
our_head_points_at = remote_head_points_at;
|
our_head_points_at = remote_head_points_at;
|
||||||
|
@ -282,13 +282,6 @@ test_expect_success 'clone shallow object count' '
|
|||||||
test_cmp count3.expected count3.actual
|
test_cmp count3.expected count3.actual
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'clone shallow with nonexistent --branch' '
|
|
||||||
git clone --depth 1 --branch Z "file://$(pwd)/." shallow4 &&
|
|
||||||
GIT_DIR=shallow4/.git git rev-parse HEAD >actual &&
|
|
||||||
git rev-parse HEAD >expected &&
|
|
||||||
test_cmp expected actual
|
|
||||||
'
|
|
||||||
|
|
||||||
test_expect_success 'clone shallow with detached HEAD' '
|
test_expect_success 'clone shallow with detached HEAD' '
|
||||||
git checkout HEAD^ &&
|
git checkout HEAD^ &&
|
||||||
git clone --depth 1 "file://$(pwd)/." shallow5 &&
|
git clone --depth 1 "file://$(pwd)/." shallow5 &&
|
||||||
|
@ -57,12 +57,8 @@ test_expect_success 'clone -b does not munge remotes/origin/HEAD' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'clone -b with bogus branch chooses HEAD' '
|
test_expect_success 'clone -b with bogus branch' '
|
||||||
git clone -b bogus parent clone-bogus &&
|
test_must_fail git clone -b bogus parent clone-bogus
|
||||||
(cd clone-bogus &&
|
|
||||||
check_HEAD master &&
|
|
||||||
check_file one
|
|
||||||
)
|
|
||||||
'
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user