diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-03-04 09:55:29 +0100 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-03-05 08:27:58 +0100 |
commit | 94c3a838da69eb9add8867303c5ef7cc329f7c45 (patch) | |
tree | 79b91fbea4a40da8560ccb829c52b2aaaa9bda02 /src/systemctl | |
parent | systemctl: do not print items twice in list-dependencies (diff) | |
download | systemd-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.c | 45 |
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 }, |