summaryrefslogtreecommitdiffstats
path: root/src/systemctl
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2020-03-04 09:55:29 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2020-03-05 08:27:58 +0100
commit94c3a838da69eb9add8867303c5ef7cc329f7c45 (patch)
tree79b91fbea4a40da8560ccb829c52b2aaaa9bda02 /src/systemctl
parentsystemctl: do not print items twice in list-dependencies (diff)
downloadsystemd-94c3a838da69eb9add8867303c5ef7cc329f7c45.tar.xz
systemd-94c3a838da69eb9add8867303c5ef7cc329f7c45.zip
systemctl: make list-dependencies take multiple arguments
Other similar commands do, no reason not to do this here too.
Diffstat (limited to 'src/systemctl')
-rw-r--r--src/systemctl/systemctl.c45
1 files changed, 27 insertions, 18 deletions
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index e02677d541..146e2263f3 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -1788,30 +1788,39 @@ static int list_dependencies_one(
}
static int list_dependencies(int argc, char *argv[], void *userdata) {
- _cleanup_strv_free_ char **units = NULL;
- _cleanup_free_ char *unit = NULL;
- const char *u;
+ _cleanup_strv_free_ char **units = NULL, **done = NULL;
+ char **u, **patterns;
sd_bus *bus;
int r;
- if (argv[1]) {
- r = unit_name_mangle(argv[1], arg_quiet ? 0 : UNIT_NAME_MANGLE_WARN, &unit);
- if (r < 0)
- return log_error_errno(r, "Failed to mangle unit name: %m");
-
- u = unit;
- } else
- u = SPECIAL_DEFAULT_TARGET;
-
r = acquire_bus(BUS_MANAGER, &bus);
if (r < 0)
return r;
+ patterns = strv_skip(argv, 1);
+ if (strv_isempty(patterns)) {
+ units = strv_new(SPECIAL_DEFAULT_TARGET);
+ if (!units)
+ return log_oom();
+ } else {
+ r = expand_names(bus, patterns, NULL, &units, NULL);
+ if (r < 0)
+ return log_error_errno(r, "Failed to expand names: %m");
+ }
+
(void) pager_open(arg_pager_flags);
- puts(u);
+ STRV_FOREACH(u, units) {
+ if (u != units)
+ puts("");
+
+ puts(*u);
+ r = list_dependencies_one(bus, *u, 0, &done, 0);
+ if (r < 0)
+ return r;
+ }
- return list_dependencies_one(bus, u, 0, &units, 0);
+ return 0;
}
struct machine_info {
@@ -7817,9 +7826,9 @@ static int systemctl_help(void) {
" help PATTERN...|PID... Show manual for one or more units\n"
" reset-failed [PATTERN...] Reset failed state for all, one, or more\n"
" units\n"
- " list-dependencies [UNIT] Recursively show units which are required\n"
- " or wanted by this unit or by which this\n"
- " unit is required or wanted"
+ " list-dependencies [UNIT...] Recursively show units which are required\n"
+ " or wanted by the units or by which those\n"
+ " units are required or wanted"
"\n%3$sUnit File Commands:%4$s\n"
" list-unit-files [PATTERN...] List installed unit files\n"
" enable [UNIT...|PATH...] Enable one or more unit files\n"
@@ -9118,7 +9127,7 @@ static int systemctl_main(int argc, char *argv[]) {
{ "link", 2, VERB_ANY, 0, enable_unit },
{ "revert", 2, VERB_ANY, 0, enable_unit },
{ "switch-root", 2, VERB_ANY, VERB_ONLINE_ONLY, switch_root },
- { "list-dependencies", VERB_ANY, 2, VERB_ONLINE_ONLY, list_dependencies },
+ { "list-dependencies", VERB_ANY, VERB_ANY, VERB_ONLINE_ONLY, list_dependencies },
{ "set-default", 2, 2, 0, set_default },
{ "get-default", VERB_ANY, 1, 0, get_default },
{ "set-property", 3, VERB_ANY, VERB_ONLINE_ONLY, set_property },