1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
#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);
}
|