summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--remote.c21
-rw-r--r--remote.h1
2 files changed, 15 insertions, 7 deletions
diff --git a/remote.c b/remote.c
index c298a43a1c..0d2976b36b 100644
--- a/remote.c
+++ b/remote.c
@@ -692,6 +692,18 @@ static int valid_remote_nick(const char *name)
return !strchr(name, '/'); /* no slash */
}
+const char *remote_for_branch(struct branch *branch, int *explicit)
+{
+ if (branch && branch->remote_name) {
+ if (explicit)
+ *explicit = 1;
+ return branch->remote_name;
+ }
+ if (explicit)
+ *explicit = 0;
+ return "origin";
+}
+
static struct remote *remote_get_1(const char *name, const char *pushremote_name)
{
struct remote *ret;
@@ -703,13 +715,8 @@ static struct remote *remote_get_1(const char *name, const char *pushremote_name
if (pushremote_name) {
name = pushremote_name;
name_given = 1;
- } else {
- if (current_branch && current_branch->remote_name) {
- name = current_branch->remote_name;
- name_given = 1;
- } else
- name = "origin";
- }
+ } else
+ name = remote_for_branch(current_branch, &name_given);
}
ret = make_remote(name, 0);
diff --git a/remote.h b/remote.h
index 4bb6672735..2a7e7a698b 100644
--- a/remote.h
+++ b/remote.h
@@ -211,6 +211,7 @@ struct branch {
};
struct branch *branch_get(const char *name);
+const char *remote_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 *);