mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
refs: get rid of global list of hidden refs
We're about to add a new argument to git-rev-list(1) that allows it to add all references that are visible when taking `transfer.hideRefs` et al into account. This will require us to potentially parse multiple sets of hidden refs, which is not easily possible right now as there is only a single, global instance of the list of parsed hidden refs. Refactor `parse_hide_refs_config()` and `ref_is_hidden()` so that both take the list of hidden references as input and adjust callers to keep a local list, instead. This allows us to easily use multiple hidden-ref lists. Furthermore, it allows us to properly free this list before we exit. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Taylor Blau <me@ttaylorr.com>
This commit is contained in:
committed by
Taylor Blau
parent
5eeb9aa208
commit
9b67eb6fbe
13
ls-refs.c
13
ls-refs.c
@@ -6,6 +6,7 @@
|
||||
#include "ls-refs.h"
|
||||
#include "pkt-line.h"
|
||||
#include "config.h"
|
||||
#include "string-list.h"
|
||||
|
||||
static int config_read;
|
||||
static int advertise_unborn;
|
||||
@@ -73,6 +74,7 @@ struct ls_refs_data {
|
||||
unsigned symrefs;
|
||||
struct strvec prefixes;
|
||||
struct strbuf buf;
|
||||
struct string_list hidden_refs;
|
||||
unsigned unborn : 1;
|
||||
};
|
||||
|
||||
@@ -84,7 +86,7 @@ static int send_ref(const char *refname, const struct object_id *oid,
|
||||
|
||||
strbuf_reset(&data->buf);
|
||||
|
||||
if (ref_is_hidden(refname_nons, refname))
|
||||
if (ref_is_hidden(refname_nons, refname, &data->hidden_refs))
|
||||
return 0;
|
||||
|
||||
if (!ref_match(&data->prefixes, refname_nons))
|
||||
@@ -137,14 +139,15 @@ static void send_possibly_unborn_head(struct ls_refs_data *data)
|
||||
}
|
||||
|
||||
static int ls_refs_config(const char *var, const char *value,
|
||||
void *data UNUSED)
|
||||
void *cb_data)
|
||||
{
|
||||
struct ls_refs_data *data = cb_data;
|
||||
/*
|
||||
* We only serve fetches over v2 for now, so respect only "uploadpack"
|
||||
* config. This may need to eventually be expanded to "receive", but we
|
||||
* don't yet know how that information will be passed to ls-refs.
|
||||
*/
|
||||
return parse_hide_refs_config(var, value, "uploadpack");
|
||||
return parse_hide_refs_config(var, value, "uploadpack", &data->hidden_refs);
|
||||
}
|
||||
|
||||
int ls_refs(struct repository *r, struct packet_reader *request)
|
||||
@@ -154,9 +157,10 @@ int ls_refs(struct repository *r, struct packet_reader *request)
|
||||
memset(&data, 0, sizeof(data));
|
||||
strvec_init(&data.prefixes);
|
||||
strbuf_init(&data.buf, 0);
|
||||
string_list_init_dup(&data.hidden_refs);
|
||||
|
||||
ensure_config_read();
|
||||
git_config(ls_refs_config, NULL);
|
||||
git_config(ls_refs_config, &data);
|
||||
|
||||
while (packet_reader_read(request) == PACKET_READ_NORMAL) {
|
||||
const char *arg = request->line;
|
||||
@@ -195,6 +199,7 @@ int ls_refs(struct repository *r, struct packet_reader *request)
|
||||
packet_fflush(stdout);
|
||||
strvec_clear(&data.prefixes);
|
||||
strbuf_release(&data.buf);
|
||||
string_list_clear(&data.hidden_refs, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user