mirror of
https://github.com/systemd/systemd.git
synced 2024-12-22 17:35:35 +03:00
Merge pull request #15013 from systemd/systemctl-list-dependencies
systemctl list-dependencies: fix duplicate output and take multiple arguments
This commit is contained in:
commit
412be51fe8
@ -507,17 +507,17 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
|
||||
<varlistentry>
|
||||
<term>
|
||||
<command>list-dependencies</command>
|
||||
<optional><replaceable>UNIT</replaceable></optional>
|
||||
<optional><replaceable>UNIT</replaceable>...</optional>
|
||||
</term>
|
||||
|
||||
<listitem>
|
||||
<para>Shows units required and wanted by the specified
|
||||
unit. This recursively lists units following the
|
||||
units. This recursively lists units following the
|
||||
<varname>Requires=</varname>,
|
||||
<varname>Requisite=</varname>,
|
||||
<varname>ConsistsOf=</varname>,
|
||||
<varname>Wants=</varname>, <varname>BindsTo=</varname>
|
||||
dependencies. If no unit is specified,
|
||||
dependencies. If no units are specified,
|
||||
<filename>default.target</filename> is implied.</para>
|
||||
|
||||
<para>By default, only target units are recursively
|
||||
|
@ -785,6 +785,8 @@ static int list_dependencies_get_dependencies(sd_bus *bus, const char *name, cha
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to get properties of %s: %s", name, bus_error_message(&error, r));
|
||||
|
||||
strv_uniq(deps); /* Sometimes a unit might have multiple deps on the other unit,
|
||||
* but we still want to show it just once. */
|
||||
*ret = TAKE_PTR(deps);
|
||||
|
||||
return 0;
|
||||
@ -1786,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("");
|
||||
|
||||
return list_dependencies_one(bus, u, 0, &units, 0);
|
||||
puts(*u);
|
||||
r = list_dependencies_one(bus, *u, 0, &done, 0);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct machine_info {
|
||||
@ -7815,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"
|
||||
@ -9116,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 },
|
||||
|
Loading…
Reference in New Issue
Block a user