v7 batch tagging series

david at tethera.net david at tethera.net
Fri Dec 14 05:34:08 PST 2012


This obsoletes  id:1355096008-4544-1-git-send-email-david at tethera.net

There are some fixups according to previous reviews, detailed in a
diff at the end.

I have just read id:871uettxln.fsf at qmul.ac.uk; this series doesn't
respond to that.

There are some new trivial cosmetic patches; except for conflicts
these don't really need to be part of this series.

  [Patch v7 01/14] parse_tag_line: use enum for return value.
  [Patch v7 13/14] notmuch-tag.1: tidy synopsis formatting

This version includes a bunch of test patches (patches 8-12).

The other reason for the increase in the number of patches is that I
discovered a bug in the previous version (when I implement patch
11/14), and I had to add some internal quoting for queries:

  [Patch v7 04/14] notmuch-tag: factor out double quoting routine
  [Patch v7 05/14] quote_and_decode_query: new function to quote
  [Patch v7 06/14] notmuch-restore: move query handling for batch

commit 6f4a8ac5fb90b301bc905c4ea90cdf33456eb06e
Author: David Bremner <bremner at debian.org>
Date:   Tue Dec 11 22:12:50 2012 -0400

    formatting fixup for illegal_tag

diff --git a/tag-util.c b/tag-util.c
index 2214f34..091e1ec 100644
--- a/tag-util.c
+++ b/tag-util.c
@@ -39,17 +39,18 @@ line_error (tag_parse_status_t status,
  */
 
 static const char *
-illegal_tag (const char *tag, notmuch_bool_t remove) {
+illegal_tag (const char *tag, notmuch_bool_t remove)
+{
 
-    if (*tag == '\0' && !remove)
+    if (*tag == '\0' && ! remove)
 	return "adding empty tag";
 
     /* This disallows adding the non-removable tag "-" and
      * enables notmuch tag to take long options more easily.
      */
 
-    if (*tag == '-' && !remove)
-	return  "adding tag starting with -";
+    if (*tag == '-' && ! remove)
+	return "adding tag starting with -";
 
     return NULL;
 }

commit 60ca31c81adfb3b9c2ca6e2d2eaee6fcc483ea97
Author: David Bremner <bremner at debian.org>
Date:   Tue Dec 11 22:17:48 2012 -0400

    uncrustify fixup for parse_tag_command_line

diff --git a/tag-util.c b/tag-util.c
index 091e1ec..30d856d 100644
--- a/tag-util.c
+++ b/tag-util.c
@@ -45,8 +45,9 @@ illegal_tag (const char *tag, notmuch_bool_t remove)
     if (*tag == '\0' && ! remove)
 	return "adding empty tag";
 
-    /* This disallows adding the non-removable tag "-" and
-     * enables notmuch tag to take long options more easily.
+    /* This disallows adding tags starting with "-", in particular the
+     * non-removable tag "-" and enables notmuch tag to take long
+     * options more easily.
      */
 
     if (*tag == '-' && ! remove)
@@ -165,12 +166,13 @@ parse_tag_line (void *ctx, char *line,
 
 int
 parse_tag_command_line (void *ctx, int argc, char **argv,
-			unused(tag_op_flag_t flags),
-			char **query_str, tag_op_list_t *tag_ops){
+			unused (tag_op_flag_t flags),
+			char **query_str, tag_op_list_t *tag_ops)
+{
 
     int i;
 
-    tag_op_list_reset(tag_ops);
+    tag_op_list_reset (tag_ops);
 
     for (i = 0; i < argc; i++) {
 	if (strcmp (argv[i], "--") == 0) {
@@ -182,7 +184,7 @@ parse_tag_command_line (void *ctx, int argc, char **argv,
 	    notmuch_bool_t is_remove = argv[i][0] == '-';
 	    const char *msg;
 
-	    msg = illegal_tag(argv[i]+1, is_remove);
+	    msg = illegal_tag (argv[i] + 1, is_remove);
 	    if (msg) {
 		fprintf (stderr, "Error: %s", msg);
 		return 1;

commit f3ae405abda331558affedf52391a067acc7b7df
Author: David Bremner <bremner at debian.org>
Date:   Tue Dec 11 22:21:46 2012 -0400

    remove unused flags

diff --git a/notmuch-tag.c b/notmuch-tag.c
index 2665037..a5e8715 100644
--- a/notmuch-tag.c
+++ b/notmuch-tag.c
@@ -242,7 +242,7 @@ notmuch_tag_command (void *ctx, int argc, char *argv[])
 	}
 
 	if (parse_tag_command_line (ctx, argc - opt_index, argv + opt_index,
-				    0, &query_string, tag_ops))
+				    &query_string, tag_ops))
 	    return 1;
     }
 
diff --git a/tag-util.c b/tag-util.c
index 30d856d..e7ee182 100644
--- a/tag-util.c
+++ b/tag-util.c
@@ -166,7 +166,6 @@ parse_tag_line (void *ctx, char *line,
 
 int
 parse_tag_command_line (void *ctx, int argc, char **argv,
-			unused (tag_op_flag_t flags),
 			char **query_str, tag_op_list_t *tag_ops)
 {
 
diff --git a/tag-util.h b/tag-util.h
index 4956725..2889736 100644
--- a/tag-util.h
+++ b/tag-util.h
@@ -85,7 +85,6 @@ parse_tag_line (void *ctx, char *line,
 
 tag_parse_status_t
 parse_tag_command_line (void *ctx, int argc, char **argv,
-			tag_op_flag_t flags,
 			char **query_str, tag_op_list_t *ops);
 
 /*

commit c1aa36573bb991a1d06dd2e234a2377e2a32bd66
Author: David Bremner <bremner at debian.org>
Date:   Tue Dec 11 22:25:40 2012 -0400

    use enum values in parse_tag_command_line

diff --git a/tag-util.c b/tag-util.c
index e7ee182..102adcc 100644
--- a/tag-util.c
+++ b/tag-util.c
@@ -164,7 +164,7 @@ parse_tag_line (void *ctx, char *line,
     return ret;
 }
 
-int
+tag_parse_status_t
 parse_tag_command_line (void *ctx, int argc, char **argv,
 			char **query_str, tag_op_list_t *tag_ops)
 {
@@ -186,7 +186,7 @@ parse_tag_command_line (void *ctx, int argc, char **argv,
 	    msg = illegal_tag (argv[i] + 1, is_remove);
 	    if (msg) {
 		fprintf (stderr, "Error: %s", msg);
-		return 1;
+		return TAG_PARSE_INVALID;
 	    }
 
 	    tag_op_list_append (ctx, tag_ops,
@@ -198,17 +198,17 @@ parse_tag_command_line (void *ctx, int argc, char **argv,
 
     if (tag_op_list_size (tag_ops) == 0) {
 	fprintf (stderr, "Error: 'notmuch tag' requires at least one tag to add or remove.\n");
-	return 1;
+	return TAG_PARSE_INVALID;
     }
 
     *query_str = query_string_from_args (ctx, argc - i, &argv[i]);
 
     if (**query_str == '\0') {
 	fprintf (stderr, "Error: notmuch tag requires at least one search term.\n");
-	return 1;
+	return TAG_PARSE_INVALID;
     }
 
-    return 0;
+    return TAG_PARSE_SUCCESS;
 }
 
 

commit 562200240098238211d2ea0299b2ae03f4dbe919
Author: David Bremner <bremner at debian.org>
Date:   Tue Dec 11 22:32:31 2012 -0400

    remaining changes for id:87k3spa9nk.fsf at nikula.org

diff --git a/tag-util.c b/tag-util.c
index 102adcc..43d19e1 100644
--- a/tag-util.c
+++ b/tag-util.c
@@ -179,21 +179,19 @@ parse_tag_command_line (void *ctx, int argc, char **argv,
 	    break;
 	}
 
-	if (argv[i][0] == '+' || argv[i][0] == '-') {
-	    notmuch_bool_t is_remove = argv[i][0] == '-';
-	    const char *msg;
+	if (argv[i][0] != '+' && argv[i][0] != '-')
+	    break;
 
-	    msg = illegal_tag (argv[i] + 1, is_remove);
-	    if (msg) {
-		fprintf (stderr, "Error: %s", msg);
-		return TAG_PARSE_INVALID;
-	    }
+	notmuch_bool_t is_remove = argv[i][0] == '-';
+	const char *msg;
 
-	    tag_op_list_append (ctx, tag_ops,
-				argv[i] + 1, (argv[i][0] == '-'));
-	} else {
-	    break;
+	msg = illegal_tag (argv[i] + 1, is_remove);
+	if (msg) {
+	    fprintf (stderr, "Error: %s", msg);
+	    return TAG_PARSE_INVALID;
 	}
+
+	tag_op_list_append (ctx, tag_ops, argv[i] + 1, is_remove);
     }
 
     if (tag_op_list_size (tag_ops) == 0) {
@@ -203,7 +201,7 @@ parse_tag_command_line (void *ctx, int argc, char **argv,
 
     *query_str = query_string_from_args (ctx, argc - i, &argv[i]);
 
-    if (**query_str == '\0') {
+    if (*query_str == NULL || **query_str == '\0') {
 	fprintf (stderr, "Error: notmuch tag requires at least one search term.\n");
 	return TAG_PARSE_INVALID;
     }

commit c991402c6571003b79e855965fe1e3b6ae2dde35
Author: David Bremner <bremner at debian.org>
Date:   Tue Dec 11 22:35:52 2012 -0400

    "fix" comment about tag_op_list; assume tag-utils.h docs are sufficient.

diff --git a/notmuch-tag.c b/notmuch-tag.c
index a5e8715..508f04d 100644
--- a/notmuch-tag.c
+++ b/notmuch-tag.c
@@ -108,9 +108,8 @@ _optimize_tag_query (void *ctx, const char *orig_query_string,
     return query_string;
 }
 
-/* Tag messages matching 'query_string' according to 'tag_ops', which
- * must be an array of tagging operations terminated with an empty
- * element. */
+/* Tag messages matching 'query_string' according to 'tag_ops'
+ */
 static int
 tag_query (void *ctx, notmuch_database_t *notmuch, const char *query_string,
 	   tag_op_list_t *tag_ops, tag_op_flag_t flags)

commit 80628aceff38cad5f48e0ec7f381bbf8cec85cb2
Author: David Bremner <bremner at debian.org>
Date:   Tue Dec 11 22:44:17 2012 -0400

    slightly longwindedly make sure we return non-zero if tag_query fails

diff --git a/notmuch-tag.c b/notmuch-tag.c
index 508f04d..8f700b0 100644
--- a/notmuch-tag.c
+++ b/notmuch-tag.c
@@ -174,8 +174,11 @@ tag_file (void *ctx, notmuch_database_t *notmuch, tag_op_flag_t flags,
 	if (ret > 0)
 	    continue;
 
-	if (ret < 0 || tag_query (ctx, notmuch, query_string,
-				      tag_ops, flags))
+	if (ret < 0)
+	    break;
+
+	ret = tag_query (ctx, notmuch, query_string, tag_ops, flags);
+	if (ret)
 	    break;
     }
 

commit d1be30ed7eab8a1e9e0a492c0f024880f63236bb
Author: David Bremner <bremner at debian.org>
Date:   Tue Dec 11 22:44:30 2012 -0400

    close an input file if we opened it

diff --git a/notmuch-tag.c b/notmuch-tag.c
index 8f700b0..b707c25 100644
--- a/notmuch-tag.c
+++ b/notmuch-tag.c
@@ -264,6 +264,9 @@ notmuch_tag_command (void *ctx, int argc, char *argv[])
     else
 	ret = tag_query (ctx, notmuch, query_string, tag_ops, tag_flags);
 
+    if (input != stdin)
+	fclose (input);
+
     notmuch_database_destroy (notmuch);
 
     return ret || interrupted;

commit 702a2b11d43616f9b2ad74fb772ad080c228ab0a
Author: David Bremner <bremner at debian.org>
Date:   Tue Dec 11 23:37:51 2012 -0400

    fixup for illegal_tag error messages

diff --git a/tag-util.c b/tag-util.c
index 43d19e1..f89669a 100644
--- a/tag-util.c
+++ b/tag-util.c
@@ -43,7 +43,7 @@ illegal_tag (const char *tag, notmuch_bool_t remove)
 {
 
     if (*tag == '\0' && ! remove)
-	return "adding empty tag";
+	return "empty tag forbidden";
 
     /* This disallows adding tags starting with "-", in particular the
      * non-removable tag "-" and enables notmuch tag to take long
@@ -51,7 +51,7 @@ illegal_tag (const char *tag, notmuch_bool_t remove)
      */
 
     if (*tag == '-' && ! remove)
-	return "adding tag starting with -";
+	return "tag starting with '-' forbidden";
 
     return NULL;
 }



More information about the notmuch mailing list