[systemd-commits] man/journalctl.xml src/journal

Zbigniew Jędrzejewski-Szmek zbyszek at kemper.freedesktop.org
Sat Jul 19 18:13:21 PDT 2014


 man/journalctl.xml       |   19 +++++++++++++++----
 src/journal/journalctl.c |   20 +++++++++++++++++---
 2 files changed, 32 insertions(+), 7 deletions(-)

New commits:
commit 4e6029435111adcad71489aca2dd68bc65aeffd4
Author: Zbigniew Jędrzejewski-Szmek <zbyszek at in.waw.pl>
Date:   Sat Jul 19 21:05:07 2014 -0400

    journalctl,man: allow + only between terms
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1110712

diff --git a/man/journalctl.xml b/man/journalctl.xml
index 47b5a05..df9c794 100644
--- a/man/journalctl.xml
+++ b/man/journalctl.xml
@@ -84,10 +84,11 @@
                 field, then they are automatically matched as
                 alternatives, i.e. the resulting output will show
                 entries matching any of the specified matches for the
-                same field. Finally, if the character
-                <literal>+</literal> appears as a separate word on the
-                command line, all matches before and after are combined
-                in a disjunction (i.e. logical OR).</para>
+                same field. Finally, the character
+                <literal>+</literal> may appears as a separate word
+                between other terms on the command line. This causes
+                all matches before and after to be combined in a
+                disjunction (i.e. logical OR).</para>
 
                 <para>As shortcuts for a few types of field/value
                 matches, file paths may be specified. If a file path
@@ -98,11 +99,21 @@
                 <literal>_KERNEL_DEVICE=</literal> match for the
                 device.</para>
 
+                <para>Additional contraints may be added using options
+                <option>--boot</option>, <option>--unit=</option>,
+                etc, to futher limit what entries will be shown
+                (logical AND).</para>
+
                 <para>Output is interleaved from all accessible
                 journal files, whether they are rotated or currently
                 being written, and regardless of whether they belong to the
                 system itself or are accessible user journals.</para>
 
+                <para>The set of journal files which will be used
+                can be modified using the <option>--user</option>,
+                <option>--system</option>, <option>--directory</option>,
+                and <option>--file</option> options, see below.</para>
+
                 <para>All users are granted access to their private
                 per-user journals. However, by default, only root and
                 users who are members of the <literal>systemd-journal</literal>
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index 92e8286..7aedbf0 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -699,15 +699,20 @@ static int generate_new_id128(void) {
 
 static int add_matches(sd_journal *j, char **args) {
         char **i;
+        bool have_term = false;
 
         assert(j);
 
         STRV_FOREACH(i, args) {
                 int r;
 
-                if (streq(*i, "+"))
+                if (streq(*i, "+")) {
+                        if (!have_term)
+                                break;
                         r = sd_journal_add_disjunction(j);
-                else if (path_is_absolute(*i)) {
+                        have_term = false;
+
+                } else if (path_is_absolute(*i)) {
                         _cleanup_free_ char *p, *t = NULL, *t2 = NULL;
                         const char *path;
                         _cleanup_free_ char *interpreter = NULL;
@@ -756,8 +761,12 @@ static int add_matches(sd_journal *j, char **args) {
                         r = sd_journal_add_match(j, t, 0);
                         if (t2)
                                 r = sd_journal_add_match(j, t2, 0);
-                } else
+                        have_term = true;
+
+                } else {
                         r = sd_journal_add_match(j, *i, 0);
+                        have_term = true;
+                }
 
                 if (r < 0) {
                         log_error("Failed to add match '%s': %s", *i, strerror(-r));
@@ -765,6 +774,11 @@ static int add_matches(sd_journal *j, char **args) {
                 }
         }
 
+        if (!strv_isempty(args) && !have_term) {
+                log_error("\"+\" can only be used between terms");
+                return -EINVAL;
+        }
+
         return 0;
 }
 



More information about the systemd-commits mailing list