refs: drop `git_default_branch_name()`

The `git_default_branch_name()` function is a thin wrapper around
`repo_default_branch_name()` with two differences:

  - We implicitly rely on `the_repository`.

  - We cache the default branch name.

None of the callsites of `git_default_branch_name()` are hot code paths
though, so the caching of the branch name is not really required.

Refactor the callsites to use `repo_default_branch_name()` instead and
drop `git_default_branch_name()`, thus getting rid of one more case
where we rely on `the_repository`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Patrick Steinhardt 2024-05-17 10:19:09 +02:00 committed by Junio C Hamano
parent 30aaff437f
commit 97abaab5f6
6 changed files with 18 additions and 20 deletions

View File

@ -1468,6 +1468,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
} else if (remote_head) { } else if (remote_head) {
our_head_points_at = NULL; our_head_points_at = NULL;
} else { } else {
char *to_free = NULL;
const char *branch; const char *branch;


if (!mapped_refs) { if (!mapped_refs) {
@ -1480,7 +1481,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
"refs/heads/", &branch)) { "refs/heads/", &branch)) {
unborn_head = xstrdup(transport_ls_refs_options.unborn_head_target); unborn_head = xstrdup(transport_ls_refs_options.unborn_head_target);
} else { } else {
branch = git_default_branch_name(0); branch = to_free = repo_default_branch_name(the_repository, 0);
unborn_head = xstrfmt("refs/heads/%s", branch); unborn_head = xstrfmt("refs/heads/%s", branch);
} }


@ -1496,6 +1497,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
* a match. * a match.
*/ */
our_head_points_at = find_remote_branch(mapped_refs, branch); our_head_points_at = find_remote_branch(mapped_refs, branch);

free(to_free);
} }


write_refspec_config(src_ref_prefix, our_head_points_at, write_refspec_config(src_ref_prefix, our_head_points_at,

View File

@ -46,7 +46,7 @@ static char *pager(int ident_flag UNUSED)


static char *default_branch(int ident_flag UNUSED) static char *default_branch(int ident_flag UNUSED)
{ {
return xstrdup_or_null(git_default_branch_name(1)); return repo_default_branch_name(the_repository, 1);
} }


static char *shell_path(int ident_flag UNUSED) static char *shell_path(int ident_flag UNUSED)

10
refs.c
View File

@ -664,16 +664,6 @@ char *repo_default_branch_name(struct repository *r, int quiet)
return ret; return ret;
} }


const char *git_default_branch_name(int quiet)
{
static char *ret;

if (!ret)
ret = repo_default_branch_name(the_repository, quiet);

return ret;
}

/* /*
* *string and *len will only be substituted, and *string returned (for * *string and *len will only be substituted, and *string returned (for
* later free()ing) if the string passed in is a magic short-hand form * later free()ing) if the string passed in is a magic short-hand form

4
refs.h
View File

@ -169,10 +169,8 @@ int dwim_log(const char *str, int len, struct object_id *oid, char **ref);
/* /*
* Retrieves the default branch name for newly-initialized repositories. * Retrieves the default branch name for newly-initialized repositories.
* *
* The return value of `repo_default_branch_name()` is an allocated string. The * The return value is an allocated string.
* return value of `git_default_branch_name()` is a singleton.
*/ */
const char *git_default_branch_name(int quiet);
char *repo_default_branch_name(struct repository *r, int quiet); char *repo_default_branch_name(struct repository *r, int quiet);


/* /*

View File

@ -305,7 +305,7 @@ static void read_remotes_file(struct remote_state *remote_state,
static void read_branches_file(struct remote_state *remote_state, static void read_branches_file(struct remote_state *remote_state,
struct remote *remote) struct remote *remote)
{ {
char *frag; char *frag, *to_free = NULL;
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
FILE *f = fopen_or_warn(git_path("branches/%s", remote->name), "r"); FILE *f = fopen_or_warn(git_path("branches/%s", remote->name), "r");


@ -333,7 +333,7 @@ static void read_branches_file(struct remote_state *remote_state,
if (frag) if (frag)
*(frag++) = '\0'; *(frag++) = '\0';
else else
frag = (char *)git_default_branch_name(0); frag = to_free = repo_default_branch_name(the_repository, 0);


add_url_alias(remote_state, remote, strbuf_detach(&buf, NULL)); add_url_alias(remote_state, remote, strbuf_detach(&buf, NULL));
refspec_appendf(&remote->fetch, "refs/heads/%s:refs/heads/%s", refspec_appendf(&remote->fetch, "refs/heads/%s:refs/heads/%s",
@ -345,6 +345,8 @@ static void read_branches_file(struct remote_state *remote_state,
*/ */
refspec_appendf(&remote->push, "HEAD:refs/heads/%s", frag); refspec_appendf(&remote->push, "HEAD:refs/heads/%s", frag);
remote->fetch_tags = 1; /* always auto-follow */ remote->fetch_tags = 1; /* always auto-follow */

free(to_free);
} }


static int handle_config(const char *key, const char *value, static int handle_config(const char *key, const char *value,
@ -2388,11 +2390,13 @@ struct ref *guess_remote_head(const struct ref *head,


/* If a remote branch exists with the default branch name, let's use it. */ /* If a remote branch exists with the default branch name, let's use it. */
if (!all) { if (!all) {
char *ref = xstrfmt("refs/heads/%s", char *default_branch = repo_default_branch_name(the_repository, 0);
git_default_branch_name(0)); char *ref = xstrfmt("refs/heads/%s", default_branch);


r = find_ref_by_name(refs, ref); r = find_ref_by_name(refs, ref);
free(ref); free(ref);
free(default_branch);

if (r && oideq(&r->old_oid, &head->old_oid)) if (r && oideq(&r->old_oid, &head->old_oid))
return copy_ref(r); return copy_ref(r);



View File

@ -2046,6 +2046,7 @@ void create_reference_database(unsigned int ref_storage_format,
const char *initial_branch, int quiet) const char *initial_branch, int quiet)
{ {
struct strbuf err = STRBUF_INIT; struct strbuf err = STRBUF_INIT;
char *to_free = NULL;
int reinit = is_reinit(); int reinit = is_reinit();


repo_set_ref_storage_format(the_repository, ref_storage_format); repo_set_ref_storage_format(the_repository, ref_storage_format);
@ -2060,7 +2061,8 @@ void create_reference_database(unsigned int ref_storage_format,
char *ref; char *ref;


if (!initial_branch) if (!initial_branch)
initial_branch = git_default_branch_name(quiet); initial_branch = to_free =
repo_default_branch_name(the_repository, quiet);


ref = xstrfmt("refs/heads/%s", initial_branch); ref = xstrfmt("refs/heads/%s", initial_branch);
if (check_refname_format(ref, 0) < 0) if (check_refname_format(ref, 0) < 0)
@ -2077,6 +2079,7 @@ void create_reference_database(unsigned int ref_storage_format,
initial_branch); initial_branch);


strbuf_release(&err); strbuf_release(&err);
free(to_free);
} }


static int create_default_files(const char *template_path, static int create_default_files(const char *template_path,