remote: remove the_repository->remote_state from static methods

Replace all remaining references of the_repository->remote_state in static functions with a struct remote_state parameter. To do so, move read_config() calls to non-static functions and create a family of static functions, "remotes_*", that behave like "repo_*", but accept struct remote_state instead of struct repository. In the case where a static function calls a non-static function, replace the non-static function with its "remotes_*" equivalent. Signed-off-by: Glen Choo <chooglen@google.com> Reviewed-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Glen Choo committed Nov 17, 2021 at 16:53 UTC 56eed3422cb4605a616daab589b94a843a75651f
1 file changed +71 -25
remote.c
+71 -25
@@ -483,7 +483,9 @@ static int valid_remote_nick(const char *name)
483 return 1;
484 }
485
486 -const char *remote_for_branch(struct branch *branch, int *explicit)
486 +static const char *remotes_remote_for_branch(struct remote_state *remote_state,
487 + struct branch *branch,
488 + int *explicit)
489 {
490 if (branch && branch->remote_name) {
491 if (explicit)
@@ -495,32 +497,55 @@ const char *remote_for_branch(struct branch *branch, int *explicit)
497 return "origin";
498 }
499
498 -const char *pushremote_for_branch(struct branch *branch, int *explicit)
500 +const char *remote_for_branch(struct branch *branch, int *explicit)
501 +{
502 + read_config(the_repository);
503 + return remotes_remote_for_branch(the_repository->remote_state, branch,
504 + explicit);
505 +}
506 +
507 +static const char *
508 +remotes_pushremote_for_branch(struct remote_state *remote_state,
509 + struct branch *branch, int *explicit)
510 {
511 if (branch && branch->pushremote_name) {
512 if (explicit)
513 *explicit = 1;
514 return branch->pushremote_name;
515 }
505 - if (the_repository->remote_state->pushremote_name) {
516 + if (remote_state->pushremote_name) {
517 if (explicit)
518 *explicit = 1;
508 - return the_repository->remote_state->pushremote_name;
519 + return remote_state->pushremote_name;
520 }
510 - return remote_for_branch(branch, explicit);
521 + return remotes_remote_for_branch(remote_state, branch, explicit);
522 }
523
524 +const char *pushremote_for_branch(struct branch *branch, int *explicit)
525 +{
526 + read_config(the_repository);
527 + return remotes_pushremote_for_branch(the_repository->remote_state,
528 + branch, explicit);
529 +}
530 +
531 +static struct remote *remotes_remote_get(struct remote_state *remote_state,
532 + const char *name);
533 +
534 const char *remote_ref_for_branch(struct branch *branch, int for_push)
535 {
536 + read_config(the_repository);
537 if (branch) {
538 if (!for_push) {
539 if (branch->merge_nr) {
540 return branch->merge_name[0];
541 }
542 } else {
521 - const char *dst, *remote_name =
522 - pushremote_for_branch(branch, NULL);
523 - struct remote *remote = remote_get(remote_name);
543 + const char *dst,
544 + *remote_name = remotes_pushremote_for_branch(
545 + the_repository->remote_state, branch,
546 + NULL);
547 + struct remote *remote = remotes_remote_get(
548 + the_repository->remote_state, remote_name);
549
550 if (remote && remote->push.nr &&
551 (dst = apply_refspecs(&remote->push,
@@ -532,42 +557,58 @@ const char *remote_ref_for_branch(struct branch *branch, int for_push)
557 return NULL;
558 }
559
535 -static struct remote *remote_get_1(const char *name,
536 - const char *(*get_default)(struct branch *, int *))
560 +static struct remote *
561 +remotes_remote_get_1(struct remote_state *remote_state, const char *name,
562 + const char *(*get_default)(struct remote_state *,
563 + struct branch *, int *))
564 {
565 struct remote *ret;
566 int name_given = 0;
567
541 - read_config(the_repository);
542 -
568 if (name)
569 name_given = 1;
570 else
546 - name = get_default(the_repository->remote_state->current_branch,
571 + name = get_default(remote_state, remote_state->current_branch,
572 &name_given);
573
549 - ret = make_remote(the_repository->remote_state, name, 0);
574 + ret = make_remote(remote_state, name, 0);
575 if (valid_remote_nick(name) && have_git_dir()) {
576 if (!valid_remote(ret))
552 - read_remotes_file(the_repository->remote_state, ret);
577 + read_remotes_file(remote_state, ret);
578 if (!valid_remote(ret))
554 - read_branches_file(the_repository->remote_state, ret);
579 + read_branches_file(remote_state, ret);
580 }
581 if (name_given && !valid_remote(ret))
557 - add_url_alias(the_repository->remote_state, ret, name);
582 + add_url_alias(remote_state, ret, name);
583 if (!valid_remote(ret))
584 return NULL;
585 return ret;
586 }
587
588 +static inline struct remote *
589 +remotes_remote_get(struct remote_state *remote_state, const char *name)
590 +{
591 + return remotes_remote_get_1(remote_state, name,
592 + remotes_remote_for_branch);
593 +}
594 +
595 struct remote *remote_get(const char *name)
596 {
565 - return remote_get_1(name, remote_for_branch);
597 + read_config(the_repository);
598 + return remotes_remote_get(the_repository->remote_state, name);
599 +}
600 +
601 +static inline struct remote *
602 +remotes_pushremote_get(struct remote_state *remote_state, const char *name)
603 +{
604 + return remotes_remote_get_1(remote_state, name,
605 + remotes_pushremote_for_branch);
606 }
607
608 struct remote *pushremote_get(const char *name)
609 {
570 - return remote_get_1(name, pushremote_for_branch);
610 + read_config(the_repository);
611 + return remotes_pushremote_get(the_repository->remote_state, name);
612 }
613
614 int remote_is_configured(struct remote *remote, int in_repo)
@@ -1654,7 +1695,7 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
1695 }
1696 }
1697
1657 -static void set_merge(struct branch *ret)
1698 +static void set_merge(struct remote_state *remote_state, struct branch *ret)
1699 {
1700 struct remote *remote;
1701 char *ref;
@@ -1674,7 +1715,7 @@ static void set_merge(struct branch *ret)
1715 return;
1716 }
1717
1677 - remote = remote_get(ret->remote_name);
1718 + remote = remotes_remote_get(remote_state, ret->remote_name);
1719
1720 CALLOC_ARRAY(ret->merge, ret->merge_nr);
1721 for (i = 0; i < ret->merge_nr; i++) {
@@ -1701,7 +1742,7 @@ struct branch *branch_get(const char *name)
1742 else
1743 ret = make_branch(the_repository->remote_state, name,
1744 strlen(name));
1704 - set_merge(ret);
1745 + set_merge(the_repository->remote_state, ret);
1746 return ret;
1747 }
1748
@@ -1772,11 +1813,14 @@ static const char *tracking_for_push_dest(struct remote *remote,
1813 return ret;
1814 }
1815
1775 -static const char *branch_get_push_1(struct branch *branch, struct strbuf *err)
1816 +static const char *branch_get_push_1(struct remote_state *remote_state,
1817 + struct branch *branch, struct strbuf *err)
1818 {
1819 struct remote *remote;
1820
1779 - remote = remote_get(pushremote_for_branch(branch, NULL));
1821 + remote = remotes_remote_get(
1822 + remote_state,
1823 + remotes_pushremote_for_branch(remote_state, branch, NULL));
1824 if (!remote)
1825 return error_buf(err,
1826 _("branch '%s' has no remote for pushing"),
@@ -1834,11 +1878,13 @@ static const char *branch_get_push_1(struct branch *branch, struct strbuf *err)
1878
1879 const char *branch_get_push(struct branch *branch, struct strbuf *err)
1880 {
1881 + read_config(the_repository);
1882 if (!branch)
1883 return error_buf(err, _("HEAD does not point to a branch"));
1884
1885 if (!branch->push_tracking_ref)
1841 - branch->push_tracking_ref = branch_get_push_1(branch, err);
1886 + branch->push_tracking_ref = branch_get_push_1(
1887 + the_repository->remote_state, branch, err);
1888 return branch->push_tracking_ref;
1889 }
1890