diff options
| author | nulltoken <emeric.fermas@gmail.com> | 2012-09-22 12:50:18 +0200 | 
|---|---|---|
| committer | nulltoken <emeric.fermas@gmail.com> | 2012-10-07 21:03:49 +0200 | 
| commit | 7eca3c561d489dc3f3d4ee802ea4fd358214f632 (patch) | |
| tree | 8c81dddc0bfb0ddf0c44e1bc254cda541107fc08 /src/clone.c | |
| parent | a147408f944abb67e1a4a50071c9bb0a20c57e98 (diff) | |
| download | libgit2-7eca3c561d489dc3f3d4ee802ea4fd358214f632.tar.gz | |
clone: deploy git_repository_set_head() usage
Diffstat (limited to 'src/clone.c')
| -rw-r--r-- | src/clone.c | 35 | 
1 files changed, 20 insertions, 15 deletions
diff --git a/src/clone.c b/src/clone.c index 211288c2c..c233977b7 100644 --- a/src/clone.c +++ b/src/clone.c @@ -28,7 +28,11 @@ struct HeadInfo {  	git_buf branchname;  }; -static int create_tracking_branch(git_repository *repo, const git_oid *target, const char *name) +static int create_tracking_branch( +	git_reference **branch, +	git_repository *repo, +	const git_oid *target, +	const char *name)  {  	git_object *head_obj = NULL;  	git_reference *branch_ref; @@ -42,7 +46,6 @@ static int create_tracking_branch(git_repository *repo, const git_oid *target, c  	if (!git_branch_create(&branch_ref, repo, name, head_obj, 0)) {  		git_config *cfg; -		git_reference_free(branch_ref);  		/* Set up tracking */  		if (!git_repository_config(&cfg, repo)) {  			git_buf remote = GIT_BUF_INIT; @@ -63,6 +66,12 @@ static int create_tracking_branch(git_repository *repo, const git_oid *target, c  	}  	git_object_free(head_obj); + +	if (!retcode) +		*branch = branch_ref; +	else +		git_reference_free(branch_ref); +  	return retcode;  } @@ -84,21 +93,17 @@ static int reference_matches_remote_head(const char *head_name, void *payload)  static int update_head_to_new_branch(git_repository *repo, const git_oid *target, const char *name)  { -	int retcode = GIT_ERROR; +	git_reference *tracking_branch; +	int error; -	if (!create_tracking_branch(repo, target, name)) { -		git_reference *head; -		if (!git_reference_lookup(&head, repo, GIT_HEAD_FILE)) { -			git_buf targetbuf = GIT_BUF_INIT; -			if (!git_buf_printf(&targetbuf, GIT_REFS_HEADS_DIR "%s", name)) { -				retcode = git_reference_set_target(head, git_buf_cstr(&targetbuf)); -			} -			git_buf_free(&targetbuf); -			git_reference_free(head); -		} -	} +	if (create_tracking_branch(&tracking_branch, repo, target, name) < 0) +		return -1; -	return retcode; +	error = git_repository_set_head(repo, git_reference_name(tracking_branch)); + +	git_reference_free(tracking_branch); + +	return error;  }  static int update_head_to_remote(git_repository *repo, git_remote *remote)  | 
