diff options
| author | Edward Thomson <ethomson@edwardthomson.com> | 2014-10-24 16:44:07 -0700 |
|---|---|---|
| committer | Edward Thomson <ethomson@edwardthomson.com> | 2014-10-24 16:44:07 -0700 |
| commit | 725cd5f29d0c3f7e4019dfc6aacf0fd1843210a9 (patch) | |
| tree | fde3a192471e2207df5febcb9b8eb729f1df2148 /src | |
| parent | b8041215cfd3b229fc41747f7e86a0521e47b429 (diff) | |
| parent | 46c8f7f8459e7062ca04d1cb8e11cf84e5cfbd0f (diff) | |
| download | libgit2-725cd5f29d0c3f7e4019dfc6aacf0fd1843210a9.tar.gz | |
Merge pull request #2646 from libgit2/cmn/remote-rename
remote: accept a repo and name for renaming
Diffstat (limited to 'src')
| -rw-r--r-- | src/remote.c | 46 |
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) |
