aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2009-10-13 21:11:54 -0700
committerCarl Worth <cworth@cworth.org>2009-10-13 21:15:07 -0700
commit3922bb4cfda9d7e778a6cbf2bc8dee8ce2f9e140 (patch)
treecad0f34b7f960bf351bb5bee16f1598f1bf8dd58
parent3253954233c378a0176eb9695fa7908c1ca21c2e (diff)
notmuch-index-message: Read message filenames from stdin
This allows for indexing an arbitrary number of messages with a single invocation rather than just a single message on the command line.
-rw-r--r--notmuch-index-message.cc40
1 files changed, 34 insertions, 6 deletions
diff --git a/notmuch-index-message.cc b/notmuch-index-message.cc
index 79b3bf38..51c9f049 100644
--- a/notmuch-index-message.cc
+++ b/notmuch-index-message.cc
@@ -419,19 +419,30 @@ index_file (Xapian::WritableDatabase db,
g_object_unref (stream);
}
+static void
+usage (const char *argv0)
+{
+ fprintf (stderr, "Usage: %s <path-to-xapian-database>\n", argv0);
+ fprintf (stderr, "\n");
+ fprintf (stderr, "Messages to be indexed are read from stdnin as absolute filenames\n");
+ fprintf (stderr, "one file per line.");
+}
+
int
main (int argc, char **argv)
{
- const char *database_path, *filename;
+ const char *database_path;
+ char *filename;
+ GIOChannel *channel;
+ GIOStatus gio_status;
+ GError *error = NULL;
- if (argc < 3) {
- fprintf (stderr, "Usage: %s <path-to-xapian-database> <mail-message>\n",
- argv[0]);
+ if (argc < 2) {
+ usage (argv[0]);
exit (1);
}
database_path = argv[1];
- filename = argv[2];
g_mime_init (0);
@@ -444,7 +455,24 @@ main (int argc, char **argv)
term_gen = Xapian::TermGenerator ();
- index_file (db, term_gen, filename);
+ channel = g_io_channel_unix_new (fileno (stdin));
+
+ while (1) {
+ gio_status = g_io_channel_read_line (channel, &filename,
+ NULL, NULL, &error);
+ if (gio_status == G_IO_STATUS_EOF)
+ break;
+ if (gio_status != G_IO_STATUS_NORMAL) {
+ fprintf (stderr, "An error occurred reading from stdin: %s\n",
+ error->message);
+ exit (1);
+ }
+
+ g_strchomp (filename);
+ index_file (db, term_gen, filename);
+
+ g_free (filename);
+ }
} catch (const Xapian::Error &error) {
cerr << "A Xapian exception occurred: " << error.get_msg () << endl;