Jeff King <peff@xxxxxxxx> writes: > In protocol v2, instead of just running "upload-pack", we have a generic > "serve" loop which runs command requests from the client. What used to > be "upload-pack" is now generally split into two operations: "ls-refs" > and "fetch". The latter knows it must respect uploadpack.* config, but > the former is not actually specific to a fetch operation (we do not yet > do v2 receive-pack, but eventually we may, and ls-refs would support > both operations). > > However, ls-refs does need to know which operation we're performing, in > order to read the correct config (e.g., uploadpack.hiderefs versus > receive.hiderefs; we don't read _either_ right now, but this is the > first step to fixing that). > > In the generic "git-serve" program, we don't have that information. But > in the protocol as it is actually used by clients, the client still asks > to run "git-upload-pack", and then issues an "ls-refs" from there. So we > _do_ know at that point that "uploadpack" is the right config context. > This patch teaches the protocol v2 "serve" code to pass that context > through to the individual commands (a future patch will teach ls-refs to > actually use it). Thanks for a clear description of ugly status quo X-<. > diff --git a/ls-refs.h b/ls-refs.h > index b62877e8da..da26fc9824 100644 > --- a/ls-refs.h > +++ b/ls-refs.h > @@ -4,7 +4,8 @@ > struct repository; > struct argv_array; > struct packet_reader; > -extern int ls_refs(struct repository *r, struct argv_array *keys, > +extern int ls_refs(struct repository *r, const char *config_context, > + struct argv_array *keys, > struct packet_reader *request); One thing I wonder is if we want to pass the whole *_opt thing, instead of only one field out of it. > #endif /* LS_REFS_H */ > diff --git a/serve.c b/serve.c > index bda085f09c..70f89cf0d9 100644 > --- a/serve.c > +++ b/serve.c > @@ -48,6 +48,7 @@ struct protocol_capability { > * This field should be NULL for capabilities which are not commands. > */ > int (*command)(struct repository *r, > + const char *config_context, Likewise here. > struct argv_array *keys, > struct packet_reader *request); > }; Thanks.