cli: Remove support for --key and --value arguments
authorSimon Marchi <simon.marchi@efficios.com>
Tue, 9 Apr 2019 23:00:33 +0000 (19:00 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Thu, 2 May 2019 04:12:55 +0000 (00:12 -0400)
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 <simon.marchi@efficios.com>
cli/babeltrace-cfg-cli-args.c
doc/man/babeltrace-convert.1.txt
doc/man/babeltrace-run.1.txt
tests/cli/test_convert_args.in

index 927a85d931482e8d285ac692f45d004ce97a7339..542e136fff53829cbb487b8163c7721d27fc67f8 100644 (file)
@@ -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;
index 03b843bf6ca12bceb26ec62664e4fce3e2b19389..aefc4c17ebb147f12e4455410c8e3254b3bfd9d1 100644 (file)
@@ -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 \
index 2c662295745a5f35ae0b8c93f7f7c1e9f31c5f23..686bd8182d4b8030266386ceb3bdaf8e2198ad4e 100644 (file)
@@ -93,11 +93,6 @@ opt:--params='PARAMS'::
 +
 See <<params-fmt,Parameters format>> 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
index 0111f36c925684db128943cc65b1f8d47acab050..68460bb606e58fd9f5db78dbe2750604d90ad3e1 100644 (file)
@@ -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'
This page took 0.03673 seconds and 5 git commands to generate.