chiark / gitweb /
journalctl: support --root for message catalogs
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 29 Mar 2013 01:44:00 +0000 (21:44 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 29 Mar 2013 03:45:59 +0000 (23:45 -0400)
TODO
man/journalctl.xml
src/journal/journalctl.c

diff --git a/TODO b/TODO
index e54f84b9643ff749531a1c4594199c4b3d82f94a..0dbaad5032d3994d492f27059985284d6bb8bf01 100644 (file)
--- a/TODO
+++ b/TODO
@@ -144,8 +144,6 @@ Features:
 
 * timedate: have global on/off switches for auto-time (NTP), and auto-timezone that connman can subscribe to.
 
-* support --root= in msgcatalog compiler
-
 * Honour "-" prefix for InaccessibleDirectories= and ReadOnlyDirectories= to
   suppress errors of the specified path doesn't exist
 
index 6b4b7572f633b3a5c149159196157672fc93c539..144b54f6637da8fd0558e1631f86b1429d647b6e 100644 (file)
                                 paths.</para></listitem>
                         </varlistentry>
 
+                        <varlistentry>
+                                <term><option>--root=<replaceable>ROOT</replaceable></option></term>
+
+                                <listitem><para>Takes a directory path
+                                as argument. If specified journalctl
+                                will operate on catalog file hierarchy
+                                underneath the specified directory
+                                instead of the root directory
+                                (e.g. <option>--update-catalog</option>
+                                will create
+                                <filename><replaceable>ROOT</replaceable>/var/lib/systemd/catalog/database</filename>).
+                                </para></listitem>
+                        </varlistentry>
+
                         <varlistentry>
                                 <term><option>--new-id128</option></term>
 
index 03daafe9db79405a755d1d129eb19ba71f559421..3ae6482e99ff8b0d860ecbd2060fe7b7fb7ca31c 100644 (file)
@@ -86,6 +86,7 @@ static bool arg_unit_system;
 static const char *arg_field = NULL;
 static bool arg_catalog = false;
 static bool arg_reverse = false;
+static const char *arg_root = NULL;
 
 static enum {
         ACTION_SHOW,
@@ -125,6 +126,7 @@ static int help(void) {
                "     --no-pager          Do not pipe output into a pager\n"
                "  -m --merge             Show entries from all available journals\n"
                "  -D --directory=PATH    Show journal files from directory\n"
+               "     --root=ROOT         Operate on catalog files underneath the root ROOT\n"
 #ifdef HAVE_GCRYPT
                "     --interval=TIME     Time interval for changing the FSS sealing key\n"
                "     --verify-key=KEY    Specify FSS verification key\n"
@@ -155,6 +157,7 @@ static int parse_argv(int argc, char *argv[]) {
                 ARG_NO_PAGER,
                 ARG_NO_TAIL,
                 ARG_NEW_ID128,
+                ARG_ROOT,
                 ARG_HEADER,
                 ARG_FULL,
                 ARG_SETUP_KEYS,
@@ -186,6 +189,7 @@ static int parse_argv(int argc, char *argv[]) {
                 { "merge",        no_argument,       NULL, 'm'              },
                 { "this-boot",    no_argument,       NULL, 'b'              },
                 { "directory",    required_argument, NULL, 'D'              },
+                { "root",         required_argument, NULL, ARG_ROOT         },
                 { "header",       no_argument,       NULL, ARG_HEADER       },
                 { "priority",     required_argument, NULL, 'p'              },
                 { "setup-keys",   no_argument,       NULL, ARG_SETUP_KEYS   },
@@ -318,6 +322,10 @@ static int parse_argv(int argc, char *argv[]) {
                         arg_directory = optarg;
                         break;
 
+                case ARG_ROOT:
+                        arg_root = optarg;
+                        break;
+
                 case 'c':
                         arg_cursor = optarg;
                         break;
@@ -1024,18 +1032,25 @@ int main(int argc, char *argv[]) {
             arg_action == ACTION_LIST_CATALOG ||
             arg_action == ACTION_DUMP_CATALOG) {
 
+                char _cleanup_free_ *database;
+                database =  strjoin(arg_root, "/", CATALOG_DATABASE, NULL);
+                if (!database) {
+                        r = log_oom();
+                        goto finish;
+                }
+
                 if (arg_action == ACTION_UPDATE_CATALOG) {
-                        r = catalog_update(CATALOG_DATABASE, NULL, catalog_file_dirs);
+                        r = catalog_update(database, arg_root, catalog_file_dirs);
                         if (r < 0)
                                 log_error("Failed to list catalog: %s", strerror(-r));
                 } else {
                         bool oneline = arg_action == ACTION_LIST_CATALOG;
 
                         if (optind < argc)
-                                r = catalog_list_items(stdout, CATALOG_DATABASE,
+                                r = catalog_list_items(stdout, database,
                                                        oneline, argv + optind);
                         else
-                                r = catalog_list(stdout, CATALOG_DATABASE, oneline);
+                                r = catalog_list(stdout, database, oneline);
                         if (r < 0)
                                 log_error("Failed to list catalog: %s", strerror(-r));
                 }