string-format: introduce function to format component class name
[babeltrace.git] / src / cli / babeltrace2.c
index 29bd95a9bfa67bf832302839aff635513fb3f0c7..f5164ccb88ce9cbcbb0e75a6b11b06be99255ade 100644 (file)
@@ -27,6 +27,7 @@
 
 #include <babeltrace2/babeltrace.h>
 #include "common/common.h"
+#include "string-format/format-plugin-comp-cls-name.h"
 #include <unistd.h>
 #include <stdlib.h>
 #include <string.h>
@@ -230,68 +231,6 @@ void print_indent(FILE *fp, size_t indent)
        }
 }
 
-static
-const char *component_type_str(bt_component_class_type type)
-{
-       switch (type) {
-       case BT_COMPONENT_CLASS_TYPE_SOURCE:
-               return "source";
-       case BT_COMPONENT_CLASS_TYPE_SINK:
-               return "sink";
-       case BT_COMPONENT_CLASS_TYPE_FILTER:
-               return "filter";
-       default:
-               return "(unknown)";
-       }
-}
-
-static
-void print_plugin_comp_cls_opt(FILE *fh, const char *plugin_name,
-               const char *comp_cls_name, bt_component_class_type type)
-{
-       GString *shell_plugin_name = NULL;
-       GString *shell_comp_cls_name = NULL;
-
-       if (plugin_name) {
-               shell_plugin_name = bt_common_shell_quote(plugin_name, false);
-               if (!shell_plugin_name) {
-                       goto end;
-               }
-       }
-
-       shell_comp_cls_name = bt_common_shell_quote(comp_cls_name, false);
-       if (!shell_comp_cls_name) {
-               goto end;
-       }
-
-       fprintf(fh, "'%s%s%s%s",
-               bt_common_color_bold(),
-               bt_common_color_fg_cyan(),
-               component_type_str(type),
-               bt_common_color_fg_default());
-
-       if (shell_plugin_name) {
-               fprintf(fh, ".%s%s%s",
-                       bt_common_color_fg_blue(),
-                       shell_plugin_name->str,
-                       bt_common_color_fg_default());
-       }
-
-       fprintf(fh, ".%s%s%s'",
-               bt_common_color_fg_yellow(),
-               shell_comp_cls_name->str,
-               bt_common_color_reset());
-
-end:
-       if (shell_plugin_name) {
-               g_string_free(shell_plugin_name, TRUE);
-       }
-
-       if (shell_comp_cls_name) {
-               g_string_free(shell_comp_cls_name, TRUE);
-       }
-}
-
 static
 void print_value(FILE *, const bt_value *, size_t);
 
@@ -330,13 +269,14 @@ end:
 }
 
 static
-bt_bool collect_map_keys(const char *key, const bt_value *object, void *data)
+bt_value_map_foreach_entry_const_func_status collect_map_keys(
+               const char *key, const bt_value *object, void *data)
 {
        GPtrArray *map_keys = data;
 
        g_ptr_array_add(map_keys, (gpointer *) key);
 
-       return BT_TRUE;
+       return BT_VALUE_MAP_FOREACH_ENTRY_CONST_FUNC_STATUS_OK;
 }
 
 static
@@ -367,31 +307,31 @@ void print_value_rec(FILE *fp, const bt_value *value, size_t indent)
        case BT_VALUE_TYPE_BOOL:
                bool_val = bt_value_bool_get(value);
                fprintf(fp, "%s%s%s%s\n", bt_common_color_bold(),
-                       bt_common_color_fg_cyan(), bool_val ? "yes" : "no",
+                       bt_common_color_fg_bright_cyan(), bool_val ? "yes" : "no",
                        bt_common_color_reset());
                break;
        case BT_VALUE_TYPE_UNSIGNED_INTEGER:
                uint_val = bt_value_integer_unsigned_get(value);
                fprintf(fp, "%s%s%" PRIu64 "%s\n", bt_common_color_bold(),
-                       bt_common_color_fg_red(), uint_val,
+                       bt_common_color_fg_bright_red(), uint_val,
                        bt_common_color_reset());
                break;
        case BT_VALUE_TYPE_SIGNED_INTEGER:
                int_val = bt_value_integer_signed_get(value);
                fprintf(fp, "%s%s%" PRId64 "%s\n", bt_common_color_bold(),
-                       bt_common_color_fg_red(), int_val,
+                       bt_common_color_fg_bright_red(), int_val,
                        bt_common_color_reset());
                break;
        case BT_VALUE_TYPE_REAL:
                dbl_val = bt_value_real_get(value);
                fprintf(fp, "%s%s%lf%s\n", bt_common_color_bold(),
-                       bt_common_color_fg_red(), dbl_val,
+                       bt_common_color_fg_bright_red(), dbl_val,
                        bt_common_color_reset());
                break;
        case BT_VALUE_TYPE_STRING:
                str_val = bt_value_string_get(value);
                fprintf(fp, "%s%s%s%s\n", bt_common_color_bold(),
-                       bt_common_color_fg_green(), str_val,
+                       bt_common_color_fg_bright_green(), str_val,
                        bt_common_color_reset());
                break;
        case BT_VALUE_TYPE_ARRAY:
