chiark / gitweb /
systemctl: replace the three job mode options by a single --job-mode= option
[elogind.git] / src / systemctl / systemctl.c
index bd443e98ce950f9c66e09c2cf5e2536fca33487a..23399c16c63cc38383e4402dec3820baabad185c 100644 (file)
@@ -137,6 +137,8 @@ static bool arg_plain = false;
 static int daemon_reload(sd_bus *bus, char **args);
 static int halt_now(enum action a);
 
+static int check_one_unit(sd_bus *bus, const char *name, const char *good_states, bool quiet);
+
 static void pager_open_if_enabled(void) {
 
         if (arg_no_pager)
@@ -1309,6 +1311,8 @@ static int list_dependencies_one(
         qsort_safe(deps, strv_length(deps), sizeof (char*), list_dependencies_compare);
 
         STRV_FOREACH(c, deps) {
+                int state;
+
                 if (strv_contains(u, *c)) {
                         if (!arg_plain) {
                                 r = list_dependencies_print("...", level + 1, (branches << 1) | (c[1] == NULL ? 0 : 1), 1);
@@ -1318,6 +1322,12 @@ static int list_dependencies_one(
                         continue;
                 }
 
+                state = check_one_unit(bus, *c, "activating\0active\0reloading\0", true);
+                if (state > 0)
+                        printf("%s%s%s", ansi_highlight_green(), draw_special_char(DRAW_BLACK_CIRCLE), ansi_highlight_off());
+                else
+                        printf("%s%s%s", ansi_highlight_red(), draw_special_char(DRAW_BLACK_CIRCLE), ansi_highlight_off());
+
                 r = list_dependencies_print(*c, level, branches, c[1] == NULL);
                 if (r < 0)
                         return r;
@@ -3644,6 +3654,8 @@ static int show_all(
         if (r < 0)
                 return r;
 
+        pager_open_if_enabled();
+
         c = (unsigned) r;
 
         qsort_safe(unit_infos, c, sizeof(UnitInfo), compare_unit_info);
@@ -3658,8 +3670,6 @@ static int show_all(
                 if (!p)
                         return log_oom();
 
-                printf("%s -> '%s'\n", u->id, p);
-
                 r = show_one(verb, bus, p, show_properties, new_line, ellipsized);
                 if (r != 0)
                         return r;
@@ -4661,14 +4671,10 @@ static int systemctl_help(void) {
                "  -a --all            Show all loaded units/properties, including dead/empty\n"
                "                      ones. To list all units installed on the system, use\n"
                "                      the 'list-unit-files' command instead.\n"
-               "     --reverse        Show reverse dependencies with 'list-dependencies'\n"
                "  -l --full           Don't ellipsize unit names on output\n"
-               "     --fail           When queueing a new job, fail if conflicting jobs are\n"
-               "                      pending\n"
-               "     --irreversible   When queueing a new job, make sure it cannot be implicitly\n"
-               "                      cancelled\n"
-               "     --ignore-dependencies\n"
-               "                      When queueing a new job, ignore all its dependencies\n"
+               "     --reverse        Show reverse dependencies with 'list-dependencies'\n"
+               "     --job-mode=MODE  Specify how to deal with already queued jobs, when\n"
+               "                      queueing a new job\n"
                "     --show-types     When showing sockets, explicitly show their type\n"
                "  -i --ignore-inhibitors\n"
                "                      When shutting down or sleeping, ignore inhibitors\n"
@@ -4870,7 +4876,8 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                 ARG_RUNTIME,
                 ARG_FORCE,
                 ARG_PLAIN,
-                ARG_STATE
+                ARG_STATE,
+                ARG_JOB_MODE
         };
 
         static const struct option options[] = {
@@ -4885,9 +4892,10 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                 { "show-types",          no_argument,       NULL, ARG_SHOW_TYPES          },
                 { "failed",              no_argument,       NULL, ARG_FAILED              }, /* compatibility only */
                 { "full",                no_argument,       NULL, 'l'                     },
-                { "fail",                no_argument,       NULL, ARG_FAIL                },
-                { "irreversible",        no_argument,       NULL, ARG_IRREVERSIBLE        },
-                { "ignore-dependencies", no_argument,       NULL, ARG_IGNORE_DEPENDENCIES },
+                { "job-mode",            required_argument, NULL, ARG_JOB_MODE            },
+                { "fail",                no_argument,       NULL, ARG_FAIL                }, /* compatibility only */
+                { "irreversible",        no_argument,       NULL, ARG_IRREVERSIBLE        }, /* compatibility only */
+                { "ignore-dependencies", no_argument,       NULL, ARG_IGNORE_DEPENDENCIES }, /* compatibility only */
                 { "ignore-inhibitors",   no_argument,       NULL, 'i'                     },
                 { "user",                no_argument,       NULL, ARG_USER                },
                 { "system",              no_argument,       NULL, ARG_SYSTEM              },
@@ -5025,6 +5033,10 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                         arg_show_types = true;
                         break;
 
+                case ARG_JOB_MODE:
+                        arg_job_mode = optarg;
+                        break;
+
                 case ARG_FAIL:
                         arg_job_mode = "fail";
                         break;