unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* Notmuch command interface
@ 2010-03-11 15:25 Ben Gamari
  2010-03-11 22:52 ` David A Benjamin
  0 siblings, 1 reply; 12+ messages in thread
From: Ben Gamari @ 2010-03-11 15:25 UTC (permalink / raw
  To: notmuch

Hey all,

While the notmuch command-line interface is fantastic, there defintely are a few
gaps which hurt performance. Since I've been following, I've seen several
threads on how to handle message addition and initial tagging[1][2]. I recall
that some time ago Carl had the idea of applying only a 'new' tag during notmuch
new. I strongly supported this proposal yet it seems that nothing ever became of
it. Is there a reason for this? Would a patch be accepted?

Secondly, there was at one point talk of allowing notmuch new to be called with
an explicit list of messages to be added. Is there support for such an idea? It
seems like this might help mail fetching performance, if only slightly.

Thanks!

- Ben


[1] p87hbp5j9dv.fsf@hackervisions.or
[2] 20100114084713.GA22273@harikalardiyar

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Notmuch command interface
  2010-03-11 15:25 Notmuch command interface Ben Gamari
@ 2010-03-11 22:52 ` David A Benjamin
  2010-03-12  0:52   ` Ben Gamari
                     ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: David A Benjamin @ 2010-03-11 22:52 UTC (permalink / raw
  To: Ben Gamari; +Cc: notmuch

On Thu, 11 Mar 2010, Ben Gamari wrote:
> While the notmuch command-line interface is fantastic, there defintely are a few
> gaps which hurt performance. Since I've been following, I've seen several
> threads on how to handle message addition and initial tagging[1][2]. I recall
> that some time ago Carl had the idea of applying only a 'new' tag during notmuch
> new. I strongly supported this proposal yet it seems that nothing ever became of
> it. Is there a reason for this? Would a patch be accepted?
>

To avoid breaking the current behavior, what if the set of tags applied to 
new/moved/deleted(?) messages could be set on the command line or some 
other library interface, while just perhaps defaulting to unread/inbox? 
This would support both the current behavior and a hooks-like workflow 
without notmuch itself treating any tags (new, unread, inbox, etc.) as 
"special".

David

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Notmuch command interface
  2010-03-11 22:52 ` David A Benjamin
@ 2010-03-12  0:52   ` Ben Gamari
  2010-03-12  8:31   ` Michal Sojka
  2010-03-12  9:18   ` Notmuch command interface Sebastian Spaeth
  2 siblings, 0 replies; 12+ messages in thread
From: Ben Gamari @ 2010-03-12  0:52 UTC (permalink / raw
  To: David A Benjamin; +Cc: notmuch

On Thu, 11 Mar 2010 17:52:34 -0500 (EST), David A Benjamin <davidben@MIT.EDU> wrote:
> To avoid breaking the current behavior, what if the set of tags applied to 
> new/moved/deleted(?) messages could be set on the command line or some 
> other library interface, while just perhaps defaulting to unread/inbox? 
> This would support both the current behavior and a hooks-like workflow 
> without notmuch itself treating any tags (new, unread, inbox, etc.) as 
> "special".

Seems reasonable. I might take a stab at this. Anyone else have any thoughts
about the above?

- Ben

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Notmuch command interface
  2010-03-11 22:52 ` David A Benjamin
  2010-03-12  0:52   ` Ben Gamari
@ 2010-03-12  8:31   ` Michal Sojka
  2010-03-12 14:46     ` Sebastian Spaeth
  2010-03-12  9:18   ` Notmuch command interface Sebastian Spaeth
  2 siblings, 1 reply; 12+ messages in thread
From: Michal Sojka @ 2010-03-12  8:31 UTC (permalink / raw
  To: David A Benjamin, Ben Gamari; +Cc: notmuch

On Thu, 11 Mar 2010, David A Benjamin wrote:
> On Thu, 11 Mar 2010, Ben Gamari wrote:
> > While the notmuch command-line interface is fantastic, there defintely are a few
> > gaps which hurt performance. Since I've been following, I've seen several
> > threads on how to handle message addition and initial tagging[1][2]. I recall
> > that some time ago Carl had the idea of applying only a 'new' tag during notmuch
> > new. I strongly supported this proposal yet it seems that nothing ever became of
> > it. Is there a reason for this? Would a patch be accepted?
> >
> 
> To avoid breaking the current behavior, what if the set of tags applied to 
> new/moved/deleted(?) messages could be set on the command line or some 
> other library interface, while just perhaps defaulting to unread/inbox? 
> This would support both the current behavior and a hooks-like workflow 
> without notmuch itself treating any tags (new, unread, inbox, etc.) as 
> "special".

Hi,

in id:87ljecmnbd.fsf@steelpick.localdomain, I outlined my idea about
mail store abstraction. To go on with the idea, I think that the set of
initial tags should be determined by mail store implementation.
Currently I think that new messages should be tagged as follows:

1) immutable file-based mail store: inbox + unread (backward compatibility
   with current notmuch)

