refs: pass ref store when detecting dangling symrefs

Both `warn_dangling_symref()` and `warn_dangling_symrefs()` derive the
ref store via `the_repository`. Adapt them to instead take in the ref
store as a parameter. While at it, rename the functions to have a `ref_`
prefix to align them with other functions that take a ref store.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Patrick Steinhardt 2024-05-17 10:18:53 +02:00 committed by Junio C Hamano
parent 8378c9d27b
commit 330a2ae60b
4 changed files with 28 additions and 25 deletions

View File

@ -1412,7 +1412,8 @@ static int prune_refs(struct display_state *display_state,
_("(none)"), ref->name, _("(none)"), ref->name,
&ref->new_oid, &ref->old_oid, &ref->new_oid, &ref->old_oid,
summary_width); summary_width);
warn_dangling_symref(stderr, dangling_msg, ref->name); refs_warn_dangling_symref(get_main_ref_store(the_repository),
stderr, dangling_msg, ref->name);
} }
} }



View File

@ -1477,7 +1477,8 @@ static int prune_remote(const char *remote, int dry_run)
abbrev_ref(refname, "refs/remotes/")); abbrev_ref(refname, "refs/remotes/"));
} }


warn_dangling_symrefs(stdout, dangling_msg, &refs_to_prune); refs_warn_dangling_symrefs(get_main_ref_store(the_repository),
stdout, dangling_msg, &refs_to_prune);


string_list_clear(&refs_to_prune, 0); string_list_clear(&refs_to_prune, 0);
free_remote_ref_states(&states); free_remote_ref_states(&states);

40
refs.c
View File

@ -447,6 +447,7 @@ enum peel_status peel_object(const struct object_id *name, struct object_id *oid
} }


struct warn_if_dangling_data { struct warn_if_dangling_data {
struct ref_store *refs;
FILE *fp; FILE *fp;
const char *refname; const char *refname;
const struct string_list *refnames; const struct string_list *refnames;
@ -463,8 +464,7 @@ static int warn_if_dangling_symref(const char *refname,
if (!(flags & REF_ISSYMREF)) if (!(flags & REF_ISSYMREF))
return 0; return 0;


resolves_to = refs_resolve_ref_unsafe(get_main_ref_store(the_repository), resolves_to = refs_resolve_ref_unsafe(d->refs, refname, 0, NULL, NULL);
refname, 0, NULL, NULL);
if (!resolves_to if (!resolves_to
|| (d->refname || (d->refname
? strcmp(resolves_to, d->refname) ? strcmp(resolves_to, d->refname)
@ -477,28 +477,28 @@ static int warn_if_dangling_symref(const char *refname,
return 0; return 0;
} }


void warn_dangling_symref(FILE *fp, const char *msg_fmt, const char *refname) void refs_warn_dangling_symref(struct ref_store *refs, FILE *fp,
const char *msg_fmt, const char *refname)
{ {
struct warn_if_dangling_data data; struct warn_if_dangling_data data = {

.refs = refs,
data.fp = fp; .fp = fp,
data.refname = refname; .refname = refname,
data.refnames = NULL; .msg_fmt = msg_fmt,
data.msg_fmt = msg_fmt; };
refs_for_each_rawref(get_main_ref_store(the_repository), refs_for_each_rawref(refs, warn_if_dangling_symref, &data);
warn_if_dangling_symref, &data);
} }


void warn_dangling_symrefs(FILE *fp, const char *msg_fmt, const struct string_list *refnames) void refs_warn_dangling_symrefs(struct ref_store *refs, FILE *fp,
const char *msg_fmt, const struct string_list *refnames)
{ {
struct warn_if_dangling_data data; struct warn_if_dangling_data data = {

.refs = refs,
data.fp = fp; .fp = fp,
data.refname = NULL; .refnames = refnames,
data.refnames = refnames; .msg_fmt = msg_fmt,
data.msg_fmt = msg_fmt; };
refs_for_each_rawref(get_main_ref_store(the_repository), refs_for_each_rawref(refs, warn_if_dangling_symref, &data);
warn_if_dangling_symref, &data);
} }


int refs_for_each_tag_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data) int refs_for_each_tag_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)

7
refs.h
View File

@ -388,9 +388,10 @@ static inline const char *has_glob_specials(const char *pattern)
return strpbrk(pattern, "?*["); return strpbrk(pattern, "?*[");
} }


void warn_dangling_symref(FILE *fp, const char *msg_fmt, const char *refname); void refs_warn_dangling_symref(struct ref_store *refs, FILE *fp,
void warn_dangling_symrefs(FILE *fp, const char *msg_fmt, const char *msg_fmt, const char *refname);
const struct string_list *refnames); void refs_warn_dangling_symrefs(struct ref_store *refs, FILE *fp,
const char *msg_fmt, const struct string_list *refnames);


/* /*
* Flags for controlling behaviour of pack_refs() * Flags for controlling behaviour of pack_refs()