cli: use -o ctf --output /output/path to quickly instantiate sink.ctf.fs
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Fri, 9 Jun 2017 17:38:08 +0000 (13:38 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 9 Jun 2017 21:03:27 +0000 (17:03 -0400)
This should be easier for existing users of Babeltrace 1 which are used
to the --output-format (-o) and --output (-w) options. We had people
previously on the mailing list asking why

    babeltrace my-trace -o ctf --output /output/path

was not working. The answer is that there was no CTF sink at the time,
but this usage is still correct and straightforward.

The code makes sure that, if something implies `-o text`, for example
--names, --fields, or --no-delta, then you cannot use this form because
--output could also apply to the implicit sink.pretty.text component. We
also make sure that --output exists if `-o ctf` exists (--output without
`-o ctf` applies to the implicit `-o text` as mentioned previously).

The run command equivalent of this command:

    babeltrace my-trace -o ctf --output /output/path

as returned by --run-args, is:

    babeltrace run --component source.ctf.fs --name source-ctf-fs
                   --key path --value my-trace --component sink.ctf.fs
                   --name sink-ctf-fs --key path --value /output/path
                   --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:sink-ctf-fs

tests/cli/test_convert_args is updated because the preferred name of the
implicit source.ctf.fs component is changed: it used to be `ctf-fs`,
it's now `source-ctf-fs`, as the preferred implicit sink.ctf.fs
component's name is `sink-ctf-fs`. Also there are a few more tests to
verify the constraint and generated options mentioned in this message.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
cli/babeltrace-cfg-cli-args.c
tests/cli/test_convert_args

index 643d824d2b56f9a42a74f708ed257fa0ca1c6f9d..757ed1129a109af7ec2b1cc961c378d7b7dea8a7 100644 (file)
@@ -2796,14 +2796,14 @@ void print_convert_usage(FILE *fp)
        fprintf(fp, "                                    current component to URL\n");
        fprintf(fp, "  -h  --help                        Show this help and quit\n");
        fprintf(fp, "\n");
-       fprintf(fp, "Implicit `ctf.fs` source component options:\n");
+       fprintf(fp, "Implicit `source.ctf.fs` component options:\n");
        fprintf(fp, "\n");
        fprintf(fp, "      --clock-offset=SEC            Set clock offset to SEC seconds\n");
        fprintf(fp, "      --clock-offset-ns=NS          Set clock offset to NS ns\n");
        fprintf(fp, "      --stream-intersection         Only process events when all streams\n");
        fprintf(fp, "                                    are active\n");
        fprintf(fp, "\n");
-       fprintf(fp, "Implicit `text.text` sink component options:\n");
+       fprintf(fp, "Implicit `sink.text.pretty` component options:\n");
        fprintf(fp, "\n");
        fprintf(fp, "      --clock-cycles                Print timestamps in clock cycles\n");
        fprintf(fp, "      --clock-date                  Print timestamp dates\n");
@@ -2827,12 +2827,12 @@ void print_convert_usage(FILE *fp)
        fprintf(fp, "  -w, --output=PATH                 Write output text to PATH instead of\n");
        fprintf(fp, "                                    the standard output\n");
        fprintf(fp, "\n");
-       fprintf(fp, "Implicit `utils.muxer` filter component options:\n");
+       fprintf(fp, "Implicit `filter.utils.muxer` component options:\n");
        fprintf(fp, "\n");
        fprintf(fp, "      --clock-force-correlate       Assume that clocks are inherently\n");
        fprintf(fp, "                                    correlated across traces\n");
        fprintf(fp, "\n");
-       fprintf(fp, "Implicit `utils.trimmer` filter component options:\n");
+       fprintf(fp, "Implicit `filter.utils.trimmer` component options:\n");
        fprintf(fp, "\n");
        fprintf(fp, "  -b, --begin=BEGIN                 Set the beginning time of the conversion\n");
        fprintf(fp, "                                    time range to BEGIN (see the format of\n");
@@ -2843,7 +2843,7 @@ void print_convert_usage(FILE *fp)
        fprintf(fp, "                                    BEGIN,END or [BEGIN,END] (literally `[` and\n");
        fprintf(fp, "                                    `]`) (see the format of BEGIN/END below)\n");
        fprintf(fp, "\n");
-       fprintf(fp, "Implicit `lttng-utils.debug-info` filter component options:\n");
+       fprintf(fp, "Implicit `filter.lttng-utils.debug-info` component options:\n");
        fprintf(fp, "\n");
        fprintf(fp, "      --debug-info-dir=DIR          Search for debug info in directory DIR\n");
        fprintf(fp, "                                    instead of `/usr/lib/debug`\n");
@@ -2865,10 +2865,13 @@ void print_convert_usage(FILE *fp)
        fprintf(fp, "                                    `lttng-live`:\n");
        fprintf(fp, "                                      Create an implicit `source.ctf.lttng-live`\n");
        fprintf(fp, "                                      component\n");
-       fprintf(fp, "  -o, --output-format=(text | dummy | ctf-metadata)\n");
+       fprintf(fp, "  -o, --output-format=(text | ctf | dummy | ctf-metadata)\n");
        fprintf(fp, "                                    `text`:\n");
        fprintf(fp, "                                      Create an implicit `sink.text.pretty`\n");
        fprintf(fp, "                                      component\n");
+       fprintf(fp, "                                    `text`:\n");
+       fprintf(fp, "                                      Create an implicit `sink.ctf.fs`\n");
+       fprintf(fp, "                                      component\n");
        fprintf(fp, "                                    `dummy`:\n");
        fprintf(fp, "                                      Create an implicit `sink.utils.dummy`\n");
        fprintf(fp, "                                      component\n");
@@ -2959,7 +2962,7 @@ struct implicit_component_args {
        GString *comp_arg;
        GString *name_arg;
        GString *params_arg;
-       struct bt_value *extra_args;
+       struct bt_value *extra_params;
 };
 
 static
@@ -3048,11 +3051,11 @@ int append_run_args_for_implicit_component(
                }
        }
 
