Commit 40b99d05 by Victor Garcia

splitting funcionality in two methods to avoid ambiguity with NULL

parent 99feb988
...@@ -27,6 +27,22 @@ GIT_BEGIN_DECL ...@@ -27,6 +27,22 @@ GIT_BEGIN_DECL
typedef int (*git_remote_rename_problem_cb)(const char *problematic_refspec, void *payload); typedef int (*git_remote_rename_problem_cb)(const char *problematic_refspec, void *payload);
/** /**
* Add a remote with the default fetch refsspec to the repository's configuration. This
* calls git_remote_save before returning.
*
* @param out the resulting remote
* @param repo the repository in which to create the remote
* @param name the remote's name
* @param url the remote's url
* @return 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code
*/
GIT_EXTERN(int) git_remote_create(
git_remote **out,
git_repository *repo,
const char *name,
const char *url);
/**
* Add a remote with the provided fetch refspec (or default if NULL) to the repository's * Add a remote with the provided fetch refspec (or default if NULL) to the repository's
* configuration. This * configuration. This
* calls git_remote_save before returning. * calls git_remote_save before returning.
...@@ -38,7 +54,7 @@ typedef int (*git_remote_rename_problem_cb)(const char *problematic_refspec, voi ...@@ -38,7 +54,7 @@ typedef int (*git_remote_rename_problem_cb)(const char *problematic_refspec, voi
* @param fetch the remote fetch value * @param fetch the remote fetch value
* @return 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code * @return 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code
*/ */
GIT_EXTERN(int) git_remote_create( GIT_EXTERN(int) git_remote_create_with_fetchspec(
git_remote **out, git_remote **out,
git_repository *repo, git_repository *repo,
const char *name, const char *name,
......
...@@ -309,7 +309,7 @@ static int create_and_configure_origin( ...@@ -309,7 +309,7 @@ static int create_and_configure_origin(
const char *name; const char *name;
name = options->remote_name ? options->remote_name : "origin"; name = options->remote_name ? options->remote_name : "origin";
if ((error = git_remote_create(&origin, repo, name, url, NULL)) < 0) if ((error = git_remote_create(&origin, repo, name, url)) < 0)
goto on_error; goto on_error;
if (options->ignore_cert_errors) if (options->ignore_cert_errors)
......
...@@ -174,7 +174,7 @@ static int ensure_remote_doesnot_exist(git_repository *repo, const char *name) ...@@ -174,7 +174,7 @@ static int ensure_remote_doesnot_exist(git_repository *repo, const char *name)
} }
int git_remote_create(git_remote **out, git_repository *repo, const char *name, const char *url, const char *fetch) int git_remote_create(git_remote **out, git_repository *repo, const char *name, const char *url)
{ {
git_buf buf = GIT_BUF_INIT; git_buf buf = GIT_BUF_INIT;
git_remote *remote = NULL; git_remote *remote = NULL;
...@@ -186,11 +186,38 @@ int git_remote_create(git_remote **out, git_repository *repo, const char *name, ...@@ -186,11 +186,38 @@ int git_remote_create(git_remote **out, git_repository *repo, const char *name,
if ((error = ensure_remote_doesnot_exist(repo, name)) < 0) if ((error = ensure_remote_doesnot_exist(repo, name)) < 0)
return error; return error;
if (fetch == NULL) { if (git_buf_printf(&buf, "+refs/heads/*:refs/remotes/%s/*", name) < 0)
if (git_buf_printf(&buf, "+refs/heads/*:refs/remotes/%s/*", name) < 0) return -1;
return -1;
fetch = git_buf_cstr(&buf); if (create_internal(&remote, repo, name, url, git_buf_cstr(&buf)) < 0)
} goto on_error;
git_buf_free(&buf);
if (git_remote_save(remote) < 0)
goto on_error;
*out = remote;
return 0;
on_error:
git_buf_free(&buf);
git_remote_free(remote);
return -1;
}
int git_remote_create_with_fetchspec(git_remote **out, git_repository *repo, const char *name, const char *url, const char *fetch)
{
git_buf buf = GIT_BUF_INIT;
git_remote *remote = NULL;
int error;
if ((error = ensure_remote_name_is_valid(name)) < 0)
return error;
if ((error = ensure_remote_doesnot_exist(repo, name)) < 0)
return error;
if (create_internal(&remote, repo, name, url, fetch) < 0) if (create_internal(&remote, repo, name, url, fetch) < 0)
goto on_error; goto on_error;
......
...@@ -1473,7 +1473,7 @@ static int repo_init_create_origin(git_repository *repo, const char *url) ...@@ -1473,7 +1473,7 @@ static int repo_init_create_origin(git_repository *repo, const char *url)
int error; int error;
git_remote *remote; git_remote *remote;
if (!(error = git_remote_create(&remote, repo, GIT_REMOTE_ORIGIN, url, NULL))) { if (!(error = git_remote_create(&remote, repo, GIT_REMOTE_ORIGIN, url))) {
git_remote_free(remote); git_remote_free(remote);
} }
......
...@@ -33,7 +33,7 @@ void test_network_fetchlocal__complete(void) ...@@ -33,7 +33,7 @@ void test_network_fetchlocal__complete(void)
cl_set_cleanup(&cleanup_local_repo, "foo"); cl_set_cleanup(&cleanup_local_repo, "foo");
cl_git_pass(git_repository_init(&repo, "foo", true)); cl_git_pass(git_repository_init(&repo, "foo", true));
cl_git_pass(git_remote_create(&origin, repo, GIT_REMOTE_ORIGIN, url, NULL)); cl_git_pass(git_remote_create(&origin, repo, GIT_REMOTE_ORIGIN, url));
git_remote_set_callbacks(origin, &callbacks); git_remote_set_callbacks(origin, &callbacks);
cl_git_pass(git_remote_connect(origin, GIT_DIRECTION_FETCH)); cl_git_pass(git_remote_connect(origin, GIT_DIRECTION_FETCH));
cl_git_pass(git_remote_download(origin)); cl_git_pass(git_remote_download(origin));
...@@ -71,7 +71,7 @@ void test_network_fetchlocal__partial(void) ...@@ -71,7 +71,7 @@ void test_network_fetchlocal__partial(void)
cl_assert_equal_i(1, (int)refnames.count); cl_assert_equal_i(1, (int)refnames.count);
url = cl_git_fixture_url("testrepo.git"); url = cl_git_fixture_url("testrepo.git");
cl_git_pass(git_remote_create(&origin, repo, GIT_REMOTE_ORIGIN, url, NULL)); cl_git_pass(git_remote_create(&origin, repo, GIT_REMOTE_ORIGIN, url));
git_remote_set_callbacks(origin, &callbacks); git_remote_set_callbacks(origin, &callbacks);
cl_git_pass(git_remote_connect(origin, GIT_DIRECTION_FETCH)); cl_git_pass(git_remote_connect(origin, GIT_DIRECTION_FETCH));
cl_git_pass(git_remote_download(origin)); cl_git_pass(git_remote_download(origin));
......
...@@ -159,7 +159,7 @@ void test_network_remote_remotes__save(void) ...@@ -159,7 +159,7 @@ void test_network_remote_remotes__save(void)
_remote = NULL; _remote = NULL;
/* Set up the remote and save it to config */ /* Set up the remote and save it to config */
cl_git_pass(git_remote_create(&_remote, _repo, "upstream", "git://github.com/libgit2/libgit2", NULL)); cl_git_pass(git_remote_create(&_remote, _repo, "upstream", "git://github.com/libgit2/libgit2"));
git_remote_clear_refspecs(_remote); git_remote_clear_refspecs(_remote);
cl_git_pass(git_remote_add_fetch(_remote, fetch_refspec1)); cl_git_pass(git_remote_add_fetch(_remote, fetch_refspec1));
...@@ -298,7 +298,7 @@ void test_network_remote_remotes__add(void) ...@@ -298,7 +298,7 @@ void test_network_remote_remotes__add(void)
git_remote_free(_remote); git_remote_free(_remote);
_remote = NULL; _remote = NULL;
cl_git_pass(git_remote_create(&_remote, _repo, "addtest", "http://github.com/libgit2/libgit2", NULL)); cl_git_pass(git_remote_create(&_remote, _repo, "addtest", "http://github.com/libgit2/libgit2"));
cl_assert_equal_i(GIT_REMOTE_DOWNLOAD_TAGS_AUTO, git_remote_autotag(_remote)); cl_assert_equal_i(GIT_REMOTE_DOWNLOAD_TAGS_AUTO, git_remote_autotag(_remote));
git_remote_free(_remote); git_remote_free(_remote);
...@@ -320,7 +320,7 @@ void test_network_remote_remotes__cannot_add_a_nameless_remote(void) ...@@ -320,7 +320,7 @@ void test_network_remote_remotes__cannot_add_a_nameless_remote(void)
cl_assert_equal_i( cl_assert_equal_i(
GIT_EINVALIDSPEC, GIT_EINVALIDSPEC,
git_remote_create(&remote, _repo, NULL, "git://github.com/libgit2/libgit2", NULL)); git_remote_create(&remote, _repo, NULL, "git://github.com/libgit2/libgit2"));
} }
void test_network_remote_remotes__cannot_save_an_inmemory_remote(void) void test_network_remote_remotes__cannot_save_an_inmemory_remote(void)
...@@ -341,12 +341,12 @@ void test_network_remote_remotes__cannot_add_a_remote_with_an_invalid_name(void) ...@@ -341,12 +341,12 @@ void test_network_remote_remotes__cannot_add_a_remote_with_an_invalid_name(void)
cl_assert_equal_i( cl_assert_equal_i(
GIT_EINVALIDSPEC, GIT_EINVALIDSPEC,
git_remote_create(&remote, _repo, "Inv@{id", "git://github.com/libgit2/libgit2", NULL)); git_remote_create(&remote, _repo, "Inv@{id", "git://github.com/libgit2/libgit2"));
cl_assert_equal_p(remote, NULL); cl_assert_equal_p(remote, NULL);
cl_assert_equal_i( cl_assert_equal_i(
GIT_EINVALIDSPEC, GIT_EINVALIDSPEC,
git_remote_create(&remote, _repo, "", "git://github.com/libgit2/libgit2", NULL)); git_remote_create(&remote, _repo, "", "git://github.com/libgit2/libgit2"));
cl_assert_equal_p(remote, NULL); cl_assert_equal_p(remote, NULL);
} }
...@@ -439,7 +439,7 @@ void assert_cannot_create_remote(const char *name, int expected_error) ...@@ -439,7 +439,7 @@ void assert_cannot_create_remote(const char *name, int expected_error)
git_remote *remote = NULL; git_remote *remote = NULL;
cl_git_fail_with( cl_git_fail_with(
git_remote_create(&remote, _repo, name, "git://github.com/libgit2/libgit2", NULL), git_remote_create(&remote, _repo, name, "git://github.com/libgit2/libgit2"),
expected_error); expected_error);
cl_assert_equal_p(remote, NULL); cl_assert_equal_p(remote, NULL);
...@@ -458,12 +458,12 @@ void test_network_remote_remotes__cannot_create_a_remote_which_name_is_invalid(v ...@@ -458,12 +458,12 @@ void test_network_remote_remotes__cannot_create_a_remote_which_name_is_invalid(v
assert_cannot_create_remote("a.lock", GIT_EINVALIDSPEC); assert_cannot_create_remote("a.lock", GIT_EINVALIDSPEC);
} }
void test_network_remote_remotes__create_a_remote_with_custom_fetch_spec(void) void test_network_remote_remote__git_remote_create_with_fetchspec(void)
{ {
git_remote *remote; git_remote *remote;
git_strarray array; git_strarray array;
cl_git_pass(git_remote_create(&remote, _repo, "test-new", "git://github.com/libgit2/libgit2", "+refs/*:refs/*")); cl_git_pass(git_remote_create_with_fetchspec(&remote, _repo, "test-new", "git://github.com/libgit2/libgit2", "+refs/*:refs/*"));
git_remote_get_fetch_refspecs(&array, remote); git_remote_get_fetch_refspecs(&array, remote);
cl_assert_equal_s("+refs/*:refs/*", array.strings[0]); cl_assert_equal_s("+refs/*:refs/*", array.strings[0]);
git_remote_free(remote); git_remote_free(remote);
......
...@@ -141,7 +141,7 @@ void test_online_clone__clone_into(void) ...@@ -141,7 +141,7 @@ void test_online_clone__clone_into(void)
checkout_opts.progress_payload = &checkout_progress_cb_was_called; checkout_opts.progress_payload = &checkout_progress_cb_was_called;
cl_git_pass(git_repository_init(&g_repo, "./foo", false)); cl_git_pass(git_repository_init(&g_repo, "./foo", false));
cl_git_pass(git_remote_create(&remote, g_repo, "origin", LIVE_REPO_URL, NULL)); cl_git_pass(git_remote_create(&remote, g_repo, "origin", LIVE_REPO_URL));
callbacks.transfer_progress = &fetch_progress; callbacks.transfer_progress = &fetch_progress;
callbacks.payload = &fetch_progress_cb_was_called; callbacks.payload = &fetch_progress_cb_was_called;
......
...@@ -43,7 +43,7 @@ static void do_fetch(const char *url, git_remote_autotag_option_t flag, int n) ...@@ -43,7 +43,7 @@ static void do_fetch(const char *url, git_remote_autotag_option_t flag, int n)
callbacks.payload = &bytes_received; callbacks.payload = &bytes_received;
counter = 0; counter = 0;
cl_git_pass(git_remote_create(&remote, _repo, "test", url, NULL)); cl_git_pass(git_remote_create(&remote, _repo, "test", url));
git_remote_set_callbacks(remote, &callbacks); git_remote_set_callbacks(remote, &callbacks);
git_remote_set_autotag(remote, flag); git_remote_set_autotag(remote, flag);
cl_git_pass(git_remote_connect(remote, GIT_DIRECTION_FETCH)); cl_git_pass(git_remote_connect(remote, GIT_DIRECTION_FETCH));
...@@ -140,7 +140,7 @@ void test_online_fetch__can_cancel(void) ...@@ -140,7 +140,7 @@ void test_online_fetch__can_cancel(void)
git_remote_callbacks callbacks = GIT_REMOTE_CALLBACKS_INIT; git_remote_callbacks callbacks = GIT_REMOTE_CALLBACKS_INIT;
cl_git_pass(git_remote_create(&remote, _repo, "test", cl_git_pass(git_remote_create(&remote, _repo, "test",
"http://github.com/libgit2/TestGitRepository.git", NULL)); "http://github.com/libgit2/TestGitRepository.git"));
callbacks.transfer_progress = cancel_at_half; callbacks.transfer_progress = cancel_at_half;
callbacks.payload = &bytes_received; callbacks.payload = &bytes_received;
...@@ -168,7 +168,7 @@ void test_online_fetch__ls_disconnected(void) ...@@ -168,7 +168,7 @@ void test_online_fetch__ls_disconnected(void)
int nr_before = 0, nr_after = 0; int nr_before = 0, nr_after = 0;
cl_git_pass(git_remote_create(&remote, _repo, "test", cl_git_pass(git_remote_create(&remote, _repo, "test",
"http://github.com/libgit2/TestGitRepository.git", NULL)); "http://github.com/libgit2/TestGitRepository.git"));
cl_git_pass(git_remote_connect(remote, GIT_DIRECTION_FETCH)); cl_git_pass(git_remote_connect(remote, GIT_DIRECTION_FETCH));
cl_git_pass(git_remote_ls(remote, ls_cb, &nr_before)); cl_git_pass(git_remote_ls(remote, ls_cb, &nr_before));
git_remote_disconnect(remote); git_remote_disconnect(remote);
......
...@@ -301,7 +301,7 @@ void test_online_push__initialize(void) ...@@ -301,7 +301,7 @@ void test_online_push__initialize(void)
_remote = NULL; _remote = NULL;
if (_remote_url) { if (_remote_url) {
cl_git_pass(git_remote_create(&_remote, _repo, "test", _remote_url, NULL)); cl_git_pass(git_remote_create(&_remote, _repo, "test", _remote_url));
record_callbacks_data_clear(&_record_cbs_data); record_callbacks_data_clear(&_record_cbs_data);
git_remote_set_callbacks(_remote, &_record_cbs); git_remote_set_callbacks(_remote, &_record_cbs);
......
...@@ -70,7 +70,7 @@ void test_refs_branches_remote__ambiguous_remote_returns_error(void) ...@@ -70,7 +70,7 @@ void test_refs_branches_remote__ambiguous_remote_returns_error(void)
git_remote *remote; git_remote *remote;
/* Create the remote */ /* Create the remote */
cl_git_pass(git_remote_create(&remote, g_repo, "addtest", "http://github.com/libgit2/libgit2", NULL)); cl_git_pass(git_remote_create(&remote, g_repo, "addtest", "http://github.com/libgit2/libgit2"));
/* Update the remote fetch spec */ /* Update the remote fetch spec */
git_remote_clear_refspecs(remote); git_remote_clear_refspecs(remote);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment