mirror of
https://github.com/git/git.git
synced 2024-12-12 03:14:11 +08:00
aecd794fca
Now that the previous commit removed the possibility that a "struct remote" will ever have zero url fields, we can drop a number of redundant checks and untriggerable code paths. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
134 lines
2.8 KiB
C
134 lines
2.8 KiB
C
#include "test-tool.h"
|
|
#include "parse-options.h"
|
|
#include "bundle-uri.h"
|
|
#include "gettext.h"
|
|
#include "strbuf.h"
|
|
#include "string-list.h"
|
|
#include "transport.h"
|
|
#include "remote.h"
|
|
|
|
enum input_mode {
|
|
KEY_VALUE_PAIRS,
|
|
CONFIG_FILE,
|
|
};
|
|
|
|
static int cmd__bundle_uri_parse(int argc, const char **argv, enum input_mode mode)
|
|
{
|
|
const char *key_value_usage[] = {
|
|
"test-tool bundle-uri parse-key-values <input>",
|
|
NULL
|
|
};
|
|
const char *config_usage[] = {
|
|
"test-tool bundle-uri parse-config <input>",
|
|
NULL
|
|
};
|
|
const char **usage = key_value_usage;
|
|
struct option options[] = {
|
|
OPT_END(),
|
|
};
|
|
struct strbuf sb = STRBUF_INIT;
|
|
struct bundle_list list;
|
|
int err = 0;
|
|
FILE *fp;
|
|
|
|
if (mode == CONFIG_FILE)
|
|
usage = config_usage;
|
|
|
|
argc = parse_options(argc, argv, NULL, options, usage,
|
|
PARSE_OPT_STOP_AT_NON_OPTION);
|
|
|
|
init_bundle_list(&list);
|
|
|
|
list.baseURI = xstrdup("<uri>");
|
|
|
|
switch (mode) {
|
|
case KEY_VALUE_PAIRS:
|
|
if (argc != 1)
|
|
goto usage;
|
|
fp = fopen(argv[0], "r");
|
|
if (!fp)
|
|
die("failed to open '%s'", argv[0]);
|
|
while (strbuf_getline(&sb, fp) != EOF) {
|
|
if (bundle_uri_parse_line(&list, sb.buf))
|
|
err = error("bad line: '%s'", sb.buf);
|
|
}
|
|
fclose(fp);
|
|
break;
|
|
|
|
case CONFIG_FILE:
|
|
if (argc != 1)
|
|
goto usage;
|
|
err = bundle_uri_parse_config_format("<uri>", argv[0], &list);
|
|
break;
|
|
}
|
|
strbuf_release(&sb);
|
|
|
|
print_bundle_list(stdout, &list);
|
|
|
|
clear_bundle_list(&list);
|
|
|
|
return !!err;
|
|
|
|
usage:
|
|
usage_with_options(usage, options);
|
|
}
|
|
|
|
static int cmd_ls_remote(int argc, const char **argv)
|
|
{
|
|
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"));
|
|
}
|
|
|
|
transport = transport_get(remote, NULL);
|
|
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[] = {
|
|
"test-tool bundle-uri <subcommand> [<options>]",
|
|
NULL
|
|
};
|
|
struct option options[] = {
|
|
OPT_END(),
|
|
};
|
|
|
|
argc = parse_options(argc, argv, NULL, options, usage,
|
|
PARSE_OPT_STOP_AT_NON_OPTION |
|
|
PARSE_OPT_KEEP_ARGV0);
|
|
if (argc == 1)
|
|
goto usage;
|
|
|
|
if (!strcmp(argv[1], "parse-key-values"))
|
|
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:
|
|
usage_with_options(usage, options);
|
|
}
|