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.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2015-02-13 18:38:33 -05:00
parent ee5de57b9d
commit 6ecb6cec66
2 changed files with 32 additions and 13 deletions

View file

@ -227,13 +227,22 @@
<listitem><para>When used in conjunction with the
<command>dot</command> 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
<citerefentry><refentrytitle>glob</refentrytitle><manvolnum>7</manvolnum></citerefentry>
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.</para></listitem>
pattern as an argument, which will be matched against the
left-hand and the right-hand, respectively, nodes of a
relationship.</para>
<para>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.</para></listitem>
</varlistentry>
<varlistentry>
@ -252,7 +261,7 @@
<term><option>--no-man</option></term>
<listitem><para>Do not invoke man to verify the existence of
man pages listen in <varname>Documentation=</varname>.
man pages listed in <varname>Documentation=</varname>.
</para></listitem>
</varlistentry>

View file

@ -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))
bool match_patterns2;
match_patterns2 = strv_fnmatch(*unit, 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(*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);