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>maint
parent
1b759e0cf1
commit
70b9c10373
|
@ -3,6 +3,10 @@
|
||||||
#include "bundle-uri.h"
|
#include "bundle-uri.h"
|
||||||
#include "strbuf.h"
|
#include "strbuf.h"
|
||||||
#include "string-list.h"
|
#include "string-list.h"
|
||||||
|
#include "transport.h"
|
||||||
|
#include "ref-filter.h"
|
||||||
|
#include "remote.h"
|
||||||
|
#include "refs.h"
|
||||||
|
|
||||||
enum input_mode {
|
enum input_mode {
|
||||||
KEY_VALUE_PAIRS,
|
KEY_VALUE_PAIRS,
|
||||||
|
@ -68,6 +72,46 @@ usage:
|
||||||
usage_with_options(usage, options);
|
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)
|
int cmd__bundle_uri(int argc, const char **argv)
|
||||||
{
|
{
|
||||||
const char *usage[] = {
|
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);
|
return cmd__bundle_uri_parse(argc - 1, argv + 1, KEY_VALUE_PAIRS);
|
||||||
if (!strcmp(argv[1], "parse-config"))
|
if (!strcmp(argv[1], "parse-config"))
|
||||||
return cmd__bundle_uri_parse(argc - 1, argv + 1, CONFIG_FILE);
|
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]);
|
error("there is no test-tool bundle-uri tool '%s'", argv[1]);
|
||||||
|
|
||||||
usage:
|
usage:
|
||||||
|
|
|
@ -119,3 +119,49 @@ test_expect_success "clone with $BUNDLE_URI_PROTOCOL:// using protocol v2: reque
|
||||||
# Client issued bundle-uri command
|
# Client issued bundle-uri command
|
||||||
grep "> command=bundle-uri" log
|
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);
|
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
|
* "Support" protocol v0 and v2 without bundle-uri support by
|
||||||
* silently degrading to a NOOP.
|
* silently degrading to a NOOP.
|
||||||
|
|
Loading…
Reference in New Issue