From: david Date: Fri, 7 Dec 2012 01:26:39 +0000 (+2000) Subject: [Patch v3b 1/9] notmuch-dump: add --format=(batch-tag|sup) X-Git-Url: http://git.tremily.us/gitweb.cgi?a=commitdiff_plain;h=fc19aa86549b3a68e9292ac7197b044c44099634;p=notmuch-archives.git [Patch v3b 1/9] notmuch-dump: add --format=(batch-tag|sup) --- diff --git a/a1/120a1db9bfca92e99d49b7a0a2cc0a98d10e6a b/a1/120a1db9bfca92e99d49b7a0a2cc0a98d10e6a new file mode 100644 index 000000000..8b283ee3a --- /dev/null +++ b/a1/120a1db9bfca92e99d49b7a0a2cc0a98d10e6a @@ -0,0 +1,186 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +Received: from localhost (localhost [127.0.0.1]) + by olra.theworths.org (Postfix) with ESMTP id 82CB6431FC4 + for ; Thu, 6 Dec 2012 17:27:27 -0800 (PST) +X-Virus-Scanned: Debian amavisd-new at olra.theworths.org +X-Spam-Flag: NO +X-Spam-Score: 0 +X-Spam-Level: +X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[none] + autolearn=disabled +Received: from olra.theworths.org ([127.0.0.1]) + by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id XT3yOXRa8WMm for ; + Thu, 6 Dec 2012 17:27:26 -0800 (PST) +Received: from tesseract.cs.unb.ca (tesseract.cs.unb.ca [131.202.240.238]) + (using TLSv1 with cipher AES256-SHA (256/256 bits)) + (No client certificate requested) + by olra.theworths.org (Postfix) with ESMTPS id 564A5431FC7 + for ; Thu, 6 Dec 2012 17:27:13 -0800 (PST) +Received: from fctnnbsc30w-142167090129.dhcp-dynamic.fibreop.nb.bellaliant.net + ([142.167.90.129] helo=zancas.localnet) + by tesseract.cs.unb.ca with esmtpsa + (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.72) + (envelope-from ) + id 1Tgmie-0003Nq-4Q; Thu, 06 Dec 2012 21:27:12 -0400 +Received: from bremner by zancas.localnet with local (Exim 4.80) + (envelope-from ) + id 1TgmiY-0004kL-Mx; Thu, 06 Dec 2012 21:27:06 -0400 +From: david@tethera.net +To: notmuch@notmuchmail.org +Subject: [Patch v3b 1/9] notmuch-dump: add --format=(batch-tag|sup) +Date: Thu, 6 Dec 2012 21:26:39 -0400 +Message-Id: <1354843607-17980-2-git-send-email-david@tethera.net> +X-Mailer: git-send-email 1.7.10.4 +In-Reply-To: <1354843607-17980-1-git-send-email-david@tethera.net> +References: <1354843607-17980-1-git-send-email-david@tethera.net> +X-Spam_bar: - +Cc: David Bremner +X-BeenThere: notmuch@notmuchmail.org +X-Mailman-Version: 2.1.13 +Precedence: list +List-Id: "Use and development of the notmuch mail system." + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +X-List-Received-Date: Fri, 07 Dec 2012 01:27:28 -0000 + +From: David Bremner + +sup is the old format, and remains the default, at least until +restore is converted to parse this format. + +Each line of the batch-tag format is modelled on the syntax of notmuch tag: +- "notmuch tag" is omitted from the front of the line +- The dump format only uses query strings of a single message-id. +- Each space seperated tag/message-id is 'hex-encoded' to remove + trouble-making characters. +- It is permitted (and will be useful) for there to be no tags before + the query. + +In particular this format won't have the same problem with e.g. spaces +in message-ids or tags; they will be round-trip-able. +--- + dump-restore-private.h | 13 +++++++++++++ + notmuch-dump.c | 48 ++++++++++++++++++++++++++++++++++++++++++------ + 2 files changed, 55 insertions(+), 6 deletions(-) + create mode 100644 dump-restore-private.h + +diff --git a/dump-restore-private.h b/dump-restore-private.h +new file mode 100644 +index 0000000..896a004 +--- /dev/null ++++ b/dump-restore-private.h +@@ -0,0 +1,13 @@ ++#ifndef DUMP_RESTORE_PRIVATE_H ++#define DUMP_RESTORE_PRIVATE_H ++ ++#include "hex-escape.h" ++#include "command-line-arguments.h" ++ ++typedef enum dump_formats { ++ DUMP_FORMAT_AUTO, ++ DUMP_FORMAT_BATCH_TAG, ++ DUMP_FORMAT_SUP ++} dump_format_t; ++ ++#endif +diff --git a/notmuch-dump.c b/notmuch-dump.c +index 88f598a..d2dad40 100644 +--- a/notmuch-dump.c ++++ b/notmuch-dump.c +@@ -19,6 +19,7 @@ + */ + + #include "notmuch-client.h" ++#include "dump-restore-private.h" + + int + notmuch_dump_command (unused (void *ctx), int argc, char *argv[]) +@@ -43,7 +44,13 @@ notmuch_dump_command (unused (void *ctx), int argc, char *argv[]) + char *output_file_name = NULL; + int opt_index; + ++ int output_format = DUMP_FORMAT_SUP; ++ + notmuch_opt_desc_t options[] = { ++ { NOTMUCH_OPT_KEYWORD, &output_format, "format", 'f', ++ (notmuch_keyword_t []){ { "sup", DUMP_FORMAT_SUP }, ++ { "batch-tag", DUMP_FORMAT_BATCH_TAG }, ++ { 0, 0 } } }, + { NOTMUCH_OPT_STRING, &output_file_name, "output", 'o', 0 }, + { 0, 0, 0, 0, 0 } + }; +@@ -83,27 +90,56 @@ notmuch_dump_command (unused (void *ctx), int argc, char *argv[]) + */ + notmuch_query_set_sort (query, NOTMUCH_SORT_UNSORTED); + ++ char *buffer = NULL; ++ size_t buffer_size = 0; ++ + for (messages = notmuch_query_search_messages (query); + notmuch_messages_valid (messages); + notmuch_messages_move_to_next (messages)) { + int first = 1; ++ const char *message_id; ++ + message = notmuch_messages_get (messages); ++ message_id = notmuch_message_get_message_id (message); + +- fprintf (output, +- "%s (", notmuch_message_get_message_id (message)); ++ if (output_format == DUMP_FORMAT_SUP) { ++ fprintf (output, "%s (", message_id); ++ } + + for (tags = notmuch_message_get_tags (message); + notmuch_tags_valid (tags); + notmuch_tags_move_to_next (tags)) { +- if (! first) +- fprintf (output, " "); ++ const char *tag_str = notmuch_tags_get (tags); + +- fprintf (output, "%s", notmuch_tags_get (tags)); ++ if (! first) ++ fputs (" ", output); + + first = 0; ++ ++ if (output_format == DUMP_FORMAT_SUP) { ++ fputs (tag_str, output); ++ } else { ++ if (hex_encode (notmuch, tag_str, ++ &buffer, &buffer_size) != HEX_SUCCESS) { ++ fprintf (stderr, "Error: failed to hex-encode tag %s\n", ++ tag_str); ++ return 1; ++ } ++ fprintf (output, "+%s", buffer); ++ } + } + +- fprintf (output, ")\n"); ++ if (output_format == DUMP_FORMAT_SUP) { ++ fputs (")\n", output); ++ } else { ++ if (hex_encode (notmuch, message_id, ++ &buffer, &buffer_size) != HEX_SUCCESS) { ++ fprintf (stderr, "Error: failed to hex-encode msg-id %s\n", ++ message_id); ++ return 1; ++ } ++ fprintf (output, " -- id:%s\n", buffer); ++ } + + notmuch_message_destroy (message); + } +-- +1.7.10.4 +