summaryrefslogtreecommitdiff
path: root/remote.h
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2015-05-21 00:45:20 -0400
committerJunio C Hamano <gitster@pobox.com>2015-05-21 11:03:58 -0700
commitda66b2743cf7244e52c4b9d91646b782cd4f7eeb (patch)
tree66d953b9efea6fcaf85f0959449f5396a0378b48 /remote.h
parentf052154db332e48ea35b1a0d783361a40a361250 (diff)
downloadgit-da66b2743cf7244e52c4b9d91646b782cd4f7eeb.tar.gz
remote.c: provide per-branch pushremote name
When remote.c loads its config, it records the branch.*.pushremote for the current branch along with the global remote.pushDefault value, and then binds them into a single value: the default push for the current branch. We then pass this value (which may be NULL) to remote_get_1 when looking up a remote for push. This has a few downsides: 1. It's confusing. The early-binding of the "current value" led to bugs like the one fixed by 98b406f (remote: handle pushremote config in any order, 2014-02-24). And the fact that pushremotes fall back to ordinary remotes is not explicit at all; it happens because remote_get_1 cannot tell the difference between "we are not asking for the push remote" and "there is no push remote configured". 2. It throws away intermediate data. After read_config() finishes, we have no idea what the value of remote.pushDefault was, because the string has been overwritten by the current branch's branch.*.pushremote. 3. It doesn't record other data. We don't note the branch.*.pushremote value for anything but the current branch. Let's make this more like the fetch-remote config. We'll record the pushremote for each branch, and then explicitly compute the correct remote for the current branch at the time of reading. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'remote.h')
-rw-r--r--remote.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/remote.h b/remote.h
index 2a7e7a698b..30a11dac10 100644
--- a/remote.h
+++ b/remote.h
@@ -203,6 +203,7 @@ struct branch {
const char *refname;
const char *remote_name;
+ const char *pushremote_name;
const char **merge_name;
struct refspec **merge;
@@ -212,6 +213,7 @@ struct branch {
struct branch *branch_get(const char *name);
const char *remote_for_branch(struct branch *branch, int *explicit);
+const char *pushremote_for_branch(struct branch *branch, int *explicit);
int branch_has_merge_config(struct branch *branch);
int branch_merge_matches(struct branch *, int n, const char *);