Jakub Filak c83982
From cd698516de709ee3d8480fd7990a8082dffddb45 Mon Sep 17 00:00:00 2001
Jakub Filak c83982
From: Jakub Filak <jfilak@redhat.com>
Jakub Filak c83982
Date: Wed, 8 Jul 2015 17:04:41 +0200
Jakub Filak c83982
Subject: [PATCH] cli: use internal command impl in the command process
Jakub Filak c83982
Jakub Filak c83982
It did not seem to be a good idea to add wrappers for the internal
Jakub Filak c83982
commands, because the wrappers would be one line functions. Now, we need
Jakub Filak c83982
to do more sophisticated processing (authenticate, chown), so adding the
Jakub Filak c83982
wrappers is the best choice to provide the same functionality in the
Jakub Filak c83982
command process.
Jakub Filak c83982
Jakub Filak c83982
Signed-off-by: Jakub Filak <jfilak@redhat.com>
Jakub Filak c83982
---
Jakub Filak c83982
 src/cli/builtin-cmd.h |  3 +++
Jakub Filak c83982
 src/cli/list.c        |  8 ++++++-
Jakub Filak c83982
 src/cli/process.c     | 16 ++++---------
Jakub Filak c83982
 src/cli/report.c      | 65 +++++++++++++++++++++++++++------------------------
Jakub Filak c83982
 src/cli/rm.c          |  7 +++++-
Jakub Filak c83982
 5 files changed, 56 insertions(+), 43 deletions(-)
Jakub Filak c83982
Jakub Filak c83982
diff --git a/src/cli/builtin-cmd.h b/src/cli/builtin-cmd.h
Jakub Filak c83982
index bc80479..c6cd691 100644
Jakub Filak c83982
--- a/src/cli/builtin-cmd.h
Jakub Filak c83982
+++ b/src/cli/builtin-cmd.h
Jakub Filak c83982
@@ -22,8 +22,11 @@
Jakub Filak c83982
 
Jakub Filak c83982
 extern int cmd_list(int argc, const char **argv);
Jakub Filak c83982
 extern int cmd_remove(int argc, const char **argv);
Jakub Filak c83982
+extern int _cmd_remove(const char **dirs_strv);
Jakub Filak c83982
 extern int cmd_report(int argc, const char **argv);
Jakub Filak c83982
+extern int _cmd_report(const char **dirs_strv, int remove);
Jakub Filak c83982
 extern int cmd_info(int argc, const char **argv);
Jakub Filak c83982
+extern int _cmd_info(problem_data_t *problem_data, int detailed, int text_size);
Jakub Filak c83982
 extern int cmd_status(int argc, const char **argv);
Jakub Filak c83982
 extern int cmd_process(int argc, const char **argv);
Jakub Filak c83982
 
Jakub Filak c83982
diff --git a/src/cli/list.c b/src/cli/list.c
Jakub Filak c83982
index e8ec37b..68dda47 100644
Jakub Filak c83982
--- a/src/cli/list.c
Jakub Filak c83982
+++ b/src/cli/list.c
Jakub Filak c83982
@@ -168,6 +168,12 @@ int cmd_list(int argc, const char **argv)
Jakub Filak c83982
     return 0;
Jakub Filak c83982
 }
Jakub Filak c83982
 
Jakub Filak c83982
+int _cmd_info(problem_data_t *problem_data, int detailed, int text_size)
Jakub Filak c83982
+{
Jakub Filak c83982
+    print_crash(problem_data, detailed, text_size);
Jakub Filak c83982
+    return 0;
Jakub Filak c83982
+}
Jakub Filak c83982
+
Jakub Filak c83982
 int cmd_info(int argc, const char **argv)
