chiark / gitweb /
readahead: disable collect/replay during system updates
[elogind.git] / src / systemctl / systemctl.c
index 92c79d038f5b94d3ceb7442315b27783800b870e..66f4113eb223c91c7e05848778f56245f3e92ba7 100644 (file)
@@ -2158,7 +2158,10 @@ typedef struct UnitStatusInfo {
         const char *description;
         const char *following;
 
-        const char *path;
+        char **documentation;
+
+        const char *fragment_path;
+        const char *source_path;
         const char *default_control_group;
 
         const char *load_error;
@@ -2177,9 +2180,6 @@ typedef struct UnitStatusInfo {
         pid_t control_pid;
         const char *status_text;
         bool running:1;
-#ifdef HAVE_SYSV_COMPAT
-        bool is_sysv:1;
-#endif
 
         usec_t start_timestamp;
         usec_t exit_timestamp;
@@ -2212,6 +2212,7 @@ static void print_status_info(UnitStatusInfo *i) {
         usec_t timestamp;
         char since1[FORMAT_TIMESTAMP_PRETTY_MAX], *s1;
         char since2[FORMAT_TIMESTAMP_MAX], *s2;
+        const char *path;
 
         assert(i);
 
@@ -2234,12 +2235,14 @@ static void print_status_info(UnitStatusInfo *i) {
         } else
                 on = off = "";
 
+        path = i->source_path ? i->source_path : i->fragment_path;
+
         if (i->load_error)
                 printf("\t  Loaded: %s%s%s (Reason: %s)\n", on, strna(i->load_state), off, i->load_error);
-        else if (i->path && i->unit_file_state)
-                printf("\t  Loaded: %s%s%s (%s; %s)\n", on, strna(i->load_state), off, i->path, i->unit_file_state);
-        else if (i->path)
-                printf("\t  Loaded: %s%s%s (%s)\n", on, strna(i->load_state), off, i->path);
+        else if (path && i->unit_file_state)
+                printf("\t  Loaded: %s%s%s (%s; %s)\n", on, strna(i->load_state), off, path, i->unit_file_state);
+        else if (path)
+                printf("\t  Loaded: %s%s%s (%s)\n", on, strna(i->load_state), off, path);
         else
                 printf("\t  Loaded: %s%s%s\n", on, strna(i->load_state), off);
 
@@ -2303,6 +2306,19 @@ static void print_status_info(UnitStatusInfo *i) {
         if (i->what)
                 printf("\t    What: %s\n", i->what);
 
+        if (!strv_isempty(i->documentation)) {
+                char **t;
+                bool first = true;
+
+                STRV_FOREACH(t, i->documentation) {
+                        if (first) {
+                                printf("\t    Docs: %s\n", *t);
+                                first = false;
+                        } else
+                                printf("\t          %s\n", *t);
+                }
+        }
+
         if (i->accept)
                 printf("\tAccepted: %u; Connected: %u\n", i->n_accepted, i->n_connections);
 
@@ -2318,13 +2334,7 @@ static void print_status_info(UnitStatusInfo *i) {
                 printf("\t Process: %u %s=%s ", p->pid, p->name, strna(t));
                 free(t);
 
-#ifdef HAVE_SYSV_COMPAT
-                if (i->is_sysv)
-                        good = is_clean_exit_lsb(p->code, p->status);
-                else
-#endif
-                        good = is_clean_exit(p->code, p->status);
-
+                good = is_clean_exit_lsb(p->code, p->status);
                 if (!good) {
                         on = ansi_highlight_red(true);
                         off = ansi_highlight_red(false);
@@ -2338,11 +2348,8 @@ static void print_status_info(UnitStatusInfo *i) {
 
                         printf("status=%i", p->status);
 
-#ifdef HAVE_SYSV_COMPAT
-                        if ((c = exit_status_to_string(p->status, i->is_sysv ? EXIT_STATUS_LSB : EXIT_STATUS_SYSTEMD)))
-#else
-                        if ((c = exit_status_to_string(p->status, EXIT_STATUS_SYSTEMD)))
-#endif
+                        c = exit_status_to_string(p->status, EXIT_STATUS_SYSTEMD);
+                        if (c)
                                 printf("/%s", c);
 
                 } else
@@ -2381,11 +2388,8 @@ static void print_status_info(UnitStatusInfo *i) {
 
                                         printf("status=%i", i->exit_status);
 
-#ifdef HAVE_SYSV_COMPAT
-                                        if ((c = exit_status_to_string(i->exit_status, i->is_sysv ? EXIT_STATUS_LSB : EXIT_STATUS_SYSTEMD)))
-#else
-                                        if ((c = exit_status_to_string(i->exit_status, EXIT_STATUS_SYSTEMD)))
-#endif
+                                        c = exit_status_to_string(i->exit_status, EXIT_STATUS_SYSTEMD);
+                                        if (c)
                                                 printf("/%s", c);
 
                                 } else
@@ -2477,13 +2481,9 @@ static int status_property(const char *name, DBusMessageIter *iter, UnitStatusIn
                         else if (streq(name, "Description"))
                                 i->description = s;
                         else if (streq(name, "FragmentPath"))
-                                i->path = s;
-#ifdef HAVE_SYSV_COMPAT
-                        else if (streq(name, "SysVPath")) {
-                                i->is_sysv = true;
-                                i->path = s;
-                        }
-#endif
+                                i->fragment_path = s;
+                        else if (streq(name, "SourcePath"))
+                                i->source_path = s;
                         else if (streq(name, "DefaultControlGroup"))
                                 i->default_control_group = s;
                         else if (streq(name, "StatusText"))
@@ -2607,6 +2607,27 @@ static int status_property(const char *name, DBusMessageIter *iter, UnitStatusIn
 
                                 LIST_PREPEND(ExecStatusInfo, exec, i->exec, info);
 
+                                dbus_message_iter_next(&sub);
+                        }
+                } else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRING &&
+                           streq(name, "Documentation")) {
+
+                        DBusMessageIter sub;
+
+                        dbus_message_iter_recurse(iter, &sub);
+                        while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRING) {
+                                const char *s;
+                                char **l;
+
+                                dbus_message_iter_get_basic(&sub, &s);
+
+                                l = strv_append(i->documentation, s);
+                                if (!l)
+                                        return -ENOMEM;
+
+                                strv_free(i->documentation);
+                                i->documentation = l;
+
                                 dbus_message_iter_next(&sub);
                         }
                 }
@@ -2932,6 +2953,8 @@ static int show_one(const char *verb, DBusConnection *bus, const char *path, boo
         if (!show_properties)
                 print_status_info(&info);
 
+        strv_free(info.documentation);
+
         if (!streq_ptr(info.active_state, "active") &&
             !streq_ptr(info.active_state, "reloading") &&
             streq(verb, "status"))
@@ -3674,12 +3697,11 @@ static int enable_sysv_units(char **args) {
          * afterwards only the native units remain */
 
         zero(paths);
-        r = lookup_paths_init(&paths, MANAGER_SYSTEM, false);
+        r = lookup_paths_init(&paths, MANAGER_SYSTEM, false, NULL, NULL, NULL);
         if (r < 0)
                 return r;
 
         r = 0;
-
         for (f = 1; args[f]; f++) {
                 const char *name;
                 char *p;
@@ -4266,7 +4288,7 @@ static int shutdown_help(void) {
                "  -H --halt      Halt the machine\n"
                "  -P --poweroff  Power-off the machine\n"
                "  -r --reboot    Reboot the machine\n"
-               "  -h             Equivalent to --poweroff, overriden by --halt\n"
+               "  -h             Equivalent to --poweroff, overridden by --halt\n"
                "  -k             Don't halt/power-off/reboot, just send warnings\n"
                "     --no-wall   Don't send wall message before halt/power-off/reboot\n"
                "  -c             Cancel a pending shutdown\n",