diff --git a/fmt-merge-msg.c b/fmt-merge-msg.c
index 43f4f829242..03dba905643 100644
--- a/fmt-merge-msg.c
+++ b/fmt-merge-msg.c
@@ -451,7 +451,7 @@ static void fmt_merge_msg_title(struct strbuf *out,
strbuf_addf(out, " of %s", srcs.items[i].string);
}
- main_branch = git_main_branch_name();
+ main_branch = git_main_branch_name(0);
if (!strcmp(main_branch, current_branch))
strbuf_addch(out, '\n');
else
diff --git a/refs.c b/refs.c
index f1854cffa2f..7da3ac178c4 100644
--- a/refs.c
+++ b/refs.c
@@ -560,8 +560,9 @@ void expand_ref_prefix(struct argv_array *prefixes, const char *prefix)
argv_array_pushf(prefixes, *p, len, prefix);
}
-char *repo_main_branch_name(struct repository *r)
+char *repo_main_branch_name(struct repository *r, int flags)
{
+ int full_name = flags & MAIN_BRANCH_FULL_NAME;
const char *config_key = "core.mainbranch";
const char *config_display_key = "core.mainBranch";
const char *fall_back = "master";@@ -570,7 +571,10 @@ char *repo_main_branch_name(struct repository *r)
if (repo_config_get_string(r, config_key, &name) < 0)
die(_("could not retrieve `%s`"), config_display_key);
- ret = name ? name : xstrdup(fall_back);
+ if (full_name)
+ ret = xstrfmt("refs/heads/%s", name ? name : fall_back);
+ else
+ ret = name ? name : xstrdup(fall_back);
if (check_refname_format(ret, REFNAME_ALLOW_ONELEVEL))
die(_("invalid branch name: %s = %s"),@@ -582,9 +586,9 @@ char *repo_main_branch_name(struct repository *r)
return ret;
}
-char *git_main_branch_name(void)
+char *git_main_branch_name(int flags)
{
- return repo_main_branch_name(the_repository);
+ return repo_main_branch_name(the_repository, flags);
}
/*diff --git a/refs.h b/refs.h
index a207ef01348..96472f9a9f5 100644
--- a/refs.h
+++ b/refs.h
@@ -157,9 +157,13 @@ int dwim_log(const char *str, int len, struct object_id *oid, char **ref);
/*
* Retrieves the name of the main (or: primary) branch of the given
* repository.
+ *
+ * The result is an allocated string. Unless the flags ask for a short name, it
+ * will be prefixed with "refs/heads/".
*/
-char *git_main_branch_name(void);
-char *repo_main_branch_name(struct repository *r);
+#define MAIN_BRANCH_FULL_NAME (1<<0)
+char *git_main_branch_name(int flags);
+char *repo_main_branch_name(struct repository *r, int flags);
/*
* A ref_transaction represents a collection of reference updates that
diff --git a/send-pack.c b/send-pack.c
index 2532864c812..898720511d0 100644
--- a/send-pack.c
+++ b/send-pack.c
@@ -405,7 +405,7 @@ int send_pack(struct send_pack_args *args,
}
if (!remote_refs) {
- char *branch_name = git_main_branch_name();
+ char *branch_name = git_main_branch_name(0);
fprintf(stderr, "No refs in common and none specified; doing nothing.\n"
"Perhaps you should specify a branch such as '%s'.\n",diff --git a/transport-helper.c b/transport-helper.c
index 8c8f40e322d..7a54e5b2fb2 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -1044,7 +1044,7 @@ static int push_refs(struct transport *transport,
}
if (!remote_refs) {
- char *branch_name = git_main_branch_name();
+ char *branch_name = git_main_branch_name(0);
fprintf(stderr,
_("No refs in common and none specified; doing nothing.\n"--
gitgitgadget