@@ -501,11 +441,16 @@ void print_value(FILE *fp, const bt_value *value, size_t indent)
 static
 void print_bt_config_component(struct bt_config_component *bt_config_component)
 {
-       fprintf(stderr, "    ");
-       print_plugin_comp_cls_opt(stderr, bt_config_component->plugin_name->str,
+       gchar *comp_cls_str;
+
+       comp_cls_str = format_plugin_comp_cls_opt(
+               bt_config_component->plugin_name->str,
                bt_config_component->comp_cls_name->str,
-               bt_config_component->type);
-       fprintf(stderr, ":\n");
+               bt_config_component->type,
+               BT_COMMON_COLOR_WHEN_AUTO);
+       BT_ASSERT(comp_cls_str);
+
+       fprintf(stderr, "    %s:\n", comp_cls_str);
 
        if (bt_config_component->instance_name->len > 0) {
                fprintf(stderr, "      Name: %s\n",
@@ -514,6 +459,8 @@ void print_bt_config_component(struct bt_config_component *bt_config_component)
 
        fprintf(stderr, "      Parameters:\n");
        print_value(stderr, bt_config_component->params, 8);
+
+       g_free(comp_cls_str);
 }
 
 static
@@ -659,7 +606,7 @@ void print_plugin_info(const bt_plugin *plugin)
        version_avail = bt_plugin_get_version(plugin, &major, &minor,
                &patch, &extra);
        printf("%s%s%s%s:\n", bt_common_color_bold(),
-               bt_common_color_fg_blue(), plugin_name,
+               bt_common_color_fg_bright_blue(), plugin_name,
                bt_common_color_reset());
        if (path) {
                printf("  %sPath%s: %s\n", bt_common_color_bold(),
@@ -753,9 +700,13 @@ void print_component_class_help(const char *plugin_name,
                bt_component_class_get_help(comp_cls);
        bt_component_class_type type =
                bt_component_class_get_type(comp_cls);
+       gchar *comp_cls_str;
 
-       print_plugin_comp_cls_opt(stdout, plugin_name, comp_class_name, type);
-       printf("\n");
+       comp_cls_str = format_plugin_comp_cls_opt(plugin_name, comp_class_name,
+               type, BT_COMMON_COLOR_WHEN_AUTO);
+       BT_ASSERT(comp_cls_str);
+
+       printf("%s\n", comp_cls_str);
        printf("  %sDescription%s: %s\n", bt_common_color_bold(),
                bt_common_color_reset(),
                comp_class_description ? comp_class_description : "(None)");
@@ -763,6 +714,8 @@ void print_component_class_help(const char *plugin_name,
        if (comp_class_help) {
                printf("\n%s\n", comp_class_help);
        }
+
+       g_free(comp_cls_str);
 }
 
 static
@@ -842,6 +795,7 @@ void cmd_list_plugins_print_component_classes(const bt_plugin *plugin,
                spec_comp_cls_borrow_comp_cls_func_t spec_comp_cls_borrow_comp_cls_func)
 {
        uint64_t i;
+       gchar *comp_cls_str = NULL;
 
        if (count == 0) {
                printf("  %s%s component classes%s: (none)\n",
@@ -867,10 +821,11 @@ void cmd_list_plugins_print_component_classes(const bt_plugin *plugin,
                bt_component_class_type type =
                        bt_component_class_get_type(comp_class);
 
-               printf("    ");
-               print_plugin_comp_cls_opt(stdout,
-                       bt_plugin_get_name(plugin), comp_class_name,
-                       type);
+               g_free(comp_cls_str);
+               comp_cls_str = format_plugin_comp_cls_opt(
+                       bt_plugin_get_name(plugin), comp_class_name, type,
+                       BT_COMMON_COLOR_WHEN_AUTO);
+               printf("    %s", comp_cls_str);
 
                if (comp_class_description) {
                        printf(": %s", comp_class_description);
@@ -880,7 +835,7 @@ void cmd_list_plugins_print_component_classes(const bt_plugin *plugin,
        }
 
 end:
-       return;
+       g_free(comp_cls_str);
 }
 
 static
@@ -2639,10 +2594,11 @@ void print_error_causes(void)
        int64_t i;
        GString *folded = NULL;
        unsigned int columns;
+       gchar *comp_cls_str = NULL;
 
        if (!error || bt_error_get_cause_count(error) == 0) {
                fprintf(stderr, "%s%sUnknown command-line error.%s\n",
-                       bt_common_color_bold(), bt_common_color_fg_red(),
+                       bt_common_color_bold(), bt_common_color_fg_bright_red(),
                        bt_common_color_reset());
                goto end;
        }
@@ -2669,7 +2625,7 @@ void print_error_causes(void)
 
                /* Print prefix */
                fprintf(stderr, prefix_fmt,
-                       bt_common_color_bold(), bt_common_color_fg_red(),
+                       bt_common_color_bold(), bt_common_color_fg_bright_red(),
                        bt_common_color_reset());
 
                /* Print actor name */
@@ -2682,33 +2638,45 @@ void print_error_causes(void)
                                bt_common_color_reset());
                        break;
                case BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT:
-                       fprintf(stderr, "%s%s%s: ",
-                               bt_common_color_bold(),
-                               bt_error_cause_component_actor_get_component_name(cause),
-                               bt_common_color_reset());
-                       print_plugin_comp_cls_opt(stderr,
+                       comp_cls_str = format_plugin_comp_cls_opt(
                                bt_error_cause_component_actor_get_plugin_name(cause),
                                bt_error_cause_component_actor_get_component_class_name(cause),
-                               bt_error_cause_component_actor_get_component_class_type(cause));
+                               bt_error_cause_component_actor_get_component_class_type(cause),
+                               BT_COMMON_COLOR_WHEN_AUTO);
+                       BT_ASSERT(comp_cls_str);
+
+                       fprintf(stderr, "%s%s%s: %s",
+                               bt_common_color_bold(),
+                               bt_error_cause_component_actor_get_component_name(cause),
+                               bt_common_color_reset(),
+                               comp_cls_str);
                        break;
                case BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT_CLASS:
-                       print_plugin_comp_cls_opt(stderr,
+                       comp_cls_str = format_plugin_comp_cls_opt(
                                bt_error_cause_component_class_actor_get_plugin_name(cause),
                                bt_error_cause_component_class_actor_get_component_class_name(cause),
-                               bt_error_cause_component_class_actor_get_component_class_type(cause));
+                               bt_error_cause_component_class_actor_get_component_class_type(cause),
+                               BT_COMMON_COLOR_WHEN_AUTO);
+                       BT_ASSERT(comp_cls_str);
+
+                       fputs(comp_cls_str, stderr);
                        break;
                case BT_ERROR_CAUSE_ACTOR_TYPE_MESSAGE_ITERATOR:
-                       fprintf(stderr, "%s%s%s (%s%s%s): ",
+                       comp_cls_str = format_plugin_comp_cls_opt(
+                               bt_error_cause_message_iterator_actor_get_plugin_name(cause),
+                               bt_error_cause_message_iterator_actor_get_component_class_name(cause),
+                               bt_error_cause_message_iterator_actor_get_component_class_type(cause)
+                               ,BT_COMMON_COLOR_WHEN_AUTO);
+                       BT_ASSERT(comp_cls_str);
+
+                       fprintf(stderr, "%s%s%s (%s%s%s): %s",
                                bt_common_color_bold(),
                                bt_error_cause_message_iterator_actor_get_component_name(cause),
                                bt_common_color_reset(),
                                bt_common_color_bold(),
                                bt_error_cause_message_iterator_actor_get_component_output_port_name(cause),
-                               bt_common_color_reset());
-                       print_plugin_comp_cls_opt(stderr,
-                               bt_error_cause_message_iterator_actor_get_plugin_name(cause),
-                               bt_error_cause_message_iterator_actor_get_component_class_name(cause),
-                               bt_error_cause_message_iterator_actor_get_component_class_type(cause));
+                               bt_common_color_reset(),
+                               comp_cls_str);
                        break;
                default:
                        bt_common_abort();
@@ -2717,7 +2685,7 @@ void print_error_causes(void)
                /* Print file name and line number */
                fprintf(stderr, "] (%s%s%s%s:%s%" PRIu64 "%s)\n",
                        bt_common_color_bold(),
-                       bt_common_color_fg_magenta(),
+                       bt_common_color_fg_bright_magenta(),
                        bt_error_cause_get_file_name(cause),
                        bt_common_color_reset(),
                        bt_common_color_fg_green(),
@@ -2745,6 +2713,8 @@ end:
        if (error) {
                bt_error_release(error);
        }
+
+       g_free(comp_cls_str);
 }
 
 int main(int argc, const char **argv)
@@ -2837,7 +2807,6 @@ int main(int argc, const char **argv)
                break;
        case BT_CMD_STATUS_ERROR:
                retcode = 1;
-               print_error_causes();
                break;
        case BT_CMD_STATUS_INTERRUPTED:
                retcode = 2;
@@ -2848,6 +2817,10 @@ int main(int argc, const char **argv)
        }
 
 end:
+       if (retcode == 1) {
+               print_error_causes();
+       }
+
        BT_OBJECT_PUT_REF_AND_RESET(cfg);
        fini_loaded_plugins();
        bt_interrupter_put_ref(the_interrupter);
This page took 0.027096 seconds and 4 git commands to generate.