From 6f4827a397e6b3a4310a7853fda465ab9c9765e4 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Tue, 9 Apr 2019 19:00:33 -0400 Subject: [PATCH] cli: Remove support for --key and --value arguments There are currently two ways of passing parameters to the current component on the Babeltrace command line: --params=KEY=VALUE --key KEY --value VALUE The method with --params is more versatile, as VALUE can have different types (string, number, bool). The value in the --key/--value method is always converted to a string. This patch removes the less-versatile --key/--value way, in order to keep only --params. I have remove or updated references to --key/--value in man pages. The only remaining mention of --key/--value that I know of is in babeltrace-log.c, which I was told is going to disappear anyway, so I have left it. Signed-off-by: Simon Marchi --- cli/babeltrace-cfg-cli-args.c | 155 +++++++++++++------------------ doc/man/babeltrace-convert.1.txt | 10 +- doc/man/babeltrace-run.1.txt | 27 ------ tests/cli/test_convert_args.in | 84 ++++++++--------- 4 files changed, 112 insertions(+), 164 deletions(-) diff --git a/cli/babeltrace-cfg-cli-args.c b/cli/babeltrace-cfg-cli-args.c index 927a85d93..542e136ff 100644 --- a/cli/babeltrace-cfg-cli-args.c +++ b/cli/babeltrace-cfg-cli-args.c @@ -1396,7 +1396,6 @@ enum { OPT_FIELDS, OPT_HELP, OPT_INPUT_FORMAT, - OPT_KEY, OPT_LIST, OPT_NAME, OPT_NAMES, @@ -1415,7 +1414,6 @@ enum { OPT_STREAM_INTERSECTION, OPT_TIMERANGE, OPT_URL, - OPT_VALUE, OPT_VERBOSE, }; @@ -2374,8 +2372,6 @@ void print_run_usage(FILE *fp) fprintf(fp, " specify the name with --name)\n"); fprintf(fp, " -x, --connect=CONNECTION Connect two created components (see the\n"); fprintf(fp, " expected format of CONNECTION below)\n"); - fprintf(fp, " --key=KEY Set the current initialization string\n"); - fprintf(fp, " parameter key to KEY (see --value)\n"); fprintf(fp, " -n, --name=NAME Set the name of the current component\n"); fprintf(fp, " to NAME (must be unique amongst all the\n"); fprintf(fp, " names of the created components)\n"); @@ -2392,10 +2388,6 @@ void print_run_usage(FILE *fp) fprintf(fp, " --retry-duration=DUR When babeltrace(1) needs to retry to run\n"); fprintf(fp, " the graph later, retry in DUR µs\n"); fprintf(fp, " (default: 100000)\n"); - fprintf(fp, " --value=VAL Add a string initialization parameter to\n"); - fprintf(fp, " the current component with a name given by\n"); - fprintf(fp, " the last argument of the --key option and a\n"); - fprintf(fp, " value set to VAL\n"); fprintf(fp, " -h, --help Show this help and quit\n"); fprintf(fp, "\n"); fprintf(fp, "See `babeltrace --help` for the list of general options.\n"); @@ -2459,7 +2451,6 @@ struct bt_config *bt_config_run_from_args(int argc, const char *argv[], struct bt_config *cfg = NULL; bt_value *instance_names = NULL; bt_value *connection_args = NULL; - GString *cur_param_key = NULL; char error_buf[256] = { 0 }; long retry_duration = -1; bt_value_status status; @@ -2468,7 +2459,6 @@ struct bt_config *bt_config_run_from_args(int argc, const char *argv[], { "component", 'c', POPT_ARG_STRING, NULL, OPT_COMPONENT, NULL, NULL }, { "connect", 'x', POPT_ARG_STRING, NULL, OPT_CONNECT, NULL, NULL }, { "help", 'h', POPT_ARG_NONE, NULL, OPT_HELP, NULL, NULL }, - { "key", '\0', POPT_ARG_STRING, NULL, OPT_KEY, NULL, NULL }, { "name", 'n', POPT_ARG_STRING, NULL, OPT_NAME, NULL, NULL }, { "omit-home-plugin-path", '\0', POPT_ARG_NONE, NULL, OPT_OMIT_HOME_PLUGIN_PATH, NULL, NULL }, { "omit-system-plugin-path", '\0', POPT_ARG_NONE, NULL, OPT_OMIT_SYSTEM_PLUGIN_PATH, NULL, NULL }, @@ -2476,16 +2466,10 @@ struct bt_config *bt_config_run_from_args(int argc, const char *argv[], { "plugin-path", '\0', POPT_ARG_STRING, NULL, OPT_PLUGIN_PATH, NULL, NULL }, { "reset-base-params", 'r', POPT_ARG_NONE, NULL, OPT_RESET_BASE_PARAMS, NULL, NULL }, { "retry-duration", '\0', POPT_ARG_LONG, &retry_duration, OPT_RETRY_DURATION, NULL, NULL }, - { "value", '\0', POPT_ARG_STRING, NULL, OPT_VALUE, NULL, NULL }, { NULL, 0, '\0', NULL, 0, NULL, NULL }, }; *retcode = 0; - cur_param_key = g_string_new(NULL); - if (!cur_param_key) { - print_err_oom(); - goto error; - } if (argc <= 1) { print_run_usage(stdout); @@ -2627,33 +2611,6 @@ struct bt_config *bt_config_run_from_args(int argc, const char *argv[], BT_OBJECT_MOVE_REF(cur_cfg_comp->params, params_to_set); break; } - case OPT_KEY: - if (strlen(arg) == 0) { - printf_err("Cannot set an empty string as the current parameter key\n"); - goto error; - } - - g_string_assign(cur_param_key, arg); - break; - case OPT_VALUE: - if (!cur_cfg_comp) { - printf_err("Cannot set a parameter's value of unavailable component:\n %s\n", - arg); - goto error; - } - - if (cur_param_key->len == 0) { - printf_err("--value option specified without preceding --key option:\n %s\n", - arg); - goto error; - } - - if (bt_value_map_insert_string_entry(cur_cfg_comp->params, - cur_param_key->str, arg)) { - print_err_oom(); - goto error; - } - break; case OPT_NAME: if (!cur_cfg_comp) { printf_err("Cannot set the name of unavailable component:\n %s\n", @@ -2773,10 +2730,6 @@ end: poptFreeContext(pc); } - if (cur_param_key) { - g_string_free(cur_param_key, TRUE); - } - free(arg); BT_OBJECT_PUT_REF_AND_RESET(cur_cfg_comp); BT_VALUE_PUT_REF_AND_RESET(cur_base_params); @@ -3223,44 +3176,97 @@ void append_implicit_component_param(struct implicit_component_args *args, append_param_arg(args->params_arg, key, value); } +/* Escape value to make it suitable to use as a string parameter value. */ static -int append_implicit_component_extra_param(struct implicit_component_args *args, - const char *key, const char *value) +gchar *escape_string_value(const char *value) { - int ret = 0; + GString *ret; + const char *in; + + ret = g_string_new(NULL); + if (!ret) { + print_err_oom(); + goto end; + } + + in = value; + while (*in) { + switch (*in) { + case '"': + case '\\': + g_string_append_c(ret, '\\'); + break; + } + + g_string_append_c(ret, *in); + + in++; + } + +end: + return g_string_free(ret, FALSE); +} +static +int append_parameter_to_args(bt_value *args, const char *key, const char *value) +{ BT_ASSERT(args); + BT_ASSERT(bt_value_get_type(args) == BT_VALUE_TYPE_ARRAY); BT_ASSERT(key); BT_ASSERT(value); - if (bt_value_array_append_string_element(args->extra_params, "--key")) { + int ret = 0; + gchar *escaped_value; + GString *parameter = NULL; + + if (bt_value_array_append_string_element(args, "--params")) { print_err_oom(); ret = -1; goto end; } - if (bt_value_array_append_string_element(args->extra_params, key)) { - print_err_oom(); + escaped_value = escape_string_value(value); + if (!escaped_value) { ret = -1; goto end; } - if (bt_value_array_append_string_element(args->extra_params, "--value")) { + parameter = g_string_new(NULL); + if (!parameter) { print_err_oom(); ret = -1; goto end; } - if (bt_value_array_append_string_element(args->extra_params, value)) { + g_string_printf(parameter, "%s=\"%s\"", key, escaped_value); + + if (bt_value_array_append_string_element(args, parameter->str)) { print_err_oom(); ret = -1; goto end; } end: + if (escaped_value) { + g_free(escaped_value); + escaped_value = NULL; + } + + if (parameter) { + g_string_free(parameter, TRUE); + parameter = NULL; + } + return ret; } +static +int append_implicit_component_extra_param(struct implicit_component_args *args, + const char *key, const char *value) +{ + return append_parameter_to_args(args->extra_params, key, value); +} + static int convert_append_name_param(enum bt_config_component_dest dest, GString *cur_name, GString *cur_name_prefix, @@ -3795,8 +3801,8 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], * arguments if needed to automatically name unnamed component * instances. Also it does the following transformations: * - * --path=PATH -> --key path --value PATH - * --url=URL -> --key url --value URL + * --path=PATH -> --params=path="PATH" + * --url=URL -> --params=url="URL" * * Also it appends the plugin paths of --plugin-path to * `plugin_paths`. @@ -3910,23 +3916,7 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], goto error; } - if (bt_value_array_append_string_element(run_args, "--key")) { - print_err_oom(); - goto error; - } - - if (bt_value_array_append_string_element(run_args, "path")) { - print_err_oom(); - goto error; - } - - if (bt_value_array_append_string_element(run_args, "--value")) { - print_err_oom(); - goto error; - } - - if (bt_value_array_append_string_element(run_args, arg)) { - print_err_oom(); + if (append_parameter_to_args(run_args, "path", arg)) { goto error; } break; @@ -3937,23 +3927,8 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], goto error; } - if (bt_value_array_append_string_element(run_args, "--key")) { - print_err_oom(); - goto error; - } - - if (bt_value_array_append_string_element(run_args, "url")) { - print_err_oom(); - goto error; - } - - if (bt_value_array_append_string_element(run_args, "--value")) { - print_err_oom(); - goto error; - } - if (bt_value_array_append_string_element(run_args, arg)) { - print_err_oom(); + if (append_parameter_to_args(run_args, "url", arg)) { goto error; } break; diff --git a/doc/man/babeltrace-convert.1.txt b/doc/man/babeltrace-convert.1.txt index 03b843bf6..aefc4c17e 100644 --- a/doc/man/babeltrace-convert.1.txt +++ b/doc/man/babeltrace-convert.1.txt @@ -133,7 +133,7 @@ It is equivalent to the following command: [role="term"] ---- $ babeltrace run --component=ctf-fs:src.ctf.fs \ - --key=path --value=/path/to/trace \ + --params=path=/path/to/trace \ --component=pretty:sink.text.pretty \ --component=muxer:filter.utils.muxer \ --connect=ctf-fs:muxer --connect=muxer:pretty @@ -397,13 +397,13 @@ is: [role="term"] ---- $ babeltrace run --component=src-ctf-fs:src.ctf.fs \ - --key=path --value=/path/to/input/trace \ + --params=path=/path/to/input/trace \ --component=sink-ctf-fs:sink.ctf.fs \ - --key=path --value=out-dir \ + --params=path=out-dir \ --component=muxer:flt.utils.muxer \ --component=trimmer:flt.utils.trimmer \ - --key=begin --value=22:14:38 \ - --key=end --value=22:15:07 \ + '--params=begin="22:14:38"' \ + '--params=end="22:15:07"' \ --component=dbginfo:flt.lttng-utils.debug-info \ --connect=src-ctf-fs:muxer --connect=muxer:trimmer \ --connect=trimmer:dbg-info \ diff --git a/doc/man/babeltrace-run.1.txt b/doc/man/babeltrace-run.1.txt index 2c6622957..686bd8182 100644 --- a/doc/man/babeltrace-run.1.txt +++ b/doc/man/babeltrace-run.1.txt @@ -93,11 +93,6 @@ opt:--params='PARAMS':: + See <> for the format of 'PARAMS'. -opt:--key='KEY' followed with opt:--value='VALUE':: - Set the current component's initialization parameter named 'KEY' to - the string value 'VALUE'. If 'KEY' exists in the current component's - initialization parameters, the parameter is replaced. - [[connect-comps]] Connect components @@ -222,10 +217,6 @@ The initial initialization parameters of this component are copied from the current base initialization parameters (see the opt:--base-params option). -opt:--key='KEY':: - Set the current parameter key to 'KEY'. The next opt:--value option - uses this key to add a parameter to the current component. - opt:--name='NAME':: Set the name of the current component to 'NAME'. The names of all the components in the processing graph must be unique. @@ -240,13 +231,6 @@ opt:-r, opt:--reset-base-params:: Reset the current base parameters. You can set the current base parameters with the opt:--base-params option. -opt:-v 'VALUE', opt:--value='VALUE':: - Add a parameter to the current component's initialization parameters - of which the key is the argument of the last opt:--key option and - the string value is 'VALUE'. If the current component's - initialization parameters already contain a key named 'KEY', replace - the parameter. - Component connection ~~~~~~~~~~~~~~~~~~~~ @@ -318,17 +302,6 @@ $ babeltrace run --component=the-source:src.my-plugin.my-src \ ---- ==== -.Use the opt:--key and opt:--value options to set a current component's initialization parameter. -==== -[role="term"] ----- -$ babeltrace run --component=the-source:src.my-plugin.my-src \ - --key=path --value ~/my-traces/the-trace - --component=the-sink:sink.my-plugin.my-sink \ - --connect=the-source:the-sink ----- -==== - .Use the opt:--base-params and opt:--reset-base-params options to set and reset the current base initialization parameters. ==== In this example, the effective initialization parameters of the diff --git a/tests/cli/test_convert_args.in b/tests/cli/test_convert_args.in index 0111f36c9..68460bb60 100644 --- a/tests/cli/test_convert_args.in +++ b/tests/cli/test_convert_args.in @@ -73,49 +73,49 @@ comment() { plan_tests 75 -test_bt_convert_run_args 'path leftover' "$path_to_trace" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + named user source with --params' "$path_to_trace --component ZZ:source.another.source --params salut=yes" "--component ZZ:source.another.source --params salut=yes --component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect ZZ:muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + named user source with --name --params' "$path_to_trace --component source.another.source --name HELLO --params salut=yes" "--component source.another.source --name HELLO --params salut=yes --component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect HELLO:muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + user source with --path --params' "$path_to_trace --component source.another.source --path some-path --params salut=yes" "--component source.another.source --key path --value some-path --params salut=yes --name source.another.source --component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect 'source\\.another\\.source:muxer' --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'user source with --url + -o dummy' '--component MY:source.my.source --url the-url -o dummy' "--component MY:source.my.source --key url --value the-url --component sink.utils.dummy --name dummy --component filter.utils.muxer --name muxer --connect MY:muxer --connect muxer:dummy" -test_bt_convert_run_args 'path leftover + --omit-home-plugin-path' "$path_to_trace --omit-home-plugin-path" "--omit-home-plugin-path --component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --omit-system-plugin-path' "$path_to_trace --omit-system-plugin-path" "--omit-system-plugin-path --component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --plugin-path' "--plugin-path=PATH1:PATH2 $path_to_trace" "--plugin-path PATH1:PATH2 --component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover' "$path_to_trace" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + named user source with --params' "$path_to_trace --component ZZ:source.another.source --params salut=yes" "--component ZZ:source.another.source --params salut=yes --component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect ZZ:muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + named user source with --name --params' "$path_to_trace --component source.another.source --name HELLO --params salut=yes" "--component source.another.source --name HELLO --params salut=yes --component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect HELLO:muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + user source with --path --params' "$path_to_trace --component source.another.source --path some-path --params salut=yes" "--component source.another.source '--params=path=\"some-path\"' --params salut=yes --name source.another.source --component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect 'source\\.another\\.source:muxer' --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'user source with --url + -o dummy' '--component MY:source.my.source --url the-url -o dummy' "--component MY:source.my.source '--params=url=\"the-url\"' --component sink.utils.dummy --name dummy --component filter.utils.muxer --name muxer --connect MY:muxer --connect muxer:dummy" +test_bt_convert_run_args 'path leftover + --omit-home-plugin-path' "$path_to_trace --omit-home-plugin-path" "--omit-home-plugin-path --component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --omit-system-plugin-path' "$path_to_trace --omit-system-plugin-path" "--omit-system-plugin-path --component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --plugin-path' "--plugin-path=PATH1:PATH2 $path_to_trace" "--plugin-path PATH1:PATH2 --component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" test_bt_convert_run_args 'unnamed user source' '--component source.salut.com' "--component source.salut.com --name source.salut.com --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect 'source\.salut\.com:muxer' --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + user source named `source-ctf-fs`' "--component source-ctf-fs:source.salut.com $path_to_trace" "--component source-ctf-fs:source.salut.com --component source.ctf.fs --name source-ctf-fs-0 --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect source-ctf-fs-0:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + user sink named `pretty`' "--component pretty:sink.my.sink $path_to_trace" "--component pretty:sink.my.sink --component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --clock-seconds + user sink named `pretty`' "--clock-seconds --component pretty:sink.my.sink $path_to_trace" "--component pretty:sink.my.sink --component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty-0 --params clock-seconds=yes --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty --connect muxer:pretty-0" -test_bt_convert_run_args 'path leftover + user filter named `muxer`' "--component trimmer:filter.salut.com --component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer-0 --key begin --value abc --connect source-ctf-fs:muxer --connect muxer:trimmer-0 --connect trimmer-0:muxer --connect trimmer:pretty" -test_bt_convert_run_args 'path leftover + --begin + user filter named `trimmer`' "$path_to_trace --component trimmer:filter.salut.com --begin=abc" "--component trimmer:filter.salut.com --component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer-0 --key begin --value abc --connect source-ctf-fs:muxer --connect muxer:trimmer-0 --connect trimmer-0:trimmer --connect trimmer:pretty" -test_bt_convert_run_args 'path leftover + --plugin-path' "$path_to_trace --plugin-path a:b:c" "--plugin-path a:b:c --component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --omit-home-plugin-path --omit-system-plugin-path' "$path_to_trace --omit-home-plugin-path --omit-system-plugin-path" "--omit-home-plugin-path --omit-system-plugin-path --component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --begin' "$path_to_trace --begin=123" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer --key begin --value 123 --connect source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:pretty" -test_bt_convert_run_args 'path leftover + --begin --end' "$path_to_trace --end=456 --begin 123" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer --key end --value 456 --key begin --value 123 --connect source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:pretty" -test_bt_convert_run_args 'path leftover + --timerange' "$path_to_trace --timerange=[abc,xyz]" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer --key begin --value abc --key end --value xyz --connect source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:pretty" -test_bt_convert_run_args 'path leftover + --clock-cycles' "$path_to_trace --clock-cycles" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --params clock-cycles=yes --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --clock-date' "$path_to_trace --clock-date" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --params clock-date=yes --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --clock-force-correlate' "$path_to_trace --clock-force-correlate" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --params assume-absolute-clock-classes=yes --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --clock-gmt' "$path_to_trace --clock-gmt" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --params clock-gmt=yes --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --clock-offset' "$path_to_trace --clock-offset=15487" "--component source.ctf.fs --name source-ctf-fs --params clock-class-offset-s=15487 --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --clock-offset-ns' "$path_to_trace --clock-offset-ns=326159487" "--component source.ctf.fs --name source-ctf-fs --params clock-class-offset-ns=326159487 --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --clock-seconds' "$path_to_trace --clock-seconds" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --params clock-seconds=yes --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --color' "$path_to_trace --color=never" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --key color --value never --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --debug-info' "$path_to_trace --debug-info" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty" -test_bt_convert_run_args 'path leftover + --debug-info-dir' "$path_to_trace --debug-info-dir=${output_path}" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --key debug-info-dir --value ${output_path} --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty" -test_bt_convert_run_args 'path leftover + --debug-info-target-prefix' "$path_to_trace --debug-info-target-prefix=${output_path}" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --key target-prefix --value ${output_path} --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty" -test_bt_convert_run_args 'path leftover + --debug-info-full-path' "$path_to_trace --debug-info-full-path" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --params full-path=yes --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty" -test_bt_convert_run_args 'path leftover + --fields=trace:domain,loglevel' "--fields=trace:domain,loglevel $path_to_trace" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --params field-trace:domain=yes,field-loglevel=yes,field-default=hide --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --fields=all' "--fields=all $path_to_trace" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --params field-default=show --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --names=context,header' "--names=context,header $path_to_trace" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --params name-context=yes,name-header=yes,name-default=hide --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --names=all' "--names=all $path_to_trace" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --params name-default=show --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --no-delta' "$path_to_trace --no-delta" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --params no-delta=yes --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + --output' "$path_to_trace --output $output_path" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --key path --value $output_path --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + -i ctf' "$path_to_trace -i ctf" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" -test_bt_convert_run_args 'URL leftover + -i lttng-live' 'net://some-host/host/target/session -i lttng-live' "--component source.ctf.lttng-live --name lttng-live --key url --value net://some-host/host/target/session --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect lttng-live:muxer --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + user sink + -o text' "$path_to_trace --component=sink.abc.def -o text" "--component sink.abc.def --name sink.abc.def --component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect 'muxer:sink\.abc\.def' --connect muxer:pretty" -test_bt_convert_run_args 'path leftover + -o dummy' "$path_to_trace -o dummy" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.utils.dummy --name dummy --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:dummy" -test_bt_convert_run_args 'path leftover + -o dummy + --clock-seconds' "$path_to_trace -o dummy --clock-seconds" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.text.pretty --name pretty --params clock-seconds=yes --component sink.utils.dummy --name dummy --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty --connect muxer:dummy" -test_bt_convert_run_args 'path leftover + -o ctf + --output' "$path_to_trace -o ctf --output $output_path" "--component source.ctf.fs --name source-ctf-fs --key path --value $path_to_trace --component sink.ctf.fs --name sink-ctf-fs --key path --value $output_path --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:sink-ctf-fs" +test_bt_convert_run_args 'path leftover + user source named `source-ctf-fs`' "--component source-ctf-fs:source.salut.com $path_to_trace" "--component source-ctf-fs:source.salut.com --component source.ctf.fs --name source-ctf-fs-0 '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect source-ctf-fs-0:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + user sink named `pretty`' "--component pretty:sink.my.sink $path_to_trace" "--component pretty:sink.my.sink --component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --clock-seconds + user sink named `pretty`' "--clock-seconds --component pretty:sink.my.sink $path_to_trace" "--component pretty:sink.my.sink --component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty-0 --params clock-seconds=yes --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty --connect muxer:pretty-0" +test_bt_convert_run_args 'path leftover + user filter named `muxer`' "--component trimmer:filter.salut.com --component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer-0 '--params=begin=\"abc\"' --connect source-ctf-fs:muxer --connect muxer:trimmer-0 --connect trimmer-0:muxer --connect trimmer:pretty" +test_bt_convert_run_args 'path leftover + --begin + user filter named `trimmer`' "$path_to_trace --component trimmer:filter.salut.com --begin=abc" "--component trimmer:filter.salut.com --component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer-0 '--params=begin=\"abc\"' --connect source-ctf-fs:muxer --connect muxer:trimmer-0 --connect trimmer-0:trimmer --connect trimmer:pretty" +test_bt_convert_run_args 'path leftover + --plugin-path' "$path_to_trace --plugin-path a:b:c" "--plugin-path a:b:c --component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --omit-home-plugin-path --omit-system-plugin-path' "$path_to_trace --omit-home-plugin-path --omit-system-plugin-path" "--omit-home-plugin-path --omit-system-plugin-path --component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --begin' "$path_to_trace --begin=123" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer '--params=begin=\"123\"' --connect source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:pretty" +test_bt_convert_run_args 'path leftover + --begin --end' "$path_to_trace --end=456 --begin 123" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer '--params=end=\"456\"' '--params=begin=\"123\"' --connect source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:pretty" +test_bt_convert_run_args 'path leftover + --timerange' "$path_to_trace --timerange=[abc,xyz]" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.utils.trimmer --name trimmer '--params=begin=\"abc\"' '--params=end=\"xyz\"' --connect source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:pretty" +test_bt_convert_run_args 'path leftover + --clock-cycles' "$path_to_trace --clock-cycles" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --params clock-cycles=yes --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --clock-date' "$path_to_trace --clock-date" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --params clock-date=yes --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --clock-force-correlate' "$path_to_trace --clock-force-correlate" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --params assume-absolute-clock-classes=yes --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --clock-gmt' "$path_to_trace --clock-gmt" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --params clock-gmt=yes --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --clock-offset' "$path_to_trace --clock-offset=15487" "--component source.ctf.fs --name source-ctf-fs --params clock-class-offset-s=15487 '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --clock-offset-ns' "$path_to_trace --clock-offset-ns=326159487" "--component source.ctf.fs --name source-ctf-fs --params clock-class-offset-ns=326159487 '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --clock-seconds' "$path_to_trace --clock-seconds" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --params clock-seconds=yes --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --color' "$path_to_trace --color=never" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty '--params=color=\"never\"' --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --debug-info' "$path_to_trace --debug-info" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty" +test_bt_convert_run_args 'path leftover + --debug-info-dir' "$path_to_trace --debug-info-dir=${output_path}" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info '--params=debug-info-dir=\"${output_path}\"' --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty" +test_bt_convert_run_args 'path leftover + --debug-info-target-prefix' "$path_to_trace --debug-info-target-prefix=${output_path}" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info '--params=target-prefix=\"${output_path}\"' --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty" +test_bt_convert_run_args 'path leftover + --debug-info-full-path' "$path_to_trace --debug-info-full-path" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --params full-path=yes --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty" +test_bt_convert_run_args 'path leftover + --fields=trace:domain,loglevel' "--fields=trace:domain,loglevel $path_to_trace" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --params field-trace:domain=yes,field-loglevel=yes,field-default=hide --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --fields=all' "--fields=all $path_to_trace" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --params field-default=show --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --names=context,header' "--names=context,header $path_to_trace" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --params name-context=yes,name-header=yes,name-default=hide --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --names=all' "--names=all $path_to_trace" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --params name-default=show --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --no-delta' "$path_to_trace --no-delta" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --params no-delta=yes --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + --output' "$path_to_trace --output $output_path" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty '--params=path=\"$output_path\"' --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + -i ctf' "$path_to_trace -i ctf" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty" +test_bt_convert_run_args 'URL leftover + -i lttng-live' 'net://some-host/host/target/session -i lttng-live' "--component source.ctf.lttng-live --name lttng-live '--params=url=\"net://some-host/host/target/session\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect lttng-live:muxer --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + user sink + -o text' "$path_to_trace --component=sink.abc.def -o text" "--component sink.abc.def --name sink.abc.def --component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect 'muxer:sink\.abc\.def' --connect muxer:pretty" +test_bt_convert_run_args 'path leftover + -o dummy' "$path_to_trace -o dummy" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.utils.dummy --name dummy --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:dummy" +test_bt_convert_run_args 'path leftover + -o dummy + --clock-seconds' "$path_to_trace -o dummy --clock-seconds" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.text.pretty --name pretty --params clock-seconds=yes --component sink.utils.dummy --name dummy --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:pretty --connect muxer:dummy" +test_bt_convert_run_args 'path leftover + -o ctf + --output' "$path_to_trace -o ctf --output $output_path" "--component source.ctf.fs --name source-ctf-fs '--params=path=\"$path_to_trace\"' --component sink.ctf.fs --name sink-ctf-fs '--params=path=\"$output_path\"' --component filter.utils.muxer --name muxer --connect source-ctf-fs:muxer --connect muxer:sink-ctf-fs" test_bt_convert_fails 'bad --component format (plugin only)' '--component salut' test_bt_convert_fails 'bad --component format (name and plugin only)' '--component name:salut' -- 2.34.1