bundle-uri client: add helper for testing server
Add a 'test-tool bundle-uri ls-remote' command. This is a thin wrapper for issuing protocol v2 "bundle-uri" commands to a server, and to the parsing routines in bundle-uri.c. In the "git clone" case we'll have already done the handshake(), but not here. Add an extra case to check for this handshake in get_bundle_uri() for ease of use for future callers. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
1b759e0cf1
commit
70b9c10373
@ -3,6 +3,10 @@
|
||||
#include "bundle-uri.h"
|
||||
#include "strbuf.h"
|
||||
#include "string-list.h"
|
||||
#include "transport.h"
|
||||
#include "ref-filter.h"
|
||||
#include "remote.h"
|
||||
#include "refs.h"
|
||||
|
||||
enum input_mode {
|
||||
KEY_VALUE_PAIRS,
|
||||
@ -68,6 +72,46 @@ usage:
|
||||
usage_with_options(usage, options);
|
||||
}
|
||||
|
||||
static int cmd_ls_remote(int argc, const char **argv)
|
||||
{
|
||||
const char *uploadpack = NULL;
|
||||
struct string_list server_options = STRING_LIST_INIT_DUP;
|
||||
const char *dest;
|
||||
struct remote *remote;
|
||||
struct transport *transport;
|
||||
int status = 0;
|
||||
|
||||
dest = argc > 1 ? argv[1] : NULL;
|
||||
|
||||
remote = remote_get(dest);
|
||||
if (!remote) {
|
||||
if (dest)
|
||||
die(_("bad repository '%s'"), dest);
|
||||
die(_("no remote configured to get bundle URIs from"));
|
||||
}
|
||||
if (!remote->url_nr)
|
||||
die(_("remote '%s' has no configured URL"), dest);
|
||||
|
||||
transport = transport_get(remote, NULL);
|
||||
if (uploadpack)
|
||||
transport_set_option(transport, TRANS_OPT_UPLOADPACK, uploadpack);
|
||||
if (server_options.nr)
|
||||
transport->server_options = &server_options;
|
||||
|
||||
if (transport_get_remote_bundle_uri(transport) < 0) {
|
||||
error(_("could not get the bundle-uri list"));
|
||||
status = 1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
print_bundle_list(stdout, transport->bundles);
|
||||
|
||||
cleanup:
|
||||
if (transport_disconnect(transport))
|
||||
return 1;
|
||||
return status;
|
||||
}
|
||||
|
||||
int cmd__bundle_uri(int argc, const char **argv)
|
||||
{
|
||||
const char *usage[] = {
|
||||
@ -88,6 +132,8 @@ int cmd__bundle_uri(int argc, const char **argv)
|
||||
return cmd__bundle_uri_parse(argc - 1, argv + 1, KEY_VALUE_PAIRS);
|
||||
if (!strcmp(argv[1], "parse-config"))
|
||||
return cmd__bundle_uri_parse(argc - 1, argv + 1, CONFIG_FILE);
|
||||
if (!strcmp(argv[1], "ls-remote"))
|
||||
return cmd_ls_remote(argc - 1, argv + 1);
|
||||
error("there is no test-tool bundle-uri tool '%s'", argv[1]);
|
||||
|
||||
usage:
|
||||
|
@ -119,3 +119,49 @@ test_expect_success "clone with $BUNDLE_URI_PROTOCOL:// using protocol v2: reque
|
||||
# Client issued bundle-uri command
|
||||
grep "> command=bundle-uri" log
|
||||
'
|
||||
|
||||
# The remaining tests will all assume transfer.bundleURI=true
|
||||
#
|
||||
# This test can be removed when transfer.bundleURI is enabled by default.
|
||||
test_expect_success 'enable transfer.bundleURI for remaining tests' '
|
||||
git config --global transfer.bundleURI true
|
||||
'
|
||||
|
||||
test_expect_success "test bundle-uri with $BUNDLE_URI_PROTOCOL:// using protocol v2" '
|
||||
test_config -C "$BUNDLE_URI_PARENT" \
|
||||
bundle.only.uri "$BUNDLE_URI_BUNDLE_URI_ESCAPED" &&
|
||||
|
||||
# All data about bundle URIs
|
||||
cat >expect <<-EOF &&
|
||||
[bundle]
|
||||
version = 1
|
||||
mode = all
|
||||
EOF
|
||||
|
||||
test-tool bundle-uri \
|
||||
ls-remote \
|
||||
"$BUNDLE_URI_REPO_URI" \
|
||||
>actual &&
|
||||
test_cmp_config_output expect actual
|
||||
'
|
||||
|
||||
test_expect_success "test bundle-uri with $BUNDLE_URI_PROTOCOL:// using protocol v2 and extra data" '
|
||||
test_config -C "$BUNDLE_URI_PARENT" \
|
||||
bundle.only.uri "$BUNDLE_URI_BUNDLE_URI_ESCAPED" &&
|
||||
|
||||
# Extra data should be ignored
|
||||
test_config -C "$BUNDLE_URI_PARENT" bundle.only.extra bogus &&
|
||||
|
||||
# All data about bundle URIs
|
||||
cat >expect <<-EOF &&
|
||||
[bundle]
|
||||
version = 1
|
||||
mode = all
|
||||
EOF
|
||||
|
||||
test-tool bundle-uri \
|
||||
ls-remote \
|
||||
"$BUNDLE_URI_REPO_URI" \
|
||||
>actual &&
|
||||
test_cmp_config_output expect actual
|
||||
'
|
||||
|
@ -371,6 +371,13 @@ static int get_bundle_uri(struct transport *transport)
|
||||
init_bundle_list(transport->bundles);
|
||||
}
|
||||
|
||||
if (!data->finished_handshake) {
|
||||
struct ref *refs = handshake(transport, 0, NULL, 0);
|
||||
|
||||
if (refs)
|
||||
free_refs(refs);
|
||||
}
|
||||
|
||||
/*
|
||||
* "Support" protocol v0 and v2 without bundle-uri support by
|
||||
* silently degrading to a NOOP.
|
||||
|
Loading…
Reference in New Issue
Block a user