From a9f2f486f3d1dd1cd2a58cd384b0e88970e2fda9 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 17 Mar 2023 09:53:23 +0100 Subject: [PATCH 1/5] systemctl: fix indentation of circular deps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We're still at level `level` here. Before: b.target ○ ├─a.target │ └─... ● └─paths.target After: b.target ○ ├─a.target │ └─... ● └─paths.target Fixes #26052. --- src/systemctl/systemctl-list-dependencies.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/systemctl/systemctl-list-dependencies.c b/src/systemctl/systemctl-list-dependencies.c index 6878954268..e0e5ca9ef8 100644 --- a/src/systemctl/systemctl-list-dependencies.c +++ b/src/systemctl/systemctl-list-dependencies.c @@ -86,7 +86,7 @@ static int list_dependencies_one( if (strv_contains(*units, *c)) { if (!arg_plain) { printf(" "); - r = list_dependencies_print("...", level + 1, (branches << 1) | (c[1] == NULL ? 0 : 1), /* last = */ true); + r = list_dependencies_print("...", level, branches, /* last = */ true); if (r < 0) return r; } From 5a4711e4895e3f7091e0e4da654412232484a5ec Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 17 Mar 2023 09:58:13 +0100 Subject: [PATCH 2/5] systemctl: fix formatting of circular dep. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before: a.target ○ └─b.target └─... ● └─paths.target After: a.target ○ └─b.target ├─... ● └─paths.target --- src/systemctl/systemctl-list-dependencies.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/systemctl/systemctl-list-dependencies.c b/src/systemctl/systemctl-list-dependencies.c index e0e5ca9ef8..95949ab763 100644 --- a/src/systemctl/systemctl-list-dependencies.c +++ b/src/systemctl/systemctl-list-dependencies.c @@ -86,7 +86,7 @@ static int list_dependencies_one( if (strv_contains(*units, *c)) { if (!arg_plain) { printf(" "); - r = list_dependencies_print("...", level, branches, /* last = */ true); + r = list_dependencies_print("...", level, branches, /* last = */ c[1] == NULL); if (r < 0) return r; } From bb7c4a93ea1167b1294f86307d712d45655e9632 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 17 Mar 2023 10:11:38 +0100 Subject: [PATCH 3/5] systemctl: always print circular deps. at the end MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before: a.target ○ └─b.target ├─... ● └─paths.target After: a.target ○ └─b.target ● ├─paths.target └─... --- src/systemctl/systemctl-list-dependencies.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/systemctl/systemctl-list-dependencies.c b/src/systemctl/systemctl-list-dependencies.c index 95949ab763..1da5cf5075 100644 --- a/src/systemctl/systemctl-list-dependencies.c +++ b/src/systemctl/systemctl-list-dependencies.c @@ -64,6 +64,7 @@ static int list_dependencies_one( _cleanup_strv_free_ char **deps = NULL; int r; + bool circular = false; assert(bus); assert(name); @@ -84,12 +85,7 @@ static int list_dependencies_one( UnitActiveState active_state; if (strv_contains(*units, *c)) { - if (!arg_plain) { - printf(" "); - r = list_dependencies_print("...", level, branches, /* last = */ c[1] == NULL); - if (r < 0) - return r; - } + circular = true; continue; } @@ -138,7 +134,7 @@ static int list_dependencies_one( printf("%s%s%s ", on, special_glyph(unit_active_state_to_glyph(active_state)), ansi_normal()); } - r = list_dependencies_print(*c, level, branches, c[1] == NULL); + r = list_dependencies_print(*c, level, branches, /* last = */ c[1] == NULL && !circular); if (r < 0) return r; @@ -149,6 +145,13 @@ static int list_dependencies_one( } } + if (circular && !arg_plain) { + printf(" "); + r = list_dependencies_print("...", level, branches, /* last = */ true); + if (r < 0) + return r; + } + if (!arg_plain) strv_remove(*units, name); From c6b9baaa5bae96e1c7df6376154147f6570fa563 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 17 Mar 2023 10:20:48 +0100 Subject: [PATCH 4/5] systemctl: drop stray empty line --- src/systemctl/systemctl-list-dependencies.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/systemctl/systemctl-list-dependencies.c b/src/systemctl/systemctl-list-dependencies.c index 1da5cf5075..7953943223 100644 --- a/src/systemctl/systemctl-list-dependencies.c +++ b/src/systemctl/systemctl-list-dependencies.c @@ -14,7 +14,6 @@ static int list_dependencies_print(const char *name, int level, unsigned branche size_t len = 0; if (!arg_plain) { - for (int i = level - 1; i >= 0; i--) { len += 2; if (len > max_len - 3 && !arg_full) { From 7a26ed2ae2afc06b8ac6e3ccc280bbc286e28a8c Mon Sep 17 00:00:00 2001 From: David Tardon Date: Fri, 17 Mar 2023 10:43:54 +0100 Subject: [PATCH 5/5] systemctl: move printing of state to the printing func. No functional change, just refactoring. --- src/systemctl/systemctl-list-dependencies.c | 57 ++++++++++----------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/src/systemctl/systemctl-list-dependencies.c b/src/systemctl/systemctl-list-dependencies.c index 7953943223..a9121f1035 100644 --- a/src/systemctl/systemctl-list-dependencies.c +++ b/src/systemctl/systemctl-list-dependencies.c @@ -8,11 +8,36 @@ #include "systemctl.h" #include "terminal-util.h" -static int list_dependencies_print(const char *name, int level, unsigned branches, bool last) { +static int list_dependencies_print(const char *name, UnitActiveState state, int level, unsigned branches, bool last) { _cleanup_free_ char *n = NULL; size_t max_len = MAX(columns(),20u); size_t len = 0; + if (arg_plain || state == _UNIT_ACTIVE_STATE_INVALID) + printf(" "); + else { + const char *on; + + switch (state) { + case UNIT_ACTIVE: + case UNIT_RELOADING: + case UNIT_ACTIVATING: + on = ansi_highlight_green(); + break; + + case UNIT_INACTIVE: + case UNIT_DEACTIVATING: + on = ansi_normal(); + break; + + default: + on = ansi_highlight_red(); + break; + } + + printf("%s%s%s ", on, special_glyph(unit_active_state_to_glyph(state)), ansi_normal()); + } + if (!arg_plain) { for (int i = level - 1; i >= 0; i--) { len += 2; @@ -108,32 +133,7 @@ static int list_dependencies_one( continue; } - if (arg_plain) - printf(" "); - else { - const char *on; - - switch (active_state) { - case UNIT_ACTIVE: - case UNIT_RELOADING: - case UNIT_ACTIVATING: - on = ansi_highlight_green(); - break; - - case UNIT_INACTIVE: - case UNIT_DEACTIVATING: - on = ansi_normal(); - break; - - default: - on = ansi_highlight_red(); - break; - } - - printf("%s%s%s ", on, special_glyph(unit_active_state_to_glyph(active_state)), ansi_normal()); - } - - r = list_dependencies_print(*c, level, branches, /* last = */ c[1] == NULL && !circular); + r = list_dependencies_print(*c, active_state, level, branches, /* last = */ c[1] == NULL && !circular); if (r < 0) return r; @@ -145,8 +145,7 @@ static int list_dependencies_one( } if (circular && !arg_plain) { - printf(" "); - r = list_dependencies_print("...", level, branches, /* last = */ true); + r = list_dependencies_print("...", _UNIT_ACTIVE_STATE_INVALID, level, branches, /* last = */ true); if (r < 0) return r; }