Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/remote.c')
-rw-r--r--src/remote.c46
1 files changed, 21 insertions, 25 deletions
diff --git a/src/remote.c b/src/remote.c
index ea510c7d4..362c226c4 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -1686,48 +1686,44 @@ static int rename_fetch_refspecs(git_vector *problems, git_remote *remote, const
return error;
}
-int git_remote_rename(git_strarray *out, git_remote *remote, const char *new_name)
+int git_remote_rename(git_strarray *out, git_repository *repo, const char *name, const char *new_name)
{
int error;
- git_vector problem_refspecs;
- char *tmp, *dup;
+ git_vector problem_refspecs = GIT_VECTOR_INIT;
+ git_remote *remote;
- assert(out && remote && new_name);
+ assert(out && repo && name && new_name);
- if (!remote->name) {
- giterr_set(GITERR_INVALID, "Can't rename an anonymous remote.");
- return GIT_EINVALIDSPEC;
- }
+ if ((error = git_remote_load(&remote, repo, name)) < 0)
+ return -1;
if ((error = ensure_remote_name_is_valid(new_name)) < 0)
- return error;
+ goto cleanup;
- if ((error = ensure_remote_doesnot_exist(remote->repo, new_name)) < 0)
- return error;
+ if ((error = ensure_remote_doesnot_exist(repo, new_name)) < 0)
+ goto cleanup;
- if ((error = rename_remote_config_section(remote->repo, remote->name, new_name)) < 0)
- return error;
+ if ((error = rename_remote_config_section(repo, name, new_name)) < 0)
+ goto cleanup;
- if ((error = update_branch_remote_config_entry(remote->repo, remote->name, new_name)) < 0)
- return error;
+ if ((error = update_branch_remote_config_entry(repo, name, new_name)) < 0)
+ goto cleanup;
- if ((error = rename_remote_references(remote->repo, remote->name, new_name)) < 0)
- return error;
+ if ((error = rename_remote_references(repo, name, new_name)) < 0)
+ goto cleanup;
if ((error = rename_fetch_refspecs(&problem_refspecs, remote, new_name)) < 0)
- return error;
+ goto cleanup;
out->count = problem_refspecs.length;
out->strings = (char **) problem_refspecs.contents;
- dup = git__strdup(new_name);
- GITERR_CHECK_ALLOC(dup);
-
- tmp = remote->name;
- remote->name = dup;
- git__free(tmp);
+cleanup:
+ if (error < 0)
+ git_vector_free(&problem_refspecs);
- return 0;
+ git_remote_free(remote);
+ return error;
}
int git_remote_update_fetchhead(git_remote *remote)