upload-pack: document and rename --advertise-refs

The --advertise-refs documentation in git-upload-pack added in
9812f2136b (upload-pack.c: use parse-options API, 2016-05-31) hasn't
been entirely true ever since v2 support was implemented in
e52449b672 (connect: request remote refs using v2, 2018-03-15). Under
v2 we don't advertise the refs at all, but rather dump the
capabilities header.

This option has always been an obscure internal implementation detail,
it wasn't even documented for git-receive-pack. Since it has exactly
one user let's rename it to --http-backend-info-refs, which is more
accurate and points the reader in the right direction. Let's also
cross-link this from the protocol v1 and v2 documentation.

I'm retaining a hidden --advertise-refs alias in case there's any
external users of this, and making both options hidden to the bash
completion (as with most other internal-only options).

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Ævar Arnfjörð Bjarmason 1 year ago committed by Junio C Hamano
parent f234da8019
commit 98e2d9d6f7
  1. 5
  2. 12
  3. 3
  4. 3
  5. 3
  6. 5
  7. 2
  8. 14

@ -41,6 +41,11 @@ OPTIONS
The repository to sync into.
Used by linkgit:git-http-backend[1] to serve up
`$GIT_URL/info/refs?service=git-receive-pack` requests. See
`--http-backend-info-refs` in linkgit:git-upload-pack[1].
Before any ref is updated, if $GIT_DIR/hooks/pre-receive file exists

@ -36,10 +36,14 @@ OPTIONS
This fits with the HTTP POST request processing model where
a program may read the request, write a response, and must exit.
Only the initial ref advertisement is output, and the program exits
immediately. This fits with the HTTP GET request model, where
no request content is received but a response must be produced.
Used by linkgit:git-http-backend[1] to serve up
`$GIT_URL/info/refs?service=git-upload-pack` requests. See
"Smart Clients" in link:technical/http-protocol.html[the HTTP
transfer protocols] documentation and "HTTP Transport" in
link:technical/protocol-v2.html[the Git Wire Protocol, Version
2] documentation. Also understood by
The repository to sync from.

@ -225,6 +225,9 @@ The client may send Extra Parameters (see
Documentation/technical/pack-protocol.txt) as a colon-separated string
in the Git-Protocol HTTP header.
Uses the `--http-backend-info-refs` option to
Dumb Server Response
Dumb servers MUST respond with the dumb server reply format.

@ -81,6 +81,9 @@ A v2 server would reply:
Subsequent requests are then made directly to the service
`$GIT_URL/git-upload-pack`. (This works the same for git-receive-pack).
Uses the `--http-backend-info-refs` option to
Capability Advertisement

@ -2477,7 +2477,8 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix)
struct option options[] = {
OPT__QUIET(&quiet, N_("quiet")),
OPT_HIDDEN_BOOL(0, "stateless-rpc", &stateless_rpc, NULL),
OPT_HIDDEN_BOOL(0, "advertise-refs", &advertise_refs, NULL),
OPT_HIDDEN_BOOL(0, "http-backend-info-refs", &advertise_refs, NULL),
OPT_ALIAS(0, "advertise-refs", "http-backend-info-refs"),
OPT_HIDDEN_BOOL(0, "reject-thin-pack-for-testing", &reject_thin, NULL),

@ -22,8 +22,9 @@ int cmd_upload_pack(int argc, const char **argv, const char *prefix)
struct option options[] = {
OPT_BOOL(0, "stateless-rpc", &stateless_rpc,
N_("quit after a single request/response exchange")),
OPT_BOOL(0, "advertise-refs", &advertise_refs,
N_("exit immediately after initial ref advertisement")),
OPT_HIDDEN_BOOL(0, "http-backend-info-refs", &advertise_refs,
N_("serve up the info/refs for git-http-backend")),
OPT_ALIAS(0, "advertise-refs", "http-backend-info-refs"),
OPT_BOOL(0, "strict", &strict,
N_("do not try <directory>/.git/ if <directory> is no Git directory")),
OPT_INTEGER(0, "timeout", &timeout,

@ -534,7 +534,7 @@ static void get_info_refs(struct strbuf *hdr, char *arg)
if (service_name) {
const char *argv[] = {NULL /* service name */,
".", NULL};
struct rpc_service *svc = select_service(hdr, service_name);

@ -8,6 +8,20 @@ test_expect_success 'setup' '
test_commit --no-tag initial
test_expect_success 'git upload-pack --http-backend-info-refs and --advertise-refs are aliased' '
git upload-pack --http-backend-info-refs . >expected 2>err.expected &&
git upload-pack --advertise-refs . >actual 2>err.actual &&
test_cmp err.expected err.actual &&
test_cmp expected actual
test_expect_success 'git receive-pack --http-backend-info-refs and --advertise-refs are aliased' '
git receive-pack --http-backend-info-refs . >expected 2>err.expected &&
git receive-pack --advertise-refs . >actual 2>err.actual &&
test_cmp err.expected err.actual &&
test_cmp expected actual
test_expect_success 'git upload-pack --advertise-refs' '
cat >expect <<-EOF &&
$(git rev-parse HEAD) HEAD