From 6ecb6cec66739d733e95302031998f517261380c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 13 Feb 2015 18:38:33 -0500 Subject: [PATCH 1/1] analyze: change behaviour of combined --to/from--pattern We would require a match against all three: patterns specified with --to, with --from, and as positional arguments to show an edge. This does not seem useful. Let instead the positional args behave like they were specified in both --to and --from, which is fairly intuitive and should be more useful. --- man/systemd-analyze.xml | 23 ++++++++++++++++------- src/analyze/analyze.c | 20 +++++++++++++++----- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/man/systemd-analyze.xml b/man/systemd-analyze.xml index 61315a0d8..1ff81d3d5 100644 --- a/man/systemd-analyze.xml +++ b/man/systemd-analyze.xml @@ -227,13 +227,22 @@ When used in conjunction with the dot command (see above), this selects which - relationships are shown in the dependency graph. They both - require + relationships are shown in the dependency graph. Both options + require a glob7 - patterns as arguments, which are matched against left-hand and - right-hand, respectively, nodes of a relationship. Each of - these can be used more than once, which means a unit name must - match one of the given values. + pattern as an argument, which will be matched against the + left-hand and the right-hand, respectively, nodes of a + relationship. + + Each of these can be used more than once, in which case + the unit name must match one of the values. When tests for + both sides of the relation are present, a relation must pass + both tests to be shown. When patterns are also specified as + positional arguments, they must match at least one side of the + relation. In other words, patterns specified with those two + options will trim the list of edges matched by the positional + arguments, if any are given, and fully determine the list of + edges shown otherwise. @@ -252,7 +261,7 @@ Do not invoke man to verify the existence of - man pages listen in Documentation=. + man pages listed in Documentation=. diff --git a/src/analyze/analyze.c b/src/analyze/analyze.c index 672a0d797..1e2a6bbf2 100644 --- a/src/analyze/analyze.c +++ b/src/analyze/analyze.c @@ -974,24 +974,34 @@ static int graph_one_property(sd_bus *bus, const UnitInfo *u, const char* prop, _cleanup_strv_free_ char **units = NULL; char **unit; int r; + bool match_patterns; assert(u); assert(prop); assert(color); + match_patterns = strv_fnmatch(u->id, patterns, 0); + + if (!strv_isempty(arg_dot_from_patterns) && + !match_patterns && + !strv_fnmatch(u->id, arg_dot_from_patterns, 0)) + return 0; + r = bus_get_unit_property_strv(bus, u->unit_path, prop, &units); if (r < 0) return r; STRV_FOREACH(unit, units) { - if (!strv_fnmatch_or_empty(u->id, arg_dot_from_patterns, 0)) - continue; + bool match_patterns2; + + match_patterns2 = strv_fnmatch(*unit, patterns, 0); - if (!strv_fnmatch_or_empty(*unit, arg_dot_to_patterns, 0)) + if (!strv_isempty(arg_dot_to_patterns) && + !match_patterns2 && + !strv_fnmatch(*unit, arg_dot_to_patterns, 0)) continue; - if (!strv_fnmatch_or_empty(u->id, patterns, 0) && - !strv_fnmatch_or_empty(*unit, patterns, 0)) + if (!strv_isempty(patterns) && !match_patterns && !match_patterns2) continue; printf("\t\"%s\"->\"%s\" [color=\"%s\"];\n", u->id, *unit, color); -- 2.30.2