]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch
fix wrongly names variable format->out_format
[notmuch] / notmuch
diff --git a/notmuch b/notmuch
index b08334d79adf0a20d56acc2c2fb082f4ac636944..c01dab34905a0703a6492d1cd3691b462530503f 100755 (executable)
--- a/notmuch
+++ b/notmuch
@@ -1,10 +1,14 @@
 #!/usr/bin/env python
-"""This is a notmuch implementation in python. It's goal is to allow running the test suite on the cnotmuch python bindings.
+"""This is a notmuch implementation in python. 
+It's goal is to allow running the test suite on the cnotmuch python bindings.
 
 This "binary" honors the NOTMUCH_CONFIG environmen variable for reading a user's
-notmuch configuration (e.g. the database path)
+notmuch configuration (e.g. the database path).
 
-This code is licensed under the GNU GPL v3+."""
+   (c) 2010 by Sebastian Spaeth <Sebastian@SSpaeth.de>
+               Jesse Rosenthal <jrosenthal@jhu.edu>
+   This code is licensed under the GNU GPL v3+.
+"""
 from __future__ import with_statement # This isn't required in Python 2.6
 import sys, os, re, logging
 from subprocess import call
@@ -298,17 +302,53 @@ if __name__ == '__main__':
          print(str(thread))
    #-------------------------------------
    elif sys.argv[1] == 'show':
+      entire_thread = False
       db = Database()
-      if len(sys.argv) == 2:
-         #no further search term
-         querystr=''
-      else:
-         #mangle arguments wrapping terms with spaces in quotes
-         querystr = quote_query_line(sys.argv[2:])
+      out_format="text"
+      querystr=''
+      first_search_term = None
+
+      #ugly homegrown option parsing
+      #TODO: use OptionParser
+      for (i, arg) in enumerate(sys.argv[1:]):
+         if arg == '--entire-thread':
+              entire_thread = True
+         elif arg.startswith("--format="):
+              out_format = arg.split("=")[1]
+             if out_format == 'json':
+                  #for compatibility use --entire-thread for json
+                  entire_thread = True
+              if not out_format in ("json", "text"):
+                  raise Exception("unknown format")
+         elif not arg.startswith('--'):
+              #save the position of the first sys.argv that is a search term
+              first_search_term = i+1
+
+      if first_search_term:
+          #mangle arguments wrapping terms with spaces in quotes
+          querystr = quote_query_line(sys.argv[first_search_term:])
+
       logging.debug("show "+querystr)
-      m = Query(db,querystr).search_messages()
-      for msg in m:
-         print(msg.format_as_text())
+      t = Query(db,querystr).search_threads()
+
+      first_toplevel=True
+      if out_format.lower()=="json":
+         sys.stdout.write("[")
+
+      for thrd in t:
+         msgs = thrd.get_toplevel_messages()
+
+         if not first_toplevel:
+            if out_format.lower()=="json":
+               sys.stdout.write(", ")
+
+         first_toplevel = False
+
+         msgs.print_messages(out_format, 0, True)
+
+      if out_format.lower() == "json":
+         sys.stdout.write("]")
+      sys.stdout.write("\n")
 
    #-------------------------------------
    elif sys.argv[1] == 'reply':