diff options
| author | Ben Straub <bs@github.com> | 2012-12-12 12:15:25 -0800 |
|---|---|---|
| committer | Ben Straub <bs@github.com> | 2012-12-12 12:15:25 -0800 |
| commit | a71c27ccda7f7118ac2c50789fc1407d4d940b98 (patch) | |
| tree | 45853babf6545972fd90f3648eb369b18a095cde /src | |
| parent | 6cacd44bd036e9987134a4f43fee33dc1acb447b (diff) | |
| download | libgit2-a71c27ccda7f7118ac2c50789fc1407d4d940b98.tar.gz | |
Allow creation of dangling remotes
Diffstat (limited to 'src')
| -rw-r--r-- | src/remote.c | 82 |
1 files changed, 47 insertions, 35 deletions
diff --git a/src/remote.c b/src/remote.c index 670904b17..3101ff7ba 100644 --- a/src/remote.c +++ b/src/remote.c @@ -88,7 +88,7 @@ int git_remote_new(git_remote **out, git_repository *repo, const char *name, con git_remote *remote; /* name is optional */ - assert(out && repo && url); + assert(out && url); remote = git__calloc(1, sizeof(git_remote)); GITERR_CHECK_ALLOC(remote); @@ -289,6 +289,11 @@ int git_remote_save(const git_remote *remote) assert(remote); + if (!remote->repo) { + giterr_set(GITERR_INVALID, "Can't save a dangling remote."); + return GIT_ERROR; + } + if ((error = ensure_remote_name_is_valid(remote->name)) < 0) return error; @@ -543,7 +548,7 @@ int git_remote__get_http_proxy(git_remote *remote, bool use_ssl, char **proxy_ur assert(remote); - if (!proxy_url) + if (!proxy_url || !remote->repo) return -1; *proxy_url = NULL; @@ -745,6 +750,11 @@ int git_remote_update_tips(git_remote *remote) assert(remote); + if (!remote->repo) { + giterr_set(GITERR_INVALID, "Can't update tips on a dangling remote."); + return GIT_ERROR; + } + spec = &remote->fetch; if (git_repository_odb__weakptr(&odb, remote->repo) < 0) @@ -1293,49 +1303,51 @@ int git_remote_rename( assert(remote && new_name); - if ((error = ensure_remote_doesnot_exist(remote->repo, new_name)) < 0) - return error; - if ((error = ensure_remote_name_is_valid(new_name)) < 0) return error; - if (!remote->name) { - if ((error = rename_fetch_refspecs( - remote, - new_name, - callback, - payload)) < 0) + if (remote->repo) { + if ((error = ensure_remote_doesnot_exist(remote->repo, new_name)) < 0) return error; - remote->name = git__strdup(new_name); + if (!remote->name) { + if ((error = rename_fetch_refspecs( + remote, + new_name, + callback, + payload)) < 0) + return error; - return git_remote_save(remote); - } + remote->name = git__strdup(new_name); - if ((error = rename_remote_config_section( - remote->repo, - remote->name, - new_name)) < 0) - return error; + return git_remote_save(remote); + } - if ((error = update_branch_remote_config_entry( - remote->repo, - remote->name, - new_name)) < 0) - return error; + if ((error = rename_remote_config_section( + remote->repo, + remote->name, + new_name)) < 0) + return error; - if ((error = rename_remote_references( - remote->repo, - remote->name, - new_name)) < 0) - return error; + if ((error = update_branch_remote_config_entry( + remote->repo, + remote->name, + new_name)) < 0) + return error; - if ((error = rename_fetch_refspecs( - remote, - new_name, - callback, - payload)) < 0) - return error; + if ((error = rename_remote_references( + remote->repo, + remote->name, + new_name)) < 0) + return error; + + if ((error = rename_fetch_refspecs( + remote, + new_name, + callback, + payload)) < 0) + return error; + } git__free(remote->name); remote->name = git__strdup(new_name); |
