chiark / gitweb /
systemctl: indicate in list-dependencies whether a unit is already running
authorLennart Poettering <lennart@poettering.net>
Fri, 22 Nov 2013 18:18:52 +0000 (19:18 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 22 Nov 2013 18:27:56 +0000 (19:27 +0100)
src/shared/util.h
src/systemctl/systemctl.c

index 00d2364c611d13a5fdc062081da9650c9e69bee1..e46438c92db81da75efa9b970ff8d365791b6f43 100644 (file)
@@ -395,6 +395,10 @@ static inline const char *ansi_highlight_green(void) {
         return on_tty() ? ANSI_HIGHLIGHT_GREEN_ON : "";
 }
 
+static inline const char *ansi_highlight_yellow(void) {
+        return on_tty() ? ANSI_HIGHLIGHT_YELLOW_ON : "";
+}
+
 static inline const char *ansi_highlight_off(void) {
         return on_tty() ? ANSI_HIGHLIGHT_OFF : "";
 }
index bd443e98ce950f9c66e09c2cf5e2536fca33487a..fa6447607a24b0a7c52d8c75e1ca8d356a7ed717 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;