return r;
}
-static int show_one_by_pid(
- const char *verb,
+static int get_unit_dbus_path_by_pid(
sd_bus *bus,
uint32_t pid,
- bool *new_line,
- bool *ellipsized) {
+ char **unit) {
_cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
_cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
- const char *path = NULL;
int r;
r = sd_bus_call_method(
return r;
}
- r = sd_bus_message_read(reply, "o", &path);
+ r = sd_bus_message_read(reply, "o", unit);
if (r < 0)
return bus_log_parse_error(r);
- return show_one(verb, bus, path, false, new_line, ellipsized);
+ return 0;
}
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);
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;
ret = show_all(args[0], bus, false, &new_line, &ellipsized);
else
STRV_FOREACH(name, args+1) {
+ _cleanup_free_ char *unit = NULL;
uint32_t id;
if (safe_atou32(*name, &id) < 0) {
- _cleanup_free_ char *p = NULL, *n = NULL;
+ _cleanup_free_ char *n = NULL;
/* Interpret as unit name */
n = unit_name_mangle(*name);
if (!n)
return log_oom();
- p = unit_dbus_path_from_name(n);
- if (!p)
+ unit = unit_dbus_path_from_name(n);
+ if (!unit)
return log_oom();
- r = show_one(args[0], bus, p, show_properties, &new_line, &ellipsized);
- if (r != 0)
- ret = r;
-
} else if (show_properties) {
- _cleanup_free_ char *p = NULL;
-
/* Interpret as job id */
- if (asprintf(&p, "/org/freedesktop/systemd1/job/%u", id) < 0)
+ if (asprintf(&unit, "/org/freedesktop/systemd1/job/%u", id) < 0)
return log_oom();
- r = show_one(args[0], bus, p, show_properties, &new_line, &ellipsized);
- if (r != 0)
- ret = r;
-
} else {
/* Interpret as PID */
- r = show_one_by_pid(args[0], bus, id, &new_line, &ellipsized);
- if (r != 0)
+ r = get_unit_dbus_path_by_pid(bus, id, &unit);
+ if (r < 0)
ret = r;
}
+
+ show_one(args[0], bus, unit, show_properties, &new_line, &ellipsized);
}
if (ellipsized && !arg_quiet)
return bus_log_parse_error(r);
}
- r = deserialize_and_dump_unit_file_changes(m);
+ r = deserialize_and_dump_unit_file_changes(reply);
if (r < 0)
return r;
" -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"
ARG_RUNTIME,
ARG_FORCE,
ARG_PLAIN,
- ARG_STATE
+ ARG_STATE,
+ ARG_JOB_MODE
};
static const struct option options[] = {
{ "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 },
arg_show_types = true;
break;
+ case ARG_JOB_MODE:
+ arg_job_mode = optarg;
+ break;
+
case ARG_FAIL:
arg_job_mode = "fail";
break;