X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=converter%2Fbabeltrace-cfg.c;h=e005df2c528c28b9b1b84a887bf3d27a06f92464;hb=a67681c1f02f54bc1f708d449bceb35476024083;hp=6e07a43749822a3d705360e6f3e5a3aceea5a5b8;hpb=63ce0e1d658d528f48fd0f16d5a6748c1b369ef1;p=babeltrace.git diff --git a/converter/babeltrace-cfg.c b/converter/babeltrace-cfg.c index 6e07a437..e005df2c 100644 --- a/converter/babeltrace-cfg.c +++ b/converter/babeltrace-cfg.c @@ -130,6 +130,7 @@ struct text_legacy_opts { bool clock_date; bool clock_gmt; bool dbg_info_full_path; + bool verbose; }; /* Legacy input format format */ @@ -143,7 +144,6 @@ enum legacy_input_format { enum legacy_output_format { LEGACY_OUTPUT_FORMAT_NONE = 0, LEGACY_OUTPUT_FORMAT_TEXT, - LEGACY_OUTPUT_FORMAT_CTF_METADATA, LEGACY_OUTPUT_FORMAT_DUMMY, }; @@ -187,7 +187,7 @@ bool text_legacy_opts_is_any_set(struct text_legacy_opts *opts) bt_value_array_size(opts->names) > 0 || bt_value_array_size(opts->fields) > 0 || opts->no_delta || opts->clock_cycles || opts->clock_seconds || - opts->clock_date || opts->clock_gmt || + opts->clock_date || opts->clock_gmt || opts->verbose || opts->dbg_info_full_path; } @@ -855,12 +855,12 @@ void bt_config_destroy(struct bt_object *obj) BT_PUT(cfg->cmd_data.help.plugin_paths); BT_PUT(cfg->cmd_data.help.cfg_component); break; - case BT_CONFIG_COMMAND_QUERY_INFO: - BT_PUT(cfg->cmd_data.query_info.plugin_paths); - BT_PUT(cfg->cmd_data.query_info.cfg_component); + case BT_CONFIG_COMMAND_QUERY: + BT_PUT(cfg->cmd_data.query.plugin_paths); + BT_PUT(cfg->cmd_data.query.cfg_component); - if (cfg->cmd_data.query_info.action) { - g_string_free(cfg->cmd_data.query_info.action, TRUE); + if (cfg->cmd_data.query.object) { + g_string_free(cfg->cmd_data.query.object, TRUE); } break; default: @@ -1326,6 +1326,12 @@ struct bt_value *params_from_text_legacy_opts( goto error; } + if (bt_value_map_insert_bool(params, "verbose", + text_legacy_opts->verbose)) { + print_err_oom(); + goto error; + } + if (insert_flat_names_fields_from_array(params, text_legacy_opts->names, "name")) { goto error; @@ -1361,10 +1367,6 @@ int append_sinks_from_legacy_opts(GPtrArray *sinks, plugin_name = "text"; component_name = "text"; break; - case LEGACY_OUTPUT_FORMAT_CTF_METADATA: - plugin_name = "ctf"; - component_name = "metadata-text"; - break; case LEGACY_OUTPUT_FORMAT_DUMMY: plugin_name = "utils"; component_name = "dummy"; @@ -1700,9 +1702,6 @@ void print_output_legacy_to_sinks( case LEGACY_OUTPUT_FORMAT_TEXT: output_format = "text"; break; - case LEGACY_OUTPUT_FORMAT_CTF_METADATA: - output_format = "ctf-metadata"; - break; case LEGACY_OUTPUT_FORMAT_DUMMY: output_format = "dummy"; break; @@ -1720,9 +1719,6 @@ void print_output_legacy_to_sinks( case LEGACY_OUTPUT_FORMAT_TEXT: g_string_append(str, "text.text"); break; - case LEGACY_OUTPUT_FORMAT_CTF_METADATA: - g_string_append(str, "ctf.metadata-text"); - break; case LEGACY_OUTPUT_FORMAT_DUMMY: g_string_append(str, "utils.dummy"); break; @@ -1766,6 +1762,8 @@ void print_output_legacy_to_sinks( text_legacy_opts->clock_date); g_string_append_bool_param(str, "clock-gmt", text_legacy_opts->clock_gmt); + g_string_append_bool_param(str, "verbose", + text_legacy_opts->verbose); ret = append_prefixed_flag_params(str, text_legacy_opts->names, "name"); if (ret) { @@ -1896,7 +1894,8 @@ bool validate_cfg(struct bt_config *cfg, bool legacy_output = false; /* Determine if the input and output should be legacy-style */ - if (*legacy_input_format != LEGACY_INPUT_FORMAT_NONE || + if (cfg->cmd_data.convert.print_ctf_metadata || + *legacy_input_format != LEGACY_INPUT_FORMAT_NONE || !bt_value_array_is_empty(legacy_input_paths) || ctf_legacy_opts_is_any_set(ctf_legacy_opts)) { legacy_input = true; @@ -1930,13 +1929,45 @@ bool validate_cfg(struct bt_config *cfg, /* Make sure no non-legacy sources are specified */ if (cfg->cmd_data.convert.sources->len != 0) { - print_input_legacy_to_sources(*legacy_input_format, - legacy_input_paths, ctf_legacy_opts); + if (cfg->cmd_data.convert.print_ctf_metadata) { + printf_err("You cannot instantiate a source component with the `ctf-metadata` output format\n"); + } else { + print_input_legacy_to_sources( + *legacy_input_format, + legacy_input_paths, ctf_legacy_opts); + } + goto error; } } - if (legacy_output) { + /* + * Strict rule: if we need to print the CTF metadata, the input + * format must be legacy and CTF. Also there should be no + * other sinks, and no legacy output format. + */ + if (cfg->cmd_data.convert.print_ctf_metadata) { + if (*legacy_input_format != LEGACY_INPUT_FORMAT_CTF) { + printf_err("The `ctf-metadata` output format requires legacy `ctf` input format\n"); + goto error; + } + + if (bt_value_array_size(legacy_input_paths) != 1) { + printf_err("You need to specify exactly one path with the `ctf-metadata` output format\n"); + goto error; + } + + if (legacy_output) { + printf_err("You cannot use another legacy output format with the `ctf-metadata` output format\n"); + goto error; + } + + if (cfg->cmd_data.convert.sinks->len != 0) { + printf_err("You cannot instantiate a sink component with the `ctf-metadata` output format\n"); + goto error; + goto error; + } + } else if (legacy_output) { /* * If no legacy output format was specified, default to * "text". @@ -1964,16 +1995,6 @@ bool validate_cfg(struct bt_config *cfg, } } - /* - * If the output is the legacy "ctf-metadata" format, then the - * input should be the legacy "ctf" input format. - */ - if (*legacy_output_format == LEGACY_OUTPUT_FORMAT_CTF_METADATA && - *legacy_input_format != LEGACY_INPUT_FORMAT_CTF) { - printf_err("Legacy `ctf-metadata` output format requires using legacy `ctf` input format\n"); - goto error; - } - return true; error: @@ -2341,32 +2362,32 @@ end: return cfg; } -static struct bt_config *bt_config_query_info_create( +static struct bt_config *bt_config_query_create( struct bt_value *initial_plugin_paths) { struct bt_config *cfg; /* Create config */ - cfg = bt_config_base_create(BT_CONFIG_COMMAND_QUERY_INFO); + cfg = bt_config_base_create(BT_CONFIG_COMMAND_QUERY); if (!cfg) { print_err_oom(); goto error; } if (initial_plugin_paths) { - cfg->cmd_data.query_info.plugin_paths = + cfg->cmd_data.query.plugin_paths = bt_get(initial_plugin_paths); } else { - cfg->cmd_data.query_info.plugin_paths = + cfg->cmd_data.query.plugin_paths = bt_value_array_create(); - if (!cfg->cmd_data.query_info.plugin_paths) { + if (!cfg->cmd_data.query.plugin_paths) { print_err_oom(); goto error; } } - cfg->cmd_data.query_info.action = g_string_new(NULL); - if (!cfg->cmd_data.query_info.action) { + cfg->cmd_data.query.object = g_string_new(NULL); + if (!cfg->cmd_data.query.object) { print_err_oom(); goto error; } @@ -2648,16 +2669,16 @@ end: * Prints the help command usage. */ static -void print_query_info_usage(FILE *fp) +void print_query_usage(FILE *fp) { - fprintf(fp, "Usage: babeltrace [GEN OPTS] query-info [OPTS] ACTION --source=PLUGIN.COMPCLS\n"); - fprintf(fp, " babeltrace [GEN OPTS] query-info [OPTS] ACTION --filter=PLUGIN.COMPCLS\n"); - fprintf(fp, " babeltrace [GEN OPTS] query-info [OPTS] ACTION --sink=PLUGIN.COMPCLS\n"); + fprintf(fp, "Usage: babeltrace [GEN OPTS] query [OPTS] OBJECT --source=PLUGIN.COMPCLS\n"); + fprintf(fp, " babeltrace [GEN OPTS] query [OPTS] OBJECT --filter=PLUGIN.COMPCLS\n"); + fprintf(fp, " babeltrace [GEN OPTS] query [OPTS] OBJECT --sink=PLUGIN.COMPCLS\n"); fprintf(fp, "\n"); fprintf(fp, "Options:\n"); fprintf(fp, "\n"); - fprintf(fp, " --filter=PLUGIN.COMPCLS Query info from the filter component class\n"); - fprintf(fp, " COMPCLS found in the plugin PLUGIN\n"); + fprintf(fp, " --filter=PLUGIN.COMPCLS Query object from the filter component\n"); + fprintf(fp, " class COMPCLS found in the plugin PLUGIN\n"); fprintf(fp, " --omit-home-plugin-path Omit home plugins from plugin search path\n"); fprintf(fp, " (~/.local/lib/babeltrace/plugins)\n"); fprintf(fp, " --omit-system-plugin-path Omit system plugins from plugin search path\n"); @@ -2665,16 +2686,16 @@ void print_query_info_usage(FILE *fp) fprintf(fp, " (see the expected format of PARAMS below)\n"); fprintf(fp, " --plugin-path=PATH[:PATH]... Add PATH to the list of paths from which\n"); fprintf(fp, " dynamic plugins can be loaded\n"); - fprintf(fp, " --sink=PLUGIN.COMPCLS Query info from the sink component class\n"); - fprintf(fp, " COMPCLS found in the plugin PLUGIN\n"); - fprintf(fp, " --source=PLUGIN.COMPCLS Query info from the source component class\n"); + fprintf(fp, " --sink=PLUGIN.COMPCLS Query object from the sink component class\n"); fprintf(fp, " COMPCLS found in the plugin PLUGIN\n"); + fprintf(fp, " --source=PLUGIN.COMPCLS Query object from the source component\n"); + fprintf(fp, " class COMPCLS found in the plugin PLUGIN\n"); fprintf(fp, " -h --help Show this help and quit\n"); fprintf(fp, "\n\n"); print_expected_params_format(fp); } -static struct poptOption query_info_long_options[] = { +static struct poptOption query_long_options[] = { /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */ { "filter", '\0', POPT_ARG_STRING, NULL, OPT_FILTER, NULL, NULL }, { "help", 'h', POPT_ARG_NONE, NULL, OPT_HELP, NULL, NULL }, @@ -2688,12 +2709,12 @@ static struct poptOption query_info_long_options[] = { }; /* - * Creates a Babeltrace config object from the arguments of a query-info + * Creates a Babeltrace config object from the arguments of a query * command. * * *retcode is set to the appropriate exit code to use. */ -struct bt_config *bt_config_query_info_from_args(int argc, const char *argv[], +struct bt_config *bt_config_query_from_args(int argc, const char *argv[], int *retcode, bool omit_system_plugin_path, bool omit_home_plugin_path, struct bt_value *initial_plugin_paths) @@ -2707,16 +2728,16 @@ struct bt_config *bt_config_query_info_from_args(int argc, const char *argv[], struct bt_value *params = bt_value_null; *retcode = 0; - cfg = bt_config_query_info_create(initial_plugin_paths); + cfg = bt_config_query_create(initial_plugin_paths); if (!cfg) { print_err_oom(); goto error; } - cfg->cmd_data.query_info.omit_system_plugin_path = + cfg->cmd_data.query.omit_system_plugin_path = omit_system_plugin_path; - cfg->cmd_data.query_info.omit_home_plugin_path = omit_home_plugin_path; - ret = append_env_var_plugin_paths(cfg->cmd_data.query_info.plugin_paths); + cfg->cmd_data.query.omit_home_plugin_path = omit_home_plugin_path; + ret = append_env_var_plugin_paths(cfg->cmd_data.query.plugin_paths); if (ret) { printf_err("Cannot append plugin paths from BABELTRACE_PLUGIN_PATH\n"); goto error; @@ -2724,7 +2745,7 @@ struct bt_config *bt_config_query_info_from_args(int argc, const char *argv[], /* Parse options */ pc = poptGetContext(NULL, argc, (const char **) argv, - query_info_long_options, 0); + query_long_options, 0); if (!pc) { printf_err("Cannot get popt context\n"); goto error; @@ -2741,7 +2762,7 @@ struct bt_config *bt_config_query_info_from_args(int argc, const char *argv[], printf_debug("Skipping non-system plugin paths for setuid/setgid binary\n"); } else { if (bt_config_append_plugin_paths( - cfg->cmd_data.query_info.plugin_paths, + cfg->cmd_data.query.plugin_paths, arg)) { printf_err("Invalid --plugin-path option's argument:\n %s\n", arg); @@ -2750,10 +2771,10 @@ struct bt_config *bt_config_query_info_from_args(int argc, const char *argv[], } break; case OPT_OMIT_SYSTEM_PLUGIN_PATH: - cfg->cmd_data.query_info.omit_system_plugin_path = true; + cfg->cmd_data.query.omit_system_plugin_path = true; break; case OPT_OMIT_HOME_PLUGIN_PATH: - cfg->cmd_data.query_info.omit_home_plugin_path = true; + cfg->cmd_data.query.omit_home_plugin_path = true; break; case OPT_SOURCE: case OPT_FILTER: @@ -2761,7 +2782,7 @@ struct bt_config *bt_config_query_info_from_args(int argc, const char *argv[], { enum bt_component_class_type type; - if (cfg->cmd_data.query_info.cfg_component) { + if (cfg->cmd_data.query.cfg_component) { printf_err("Cannot specify more than one plugin and component class:\n %s\n", arg); goto error; @@ -2781,17 +2802,17 @@ struct bt_config *bt_config_query_info_from_args(int argc, const char *argv[], assert(false); } - cfg->cmd_data.query_info.cfg_component = + cfg->cmd_data.query.cfg_component = bt_config_component_from_arg(type, arg); - if (!cfg->cmd_data.query_info.cfg_component) { + if (!cfg->cmd_data.query.cfg_component) { printf_err("Invalid format for --source/--filter/--sink option's argument:\n %s\n", arg); goto error; } /* Default parameters: null */ - bt_put(cfg->cmd_data.query_info.cfg_component->params); - cfg->cmd_data.query_info.cfg_component->params = + bt_put(cfg->cmd_data.query.cfg_component->params); + cfg->cmd_data.query.cfg_component->params = bt_value_null; break; } @@ -2806,7 +2827,7 @@ struct bt_config *bt_config_query_info_from_args(int argc, const char *argv[], break; } case OPT_HELP: - print_query_info_usage(stdout); + print_query_usage(stdout); *retcode = -1; BT_PUT(cfg); goto end; @@ -2820,13 +2841,13 @@ struct bt_config *bt_config_query_info_from_args(int argc, const char *argv[], arg = NULL; } - if (!cfg->cmd_data.query_info.cfg_component) { + if (!cfg->cmd_data.query.cfg_component) { printf_err("No target component class specified with --source/--filter/--sink option\n"); goto error; } assert(params); - BT_MOVE(cfg->cmd_data.query_info.cfg_component->params, params); + BT_MOVE(cfg->cmd_data.query.cfg_component->params, params); /* Check for option parsing error */ if (opt < -1) { @@ -2837,18 +2858,18 @@ struct bt_config *bt_config_query_info_from_args(int argc, const char *argv[], /* * We need exactly one leftover argument which is the - * mandatory action. + * mandatory object. */ leftover = poptGetArg(pc); if (leftover) { if (strlen(leftover) == 0) { - printf_err("Invalid empty action\n"); + printf_err("Invalid empty object\n"); goto error; } - g_string_assign(cfg->cmd_data.query_info.action, leftover); + g_string_assign(cfg->cmd_data.query.object, leftover); } else { - print_query_info_usage(stdout); + print_query_usage(stdout); *retcode = -1; BT_PUT(cfg); goto end; @@ -2861,9 +2882,9 @@ struct bt_config *bt_config_query_info_from_args(int argc, const char *argv[], } if (append_home_and_system_plugin_paths( - cfg->cmd_data.query_info.plugin_paths, - cfg->cmd_data.query_info.omit_system_plugin_path, - cfg->cmd_data.query_info.omit_home_plugin_path)) { + cfg->cmd_data.query.plugin_paths, + cfg->cmd_data.query.omit_system_plugin_path, + cfg->cmd_data.query.omit_home_plugin_path)) { printf_err("Cannot append home and system plugin paths\n"); goto error; } @@ -3460,14 +3481,7 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], LEGACY_OUTPUT_FORMAT_DUMMY; break; } else if (!strcmp(arg, "ctf-metadata")) { - /* Legacy CTF-metadata output format */ - if (legacy_output_format) { - print_err_dup_legacy_output(); - goto error; - } - - legacy_output_format = - LEGACY_OUTPUT_FORMAT_CTF_METADATA; + cfg->cmd_data.convert.print_ctf_metadata = true; break; } } @@ -3749,6 +3763,7 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], BT_PUT(cfg); goto end; case OPT_VERBOSE: + text_legacy_opts.verbose = true; cfg->verbose = true; break; case OPT_DEBUG: @@ -3835,12 +3850,21 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], } else { if (implicit_source_comp && !bt_value_map_is_empty(implicit_source_comp->params)) { - printf_err("Arguments specified for implicit source, but an explicit source has been specified, overriding it\n"); + printf_err("Arguments specified for implicit input format, but an explicit source component instance has been specified: overriding it\n"); goto error; } } } + /* + * At this point if we need to print the CTF metadata text, we + * don't care about the legacy/implicit sinks and component + * connections. + */ + if (cfg->cmd_data.convert.print_ctf_metadata) { + goto end; + } + /* * If there's a legacy output format, convert it to sink * component configurations. @@ -3930,7 +3954,7 @@ void print_gen_usage(FILE *fp) fprintf(fp, " convert Build a trace conversion graph and run it (default)\n"); fprintf(fp, " help Get help for a plugin or a component class\n"); fprintf(fp, " list-plugins List available plugins and their content\n"); - fprintf(fp, " query-info Query information from a component class\n"); + fprintf(fp, " query Query objects from a component class\n"); fprintf(fp, "\n"); fprintf(fp, "Use `babeltrace COMMAND --help` to show the help of COMMAND.\n"); } @@ -3989,8 +4013,8 @@ struct bt_config *bt_config_from_args(int argc, const char *argv[], command = BT_CONFIG_COMMAND_LIST_PLUGINS; } else if (strcmp(cur_arg, "help") == 0) { command = BT_CONFIG_COMMAND_HELP; - } else if (strcmp(cur_arg, "query-info") == 0) { - command = BT_CONFIG_COMMAND_QUERY_INFO; + } else if (strcmp(cur_arg, "query") == 0) { + command = BT_CONFIG_COMMAND_QUERY; } else { /* * Unknown argument, but not a known @@ -4043,8 +4067,8 @@ struct bt_config *bt_config_from_args(int argc, const char *argv[], command_argv, retcode, omit_system_plugin_path, omit_home_plugin_path, initial_plugin_paths); break; - case BT_CONFIG_COMMAND_QUERY_INFO: - config = bt_config_query_info_from_args(command_argc, + case BT_CONFIG_COMMAND_QUERY: + config = bt_config_query_from_args(command_argc, command_argv, retcode, omit_system_plugin_path, omit_home_plugin_path, initial_plugin_paths); break;