[PATCH] Makefile: Do not call ldconfig when DESTDIR is defined
If make install is called with non-empty DESTDIR, calling ldconfig has usually no sense. Without this patch dpkg-buildpackage fails with make[1]: ldconfig: Command not found Signed-off-by: Michal Sojka sojk...@fel.cvut.cz --- This patch first appeared in id:87ljaf6p51@steelpick.2x.cz lib/Makefile.local |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/lib/Makefile.local b/lib/Makefile.local index a60ef98..2d36db1 100644 --- a/lib/Makefile.local +++ b/lib/Makefile.local @@ -36,9 +36,11 @@ SONAME = $(LINKER_NAME).$(LIBNOTMUCH_VERSION_MAJOR) LIBNAME = $(SONAME).$(LIBNOTMUCH_VERSION_MINOR).$(LIBNOTMUCH_VERSION_RELEASE) LIBRARY_LINK_FLAG = -shared -Wl,-soname=$(SONAME) ifeq ($(LIBDIR_IN_LDCONFIG),1) +ifeq ($(DESTDIR),) LIBRARY_INSTALL_POST_COMMAND=ldconfig endif endif +endif dir := lib extra_cflags += -I$(dir) -fPIC -- tg: (f117d80..) t/fix-ldconfig-for-deb (depends on: master) ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 0/2] Notmuch cat v2
Hi all, this is my second attempt to implement notmuch cat subcommand (the first version was posted in id:1271747793-17507-1-git-send-email-sojk...@fel.cvut.cz). This subcommand outputs the given message to stdout. In this version the arguments are classical notmuch search terms and not a filename as in the previous version. Emacs interface then uses message-id to retrieve the message. Some people suggested that cat could be implemented as a special format of show subcommand. That would be possible, but it seems that show command always constructs threads form the messages which means that is executes several database queries. I consider this as unnecessary overhead and for that reason cat is a separate subcommand. Michal Sojka (2): Add 'cat' subcommand emacs: Access raw messages via cat subcommand emacs/notmuch-show.el | 14 +--- notmuch-client.h |3 ++ notmuch-show.c| 83 + notmuch.1 |4 ++ notmuch.c |4 ++ test/cat | 38 ++ test/notmuch-test |2 +- 7 files changed, 142 insertions(+), 6 deletions(-) create mode 100755 test/cat -- 1.7.2.3 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 2/2] emacs: Access raw messages via cat subcommand
This patch modifies the following commands to access the messages via cat subcommand: - view/save attachments ('v', 'w'), - view a raw message ('V') and - pipe a message to a command ('|'). With this patch, it is straightforward to use notmuch emacs interface with a remote database accessed over SSH. To do this, it is sufficient to redefine notmuch-command variable to contain the name of a script containing: ssh u...@host notmuch $@ If the ssh client has enabled connection sharing (ControlMaster option in OpenSSH), the emacs interface is almost as responsive as when notmuch is invoked locally. --- emacs/notmuch-show.el | 14 +- 1 files changed, 9 insertions(+), 5 deletions(-) diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el index 98d25ef..5d207b9 100644 --- a/emacs/notmuch-show.el +++ b/emacs/notmuch-show.el @@ -85,10 +85,10 @@ any given message. (defmacro with-current-notmuch-show-message (rest body) Evaluate body with current buffer set to the text of current message `(save-excursion - (let ((filename (notmuch-show-get-filename))) - (let ((buf (generate-new-buffer (concat *notmuch-msg- filename * + (let ((id (notmuch-show-get-message-id))) + (let ((buf (generate-new-buffer (concat *notmuch-msg- id * (with-current-buffer buf - (insert-file-contents filename nil nil nil t) + (call-process notmuch-command nil t nil cat id) ,@body) (kill-buffer buf) @@ -918,7 +918,11 @@ any effects from previous calls to (defun notmuch-show-view-raw-message () View the file holding the current message. (interactive) - (view-file (notmuch-show-get-filename))) + (let ((id (notmuch-show-get-message-id))) +(let ((buf (get-buffer-create (concat *notmuch-raw- id * + (switch-to-buffer buf) + (save-excursion + (call-process notmuch-command nil t nil cat id) (defun notmuch-show-pipe-message (entire-thread command) Pipe the contents of the current message (or thread) to the given command. @@ -939,7 +943,7 @@ than only the current message. (mapconcat 'identity (notmuch-show-get-message-ids-for-open-messages) OR )) | command)) (setq shell-command - (concat command(shell-quote-argument (notmuch-show-get-filename) + (concat notmuch cat (shell-quote-argument (notmuch-show-get-message-id)) | command))) (start-process-shell-command notmuch-pipe-command *notmuch-pipe* shell-command))) (defun notmuch-show-add-tag (rest toadd) -- 1.7.2.3 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 1/2] Add 'cat' subcommand
This command outputs a raw message matched by search term to the standard output. It allows MUAs to access the messages for piping, attachment manipulation, etc. by running notmuch cat rather then directly access the file. This will simplify the MUAs when they need to operate on a remote database. --- notmuch-client.h |3 ++ notmuch-show.c| 83 + notmuch.1 |4 ++ notmuch.c |4 ++ test/cat | 38 test/notmuch-test |2 +- 6 files changed, 133 insertions(+), 1 deletions(-) create mode 100755 test/cat diff --git a/notmuch-client.h b/notmuch-client.h index 20be43b..82526f8 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -111,6 +111,9 @@ int notmuch_search_tags_command (void *ctx, int argc, char *argv[]); int +notmuch_cat_command (void *ctx, int argc, char *argv[]); + +int notmuch_part_command (void *ctx, int argc, char *argv[]); const char * diff --git a/notmuch-show.c b/notmuch-show.c index ea465de..285f38f 100644 --- a/notmuch-show.c +++ b/notmuch-show.c @@ -632,6 +632,89 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[])) } int +notmuch_cat_command (void *ctx, unused (int argc), unused (char *argv[])) +{ +notmuch_config_t *config; +notmuch_database_t *notmuch; +notmuch_query_t *query; +notmuch_messages_t *messages; +notmuch_message_t *message; +char *query_string; +int i; +const char *filename; +FILE *file; +size_t size; +char buf[4096]; + +for (i = 0; i argc argv[i][0] == '-'; i++) { + fprintf (stderr, Unrecognized option: %s\n, argv[i]); + return 1; +} + +config = notmuch_config_open (ctx, NULL, NULL); +if (config == NULL) + return 1; + +query_string = query_string_from_args (ctx, argc, argv); +if (query_string == NULL) { + fprintf (stderr, Out of memory\n); + return 1; +} + +if (*query_string == '\0') { + fprintf (stderr, Error: notmuch cat requires at least one search term.\n); + return 1; +} + +notmuch = notmuch_database_open (notmuch_config_get_database_path (config), +NOTMUCH_DATABASE_MODE_READ_ONLY); +if (notmuch == NULL) + return 1; + +query = notmuch_query_create (notmuch, query_string); +if (query == NULL) { + fprintf (stderr, Error: Out of memory\n); + return 1; +} + +if (notmuch_query_count_messages (query) != 1) { + fprintf (stderr, Error: search term did not match precisely one message.\n); + return 1; +} + +messages = notmuch_query_search_messages (query); +message = notmuch_messages_get (messages); + +if (message == NULL) { + fprintf (stderr, Error: Cannot find matching message.\n); + return 1; +} + +filename = notmuch_message_get_filename (message); +if (filename == NULL) { + fprintf (stderr, Error: Cannot message filename.\n); + return 1; +} + +file = fopen (filename, r); +if (file == NULL) { + fprintf (stderr, Error: Cannot open file %s: %s\n, filename, strerror (errno)); + return 1; +} + +while (!feof (file)) { + size = fread (buf, 1, sizeof (buf), file); + fwrite (buf, size, 1, stdout); +} + +fclose (file); +notmuch_query_destroy (query); +notmuch_database_close (notmuch); + +return 0; +} + +int notmuch_part_command (void *ctx, unused (int argc), unused (char *argv[])) { notmuch_config_t *config; diff --git a/notmuch.1 b/notmuch.1 index 3ec9c55..2ec4048 100644 --- a/notmuch.1 +++ b/notmuch.1 @@ -255,6 +255,10 @@ See the section below for details of the supported syntax for search-terms. .RE .TP +.BR cat search-term... + +Output raw content of a single message matched by the search term. +.TP .BR count search-term... Count messages matching the search terms. diff --git a/notmuch.c b/notmuch.c index f6b8c13..e36486c 100644 --- a/notmuch.c +++ b/notmuch.c @@ -310,6 +310,10 @@ command_t commands[] = { \tcontain tags only from messages that match the search-term(s).\n \n \tIn both cases the list will be alphabetically sorted. }, +{ cat, notmuch_cat_command, + search-terms, + Output raw content of a single message matched by the search term., + }, { part, notmuch_part_command, --part=num search-terms, Output a single MIME part of a message., diff --git a/test/cat b/test/cat new file mode 100755 index 000..c6cefea --- /dev/null +++ b/test/cat @@ -0,0 +1,38 @@ +#!/bin/bash + +test_description='notmuch cat' +. ./test-lib.sh + +test_begin_subtest Generate some messages +generate_message +generate_message +output=$(NOTMUCH_NEW) +test_expect_equal $output Added 2 new messages to the database. + +test_begin_subtest Without arguments +output=$(notmuch cat 21) +test_expect_equal $output Error: notmuch cat
Re: bug report: xapian error for message id with '..'
On Wed, 28 Apr 2010 18:41:18 -0400, Jameson Rollins jroll...@finestructure.net wrote: So I think this means that the problem probably lies mostly in the emacs UI not properly quoting the id string. What originally got me on this problem is that I was not able to manipulate the tag of this email from within emacs. Hi Jameson, Thanks for reporting that problem. (And thanks for mentioning that the problem occurred when trying to manipulate tags---I was having trouble finding the operation that wouldn't work with the problematic ID.) I've just added a test case to our test suite to cover this. Then I also added a fix to the emacs code to properly quote message IDs to resolve the problem. There might still be other quoting problems here or there in the emacs interface, so let me know if you find anything else. But at least a large class of problems is fixed here. I also note here that notmuch is not returning an error, even though a Xapian exception occurred and the search failed. This is another important issue. I'm not sure if I should bring it up in a separate message or not. This goes back to the bug tracking issue. A separate message would be preferred for me. I'm basically using tagged messages to indicate open bugs, so I'm now stuck with being unable to untag this thread until both of these issues are fixed. And that's not ideal. -Carl PS. What's also obviously not ideal is that there's no external visibility of my open bug queue. I'd definitely like to be able to easily advertise things like No, I haven't forgotten about that bug you reported in April---I just haven't fixed it yet. Anyone want to write a nice notmuch search --format=html for me? -- carl.d.wo...@intel.com pgpHlNVPbOY8t.pgp Description: PGP signature ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: bug report: xapian error for message id with '..'
On Fri, 22 Oct 2010 17:48:29 -0700, Carl Worth cwo...@cworth.org wrote: On Wed, 28 Apr 2010 18:41:18 -0400, Jameson Rollins jroll...@finestructure.net wrote: I also note here that notmuch is not returning an error, even though a Xapian exception occurred and the search failed. This is another important issue. I'm not sure if I should bring it up in a separate message or not. This goes back to the bug tracking issue. A separate message would be preferred for me. I'm basically using tagged messages to indicate open bugs, so I'm now stuck with being unable to untag this thread until both of these issues are fixed. And that's not ideal. I just resolved that problem by fixing the underlying bug. Thanks for the report. -Carl -- carl.d.wo...@intel.com pgplVxyLi8RyD.pgp Description: PGP signature ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 0/4] Maildir synchronization v2
On Mon, 18 Oct 2010, Mike Kelly wrote: > Michal Sojka wrote: > > they are ready to be merged. They can be pulled by: > > > > git pull git://rtime.felk.cvut.cz/notmuch maildir-sync-v2 > > I've tested these patches on Linux, and they seem to work as expected. > However, I'd like to suggest/request that the level-4 syncing of a > filename should happen in notmuch_(message|thread)_(add|remove)_tag(), > not in notmuch-tag.cc. Otherwise, anyone using libnotmuch directly > (e.g. alternative clients, things using python bindings, etc) will not > benefit from this. Hi, I'd agree but these pathes don't touch notmuch-tag.c in a significant way. What's done there is to read the value from config and to call a function (from libnotmuch) to setup an internal variable accordingly. Other users of libnotmuch have probably different means of configuration than notmuch itself and should call this function in a similar way. -Michal
[PATCH 2/4] Maildir synchronization
On Wed, 13 Oct 2010, Sebastian Spaeth wrote: > > +/* ASCII ordered table of Maildir flags and associated tags */ > > +struct maildir_flag_tag flag2tag[] = { > > +{ 'D', "draft", false}, > > +{ 'F', "flagged", false}, > > +{ 'P', "passed", false}, > > +{ 'R', "replied", false}, > > +{ 'S', "unread", true }, > > +{ 'T', "delete", false}, > > +}; > > [...] > > with one caveat: you use the tag "delete" to mark the state "trashed". I > think people have slowly settled on the convention "deleted" which is > also more consistent with a state, such as unread, replied, etc... Hi, I changed "delete" to "deleted" and the updated patch series is reachable by: git pull git://rtime.felk.cvut.cz/notmuch maildir-sync-v3 -Michal
[PATCH] emacs: Do not color non-matching authors by tag
Customizing notmuch-search-line-faces to color lines in search result according to tags has the effect that the color overrides other faces set for the line. This is usually what the user wants with the exception that it also colors non-matching authors and it is then not possible to visually distinguish between matching and non-matching authors. This patch changes the way how are the faces specified in notmuch-search-line-faces applied to the search results. In particular, instead of adding an overlay for the whole line, the existing faces of the line are replaced with what is given in notmuch-search-line-faces. The only exception is that notmuch-search-non-matching-authors face is never replaced. Signed-off-by: Michal Sojka --- emacs/notmuch.el | 20 +--- 1 files changed, 17 insertions(+), 3 deletions(-) diff --git a/emacs/notmuch.el b/emacs/notmuch.el index 42619b2..d0fb834 100644 --- a/emacs/notmuch.el +++ b/emacs/notmuch.el @@ -593,17 +593,31 @@ matching will be applied." :type '(alist :key-type (string) :value-type (list)) :group 'notmuch) +(defun notmuch-search-set-line-face (start end face) + "Change face propery to value FACE expect for non-matching authors." + (save-excursion +(save-restriction + (narrow-to-region start end) + (goto-char (point-min)) + (let ((fstart (point)) + fend) + (while (< fstart (point-max)) + (setq fend (or (next-single-property-change fstart 'face) +(point-max))) + (when (not (eq (get-text-property fstart 'face) 'notmuch-search-non-matching-authors)) + (put-text-property fstart fend 'face face)) + (setq fstart fend)) + (defun notmuch-search-color-line (start end line-tag-list) "Colorize lines in notmuch-show based on tags" (if notmuch-search-line-faces - (let ((overlay (make-overlay start end)) - (tags-faces (copy-alist notmuch-search-line-faces))) + (let ((tags-faces (copy-alist notmuch-search-line-faces))) (while tags-faces (let* ((tag-face (car tags-faces)) (tag (car tag-face)) (face (cdr tag-face))) (cond ((member tag line-tag-list) - (overlay-put overlay 'face face) + (notmuch-search-set-line-face start end face) (setq tags-faces nil)) (t (setq tags-faces (cdr tags-faces) -- tg: (f117d80..) t/do-not-colorize-non-matching-authors-by-tag (depends on: master)
[PATCH] Makefile: Do not call ldconfig when DESTDIR is defined
If make install is called with non-empty DESTDIR, calling ldconfig has usually no sense. Without this patch dpkg-buildpackage fails with make[1]: ldconfig: Command not found Signed-off-by: Michal Sojka --- This patch first appeared in id:87ljaf6p51.fsf at steelpick.2x.cz lib/Makefile.local |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/lib/Makefile.local b/lib/Makefile.local index a60ef98..2d36db1 100644 --- a/lib/Makefile.local +++ b/lib/Makefile.local @@ -36,9 +36,11 @@ SONAME = $(LINKER_NAME).$(LIBNOTMUCH_VERSION_MAJOR) LIBNAME = $(SONAME).$(LIBNOTMUCH_VERSION_MINOR).$(LIBNOTMUCH_VERSION_RELEASE) LIBRARY_LINK_FLAG = -shared -Wl,-soname=$(SONAME) ifeq ($(LIBDIR_IN_LDCONFIG),1) +ifeq ($(DESTDIR),) LIBRARY_INSTALL_POST_COMMAND=ldconfig endif endif +endif dir := lib extra_cflags += -I$(dir) -fPIC -- tg: (f117d80..) t/fix-ldconfig-for-deb (depends on: master)
[PATCH 0/2] Notmuch cat v2
Hi all, this is my second attempt to implement notmuch cat subcommand (the first version was posted in id:1271747793-17507-1-git-send-email-sojkam1 at fel.cvut.cz). This subcommand outputs the given message to stdout. In this version the arguments are classical notmuch search terms and not a filename as in the previous version. Emacs interface then uses message-id to retrieve the message. Some people suggested that cat could be implemented as a special format of show subcommand. That would be possible, but it seems that show command always constructs threads form the messages which means that is executes several database queries. I consider this as unnecessary overhead and for that reason cat is a separate subcommand. Michal Sojka (2): Add 'cat' subcommand emacs: Access raw messages via cat subcommand emacs/notmuch-show.el | 14 +--- notmuch-client.h |3 ++ notmuch-show.c| 83 + notmuch.1 |4 ++ notmuch.c |4 ++ test/cat | 38 ++ test/notmuch-test |2 +- 7 files changed, 142 insertions(+), 6 deletions(-) create mode 100755 test/cat -- 1.7.2.3
[PATCH 2/2] emacs: Access raw messages via cat subcommand
This patch modifies the following commands to access the messages via cat subcommand: - view/save attachments ('v', 'w'), - view a raw message ('V') and - pipe a message to a command ('|'). With this patch, it is straightforward to use notmuch emacs interface with a remote database accessed over SSH. To do this, it is sufficient to redefine notmuch-command variable to contain the name of a script containing: ssh user at host notmuch "$@" If the ssh client has enabled connection sharing (ControlMaster option in OpenSSH), the emacs interface is almost as responsive as when notmuch is invoked locally. --- emacs/notmuch-show.el | 14 +- 1 files changed, 9 insertions(+), 5 deletions(-) diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el index 98d25ef..5d207b9 100644 --- a/emacs/notmuch-show.el +++ b/emacs/notmuch-show.el @@ -85,10 +85,10 @@ any given message." (defmacro with-current-notmuch-show-message ( body) "Evaluate body with current buffer set to the text of current message" `(save-excursion - (let ((filename (notmuch-show-get-filename))) - (let ((buf (generate-new-buffer (concat "*notmuch-msg-" filename "*" + (let ((id (notmuch-show-get-message-id))) + (let ((buf (generate-new-buffer (concat "*notmuch-msg-" id "*" (with-current-buffer buf - (insert-file-contents filename nil nil nil t) + (call-process notmuch-command nil t nil "cat" id) , at body) (kill-buffer buf) @@ -918,7 +918,11 @@ any effects from previous calls to (defun notmuch-show-view-raw-message () "View the file holding the current message." (interactive) - (view-file (notmuch-show-get-filename))) + (let ((id (notmuch-show-get-message-id))) +(let ((buf (get-buffer-create (concat "*notmuch-raw-" id "*" + (switch-to-buffer buf) + (save-excursion + (call-process notmuch-command nil t nil "cat" id) (defun notmuch-show-pipe-message (entire-thread command) "Pipe the contents of the current message (or thread) to the given command. @@ -939,7 +943,7 @@ than only the current message." (mapconcat 'identity (notmuch-show-get-message-ids-for-open-messages) " OR ")) " | " command)) (setq shell-command - (concat command " < " (shell-quote-argument (notmuch-show-get-filename) + (concat "notmuch cat " (shell-quote-argument (notmuch-show-get-message-id)) " | " command))) (start-process-shell-command "notmuch-pipe-command" "*notmuch-pipe*" shell-command))) (defun notmuch-show-add-tag ( toadd) -- 1.7.2.3
[PATCH 1/2] Add 'cat' subcommand
This command outputs a raw message matched by search term to the standard output. It allows MUAs to access the messages for piping, attachment manipulation, etc. by running notmuch cat rather then directly access the file. This will simplify the MUAs when they need to operate on a remote database. --- notmuch-client.h |3 ++ notmuch-show.c| 83 + notmuch.1 |4 ++ notmuch.c |4 ++ test/cat | 38 test/notmuch-test |2 +- 6 files changed, 133 insertions(+), 1 deletions(-) create mode 100755 test/cat diff --git a/notmuch-client.h b/notmuch-client.h index 20be43b..82526f8 100644 --- a/notmuch-client.h +++ b/notmuch-client.h @@ -111,6 +111,9 @@ int notmuch_search_tags_command (void *ctx, int argc, char *argv[]); int +notmuch_cat_command (void *ctx, int argc, char *argv[]); + +int notmuch_part_command (void *ctx, int argc, char *argv[]); const char * diff --git a/notmuch-show.c b/notmuch-show.c index ea465de..285f38f 100644 --- a/notmuch-show.c +++ b/notmuch-show.c @@ -632,6 +632,89 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[])) } int +notmuch_cat_command (void *ctx, unused (int argc), unused (char *argv[])) +{ +notmuch_config_t *config; +notmuch_database_t *notmuch; +notmuch_query_t *query; +notmuch_messages_t *messages; +notmuch_message_t *message; +char *query_string; +int i; +const char *filename; +FILE *file; +size_t size; +char buf[4096]; + +for (i = 0; i < argc && argv[i][0] == '-'; i++) { + fprintf (stderr, "Unrecognized option: %s\n", argv[i]); + return 1; +} + +config = notmuch_config_open (ctx, NULL, NULL); +if (config == NULL) + return 1; + +query_string = query_string_from_args (ctx, argc, argv); +if (query_string == NULL) { + fprintf (stderr, "Out of memory\n"); + return 1; +} + +if (*query_string == '\0') { + fprintf (stderr, "Error: notmuch cat requires at least one search term.\n"); + return 1; +} + +notmuch = notmuch_database_open (notmuch_config_get_database_path (config), +NOTMUCH_DATABASE_MODE_READ_ONLY); +if (notmuch == NULL) + return 1; + +query = notmuch_query_create (notmuch, query_string); +if (query == NULL) { + fprintf (stderr, "Error: Out of memory\n"); + return 1; +} + +if (notmuch_query_count_messages (query) != 1) { + fprintf (stderr, "Error: search term did not match precisely one message.\n"); + return 1; +} + +messages = notmuch_query_search_messages (query); +message = notmuch_messages_get (messages); + +if (message == NULL) { + fprintf (stderr, "Error: Cannot find matching message.\n"); + return 1; +} + +filename = notmuch_message_get_filename (message); +if (filename == NULL) { + fprintf (stderr, "Error: Cannot message filename.\n"); + return 1; +} + +file = fopen (filename, "r"); +if (file == NULL) { + fprintf (stderr, "Error: Cannot open file %s: %s\n", filename, strerror (errno)); + return 1; +} + +while (!feof (file)) { + size = fread (buf, 1, sizeof (buf), file); + fwrite (buf, size, 1, stdout); +} + +fclose (file); +notmuch_query_destroy (query); +notmuch_database_close (notmuch); + +return 0; +} + +int notmuch_part_command (void *ctx, unused (int argc), unused (char *argv[])) { notmuch_config_t *config; diff --git a/notmuch.1 b/notmuch.1 index 3ec9c55..2ec4048 100644 --- a/notmuch.1 +++ b/notmuch.1 @@ -255,6 +255,10 @@ See the section below for details of the supported syntax for . .RE .TP +.BR cat " ..." + +Output raw content of a single message matched by the search term. +.TP .BR count " ..." Count messages matching the search terms. diff --git a/notmuch.c b/notmuch.c index f6b8c13..e36486c 100644 --- a/notmuch.c +++ b/notmuch.c @@ -310,6 +310,10 @@ command_t commands[] = { "\tcontain tags only from messages that match the search-term(s).\n" "\n" "\tIn both cases the list will be alphabetically sorted." }, +{ "cat", notmuch_cat_command, + "", + "Output raw content of a single message matched by the search term.", + "" }, { "part", notmuch_part_command, "--part= ", "Output a single MIME part of a message.", diff --git a/test/cat b/test/cat new file mode 100755 index 000..c6cefea --- /dev/null +++ b/test/cat @@ -0,0 +1,38 @@ +#!/bin/bash + +test_description='notmuch cat' +. ./test-lib.sh + +test_begin_subtest "Generate some messages" +generate_message +generate_message +output=$(NOTMUCH_NEW) +test_expect_equal "$output" "Added 2 new messages to the database." + +test_begin_subtest "Without arguments" +output=$(notmuch cat 2>&1) +test_expect_equal "$output" "Error: notmuch cat requires
Automated testing of emacs interface
For some time, I've been hesitant to implement big changes in the emacs interface since we didn't have any automated testing for this stuff. I had tried once or twice to implemented automated emacs-notmuch testing, but I also ran into strange errors when I tried to do "emacs --batch --funcall notmuch-hello". I just found that problem, (emacs --batch was strangely operating in a window only 10 columns wide and bugs in notmuch-hello caused it to fail in a window so narrow). And I've fixed both of these things now. So the test suite now has a nice "emacs" script which can be used for easy testing of the emacs interface. I've only committed a simple test of notmuch-hello so far, but it will be easy to expand from here, (and I'll appreciate any help in doing so). Also, as anyone adds functionality to the emacs code in notmuch, please also extend the test suite to cover that functionality. Thanks, -Carl -- carl.d.worth at intel.com -- next part -- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: not available URL: <http://notmuchmail.org/pipermail/notmuch/attachments/20101022/ee82a037/attachment.pgp>
bug report: xapian error for message id with '..'
On Wed, 28 Apr 2010 18:41:18 -0400, Jameson Rollins wrote: > So I think this means that the problem probably lies mostly in the emacs > UI not properly quoting the id string. What originally got me on this > problem is that I was not able to manipulate the tag of this email from > within emacs. Hi Jameson, Thanks for reporting that problem. (And thanks for mentioning that the problem occurred when trying to manipulate tags---I was having trouble finding the operation that wouldn't work with the problematic ID.) I've just added a test case to our test suite to cover this. Then I also added a fix to the emacs code to properly quote message IDs to resolve the problem. There might still be other quoting problems here or there in the emacs interface, so let me know if you find anything else. But at least a large class of problems is fixed here. > I also note here that notmuch is not returning an error, even though a > Xapian exception occurred and the search failed. This is another > important issue. I'm not sure if I should bring it up in a separate > message or not. This goes back to the bug tracking issue. A separate message would be preferred for me. I'm basically using tagged messages to indicate open bugs, so I'm now stuck with being unable to untag this thread until both of these issues are fixed. And that's not ideal. -Carl PS. What's also obviously not ideal is that there's no external visibility of my "open bug queue". I'd definitely like to be able to easily advertise things like "No, I haven't forgotten about that bug you reported in April---I just haven't fixed it yet." Anyone want to write a nice "notmuch search --format=html" for me? -- carl.d.worth at intel.com -- next part -- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: not available URL: <http://notmuchmail.org/pipermail/notmuch/attachments/20101022/d5ba6218/attachment.pgp>