Remotes: Load/Save for fetch.foo.pushurl

This commit is contained in:
Sascha Cunz 2012-07-25 01:32:31 +02:00
parent cb020f0d99
commit 3ed4b5012b
2 changed files with 33 additions and 0 deletions

View File

@ -130,6 +130,26 @@ int git_remote_load(git_remote **out, git_repository *repo, const char *name)
remote->url = git__strdup(val); remote->url = git__strdup(val);
GITERR_CHECK_ALLOC(remote->url); GITERR_CHECK_ALLOC(remote->url);
git_buf_clear(&buf);
if (git_buf_printf(&buf, "remote.%s.pushurl", name) < 0) {
error = -1;
goto cleanup;
}
error = git_config_get_string(&val, config, git_buf_cstr(&buf));
if (error == GIT_ENOTFOUND)
error = 0;
if (error < 0) {
error = -1;
goto cleanup;
}
if (val) {
remote->pushurl = git__strdup(val);
GITERR_CHECK_ALLOC(remote->pushurl);
}
git_buf_clear(&buf); git_buf_clear(&buf);
if (git_buf_printf(&buf, "remote.%s.fetch", name) < 0) { if (git_buf_printf(&buf, "remote.%s.fetch", name) < 0) {
error = -1; error = -1;
@ -187,6 +207,17 @@ int git_remote_save(const git_remote *remote)
return -1; return -1;
} }
if (remote->pushurl) {
git_buf_clear(&buf);
if (git_buf_printf(&buf, "remote.%s.pushurl", remote->name) < 0)
return -1;
if (git_config_set_string(config, git_buf_cstr(&buf), remote->pushurl) < 0) {
git_buf_free(&buf);
return -1;
}
}
if (remote->fetch.src != NULL && remote->fetch.dst != NULL) { if (remote->fetch.src != NULL && remote->fetch.dst != NULL) {
git_buf_clear(&buf); git_buf_clear(&buf);
git_buf_clear(&value); git_buf_clear(&value);
@ -429,6 +460,7 @@ void git_remote_free(git_remote *remote)
git__free(remote->push.src); git__free(remote->push.src);
git__free(remote->push.dst); git__free(remote->push.dst);
git__free(remote->url); git__free(remote->url);
git__free(remote->pushurl);
git__free(remote->name); git__free(remote->name);
git__free(remote); git__free(remote);
} }

View File

@ -14,6 +14,7 @@
struct git_remote { struct git_remote {
char *name; char *name;
char *url; char *url;
char *pushurl;
git_vector refs; git_vector refs;
struct git_refspec fetch; struct git_refspec fetch;
struct git_refspec push; struct git_refspec push;