diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2021-09-20 08:39:46 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-20 08:39:46 -0400 |
commit | 0644c2e8c54784800f27ee7b389eccaff6745755 (patch) | |
tree | e0b4c438940763649aac6190683f0f38d3003a66 | |
parent | 4f5653a4b524db88cf3e6c6744bb71ad2394b9b9 (diff) | |
parent | 3bd462a113a9bbf4fb6e61c56c3a32ac3636b664 (diff) | |
download | libgit2-0644c2e8c54784800f27ee7b389eccaff6745755.tar.gz |
Merge pull request #6058 from mathworks/proxy_config_with_detached_remote
Allow proxy options when connecting with a detached remote.
-rw-r--r-- | src/remote.c | 15 | ||||
-rw-r--r-- | tests/remote/httpproxy.c | 42 |
2 files changed, 52 insertions, 5 deletions
diff --git a/src/remote.c b/src/remote.c index 154300bd2..56d7e42db 100644 --- a/src/remote.c +++ b/src/remote.c @@ -884,15 +884,22 @@ static void url_config_trim(git_net_url *url) static int http_proxy_config(char **out, git_remote *remote, git_net_url *url) { - git_config *cfg; + git_config *cfg = NULL; git_buf buf = GIT_BUF_INIT; git_net_url lookup_url = GIT_NET_URL_INIT; int error; - if ((error = git_net_url_dup(&lookup_url, url)) < 0 || - (error = git_repository_config__weakptr(&cfg, remote->repo)) < 0) + if ((error = git_net_url_dup(&lookup_url, url)) < 0) goto done; + if (remote->repo) { + if ((error = git_repository_config(&cfg, remote->repo)) < 0) + goto done; + } else { + if ((error = git_config_open_default(&cfg)) < 0) + goto done; + } + /* remote.<name>.proxy config setting */ if (remote->name && remote->name[0]) { git_buf_clear(&buf); @@ -922,6 +929,7 @@ static int http_proxy_config(char **out, git_remote *remote, git_net_url *url) error = lookup_config(out, cfg, "http.proxy"); done: + git_config_free(cfg); git_buf_dispose(&buf); git_net_url_dispose(&lookup_url); return error; @@ -971,7 +979,6 @@ int git_remote__http_proxy(char **out, git_remote *remote, git_net_url *url) GIT_ASSERT_ARG(out); GIT_ASSERT_ARG(remote); - GIT_ASSERT_ARG(remote->repo); *out = NULL; diff --git a/tests/remote/httpproxy.c b/tests/remote/httpproxy.c index 097db4cd5..182ea2467 100644 --- a/tests/remote/httpproxy.c +++ b/tests/remote/httpproxy.c @@ -1,6 +1,7 @@ #include "clar_libgit2.h" -#include "remote.h" +#include "futils.h" #include "net.h" +#include "remote.h" static git_repository *repo; static git_net_url url = GIT_NET_URL_INIT; @@ -105,6 +106,45 @@ void test_remote_httpproxy__config_empty_overrides(void) assert_config_match("remote.lg2.proxy", ""); } +void assert_global_config_match(const char *config, const char *expected) +{ + git_remote *remote; + char *proxy; + git_config* cfg; + + if (config) { + cl_git_pass(git_config_open_default(&cfg)); + git_config_set_string(cfg, config, expected); + git_config_free(cfg); + } + + cl_git_pass(git_remote_create_detached(&remote, "https://github.com/libgit2/libgit2")); + cl_git_pass(git_remote__http_proxy(&proxy, remote, &url)); + + if (expected) + cl_assert_equal_s(proxy, expected); + else + cl_assert_equal_p(proxy, expected); + + git_remote_free(remote); + git__free(proxy); +} + +void test_remote_httpproxy__config_overrides_detached_remote(void) +{ + cl_fake_home(); + + assert_global_config_match(NULL, NULL); + assert_global_config_match("http.proxy", "http://localhost:1/"); + assert_global_config_match("http.https://github.com.proxy", "http://localhost:2/"); + assert_global_config_match("http.https://github.com/.proxy", "http://localhost:3/"); + assert_global_config_match("http.https://github.com/libgit2.proxy", "http://localhost:4/"); + assert_global_config_match("http.https://github.com/libgit2/.proxy", "http://localhost:5/"); + assert_global_config_match("http.https://github.com/libgit2/libgit2.proxy", "http://localhost:6/"); + + cl_git_pass(git_futils_rmdir_r("home", NULL, GIT_RMDIR_REMOVE_FILES)); +} + void test_remote_httpproxy__env(void) { orig_http_proxy = cl_getenv("HTTP_PROXY"); |