[PATCH] emacs: Function to query the list of labels from a thread-id

Jani Nikula jani at nikula.org
Tue Oct 30 13:48:25 PDT 2012


On Sun, 28 Oct 2012, Damien Cassou <damien.cassou at gmail.com> wrote:
> This patch adds `notmuch-query-thread-labels-from-id' and
> corresponding test. This function returns the labels of thread whose
> id is passed as argument. The thread labels are the union of the
> labels of emails in the thread. I need this function to integrate
> notmuch-labeler.

Hi Damien, please send this patch as part of the series adding
notmuch-labeler. Out of context, without adding any users of the
function, it's a bit difficult to evaluate.

Also note that notmuch uses "tags", not "labels", universally. If what
you're referring to is tags, please use that, and if there's a
distinction between tags and labels, please describe what it is.

BR,
Jani.


>
> Signed-off-by: Damien Cassou <damien.cassou at gmail.com>
> ---
>  emacs/notmuch-query.el |   16 ++++++++++++++++
>  test/emacs             |   23 +++++++++++++++++++++++
>  2 files changed, 39 insertions(+)
>
> diff --git a/emacs/notmuch-query.el b/emacs/notmuch-query.el
> index d66baea..8b9a41d 100644
> --- a/emacs/notmuch-query.el
> +++ b/emacs/notmuch-query.el
> @@ -81,4 +81,20 @@ See the function notmuch-query-get-threads for more information."
>     (lambda (msg) (plist-get msg :id))
>     (notmuch-query-get-threads search-terms)))
>
> +(defun notmuch-query-thread-labels-from-id (thread-id)
> +  "Return the labels of thread whose id is THREAD-ID.
> +The thread labels are the union of the labels of emails in the
> +thread."
> +  (let ((label-lists
> +	 (notmuch-query-map-forest
> +	  (lambda (msg) (plist-get msg :tags))
> +	  (car (notmuch-query-get-threads
> +		(list (concat "thread:" thread-id)))))))
> +    (case (length label-lists)
> +      (0 nil)
> +      (1 (car label-lists))
> +      (otherwise (reduce (lambda (l1 l2)
> +			   (union l1 l2 :test 'string=))
> +			 label-lists)))))
> +
>  (provide 'notmuch-query)
> diff --git a/test/emacs b/test/emacs
> index 44f641e..3e8bdb8 100755
> --- a/test/emacs
> +++ b/test/emacs
> @@ -820,5 +820,28 @@ Date: Fri, 05 Jan 2001 15:43:57 +0000
>  EOF
>  test_expect_equal_file OUTPUT EXPECTED
>
> +test_begin_subtest "Extracting all labels from a thread"
> +add_message \
> +    '[subject]="Extracting all labels from a thread"' \
> +    '[body]="body 1"'
> +first=${gen_msg_cnt}
> +parent=${gen_msg_id}
> +add_message \
> +    '[subject]="Extracting all labels from a thread"' \
> +    '[body]="body 2"' \
> +    "[in-reply-to]=\<$parent\>"
> +add_message \
> +    '[subject]="Extracting all labels from a thread"' \
> +    '[body]="body 3"' \
> +    "[in-reply-to]=\<$parent\>"
> +latest=${gen_msg_id}
> +# Extract the thread-id from one of the emails
> +thread_id=$(notmuch search id:${latest} | sed -e "s/thread:\([a-f0-9]*\).*/\1/")
> +# Add tag "mytagfoo" to one of the emails
> +notmuch tag +mytagfoo id:${latest}
> +test_emacs_expect_t \
> +    "(let ((output (notmuch-query-thread-labels-from-id \"${thread_id}\"))
> +           (expected '(\"inbox\" \"mytagfoo\" \"unread\")))
> +      (notmuch-test-expect-equal output expected))"
>
>  test_done
> --
> 1.7.10.4
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch


More information about the notmuch mailing list