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