Fix missing final newline in notmuch search output
authorJameson Graef Rollins <jrollins@finestructure.net>
Fri, 6 May 2011 19:03:04 +0000 (12:03 -0700)
committerCarl Worth <cworth@cworth.org>
Wed, 1 Jun 2011 23:30:29 +0000 (16:30 -0700)
A previous commit to fix json formatting for null results
(0b1ddc5f6652bde99d63d9d553777b3d926694cf) accidentally introduced a
regression that removed trailing newlines for non-json output.  (There
wasn't a good test for this previously, but there is now).  The
problem is due to the fundamental differences in formatting between
the json and non-json outputs.  The only way to fix this was to add a
new formatting field that represents the string to output at the end
of a null result.

All output formatting tests should pass now, (in particular, the 4
recent test failures introduced to show this bug).

notmuch-search.c

index 8b901210ddaab31a4cacd4c4f1a883b80ecb4c8a..69af6171b3461f9528460676c308749dad0e1ca3 100644 (file)
@@ -48,6 +48,7 @@ typedef struct search_format {
     const char *item_sep;
     const char *item_end;
     const char *results_end;
+    const char *results_null;
 } search_format_t;
 
 static void
@@ -72,6 +73,7 @@ static const search_format_t format_text = {
                "%s", " ",
            ")", "\n",
        "",
+    "\n",
     "",
 };
 
@@ -98,6 +100,7 @@ static const search_format_t format_json = {
            "]", ",\n",
        "}",
     "]\n",
+    "]\n",
 };
 
 static void
@@ -236,7 +239,10 @@ do_search_threads (const search_format_t *format,
        notmuch_thread_destroy (thread);
     }
 
-    fputs (format->results_end, stdout);
+    if (first_thread)
+       fputs (format->results_null, stdout);
+    else
+       fputs (format->results_end, stdout);
 
     return 0;
 }
@@ -280,7 +286,10 @@ do_search_messages (const search_format_t *format,
 
     notmuch_messages_destroy (messages);
 
-    fputs (format->results_end, stdout);
+    if (first_message)
+       fputs (format->results_null, stdout);
+    else
+       fputs (format->results_end, stdout);
 
     return 0;
 }
@@ -329,7 +338,10 @@ do_search_tags (notmuch_database_t *notmuch,
     if (messages)
        notmuch_messages_destroy (messages);
 
-    fputs (format->results_end, stdout);
+    if (first_tag)
+       fputs (format->results_null, stdout);
+    else
+       fputs (format->results_end, stdout);
 
     return 0;
 }