revision.h: store hidden refs in a strvec
In subsequent commits, it will be convenient to have a 'const char **'
of hidden refs (matching `transfer.hiderefs`, `uploadpack.hideRefs`,
etc.), instead of a `string_list`.
Convert spots throughout the tree that store the list of hidden refs
from a `string_list` to a `strvec`.
Note that in `parse_hide_refs_config()` there is an ugly const-cast used
to avoid an extra copy of each value before trimming any trailing slash
characters. This could instead be written as:
ref = xstrdup(value);
len = strlen(ref);
while (len && ref[len - 1] == '/')
ref[--len] = '\0';
strvec_push(hide_refs, ref);
free(ref);
but the double-copy (once when calling `xstrdup()`, and another via
`strvec_push()`) is wasteful.
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
c489f47a64
commit
c45841fff8
11
refs.c
11
refs.c
@ -1427,7 +1427,7 @@ char *shorten_unambiguous_ref(const char *refname, int strict)
|
||||
}
|
||||
|
||||
int parse_hide_refs_config(const char *var, const char *value, const char *section,
|
||||
struct string_list *hide_refs)
|
||||
struct strvec *hide_refs)
|
||||
{
|
||||
const char *key;
|
||||
if (!strcmp("transfer.hiderefs", var) ||
|
||||
@ -1438,22 +1438,23 @@ int parse_hide_refs_config(const char *var, const char *value, const char *secti
|
||||
|
||||
if (!value)
|
||||
return config_error_nonbool(var);
|
||||
ref = xstrdup(value);
|
||||
|
||||
/* drop const to remove trailing '/' characters */
|
||||
ref = (char *)strvec_push(hide_refs, value);
|
||||
len = strlen(ref);
|
||||
while (len && ref[len - 1] == '/')
|
||||
ref[--len] = '\0';
|
||||
string_list_append_nodup(hide_refs, ref);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ref_is_hidden(const char *refname, const char *refname_full,
|
||||
const struct string_list *hide_refs)
|
||||
const struct strvec *hide_refs)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = hide_refs->nr - 1; i >= 0; i--) {
|
||||
const char *match = hide_refs->items[i].string;
|
||||
const char *match = hide_refs->v[i];
|
||||
const char *subject;
|
||||
int neg = 0;
|
||||
const char *p;
|
||||
|
||||
Reference in New Issue
Block a user