diff options
| author | Carl Worth <cworth@cworth.org> | 2009-10-13 21:11:54 -0700 |
|---|---|---|
| committer | Carl Worth <cworth@cworth.org> | 2009-10-13 21:15:07 -0700 |
| commit | 3922bb4cfda9d7e778a6cbf2bc8dee8ce2f9e140 (patch) | |
| tree | cad0f34b7f960bf351bb5bee16f1598f1bf8dd58 | |
| parent | 3253954233c378a0176eb9695fa7908c1ca21c2e (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.cc | 40 |
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; |
