summaryrefslogtreecommitdiff
path: root/src/clone.c
diff options
context:
space:
mode:
authorAlexander Ovchinnikov <Alexander.Ovchinnikov@mendix.com>2021-02-08 00:49:21 +0100
committerAlexander Ovchinnikov <Alexander.Ovchinnikov@mendix.com>2021-08-26 12:13:01 +0200
commit6bb35878629d77e002e5f744aaf2e62f5bb4cb42 (patch)
treebfddbca57ebd73636afd3a7ad80650bb9a02cf3b /src/clone.c
parent8643b524522c67ea24848699be01ab0e49d4a4a0 (diff)
downloadlibgit2-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.c21
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);