2) Maildir-based mail store: inbox + tags derived from maildir flags.

3) git-based mail store: arbitrary tags stored in git repository (perhaps
   by MDA).

In 3) you could therfore use any policy you want to do initial tagging
of your messages. What do you think?

Unfortunately, I didn't make much progress in implementating this, but
it's definitely a priority for me because I want to get rid of slow
notmuchsync.

Cheers,
Michal

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Notmuch command interface
  2010-03-11 22:52 ` David A Benjamin
  2010-03-12  0:52   ` Ben Gamari
  2010-03-12  8:31   ` Michal Sojka
@ 2010-03-12  9:18   ` Sebastian Spaeth
  2 siblings, 0 replies; 12+ messages in thread
From: Sebastian Spaeth @ 2010-03-12  9:18 UTC (permalink / raw
  To: notmuch

> To avoid breaking the current behavior, what if the set of tags applied to 
> new/moved/deleted(?) messages could be set on the command line or some 
> other library interface, while just perhaps defaulting to unread/inbox? 
> This would support both the current behavior and a hooks-like workflow 
> without notmuch itself treating any tags (new, unread, inbox, etc.) as 
> "special".

+1. For some, the default "inbox unread" might just be the correct
thing, while others may want "new". I know that I don't need any special
tag for new mails, as I applied the "sync maildir flags" patch. So
configurable in .notmuch-config with a default of "inbox unread" to keep
behavior consistent seems the best way to me.

Sebastian

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Notmuch command interface
  2010-03-12  8:31   ` Michal Sojka
@ 2010-03-12 14:46     ` Sebastian Spaeth
  2010-03-12 15:03       ` Michal Sojka
  0 siblings, 1 reply; 12+ messages in thread
From: Sebastian Spaeth @ 2010-03-12 14:46 UTC (permalink / raw
  To: Michal Sojka, David A Benjamin, Ben Gamari; +Cc: notmuch

> Unfortunately, I didn't make much progress in implementating this, but
> it's definitely a priority for me because I want to get rid of slow
> notmuchsync.

notmuchsync master is now using the json output, by the way. I think
that suppressing the output of msg bodies in notmuch show will help
notmuchsync performance *a lot*.

Sebastian

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Notmuch command interface
  2010-03-12 14:46     ` Sebastian Spaeth
@ 2010-03-12 15:03       ` Michal Sojka
  2010-03-12 16:03         ` Sebastian Spaeth
  0 siblings, 1 reply; 12+ messages in thread
From: Michal Sojka @ 2010-03-12 15:03 UTC (permalink / raw
  To: Sebastian Spaeth, David A Benjamin, Ben Gamari; +Cc: notmuch

On Fri, 12 Mar 2010, Sebastian Spaeth wrote:
> > Unfortunately, I didn't make much progress in implementating this, but
> > it's definitely a priority for me because I want to get rid of slow
> > notmuchsync.
> 
> notmuchsync master is now using the json output, by the way. I think
> that suppressing the output of msg bodies in notmuch show will help
> notmuchsync performance *a lot*.

I've just tried it :-(

+ /home/wsh/src/notmuchsync/notmuchsync -s -n -d
20100312 15:59:37 - DEBUG - Execute ['notmuch', 'show', '--format=json', '1265813977..1270997977']
Traceback (most recent call last):
  File "/home/wsh/src/notmuchsync/notmuchsync", line 76, in <module>
    all_mails=all_mails)
  File "/home/wsh/src/notmuchsync/notmuch/notmuch.py", line 434, in syncTags
    msgs = self.show(searchterm, wholeThread=False)
  File "/home/wsh/src/notmuchsync/notmuch/notmuch.py", line 372, in show
    json_forest = json.loads(stdout)
  File "/usr/lib/pymodules/python2.5/simplejson/__init__.py", line 307, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/pymodules/python2.5/simplejson/decoder.py", line 335, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/pymodules/python2.5/simplejson/decoder.py", line 353, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

Do you know what's wrong? I use notmuch based on commit
d30049d2b9fd5eb113cd99e88d6fa7b40c36d3c5 (current master).

Michal

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Notmuch command interface
  2010-03-12 15:03       ` Michal Sojka
@ 2010-03-12 16:03         ` Sebastian Spaeth
  2010-03-14 18:15           ` Michal Sojka
  0 siblings, 1 reply; 12+ messages in thread
From: Sebastian Spaeth @ 2010-03-12 16:03 UTC (permalink / raw
  To: Michal Sojka, David A Benjamin, Ben Gamari; +Cc: notmuch

On Fri, 12 Mar 2010 16:03:34 +0100, Michal Sojka <sojkam1@fel.cvut.cz> wrote:
> On Fri, 12 Mar 2010, Sebastian Spaeth wrote:
> > > Unfortunately, I didn't make much progress in implementating this, but
> > > it's definitely a priority for me because I want to get rid of slow
> > > notmuchsync.
> > 
> > notmuchsync master is now using the json output, by the way. I think
> > that suppressing the output of msg bodies in notmuch show will help
> > notmuchsync performance *a lot*.
> 
> I've just tried it :-(
>   File "/usr/lib/pymodules/python2.5/simplejson/decoder.py", line 353, in raw_decode
>     raise ValueError("No JSON object could be decoded")
> ValueError: No JSON object could be decoded

Wow, that is bad. All it does is taking "nomuch show" output and feeding
it to the json parser. That probably means that the json was not valid
(which would be bad).

Having said that, I remember that I got that when I used a notmuch that
doesn't include the notmuch tags in the json output, ie you need notmuch
from current master less than 26h ago. Do you use that?

Also Python 2.6 is a requirement, but I see you used that already...
Sebastian 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Notmuch command interface
  2010-03-12 16:03         ` Sebastian Spaeth
@ 2010-03-14 18:15           ` Michal Sojka
  2010-03-14 18:19             ` [PATCH] Produce valid JSON output even if mail body is empty Michal Sojka
  0 siblings, 1 reply; 12+ messages in thread
From: Michal Sojka @ 2010-03-14 18:15 UTC (permalink / raw
  To: Sebastian Spaeth, David A Benjamin, Ben Gamari; +Cc: notmuch

On Fri, 12 Mar 2010 17:03:04 +0100, "Sebastian Spaeth" <Sebastian@SSpaeth.de> wrote:
> On Fri, 12 Mar 2010 16:03:34 +0100, Michal Sojka <sojkam1@fel.cvut.cz> wrote:
> > On Fri, 12 Mar 2010, Sebastian Spaeth wrote:
> > > > Unfortunately, I didn't make much progress in implementating this, but
> > > > it's definitely a priority for me because I want to get rid of slow
> > > > notmuchsync.
> > > 
> > > notmuchsync master is now using the json output, by the way. I think
> > > that suppressing the output of msg bodies in notmuch show will help
> > > notmuchsync performance *a lot*.
> > 
> > I've just tried it :-(
> >   File "/usr/lib/pymodules/python2.5/simplejson/decoder.py", line 353, in raw_decode
> >     raise ValueError("No JSON object could be decoded")
> > ValueError: No JSON object could be decoded
> 
> Wow, that is bad. All it does is taking "nomuch show" output and feeding
> it to the json parser. That probably means that the json was not valid
> (which would be bad).

Yes. I found that the problem is caused by emails with an empty body.
I'll post a patch to fix this in a while.

> Having said that, I remember that I got that when I used a notmuch that
> doesn't include the notmuch tags in the json output, ie you need notmuch
> from current master less than 26h ago. Do you use that?
> 
> Also Python 2.6 is a requirement, but I see you used that already...

Strange, I use default python from Debian which is 2.5.5 and current
notmuchsync master runs without problems.

-Michal

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH] Produce valid JSON output even if mail body is empty
  2010-03-14 18:15           ` Michal Sojka
@ 2010-03-14 18:19             ` Michal Sojka
  2010-03-14 19:01               ` James Westby
  0 siblings, 1 reply; 12+ messages in thread
From: Michal Sojka @ 2010-03-14 18:19 UTC (permalink / raw
  To: notmuch

Mails with empty body produced the following output:
  "body": [{"id": 1, "content-type": "text/plain", "content": (null)}]
The (null) is not valid JSON syntax.

This patch changes the output to:
  "body": [{"id": 1, "content-type": "text/plain", "content": ""}]

Signed-off-by: Michal Sojka <sojkam1@fel.cvut.cz>
---
 notmuch-show.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/notmuch-show.c b/notmuch-show.c
index ff1fecb..cc2fb6a 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -323,7 +323,7 @@ format_part_json (GMimeObject *part, int *part_count)
 	show_part_content (part, stream_memory);
 	part_content = g_mime_stream_mem_get_byte_array (GMIME_STREAM_MEM (stream_memory));
 
-	printf (", \"content\": %s", json_quote_str (ctx, (char *) part_content->data));
+	printf (", \"content\": %s", json_quote_str (ctx, part_content->data ? (char *)part_content->data : ""));
     }
 
     fputs ("}", stdout);
-- 
1.7.0

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH] Produce valid JSON output even if mail body is empty
  2010-03-14 18:19             ` [PATCH] Produce valid JSON output even if mail body is empty Michal Sojka
@ 2010-03-14 19:01               ` James Westby
  2010-03-14 20:44                 ` [PATCH] Fix invalid JSON output for NULL strings Michal Sojka
  0 siblings, 1 reply; 12+ messages in thread
From: James Westby @ 2010-03-14 19:01 UTC (permalink / raw
  To: Michal Sojka, notmuch

On Sun, 14 Mar 2010 19:19:11 +0100, Michal Sojka <sojkam1@fel.cvut.cz> wrote:
> Mails with empty body produced the following output:
>   "body": [{"id": 1, "content-type": "text/plain", "content": (null)}]
> The (null) is not valid JSON syntax.

Is this just something that can happen with the body?

I've see (null) in the emacs interface when I've done something silly
such as opening a newer notmuch db with an old client.

Should all the attributes be guarded in a similar manner to ensure valid
JSON?

Thanks,

James

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH] Fix invalid JSON output for NULL strings
  2010-03-14 19:01               ` James Westby
@ 2010-03-14 20:44                 ` Michal Sojka
  0 siblings, 0 replies; 12+ messages in thread
From: Michal Sojka @ 2010-03-14 20:44 UTC (permalink / raw
  To: James Westby, notmuch, Scott Robinson

On Sun, 14 Mar 2010 15:01:28 -0400, James Westby <jw+debian@jameswestby.net> wrote:
> On Sun, 14 Mar 2010 19:19:11 +0100, Michal Sojka <sojkam1@fel.cvut.cz> wrote:
> > Mails with empty body produced the following output:
> >   "body": [{"id": 1, "content-type": "text/plain", "content": (null)}]
> > The (null) is not valid JSON syntax.
> 
> Is this just something that can happen with the body?
> 
> I've see (null) in the emacs interface when I've done something silly
> such as opening a newer notmuch db with an old client.
> 
> Should all the attributes be guarded in a similar manner to ensure valid
> JSON?


You're right. When you import messages from mail archive such as
http://notmuchmail.org/pipermail/notmuch/, there are no To: headers.
This case is already handled by the current code, but what about this
more universal solution? It also solves my problem with notmuchsynch.

-- >8 --
Signed-off-by: Michal Sojka <sojkam1@fel.cvut.cz>
---
 json.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/json.c b/json.c
index 9614143..0885d3d 100644
--- a/json.c
+++ b/json.c
@@ -56,7 +56,7 @@ json_quote_str(const void *ctx, const char *str)
     int len = 0;
 
     if (!str)
-	return NULL;
+	return (char*)"null";
 
     for (ptr = str; *ptr; len++, ptr++) {
 	if (*ptr < 32 || *ptr == '\"' || *ptr == '\\')
-- 
1.7.0

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2010-03-14 20:44 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-11 15:25 Notmuch command interface Ben Gamari
2010-03-11 22:52 ` David A Benjamin
2010-03-12  0:52   ` Ben Gamari
2010-03-12  8:31   ` Michal Sojka
2010-03-12 14:46     ` Sebastian Spaeth
2010-03-12 15:03       ` Michal Sojka
2010-03-12 16:03         ` Sebastian Spaeth
2010-03-14 18:15           ` Michal Sojka
2010-03-14 18:19             ` [PATCH] Produce valid JSON output even if mail body is empty Michal Sojka
2010-03-14 19:01               ` James Westby
2010-03-14 20:44                 ` [PATCH] Fix invalid JSON output for NULL strings Michal Sojka
2010-03-12  9:18   ` Notmuch command interface Sebastian Spaeth

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).