diff options
| author | Alexander Ovchinnikov <Alexander.Ovchinnikov@mendix.com> | 2021-02-08 00:49:21 +0100 |
|---|---|---|
| committer | Alexander Ovchinnikov <Alexander.Ovchinnikov@mendix.com> | 2021-08-26 12:13:01 +0200 |
| commit | 6bb35878629d77e002e5f744aaf2e62f5bb4cb42 (patch) | |
| tree | bfddbca57ebd73636afd3a7ad80650bb9a02cf3b /src/clone.c | |
| parent | 8643b524522c67ea24848699be01ab0e49d4a4a0 (diff) | |
| download | libgit2-6bb35878629d77e002e5f744aaf2e62f5bb4cb42.tar.gz | |
clone: set refs/remotes/origin/HEAD to default branch when branch is specified, attempt 2
Diffstat (limited to 'src/clone.c')
| -rw-r--r-- | src/clone.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/clone.c b/src/clone.c index 7ae90b09e..962cf1263 100644 --- a/src/clone.c +++ b/src/clone.c @@ -259,30 +259,38 @@ cleanup: static int update_head_to_branch( git_repository *repo, - const char *remote_name, + git_remote *remote, const char *branch, const char *reflog_message) { int retcode; git_buf remote_branch_name = GIT_BUF_INIT; git_reference* remote_ref = NULL; + git_buf default_branch = GIT_BUF_INIT; - GIT_ASSERT_ARG(remote_name); + GIT_ASSERT_ARG(remote); GIT_ASSERT_ARG(branch); if ((retcode = git_buf_printf(&remote_branch_name, GIT_REFS_REMOTES_DIR "%s/%s", - remote_name, branch)) < 0 ) + git_remote_name(remote), branch)) < 0 ) goto cleanup; if ((retcode = git_reference_lookup(&remote_ref, repo, git_buf_cstr(&remote_branch_name))) < 0) goto cleanup; - retcode = update_head_to_new_branch(repo, git_reference_target(remote_ref), branch, - reflog_message); + if ((retcode = update_head_to_new_branch(repo, git_reference_target(remote_ref), branch, + reflog_message)) < 0) + goto cleanup; + + if ((retcode = git_remote_default_branch(&default_branch, remote)) < 0) + goto cleanup; + + retcode = update_remote_head(repo, remote, &default_branch, reflog_message); cleanup: git_reference_free(remote_ref); git_buf_dispose(&remote_branch_name); + git_buf_dispose(&default_branch); return retcode; } @@ -367,8 +375,7 @@ static int checkout_branch(git_repository *repo, git_remote *remote, const git_c int error; if (branch) - error = update_head_to_branch(repo, git_remote_name(remote), branch, - reflog_message); + error = update_head_to_branch(repo, remote, branch, reflog_message); /* Point HEAD to the same ref as the remote's head */ else error = update_head_to_remote(repo, remote, reflog_message); |
