unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: Peter Wang <novalazy@gmail.com>
To: notmuch@notmuchmail.org
Subject: [PATCH v2 01/20] tag: factor out tag operation parsing
Date: Sun, 25 Nov 2012 12:16:27 +1100	[thread overview]
Message-ID: <1353806206-29133-2-git-send-email-novalazy@gmail.com> (raw)
In-Reply-To: <1353806206-29133-1-git-send-email-novalazy@gmail.com>

Factor out parsing of +tag, -tag operations from argv
into a separate function.
---
 notmuch-tag.c | 66 +++++++++++++++++++++++++++++++++++++----------------------
 1 file changed, 41 insertions(+), 25 deletions(-)

diff --git a/notmuch-tag.c b/notmuch-tag.c
index 88d559b..35a76db 100644
--- a/notmuch-tag.c
+++ b/notmuch-tag.c
@@ -167,11 +167,48 @@ tag_query (void *ctx, notmuch_database_t *notmuch, const char *query_string,
     return interrupted;
 }
 
+/* Parse +tag and -tag operations between argv[i] and argv[argc-1].
+ * The array tag_ops must be at least argc - i elements long.
+ * Returns the index into argv where parsing stopped, or -1 on error. */
+static int
+parse_tag_operations (int i, int argc, char *argv[],
+		      tag_operation_t *tag_ops, int *tag_ops_count)
+{
+    *tag_ops_count = 0;
+
+    for (; i < argc; i++) {
+	if (strcmp (argv[i], "--") == 0) {
+	    i++;
+	    break;
+	}
+	if (argv[i][0] == '+' || argv[i][0] == '-') {
+	    if (argv[i][0] == '+' && argv[i][1] == '\0') {
+		fprintf (stderr, "Error: tag names cannot be empty.\n");
+		return -1;
+	    }
+	    if (argv[i][0] == '+' && argv[i][1] == '-') {
+		/* This disallows adding the non-removable tag "-" and
+		 * enables notmuch tag to take long options in the
+		 * future. */
+		fprintf (stderr, "Error: tag names must not start with '-'.\n");
+		return -1;
+	    }
+	    tag_ops[*tag_ops_count].tag = argv[i] + 1;
+	    tag_ops[*tag_ops_count].remove = (argv[i][0] == '-');
+	    (*tag_ops_count)++;
+	} else {
+	    break;
+	}
+    }
+
+    return i;
+}
+
 int
 notmuch_tag_command (void *ctx, int argc, char *argv[])
 {
     tag_operation_t *tag_ops;
-    int tag_ops_count = 0;
+    int tag_ops_count;
     char *query_string;
     notmuch_config_t *config;
     notmuch_database_t *notmuch;
@@ -197,30 +234,9 @@ notmuch_tag_command (void *ctx, int argc, char *argv[])
 	return 1;
     }
 
-    for (i = 0; i < argc; i++) {
-	if (strcmp (argv[i], "--") == 0) {
-	    i++;
-	    break;
-	}
-	if (argv[i][0] == '+' || argv[i][0] == '-') {
-	    if (argv[i][0] == '+' && argv[i][1] == '\0') {
-		fprintf (stderr, "Error: tag names cannot be empty.\n");
-		return 1;
-	    }
-	    if (argv[i][0] == '+' && argv[i][1] == '-') {
-		/* This disallows adding the non-removable tag "-" and
-		 * enables notmuch tag to take long options in the
-		 * future. */
-		fprintf (stderr, "Error: tag names must not start with '-'.\n");
-		return 1;
-	    }
-	    tag_ops[tag_ops_count].tag = argv[i] + 1;
-	    tag_ops[tag_ops_count].remove = (argv[i][0] == '-');
-	    tag_ops_count++;
-	} else {
-	    break;
-	}
-    }
+    i = parse_tag_operations (0, argc, argv, tag_ops, &tag_ops_count);
+    if (i < 0)
+	return 1;
 
     tag_ops[tag_ops_count].tag = NULL;
 
-- 
1.7.12.1

  reply	other threads:[~2012-11-25  1:17 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-25  1:16 [PATCH v2 00/20] insert command Peter Wang
2012-11-25  1:16 ` Peter Wang [this message]
2012-11-25 16:13   ` [PATCH v2 01/20] tag: factor out tag operation parsing Mark Walters
2012-11-25  1:16 ` [PATCH v2 02/20] tag: make tag operation parser public Peter Wang
2012-11-25  1:16 ` [PATCH v2 03/20] cli: add stub for insert command Peter Wang
2012-11-25  1:16 ` [PATCH v2 04/20] insert: open Maildir tmp file Peter Wang
2012-11-25  1:16 ` [PATCH v2 05/20] insert: copy stdin to " Peter Wang
2012-11-26  9:39   ` Tomi Ollila
2012-11-26 12:05     ` Peter Wang
2012-11-25  1:16 ` [PATCH v2 06/20] insert: move file from Maildir tmp to new Peter Wang
2012-11-25  1:16 ` [PATCH v2 07/20] insert: add new message to database Peter Wang
2012-11-25  1:16 ` [PATCH v2 08/20] insert: support --folder option Peter Wang
2012-11-25  1:16 ` [PATCH v2 09/20] insert: prevent writes outside Maildir hierarchy Peter Wang
2012-11-25  1:16 ` [PATCH v2 10/20] insert: apply default tags to new message Peter Wang
2012-11-25  1:16 ` [PATCH v2 11/20] insert: parse command-line tag operations Peter Wang
2012-11-25  1:16 ` [PATCH v2 12/20] insert: apply " Peter Wang
2012-11-25  1:16 ` [PATCH v2 13/20] insert: add --create-folder option Peter Wang
2012-11-25  1:16 ` [PATCH v2 14/20] insert: fsync after writing tmp file Peter Wang
2012-11-25  1:16 ` [PATCH v2 15/20] insert: fsync new directory after rename Peter Wang
2012-11-25 16:15   ` Mark Walters
2012-11-25  1:16 ` [PATCH v2 16/20] insert: trap SIGINT and clean up Peter Wang
2012-11-25  1:16 ` [PATCH v2 17/20] insert: add copyright line from notmuch-deliver Peter Wang
2012-11-25  1:16 ` [PATCH v2 18/20] test: add tests for insert Peter Wang
2012-11-25 16:23   ` Mark Walters
2012-11-25  1:16 ` [PATCH v2 19/20] man: document 'insert' command Peter Wang
2012-11-25 16:17   ` Mark Walters
2012-11-25  1:16 ` [PATCH v2 20/20] man: reference notmuch-insert.1 Peter Wang
2012-11-25 16:11 ` [PATCH v2 00/20] insert command Mark Walters
2012-11-25 19:21 ` David Bremner
2012-11-26  2:42   ` Peter Wang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1353806206-29133-2-git-send-email-novalazy@gmail.com \
    --to=novalazy@gmail.com \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).