Jakub Filak c83982
 {
Jakub Filak c83982
     const char *program_usage_string = _(
Jakub Filak c83982
@@ -205,7 +211,7 @@ int cmd_info(int argc, const char **argv)
Jakub Filak c83982
             continue;
Jakub Filak c83982
         }
Jakub Filak c83982
 
Jakub Filak c83982
-        print_crash(problem, opt_detailed, text_size);
Jakub Filak c83982
+        _cmd_info(problem, opt_detailed, text_size);
Jakub Filak c83982
         problem_data_free(problem);
Jakub Filak c83982
         if (*argv)
Jakub Filak c83982
             printf("\n");
Jakub Filak c83982
diff --git a/src/cli/process.c b/src/cli/process.c
Jakub Filak c83982
index 39462f9..401ef60 100644
Jakub Filak c83982
--- a/src/cli/process.c
Jakub Filak c83982
+++ b/src/cli/process.c
Jakub Filak c83982
@@ -68,28 +68,22 @@ static int process_one_crash(problem_data_t *problem_data)
Jakub Filak c83982
         if(strcmp(action, "rm") == 0 || strcmp(action, "remove") == 0 )
Jakub Filak c83982
         {
Jakub Filak c83982
             log(_("Deleting '%s'"), dir_name);
Jakub Filak c83982
-            delete_dump_dir_possibly_using_abrtd(dir_name);
Jakub Filak c83982
+            const char *dirs_strv[] = {dir_name, NULL};
Jakub Filak c83982
+            _cmd_remove(dirs_strv);
Jakub Filak c83982
 
Jakub Filak c83982
             ret_val = ACT_REMOVE;
Jakub Filak c83982
         }
Jakub Filak c83982
         else if (not_reportable == NULL && (strcmp(action, "e") == 0 || strcmp(action, "report") == 0))
Jakub Filak c83982
         {
Jakub Filak c83982
             log(_("Reporting '%s'"), dir_name);
Jakub Filak c83982
-            report_problem_in_dir(dir_name,
Jakub Filak c83982
-                                     LIBREPORT_WAIT
Jakub Filak c83982
-                                   | LIBREPORT_RUN_CLI);
Jakub Filak c83982
+            const char *dirs_strv[] = {dir_name, NULL};
Jakub Filak c83982
+            _cmd_report(dirs_strv, /*do not delete*/0);
Jakub Filak c83982
 
Jakub Filak c83982
             ret_val = ACT_REPORT;
Jakub Filak c83982
         }
Jakub Filak c83982
         else if (strcmp(action, "i") == 0 || strcmp(action, "info") == 0)
Jakub Filak c83982
         {
Jakub Filak c83982
-            char *desc = make_description(problem_data,
Jakub Filak c83982
-                                    /*names_to_skip:*/ NULL,
Jakub Filak c83982
-                                    /*max_text_size:*/ CD_TEXT_ATT_SIZE_BZ,
Jakub Filak c83982
-                                    MAKEDESC_SHOW_FILES | MAKEDESC_SHOW_MULTILINE);
Jakub Filak c83982
-
Jakub Filak c83982
-            fputs(desc, stdout);
Jakub Filak c83982
-            free(desc);
Jakub Filak c83982
+            _cmd_info(problem_data, /*detailed*/1, CD_TEXT_ATT_SIZE_BZ);
Jakub Filak c83982
 
Jakub Filak c83982
             ret_val = ACT_INFO;
Jakub Filak c83982
         }
Jakub Filak c83982
diff --git a/src/cli/report.c b/src/cli/report.c
Jakub Filak c83982
index 194f7c9..19b4c51 100644
Jakub Filak c83982
--- a/src/cli/report.c
Jakub Filak c83982
+++ b/src/cli/report.c
Jakub Filak c83982
@@ -22,38 +22,12 @@
Jakub Filak c83982
 #include "abrt-cli-core.h"
Jakub Filak c83982
 #include "builtin-cmd.h"
Jakub Filak c83982
 
Jakub Filak c83982
-int cmd_report(int argc, const char **argv)
Jakub Filak c83982
+int _cmd_report(const char **dirs_strv, int remove)
Jakub Filak c83982
 {
Jakub Filak c83982
-    const char *program_usage_string = _(
Jakub Filak c83982
-        "& report [options] DIR..."
Jakub Filak c83982
-    );
Jakub Filak c83982
-
Jakub Filak c83982
-    enum {
Jakub Filak c83982
-        OPT_v = 1 << 0,
Jakub Filak c83982
-        OPT_d = 1 << 1,
Jakub Filak c83982
-    };
Jakub Filak c83982
-
Jakub Filak c83982
-    struct options program_options[] = {
Jakub Filak c83982
-        OPT__VERBOSE(&g_verbose),
Jakub Filak c83982
-        OPT_BOOL('d', "delete", NULL, _("Remove PROBLEM_DIR after reporting")),
Jakub Filak c83982
-        OPT_END()
Jakub Filak c83982
-    };
Jakub Filak c83982
-
Jakub Filak c83982
-    unsigned opts = parse_opts(argc, (char **)argv, program_options, program_usage_string);
Jakub Filak c83982
-    argv += optind;
Jakub Filak c83982
-
Jakub Filak c83982
-    if (!argv[0])
Jakub Filak c83982
-        show_usage_and_die(program_usage_string, program_options);
Jakub Filak c83982
-
Jakub Filak c83982
-    export_abrt_envvars(/*prog_prefix:*/ 0);
Jakub Filak c83982
-
Jakub Filak c83982
-    load_abrt_conf();
Jakub Filak c83982
-    free_abrt_conf_data();
Jakub Filak c83982
-
Jakub Filak c83982
     int ret = 0;
Jakub Filak c83982
-    while (*argv)
Jakub Filak c83982
+    while (*dirs_strv)
Jakub Filak c83982
     {
Jakub Filak c83982
-        const char *dir_name = *argv++;
Jakub Filak c83982
+        const char *dir_name = *dirs_strv++;
Jakub Filak c83982
         char *const real_problem_id = hash2dirname_if_necessary(dir_name);
Jakub Filak c83982
         if (real_problem_id == NULL)
Jakub Filak c83982
         {
Jakub Filak c83982
@@ -75,7 +49,7 @@ int cmd_report(int argc, const char **argv)
Jakub Filak c83982
                                            | LIBREPORT_RUN_CLI);
Jakub Filak c83982
 
Jakub Filak c83982
         /* the problem was successfully reported and option is -d */
Jakub Filak c83982
-        if((opts & OPT_d) && (status == 0 || status == EXIT_STOP_EVENT_RUN))
Jakub Filak c83982
+        if(remove && (status == 0 || status == EXIT_STOP_EVENT_RUN))
Jakub Filak c83982
         {
Jakub Filak c83982
             log(_("Deleting '%s'"), real_problem_id);
Jakub Filak c83982
             delete_dump_dir_possibly_using_abrtd(real_problem_id);
Jakub Filak c83982
@@ -89,3 +63,34 @@ int cmd_report(int argc, const char **argv)
Jakub Filak c83982
 
Jakub Filak c83982
     return ret;
Jakub Filak c83982
 }
Jakub Filak c83982
+
Jakub Filak c83982
+int cmd_report(int argc, const char **argv)
Jakub Filak c83982
+{
Jakub Filak c83982
+    const char *program_usage_string = _(
Jakub Filak c83982
+        "& report [options] DIR..."
Jakub Filak c83982
+    );
Jakub Filak c83982
+
Jakub Filak c83982
+    enum {
Jakub Filak c83982
+        OPT_v = 1 << 0,
Jakub Filak c83982
+        OPT_d = 1 << 1,
Jakub Filak c83982
+    };
Jakub Filak c83982
+
Jakub Filak c83982
+    struct options program_options[] = {
Jakub Filak c83982
+        OPT__VERBOSE(&g_verbose),
Jakub Filak c83982
+        OPT_BOOL('d', "delete", NULL, _("Remove PROBLEM_DIR after reporting")),
Jakub Filak c83982
+        OPT_END()
Jakub Filak c83982
+    };
Jakub Filak c83982
+
Jakub Filak c83982
+    unsigned opts = parse_opts(argc, (char **)argv, program_options, program_usage_string);
Jakub Filak c83982
+    argv += optind;
Jakub Filak c83982
+
Jakub Filak c83982
+    if (!argv[0])
Jakub Filak c83982
+        show_usage_and_die(program_usage_string, program_options);
Jakub Filak c83982
+
Jakub Filak c83982
+    export_abrt_envvars(/*prog_prefix:*/ 0);
Jakub Filak c83982
+
Jakub Filak c83982
+    load_abrt_conf();
Jakub Filak c83982
+    free_abrt_conf_data();
Jakub Filak c83982
+
Jakub Filak c83982
+    return _cmd_report(argv, opts & OPT_d);
Jakub Filak c83982
+}
Jakub Filak c83982
diff --git a/src/cli/rm.c b/src/cli/rm.c
Jakub Filak c83982
index 37d50e2..95ae097 100644
Jakub Filak c83982
--- a/src/cli/rm.c
Jakub Filak c83982
+++ b/src/cli/rm.c
Jakub Filak c83982
@@ -52,6 +52,11 @@ static int remove_using_abrtd_or_fs(const char **dirs_strv)
Jakub Filak c83982
     return errs;
Jakub Filak c83982
 }
Jakub Filak c83982
 
Jakub Filak c83982
+int _cmd_remove(const char **dirs_strv)
Jakub Filak c83982
+{
Jakub Filak c83982
+    return (g_cli_authenticate ? remove_using_dbus : remove_using_abrtd_or_fs)(dirs_strv);
Jakub Filak c83982
+}
Jakub Filak c83982
+
Jakub Filak c83982
 int cmd_remove(int argc, const char **argv)
Jakub Filak c83982
 {
Jakub Filak c83982
     const char *program_usage_string = _(
Jakub Filak c83982
@@ -69,5 +74,5 @@ int cmd_remove(int argc, const char **argv)
Jakub Filak c83982
     if (!argv[0])
Jakub Filak c83982
         show_usage_and_die(program_usage_string, program_options);
Jakub Filak c83982
 
Jakub Filak c83982
-    return (g_cli_authenticate ? remove_using_dbus : remove_using_abrtd_or_fs)(argv);
Jakub Filak c83982
+    return _cmd_remove(argv);
Jakub Filak c83982
 }
Jakub Filak c83982
-- 
Jakub Filak c83982
2.4.3
Jakub Filak c83982