Skip to content

Commit 9e3751d

Browse files
peffgitster
authored andcommitted
remote.c: drop "remote" pointer from "struct branch"
When we create each branch struct, we fill in the "remote_name" field from the config, and then fill in the actual "remote" field (with a "struct remote") based on that name. However, it turns out that nobody really cares about the latter field. The only two sites that access it at all are: 1. git-merge, which uses it to notice when the branch does not have a remote defined. But we can easily replace this with looking at remote_name instead. 2. remote.c itself, when setting up the @{upstream} merge config. But we don't need to save the "remote" in the "struct branch" for that; we can just look it up for the duration of the operation. So there is no need to have both fields; they are redundant with each other (the struct remote contains the name, or you can look up the struct from the name). It would be nice to simplify this, especially as we are going to add matching pushremote config in a future patch (and it would be nice to keep them consistent). So which one do we keep and which one do we get rid of? If we had a lot of callers accessing the struct, it would be more efficient to keep it (since you have to do a lookup to go from the name to the struct, but not vice versa). But we don't have a lot of callers; we have exactly one, so efficiency doesn't matter. We can decide this based on simplicity and readability. And the meaning of the struct value is somewhat unclear. Is it always the remote matching remote_name? If remote_name is NULL (i.e., no per-branch config), does the struct fall back to the "origin" remote, or is it also NULL? These questions will get even more tricky with pushremotes, whose fallback behavior is more complicated. So let's just store the name, which pretty clearly represents the branch.*.remote config. Any lookup or fallback behavior can then be implemented in helper functions. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent ee2499f commit 9e3751d

File tree

4 files changed

+5
-9
lines changed

4 files changed

+5
-9
lines changed

Documentation/technical/api-remote.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,6 @@ It contains:
9797

9898
The name of the remote listed in the configuration.
9999

100-
`remote`::
101-
102-
The struct remote for that remote.
103-
104100
`merge_name`::
105101

106102
An array of the "merge" lines in the configuration.

builtin/merge.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -955,7 +955,7 @@ static int setup_with_upstream(const char ***argv)
955955

956956
if (!branch)
957957
die(_("No current branch."));
958-
if (!branch->remote)
958+
if (!branch->remote_name)
959959
die(_("No remote for the current branch."));
960960
if (!branch->merge_nr)
961961
die(_("No default upstream defined for the current branch."));

remote.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1632,6 +1632,7 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
16321632

16331633
static void set_merge(struct branch *ret)
16341634
{
1635+
struct remote *remote;
16351636
char *ref;
16361637
unsigned char sha1[20];
16371638
int i;
@@ -1649,11 +1650,13 @@ static void set_merge(struct branch *ret)
16491650
return;
16501651
}
16511652

1653+
remote = remote_get(ret->remote_name);
1654+
16521655
ret->merge = xcalloc(ret->merge_nr, sizeof(*ret->merge));
16531656
for (i = 0; i < ret->merge_nr; i++) {
16541657
ret->merge[i] = xcalloc(1, sizeof(**ret->merge));
16551658
ret->merge[i]->src = xstrdup(ret->merge_name[i]);
1656-
if (!remote_find_tracking(ret->remote, ret->merge[i]) ||
1659+
if (!remote_find_tracking(remote, ret->merge[i]) ||
16571660
strcmp(ret->remote_name, "."))
16581661
continue;
16591662
if (dwim_ref(ret->merge_name[i], strlen(ret->merge_name[i]),
@@ -1673,8 +1676,6 @@ struct branch *branch_get(const char *name)
16731676
ret = current_branch;
16741677
else
16751678
ret = make_branch(name, 0);
1676-
if (ret && ret->remote_name)
1677-
ret->remote = remote_get(ret->remote_name);
16781679
set_merge(ret);
16791680
return ret;
16801681
}

remote.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,6 @@ struct branch {
203203
const char *refname;
204204

205205
const char *remote_name;
206-
struct remote *remote;
207206

208207
const char **merge_name;
209208
struct refspec **merge;

0 commit comments

Comments
 (0)