Replace all remaining references of the_repository->remote_state in static methods with a struct remote_state parameter. To do so, introduce a family of helper functions, "remotes_*", that behave like "repo_*", but accept struct remote_state instead of struct repository, and move read_config() calls to non-static functions. Signed-off-by: Glen Choo <chooglen@xxxxxxxxxx> --- remote.c | 94 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 53 insertions(+), 41 deletions(-) diff --git a/remote.c b/remote.c index e3ca44f735..cf9cced5ed 100644 --- a/remote.c +++ b/remote.c @@ -505,6 +505,55 @@ const char *remote_for_branch(struct branch *branch, int *explicit) return "origin"; } +static struct remote *remotes_remote_get_1( + struct remote_state *remote_state, const char *name, + const char *(*get_default)(struct branch *, int *)) +{ + struct remote *ret; + int name_given = 0; + + if (name) + name_given = 1; + else + name = get_default(remote_state->current_branch, + &name_given); + + ret = make_remote(remote_state, name, 0); + if (valid_remote_nick(name) && have_git_dir()) { + if (!valid_remote(ret)) + read_remotes_file(ret); + if (!valid_remote(ret)) + read_branches_file(ret); + } + if (name_given && !valid_remote(ret)) + add_url_alias(ret, name); + if (!valid_remote(ret)) + return NULL; + return ret; +} + +static inline struct remote *remotes_remote_get(struct remote_state *remote_state, const char *name) +{ + return remotes_remote_get_1(remote_state, name, remote_for_branch); +} + +static inline struct remote *remotes_pushremote_get(struct remote_state *remote_state, const char *name) +{ + return remotes_remote_get_1(remote_state, name, pushremote_for_branch); +} + +struct remote *remote_get(const char *name) +{ + read_config(the_repository); + return remotes_remote_get(the_repository->remote_state, name); +} + +struct remote *pushremote_get(const char *name) +{ + read_config(the_repository); + return remotes_pushremote_get(the_repository->remote_state, name); +} + const char *pushremote_for_branch(struct branch *branch, int *explicit) { if (branch && branch->pushremote_name) { @@ -530,7 +579,8 @@ const char *remote_ref_for_branch(struct branch *branch, int for_push) } else { const char *dst, *remote_name = pushremote_for_branch(branch, NULL); - struct remote *remote = remote_get(remote_name); + struct remote *remote = + remotes_remote_get(branch->remote_state, remote_name); if (remote && remote->push.nr && (dst = apply_refspecs(&remote->push, @@ -542,44 +592,6 @@ const char *remote_ref_for_branch(struct branch *branch, int for_push) return NULL; } -static struct remote *remote_get_1(const char *name, - const char *(*get_default)(struct branch *, int *)) -{ - struct remote *ret; - int name_given = 0; - - read_config(the_repository); - - if (name) - name_given = 1; - else - name = get_default(the_repository->remote_state->current_branch, - &name_given); - - ret = make_remote(the_repository->remote_state, name, 0); - if (valid_remote_nick(name) && have_git_dir()) { - if (!valid_remote(ret)) - read_remotes_file(ret); - if (!valid_remote(ret)) - read_branches_file(ret); - } - if (name_given && !valid_remote(ret)) - add_url_alias(ret, name); - if (!valid_remote(ret)) - return NULL; - return ret; -} - -struct remote *remote_get(const char *name) -{ - return remote_get_1(name, remote_for_branch); -} - -struct remote *pushremote_get(const char *name) -{ - return remote_get_1(name, pushremote_for_branch); -} - int remote_is_configured(struct remote *remote, int in_repo) { if (!remote) @@ -1684,7 +1696,7 @@ static void set_merge(struct branch *ret) return; } - remote = remote_get(ret->remote_name); + remote = remotes_remote_get(ret->remote_state, ret->remote_name); CALLOC_ARRAY(ret->merge, ret->merge_nr); for (i = 0; i < ret->merge_nr; i++) { @@ -1786,7 +1798,7 @@ static const char *branch_get_push_1(struct branch *branch, struct strbuf *err) { struct remote *remote; - remote = remote_get(pushremote_for_branch(branch, NULL)); + remote = remotes_remote_get(branch->remote_state, pushremote_for_branch(branch, NULL)); if (!remote) return error_buf(err, _("branch '%s' has no remote for pushing"), -- 2.33.GIT