-       for (i = 0; i < bt_value_array_size(impl_args->extra_args); i++) {
+       for (i = 0; i < bt_value_array_size(impl_args->extra_params); i++) {
                struct bt_value *elem;
                const char *arg;
 
-               elem = bt_value_array_get(impl_args->extra_args, i);
+               elem = bt_value_array_get(impl_args->extra_params, i);
                if (!elem) {
                        goto error;
                }
@@ -3096,7 +3099,7 @@ void destroy_implicit_component_args(struct implicit_component_args *args)
                g_string_free(args->params_arg, TRUE);
        }
 
-       bt_put(args->extra_args);
+       bt_put(args->extra_params);
 }
 
 static
@@ -3109,10 +3112,10 @@ int init_implicit_component_args(struct implicit_component_args *args,
        args->comp_arg = g_string_new(comp_arg);
        args->name_arg = g_string_new(NULL);
        args->params_arg = g_string_new(NULL);
-       args->extra_args = bt_value_array_create();
+       args->extra_params = bt_value_array_create();
 
        if (!args->comp_arg || !args->name_arg ||
-                       !args->params_arg || !args->extra_args) {
+                       !args->params_arg || !args->extra_params) {
                ret = -1;
                destroy_implicit_component_args(args);
                print_err_oom();
@@ -3134,7 +3137,7 @@ void append_implicit_component_param(struct implicit_component_args *args,
 }
 
 static
-int append_implicit_component_extra_arg(struct implicit_component_args *args,
+int append_implicit_component_extra_param(struct implicit_component_args *args,
                const char *key, const char *value)
 {
        int ret = 0;
@@ -3143,25 +3146,25 @@ int append_implicit_component_extra_arg(struct implicit_component_args *args,
        assert(key);
        assert(value);
 
-       if (bt_value_array_append_string(args->extra_args, "--key")) {
+       if (bt_value_array_append_string(args->extra_params, "--key")) {
                print_err_oom();
                ret = -1;
                goto end;
        }
 
-       if (bt_value_array_append_string(args->extra_args, key)) {
+       if (bt_value_array_append_string(args->extra_params, key)) {
                print_err_oom();
                ret = -1;
                goto end;
        }
 
-       if (bt_value_array_append_string(args->extra_args, "--value")) {
+       if (bt_value_array_append_string(args->extra_params, "--value")) {
                print_err_oom();
                ret = -1;
                goto end;
        }
 
-       if (bt_value_array_append_string(args->extra_args, value)) {
+       if (bt_value_array_append_string(args->extra_params, value)) {
                print_err_oom();
                ret = -1;
                goto end;
@@ -3518,7 +3521,8 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
        GList *source_names = NULL;
        GList *filter_names = NULL;
        GList *sink_names = NULL;
-       struct implicit_component_args implicit_ctf_args = { 0 };
+       struct implicit_component_args implicit_ctf_input_args = { 0 };
+       struct implicit_component_args implicit_ctf_output_args = { 0 };
        struct implicit_component_args implicit_lttng_live_args = { 0 };
        struct implicit_component_args implicit_dummy_args = { 0 };
        struct implicit_component_args implicit_text_args = { 0 };
@@ -3529,6 +3533,7 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
        char error_buf[256] = { 0 };
        size_t i;
        struct bt_common_lttng_live_url_parts lttng_live_url_parts = { 0 };
+       char *output = NULL;
 
        *retcode = 0;
 
@@ -3538,11 +3543,16 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                goto end;
        }
 
-       if (init_implicit_component_args(&implicit_ctf_args,
+       if (init_implicit_component_args(&implicit_ctf_input_args,
                        "source.ctf.fs", false)) {
                goto error;
        }
 
+       if (init_implicit_component_args(&implicit_ctf_output_args,
+                       "sink.ctf.fs", false)) {
+               goto error;
+       }
+
        if (init_implicit_component_args(&implicit_lttng_live_args,
                        "source.ctf.lttng-live", false)) {
                goto error;
@@ -3924,7 +3934,7 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                        }
 
                        trimmer_has_begin = true;
-                       ret = append_implicit_component_extra_arg(
+                       ret = append_implicit_component_extra_param(
                                &implicit_trimmer_args, "begin", arg);
                        implicit_trimmer_args.exists = true;
                        if (ret) {
@@ -3939,7 +3949,7 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                        }
 
                        trimmer_has_end = true;
-                       ret = append_implicit_component_extra_arg(
+                       ret = append_implicit_component_extra_param(
                                &implicit_trimmer_args, "end", arg);
                        implicit_trimmer_args.exists = true;
                        if (ret) {
@@ -3964,9 +3974,9 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                                goto error;
                        }
 
-                       ret = append_implicit_component_extra_arg(
+                       ret = append_implicit_component_extra_param(
                                &implicit_trimmer_args, "begin", begin);
-                       ret |= append_implicit_component_extra_arg(
+                       ret |= append_implicit_component_extra_param(
                                &implicit_trimmer_args, "end", end);
                        implicit_trimmer_args.exists = true;
                        free(begin);
@@ -3996,17 +4006,17 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                        implicit_text_args.exists = true;
                        break;
                case OPT_CLOCK_OFFSET:
-                       ret = append_implicit_component_extra_arg(
-                               &implicit_ctf_args, "clock-offset-cycles", arg);
-                       implicit_ctf_args.exists = true;
+                       implicit_ctf_input_args.exists = true;
+                       ret = append_implicit_component_extra_param(
+                               &implicit_ctf_input_args, "clock-offset-cycles", arg);
                        if (ret) {
                                goto error;
                        }
                        break;
                case OPT_CLOCK_OFFSET_NS:
-                       ret = append_implicit_component_extra_arg(
-                               &implicit_ctf_args, "clock-offset-ns", arg);
-                       implicit_ctf_args.exists = true;
+                       implicit_ctf_input_args.exists = true;
+                       ret = append_implicit_component_extra_param(
+                               &implicit_ctf_input_args, "clock-offset-ns", arg);
                        if (ret) {
                                goto error;
                        }
@@ -4017,9 +4027,9 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                        implicit_text_args.exists = true;
                        break;
                case OPT_COLOR:
-                       ret = append_implicit_component_extra_arg(
-                               &implicit_text_args, "color", arg);
                        implicit_text_args.exists = true;
+                       ret = append_implicit_component_extra_param(
+                               &implicit_text_args, "color", arg);
                        if (ret) {
                                goto error;
                        }
@@ -4028,18 +4038,21 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                        implicit_debug_info_args.exists = false;
                        break;
                case OPT_DEBUG_INFO_DIR:
-                       ret = append_implicit_component_extra_arg(
+                       implicit_debug_info_args.exists = true;
+                       ret = append_implicit_component_extra_param(
                                &implicit_debug_info_args, "dir", arg);
                        if (ret) {
                                goto error;
                        }
                        break;
                case OPT_DEBUG_INFO_FULL_PATH:
+                       implicit_debug_info_args.exists = true;
                        append_implicit_component_param(
                                &implicit_debug_info_args, "full-path", "yes");
                        break;
                case OPT_DEBUG_INFO_TARGET_PREFIX:
-                       ret = append_implicit_component_extra_arg(
+                       implicit_debug_info_args.exists = true;
+                       ret = append_implicit_component_extra_param(
                                &implicit_debug_info_args,
                                "target-prefix", arg);
                        if (ret) {
@@ -4054,6 +4067,7 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                                goto error;
                        }
 
+                       implicit_text_args.exists = true;
                        ret = insert_flat_params_from_array(
                                implicit_text_args.params_arg,
                                fields, "field");
@@ -4071,6 +4085,7 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                                goto error;
                        }
 
+                       implicit_text_args.exists = true;
                        ret = insert_flat_params_from_array(
                                implicit_text_args.params_arg,
                                names, "name");
@@ -4094,7 +4109,7 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                        got_input_format_opt = true;
 
                        if (strcmp(arg, "ctf") == 0) {
-                               implicit_ctf_args.exists = true;
+                               implicit_ctf_input_args.exists = true;
                        } else if (strcmp(arg, "lttng-live") == 0) {
                                implicit_lttng_live_args.exists = true;
                        } else {
@@ -4113,6 +4128,8 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
 
                        if (strcmp(arg, "text") == 0) {
                                implicit_text_args.exists = true;
+                       } else if (strcmp(arg, "ctf") == 0) {
+                               implicit_ctf_output_args.exists = true;
                        } else if (strcmp(arg, "dummy") == 0) {
                                implicit_dummy_args.exists = true;
                        } else if (strcmp(arg, "ctf-metadata") == 0) {
@@ -4124,10 +4141,14 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                        }
                        break;
                case OPT_OUTPUT:
-                       ret = append_implicit_component_extra_arg(
-                               &implicit_text_args, "path", arg);
-                       implicit_text_args.exists = true;
-                       if (ret) {
+                       if (output) {
+                               printf_err("Duplicate --output option\n");
+                               goto error;
+                       }
+
+                       output = strdup(arg);
+                       if (!output) {
+                               print_err_oom();
                                goto error;
                        }
                        break;
@@ -4148,9 +4169,9 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                        print_run_args_0 = true;
                        break;
                case OPT_STREAM_INTERSECTION:
-                       append_implicit_component_param(&implicit_ctf_args,
+                       append_implicit_component_param(&implicit_ctf_input_args,
                                "stream-intersection", "yes");
-                       implicit_ctf_args.exists = true;
+                       implicit_ctf_input_args.exists = true;
                        break;
                case OPT_VERBOSE:
                        if (got_verbose_opt) {
@@ -4218,13 +4239,59 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
        }
 
        /*
-        * If -o dummy was not specified, and if there are no explicit
-        * sink components, then use an implicit `text.text` sink.
+        * If -o ctf was specified, make sure an output path (--output)
+        * was also specified. --output does not imply -o ctf because
+        * it's also used for the default, implicit -o text if -o ctf
+        * is not specified.
+        */
+       if (implicit_ctf_output_args.exists) {
+               if (!output) {
+                       printf_err("--output-format=ctf specified without --output (trace output path)\n");
+                       goto error;
+               }
+
+               /*
+                * At this point we know that -o ctf AND --output were
+                * specified. Make sure that no options were specified
+                * which would imply -o text because --output would be
+                * ambiguous in this case. For example, this is wrong:
+                *
+                *     babeltrace --names=all -o ctf --output=/tmp/path my-trace
+                *
+                * because --names=all implies -o text, and --output
+                * could apply to both the sink.text.pretty and
+                * sink.ctf.fs implicit components.
+                */
+               if (implicit_text_args.exists) {
+                       printf_err("Ambiguous --output option: --output-format=ctf specified but another option implies --output-format=text\n");
+                       goto error;
+               }
+       }
+
+       /*
+        * If -o dummy and -o ctf were not specified, and if there are
+        * no explicit sink components, then use an implicit
+        * `sink.text.pretty` component.
         */
-       if (!implicit_dummy_args.exists && !sink_names) {
+       if (!implicit_dummy_args.exists && !implicit_ctf_output_args.exists &&
+                       !sink_names) {
                implicit_text_args.exists = true;
        }
 
+       /*
+        * Set implicit `sink.text.pretty` or `sink.ctf.fs` component's
+        * `path` parameter if --output was specified.
+        */
+       if (output) {
+               if (implicit_text_args.exists) {
+                       append_implicit_component_extra_param(&implicit_text_args,
+                               "path", output);
+               } else if (implicit_ctf_output_args.exists) {
+                       append_implicit_component_extra_param(&implicit_ctf_output_args,
+                               "path", output);
+               }
+       }
+
        /* Decide where the leftover argument goes */
        if (leftover) {
                if (implicit_lttng_live_args.exists) {
@@ -4252,15 +4319,15 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                                goto end;
                        }
 
-                       ret = append_implicit_component_extra_arg(
+                       ret = append_implicit_component_extra_param(
                                &implicit_lttng_live_args, "url", leftover);
                        if (ret) {
                                goto error;
                        }
                } else {
-                       ret = append_implicit_component_extra_arg(
-                               &implicit_ctf_args, "path", leftover);
-                       implicit_ctf_args.exists = true;
+                       ret = append_implicit_component_extra_param(
+                               &implicit_ctf_input_args, "path", leftover);
+                       implicit_ctf_input_args.exists = true;
                        if (ret) {
                                goto error;
                        }
@@ -4271,9 +4338,9 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
         * Ensure mutual exclusion between implicit `source.ctf.fs` and
         * `source.ctf.lttng-live` components.
         */
-       if (implicit_ctf_args.exists && implicit_lttng_live_args.exists) {
+       if (implicit_ctf_input_args.exists && implicit_lttng_live_args.exists) {
                printf_err("Cannot create both implicit `%s` and `%s` components\n",
-                       implicit_ctf_args.comp_arg->str,
+                       implicit_ctf_input_args.comp_arg->str,
                        implicit_lttng_live_args.comp_arg->str);
                goto error;
        }
@@ -4283,9 +4350,9 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
         * components exists, make sure there's a leftover (which is the
         * path or URL).
         */
-       if (implicit_ctf_args.exists && !leftover) {
+       if (implicit_ctf_input_args.exists && !leftover) {
                printf_err("Missing path for implicit `%s` component\n",
-                       implicit_ctf_args.comp_arg->str);
+                       implicit_ctf_input_args.comp_arg->str);
                goto error;
        }
 
@@ -4296,8 +4363,8 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
        }
 
        /* Assign names to implicit components */
-       ret = assign_name_to_implicit_component(&implicit_ctf_args,
-               "ctf-fs", all_names, &source_names, true);
+       ret = assign_name_to_implicit_component(&implicit_ctf_input_args,
+               "source-ctf-fs", all_names, &source_names, true);
        if (ret) {
                goto error;
        }
@@ -4314,6 +4381,12 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                goto error;
        }
 
+       ret = assign_name_to_implicit_component(&implicit_ctf_output_args,
+               "sink-ctf-fs", all_names, &sink_names, true);
+       if (ret) {
+               goto error;
+       }
+
        ret = assign_name_to_implicit_component(&implicit_dummy_args,
                "dummy", all_names, &sink_names, true);
        if (ret) {
@@ -4379,7 +4452,7 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
         * Append the equivalent run arguments for the implicit
         * components.
         */
-       ret = append_run_args_for_implicit_component(&implicit_ctf_args,
+       ret = append_run_args_for_implicit_component(&implicit_ctf_input_args,
                run_args);
        if (ret) {
                goto error;
@@ -4397,6 +4470,12 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[],
                goto error;
        }
 
+       ret = append_run_args_for_implicit_component(&implicit_ctf_output_args,
+               run_args);
+       if (ret) {
+               goto error;
+       }
+
        ret = append_run_args_for_implicit_component(&implicit_dummy_args,
                run_args);
        if (ret) {
@@ -4493,6 +4572,7 @@ end:
        }
 
        free(arg);
+       free(output);
 
        if (cur_name) {
                g_string_free(cur_name, TRUE);
@@ -4507,7 +4587,8 @@ end:
        destroy_glist_of_gstring(source_names);
        destroy_glist_of_gstring(filter_names);
        destroy_glist_of_gstring(sink_names);
-       destroy_implicit_component_args(&implicit_ctf_args);
+       destroy_implicit_component_args(&implicit_ctf_input_args);
+       destroy_implicit_component_args(&implicit_ctf_output_args);
        destroy_implicit_component_args(&implicit_lttng_live_args);
        destroy_implicit_component_args(&implicit_dummy_args);
        destroy_implicit_component_args(&implicit_text_args);
index 580b7a89adcec6494e9b8dbc8af28905a45bd5a9..896a8d1d083da0d7b87da40668b3b9584857aa26 100755 (executable)
@@ -38,6 +38,7 @@ test_bt_convert_run_args() {
                pass "ARGS: $what"
        else
                fail "ARGS: $what"
+               diag "ARGS:     $convert_args"
                diag "EXPECTED: $expected_run_args"
                diag "GOT:      $run_args"
        fi
@@ -69,51 +70,52 @@ comment() {
        echo "### $1 ###"
 }
 
-plan_tests 74
+plan_tests 77
 
-test_bt_convert_run_args 'path leftover' '/path/to/trace' '--component source.ctf.fs --name 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 ctf-fs:muxer --connect muxer:debug-info --connect debug-info: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 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 ZZ:muxer --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info: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 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 HELLO:muxer --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info: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 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\\.another\\.source:muxer' --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty"
+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 --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 + 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 --component filter.lttng-utils.debug-info --name debug-info --connect ZZ:muxer --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info: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 --component filter.lttng-utils.debug-info --name debug-info --connect HELLO:muxer --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info: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 --component filter.lttng-utils.debug-info --name debug-info --connect 'source\\.another\\.source:muxer' --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info: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 --component filter.lttng-utils.debug-info --name debug-info --connect MY:muxer --connect muxer:debug-info --connect debug-info: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 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 ctf-fs:muxer --connect muxer:debug-info --connect debug-info: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 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 ctf-fs:muxer --connect muxer:debug-info --connect debug-info: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 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 ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
+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 --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 + --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 --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 + --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 --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 '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 --component filter.lttng-utils.debug-info --name debug-info --connect 'source\.salut\.com:muxer' --connect muxer:debug-info --connect debug-info:pretty"
-test_bt_convert_run_args 'path leftover + user source named `ctf-fs`' '--component ctf-fs:source.salut.com /path/to/trace' "--component ctf-fs:source.salut.com --component source.ctf.fs --name ctf-fs-0 --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 ctf-fs:muxer --connect ctf-fs-0:muxer --connect muxer:debug-info --connect debug-info: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 ctf-fs --key path --value /path/to/trace --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info: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 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 --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty --connect debug-info:pretty-0'
-test_bt_convert_run_args 'path leftover + user filter named `muxer`' '--component muxer:filter.salut.com /path/to/trace' '--component muxer:filter.salut.com --component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer-0 --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer-0 --connect muxer-0:debug-info --connect debug-info:muxer --connect muxer: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 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 --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:trimmer-0 --connect trimmer-0:debug-info --connect debug-info: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 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 ctf-fs:muxer --connect muxer:debug-info --connect debug-info: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 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 ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --begin' '/path/to/trace --begin=123' '--component source.ctf.fs --name 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 --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:trimmer --connect trimmer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --begin --end' '/path/to/trace --end=456 --begin 123' '--component source.ctf.fs --name 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 --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:trimmer --connect trimmer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --timerange' '/path/to/trace --timerange=[abc,xyz]' '--component source.ctf.fs --name 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 --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:trimmer --connect trimmer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-cycles' '/path/to/trace --clock-cycles' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params clock-cycles=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-date' '/path/to/trace --clock-date' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params clock-date=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-force-correlate' '/path/to/trace --clock-force-correlate' '--component source.ctf.fs --name 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 --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-gmt' '/path/to/trace --clock-gmt' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params clock-gmt=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-offset' '/path/to/trace --clock-offset=15487' '--component source.ctf.fs --name ctf-fs --key clock-offset-cycles --value 15487 --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 ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-offset-ns' '/path/to/trace --clock-offset-ns=326159487' '--component source.ctf.fs --name ctf-fs --key clock-offset-ns --value 326159487 --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 ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --clock-seconds' '/path/to/trace --clock-seconds' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params clock-seconds=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --color' '/path/to/trace --color=never' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --key color --value never --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --no-debug-info' '/path/to/trace --no-debug-info' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --component filter.utils.muxer --name muxer --connect ctf-fs:muxer --connect muxer:pretty'
-test_bt_convert_run_args 'path leftover + --debug-info-dir' '/path/to/trace --debug-info-dir=/salut' '--component source.ctf.fs --name 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 dir --value /salut --connect 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=/salut' '--component source.ctf.fs --name 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 /salut --connect 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 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 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 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 --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --fields=all' '--fields=all /path/to/trace' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params field-default=show --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --names=context,header' '--names=context,header /path/to/trace' '--component source.ctf.fs --name 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 --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --names=all' '--names=all /path/to/trace' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params name-default=show --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --no-delta' '/path/to/trace --no-delta' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --params no-delta=yes --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --output' '/path/to/trace --output /salut' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --key path --value /salut --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + --stream-intersection' '/path/to/trace --stream-intersection' '--component source.ctf.fs --name ctf-fs --params stream-intersection=yes --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 ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty'
-test_bt_convert_run_args 'path leftover + -i ctf' '/path/to/trace -i ctf' '--component source.ctf.fs --name 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 ctf-fs:muxer --connect muxer:debug-info --connect debug-info: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 --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect source-ctf-fs-0:muxer --connect muxer:debug-info --connect debug-info: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 --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 + --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 --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty --connect debug-info:pretty-0'
+test_bt_convert_run_args 'path leftover + user filter named `muxer`' '--component muxer:filter.salut.com /path/to/trace' '--component muxer: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-0 --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer-0 --connect muxer-0:debug-info --connect debug-info:muxer --connect muxer: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 --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:trimmer-0 --connect trimmer-0:debug-info --connect debug-info: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 --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 + --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 --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 + --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 --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:debug-info --connect debug-info: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 --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:debug-info --connect debug-info: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 --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:trimmer --connect trimmer:debug-info --connect debug-info: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 --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 + --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 --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 + --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 --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 + --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 --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 + --clock-offset' '/path/to/trace --clock-offset=15487' '--component source.ctf.fs --name source-ctf-fs --key clock-offset-cycles --value 15487 --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 + --clock-offset-ns' '/path/to/trace --clock-offset-ns=326159487' '--component source.ctf.fs --name source-ctf-fs --key clock-offset-ns --value 326159487 --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 + --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 --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 + --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 --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 + --no-debug-info' '/path/to/trace --no-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 --connect source-ctf-fs:muxer --connect muxer:pretty'
+test_bt_convert_run_args 'path leftover + --debug-info-dir' '/path/to/trace --debug-info-dir=/salut' '--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 dir --value /salut --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=/salut' '--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 /salut --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 --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 + --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 --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 + --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 --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 + --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 --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 + --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 --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 + --output' '/path/to/trace --output /salut' '--component source.ctf.fs --name source-ctf-fs --key path --value /path/to/trace --component sink.text.pretty --name pretty --key path --value /salut --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 + --stream-intersection' '/path/to/trace --stream-intersection' '--component source.ctf.fs --name source-ctf-fs --params stream-intersection=yes --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 + -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 --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 '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 --component filter.lttng-utils.debug-info --name debug-info --connect lttng-live:muxer --connect muxer:debug-info --connect debug-info: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 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 ctf-fs:muxer --connect muxer:debug-info --connect 'debug-info:sink\.abc\.def' --connect debug-info:pretty"
-test_bt_convert_run_args 'path leftover + -o dummy' '/path/to/trace -o dummy' '--component source.ctf.fs --name ctf-fs --key path --value /path/to/trace --component sink.utils.dummy --name dummy --component filter.utils.muxer --name muxer --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:dummy'
-test_bt_convert_run_args 'path leftover + -o dummy + --clock-seconds' '/path/to/trace -o dummy --clock-seconds' '--component source.ctf.fs --name 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 --component filter.lttng-utils.debug-info --name debug-info --connect ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty --connect debug-info:dummy'
+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 --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect 'debug-info:sink\.abc\.def' --connect debug-info: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 --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info: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 --component filter.lttng-utils.debug-info --name debug-info --connect source-ctf-fs:muxer --connect muxer:debug-info --connect debug-info:pretty --connect debug-info:dummy'
+test_bt_convert_run_args 'path leftover + -o ctf + --output' '/path/to/trace -o ctf --output /output/trace' '--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/trace --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: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'
@@ -142,7 +144,9 @@ test_bt_convert_fails '--run-args and --run-args-0' '/path/to/trace --run-args -
 test_bt_convert_fails 'duplicate -v' '/path/to/trace -vv'
 test_bt_convert_fails 'two leftover arguments' '/path/to/trace /other/path'
 test_bt_convert_fails '-o ctf-metadata without path' '-o ctf-metadata'
-test_bt_convert_fails '-i lttng-live and implicit ctf.fs source' '-i lttng-live net://some-host/host/target/session --clock-offset=23'
-test_bt_convert_fails 'implicit ctf.fs source without path' '--clock-offset=23'
-test_bt_convert_fails 'implicit ctf.lttng-live source without URL' '-i lttng-live'
+test_bt_convert_fails '-i lttng-live and implicit source.ctf.fs' '-i lttng-live net://some-host/host/target/session --clock-offset=23'
+test_bt_convert_fails 'implicit source.ctf.fs without path' '--clock-offset=23'
+test_bt_convert_fails 'implicit source.ctf.lttng-live without URL' '-i lttng-live'
 test_bt_convert_fails 'no source' '-o text'
+test_bt_convert_fails '-o ctf without --output' 'my-trace -o ctf'
+test_bt_convert_fails '-o ctf + --output with implicit sink.text.pretty' 'my-trace -o ctf --output /output/path --no-delta'
This page took 0.041555 seconds and 4 git commands to generate.