-Notmuch 0.17~rc3 (2013-12-07)
+Notmuch 0.17~rc4 (2013-12-28)
=============================
Incompatible change in SHA1 computation
# this file should be kept in sync with ../../../version
-__VERSION__ = '0.17~rc3'
+__VERSION__ = '0.17~rc4'
+notmuch (0.17~rc4-1) experimental; urgency=low
+
+ * New upstream release candidate
+
+ -- David Bremner <bremner@debian.org> Sat, 28 Dec 2013 18:30:06 -0400
+
notmuch (0.17~rc3-1) experimental; urgency=low
* New upstream release candidate
-.TH NOTMUCH-COMPACT 1 2013-12-07 "Notmuch 0.17~rc3"
+.TH NOTMUCH-COMPACT 1 2013-12-28 "Notmuch 0.17~rc4"
.SH NAME
notmuch-compact \- compact the notmuch database
.SH SYNOPSIS
-.TH NOTMUCH-CONFIG 1 2013-12-07 "Notmuch 0.17~rc3"
+.TH NOTMUCH-CONFIG 1 2013-12-28 "Notmuch 0.17~rc4"
.SH NAME
notmuch-config \- access notmuch configuration file
.SH SYNOPSIS
-.TH NOTMUCH-COUNT 1 2013-12-07 "Notmuch 0.17~rc3"
+.TH NOTMUCH-COUNT 1 2013-12-28 "Notmuch 0.17~rc4"
.SH NAME
notmuch-count \- count messages matching the given search terms
.SH SYNOPSIS
-.TH NOTMUCH-DUMP 1 2013-12-07 "Notmuch 0.17~rc3"
+.TH NOTMUCH-DUMP 1 2013-12-28 "Notmuch 0.17~rc4"
.SH NAME
notmuch-dump \- creates a plain-text dump of the tags of each message
-.TH NOTMUCH-INSERT 1 2013-12-07 "Notmuch 0.17~rc3"
+.TH NOTMUCH-INSERT 1 2013-12-28 "Notmuch 0.17~rc4"
.SH NAME
notmuch-insert \- add a message to the maildir and notmuch database
.SH SYNOPSIS
-.TH NOTMUCH-NEW 1 2013-12-07 "Notmuch 0.17~rc3"
+.TH NOTMUCH-NEW 1 2013-12-28 "Notmuch 0.17~rc4"
.SH NAME
notmuch-new \- incorporate new mail into the notmuch database
.SH SYNOPSIS
-.TH NOTMUCH-REPLY 1 2013-12-07 "Notmuch 0.17~rc3"
+.TH NOTMUCH-REPLY 1 2013-12-28 "Notmuch 0.17~rc4"
.SH NAME
notmuch-reply \- constructs a reply template for a set of messages
-.TH NOTMUCH-RESTORE 1 2013-12-07 "Notmuch 0.17~rc3"
+.TH NOTMUCH-RESTORE 1 2013-12-28 "Notmuch 0.17~rc4"
.SH NAME
notmuch-restore \- restores the tags from the given file (see notmuch dump)
-.TH NOTMUCH-SEARCH 1 2013-12-07 "Notmuch 0.17~rc3"
+.TH NOTMUCH-SEARCH 1 2013-12-28 "Notmuch 0.17~rc4"
.SH NAME
notmuch-search \- search for messages matching the given search terms
.SH SYNOPSIS
-.TH NOTMUCH-SHOW 1 2013-12-07 "Notmuch 0.17~rc3"
+.TH NOTMUCH-SHOW 1 2013-12-28 "Notmuch 0.17~rc4"
.SH NAME
notmuch-show \- show messages matching the given search terms
.SH SYNOPSIS
-.TH NOTMUCH-TAG 1 2013-12-07 "Notmuch 0.17~rc3"
+.TH NOTMUCH-TAG 1 2013-12-28 "Notmuch 0.17~rc4"
.SH NAME
notmuch-tag \- add/remove tags for all messages matching the search terms
.\" along with this program. If not, see http://www.gnu.org/licenses/ .
.\"
.\" Author: Carl Worth <cworth@cworth.org>
-.TH NOTMUCH 1 2013-12-07 "Notmuch 0.17~rc3"
+.TH NOTMUCH 1 2013-12-28 "Notmuch 0.17~rc4"
.SH NAME
notmuch \- thread-based email index, search, and tagging
.SH SYNOPSIS
-.TH NOTMUCH-HOOKS 5 2013-12-07 "Notmuch 0.17~rc3"
+.TH NOTMUCH-HOOKS 5 2013-12-28 "Notmuch 0.17~rc4"
.SH NAME
notmuch-hooks \- hooks for notmuch
-.TH NOTMUCH-SEARCH-TERMS 7 2013-12-07 "Notmuch 0.17~rc3"
+.TH NOTMUCH-SEARCH-TERMS 7 2013-12-28 "Notmuch 0.17~rc4"
.SH NAME
notmuch-search-terms \- syntax for notmuch queries
# get key fingerprint
FINGERPRINT=$(gpg --no-tty --list-secret-keys --with-colons --fingerprint | grep '^fpr:' | cut -d: -f10)
-# for some reason this is needed for emacs_deliver_message to work,
-# although I can't figure out why
-add_email_corpus
-
test_expect_success 'emacs delivery of signed message' \
-'emacs_deliver_message \
+'emacs_fcc_message \
"test signed message 001" \
"This is a test signed message." \
"(mml-secure-message-sign)"'
This is a test file.
EOF
test_expect_success 'emacs delivery of encrypted message with attachment' \
-'emacs_deliver_message \
+'emacs_fcc_message \
"test encrypted message 001" \
"This is a test encrypted message.\n" \
"(mml-attach-file \"TESTATTACHMENT\") (mml-secure-message-encrypt)"'
mv "${GNUPGHOME}"{.bak,}
test_expect_success 'emacs delivery of encrypted + signed message' \
-'emacs_deliver_message \
+'emacs_fcc_message \
"test encrypted message 002" \
"This is another test encrypted message.\n" \
"(mml-secure-message-sign-encrypt)"'
"[from]=\"\\\"Invalid \\\" From\\\" <test_suite@notmuchmail.org>\""
thread=$(notmuch search --output=threads subject:message-with-invalid-from)
test_emacs "(notmuch-show \"$thread\")
- (test-output)"
+ (test-output \"OUTPUT.raw\")"
cat <<EOF >EXPECTED
"Invalid " (2001-01-05) (inbox)
Subject: message-with-invalid-from
To: Notmuch Test Suite <test_suite@notmuchmail.org>
-Date: Fri, 05 Jan 2001 15:43:57 +0000
+Date: GENERATED_DATE
This is just a test message (#1)
EOF
+notmuch_date_sanitize < OUTPUT.raw > OUTPUT
test_expect_equal_file OUTPUT EXPECTED
test_begin_subtest "Navigation of notmuch-search to thread view"
A: Top-posting.
Q: What is the most annoying thing in e-mail?"'
test_emacs "(notmuch-show \"top-posting\")
- (test-visible-output)"
+ (test-visible-output \"OUTPUT.raw\")"
echo "Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-05) (inbox)
Subject: The problem with top-posting
To: Notmuch Test Suite <test_suite@notmuchmail.org>
-Date: Fri, 05 Jan 2001 15:43:57 +0000
+Date: GENERATED_DATE
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
Top Poster <top@poster.com> (2001-01-05) (inbox unread)
Subject: Re: The problem with top-posting
To: Notmuch Test Suite <test_suite@notmuchmail.org>
-Date: Fri, 05 Jan 2001 15:43:57 +0000
+Date: GENERATED_DATE
Thanks for the advice! I will be sure to put it to good use.
-Top Poster
[ 9-line hidden original message. Click/Enter to show. ]" > EXPECTED
+notmuch_date_sanitize < OUTPUT.raw > OUTPUT
test_expect_equal_file OUTPUT EXPECTED
test_begin_subtest "Hiding message in notmuch-show view"
test_begin_subtest "Do not call notmuch for non-inlinable application/mpeg parts"
id='message-with-application/mpeg-attachment@notmuchmail.org'
-emacs_deliver_message \
+emacs_fcc_message \
'Message with application/mpeg attachment' \
'' \
"(message-goto-eoh)
test_begin_subtest "Do not call notmuch for non-inlinable audio/mpeg parts"
id='message-with-audio/mpeg-attachment@notmuchmail.org'
-emacs_deliver_message \
+emacs_fcc_message \
'Message with audio/mpeg attachment' \
'' \
"(message-goto-eoh)
Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-05) (inbox)
Subject: Hiding Original Message region at beginning of a message
To: Notmuch Test Suite <test_suite@notmuchmail.org>
-Date: Fri, 05 Jan 2001 15:43:57 +0000
+Date: GENERATED_DATE
[ 2-line hidden original message. Click/Enter to show. ]
EOF
test_emacs "(notmuch-show \"id:$message_id\")
- (test-visible-output)"
+ (test-visible-output \"OUTPUT.raw\")"
+notmuch_date_sanitize < OUTPUT.raw > OUTPUT
test_expect_equal_file OUTPUT EXPECTED
test_begin_subtest "Bare subject #1"
mid:abc. mid:abc, mid:abc;"'
test_emacs '(notmuch-show "id:'$gen_msg_id'")
(notmuch-test-mark-links)
- (test-visible-output)'
+ (test-visible-output "OUTPUT.raw")'
cat <<EOF >EXPECTED
Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-05) (inbox)
Subject: id buttonization
To: Notmuch Test Suite <test_suite@notmuchmail.org>
-Date: Fri, 05 Jan 2001 15:43:57 +0000
+Date: GENERATED_DATE
<<id:abc>>
<<id:abc.def>>. <<id:abc,def>>, <<id:abc;def>>; <<id:abc:def>>:
<<mid:abc%20def>>
<<mid:abc>>. <<mid:abc>>, <<mid:abc>>;
EOF
+notmuch_date_sanitize < OUTPUT.raw > OUTPUT
test_expect_equal_file OUTPUT EXPECTED
test_begin_subtest "Message with text of unknown charset"
add_message '[content-type]="text/plain; charset=unknown-8bit"' \
"[body]=irrelevant"
-output=$(notmuch show id:${gen_msg_id} 2>&1 | notmuch_show_sanitize)
-test_expect_equal "$output" "\fmessage{ id:msg-001@notmuch-test-suite depth:0 match:1 excluded:0 filename:/XXX/mail/msg-001
+output=$(notmuch show id:${gen_msg_id} 2>&1 | notmuch_show_sanitize_all)
+test_expect_equal "$output" "\fmessage{ id:XXXXX depth:0 match:1 excluded:0 filename:XXXXX
\fheader{
Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-05) (inbox unread)
Subject: Message with text of unknown charset
From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org>
-Date: Fri, 05 Jan 2001 15:43:57 +0000
+Date: GENERATED_DATE
\fheader}
\fbody{
\fpart{ ID: 1, Content-type: text/plain
'[content-transfer-encoding]=8bit' \
'[subject]="ISO-8859-2 encoded message"' \
"[body]=$'Czech word tu\350\362\341\350\350\355 means pinguin\'s.'" # ISO-8859-2 characters are generated by shell's escape sequences
-output=$(notmuch search tučňáččí 2>&1 | notmuch_show_sanitize)
+output=$(notmuch search tučňáččí 2>&1 | notmuch_show_sanitize_all)
test_expect_equal "$output" "thread:0000000000000002 2001-01-05 [1/1] Notmuch Test Suite; ISO-8859-2 encoded message (inbox unread)"
test_begin_subtest "RFC 2047 encoded word with spaces"
test_begin_subtest "Search, don't exclude \"deleted\" messages when --exclude=flag specified"
output=$(notmuch search --exclude=flag subject:deleted | notmuch_search_sanitize)
test_expect_equal "$output" "thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Not deleted (inbox unread)
-thread:XXX 2001-01-05 [1/2] Notmuch Test Suite; Not deleted reply (deleted inbox unread)"
+thread:XXX 2001-01-05 [1/2] Notmuch Test Suite; Deleted (deleted inbox unread)"
test_begin_subtest "Search, don't exclude \"deleted\" messages from search if not configured"
notmuch config set search.exclude_tags
test_begin_subtest "Search, exclude=flag (thread summary)"
output=$(notmuch search --exclude=flag tag:test | notmuch_search_sanitize)
test_expect_equal "$output" "thread:XXX 2001-01-05 [0/6] Notmuch Test Suite; All messages excluded: single match: reply 2 (deleted inbox test unread)
-thread:XXX 2001-01-05 [0/6] Notmuch Test Suite; All messages excluded: double match: reply 4 (deleted inbox test unread)
+thread:XXX 2001-01-05 [0/6] Notmuch Test Suite; All messages excluded: double match: reply 2 (deleted inbox test unread)
thread:XXX 2001-01-05 [0/6] Notmuch Test Suite; Some messages excluded: single excluded match: reply 3 (deleted inbox test unread)
thread:XXX 2001-01-05 [1/6] Notmuch Test Suite; Some messages excluded: single non-excluded match: reply 4 (deleted inbox test unread)
thread:XXX 2001-01-05 [1/6] Notmuch Test Suite; No messages excluded: single match: reply 3 (inbox test unread)"
test_begin_subtest "Show message: json, inline attachment filename"
subject='json-show-inline-attachment-filename'
id="json-show-inline-attachment-filename@notmuchmail.org"
-emacs_deliver_message \
+emacs_fcc_message \
"$subject" \
'This is a test message with inline attachment with a filename' \
"(mml-attach-file \"$TEST_DIRECTORY/README\" nil nil \"inline\")
. ./test-lib.sh
-# Avoid including the local value of MAIL_DIR in the result.
-filter_show_json() {
- sed -e "s|${MAIL_DIR}/|MAIL_DIR/|"
-}
-
# Create the expected maildir structure
mkdir $MAIL_DIR/cur
mkdir $MAIL_DIR/new
test_expect_equal "$output" "adding-replied-tag:2,RS"
test_begin_subtest "notmuch show works with renamed file (without notmuch new)"
-output=$(notmuch show --format=json id:${gen_msg_id} | filter_show_json)
-test_expect_equal_json "$output" '[[[{"id": "adding-replied-tag@notmuch-test-suite",
+output=$(notmuch show --format=json id:${gen_msg_id} | notmuch_json_show_sanitize)
+test_expect_equal_json "$output" '[[[{"id": "XXXXX",
"match": true,
"excluded": false,
-"filename": "MAIL_DIR/cur/adding-replied-tag:2,RS",
-"timestamp": 978709437,
+"filename": "YYYYY",
+"timestamp": 42,
"date_relative": "2001-01-05",
"tags": ["inbox","replied"],
"headers": {"Subject": "Adding replied tag",
"From": "Notmuch Test Suite <test_suite@notmuchmail.org>",
"To": "Notmuch Test Suite <test_suite@notmuchmail.org>",
-"Date": "Fri, 05 Jan 2001 15:43:57 +0000"},
+"Date": "GENERATED_DATE"},
"body": [{"id": 1,
"content-type": "text/plain",
"content": "This is just a test message (#3)\n"}]},
test_begin_subtest "Show: json"
output=$(notmuch show --format=json '*' | notmuch_json_show_sanitize)
-test_expect_equal_json "$output" '
+expected=$(notmuch_json_show_sanitize <<EOF
[
[
[
[]
]
]
-]'
-
+]
+EOF
+)
+test_expect_equal_json "$output" "$expected"
test_done
test_begin_subtest "'notmuch reply' to a multipart message with json format"
notmuch reply --format=json 'id:87liy5ap00.fsf@yoom.home.cworth.org' | notmuch_json_show_sanitize >OUTPUT
-cat <<EOF >EXPECTED
+notmuch_json_show_sanitize <<EOF >EXPECTED
{"reply-headers": {"Subject": "Re: Multipart message",
"From": "Notmuch Test Suite <test_suite@notmuchmail.org>",
"To": "Carl Worth <cworth@cworth.org>, cworth@cworth.org",
test_begin_subtest "Ignore files and directories specified in new.ignore (multiple occurrences)"
notmuch config set new.ignore .git ignored_file .ignored_hidden_file
+notmuch new > /dev/null # ensure that files/folders will be printed in ASCII order.
touch "${MAIL_DIR}"/.git # change .git's mtime for notmuch new to rescan.
+touch "${MAIL_DIR}" # likewise for MAIL_DIR
mkdir -p "${MAIL_DIR}"/one/two/three/.git
-notmuch new > /dev/null # ensure that files/folders will be printed in ASCII order.
touch "${MAIL_DIR}"/{one,one/two,one/two/three}/ignored_file
output=$(NOTMUCH_NEW --debug 2>&1 | sort)
test_expect_equal "$output" \
test_expect_equal "$output" "Error: search term did not match precisely one message."
test_begin_subtest "Show a raw message"
-output=$(notmuch show --format=raw id:msg-001@notmuch-test-suite)
+output=$(notmuch show --format=raw id:msg-001@notmuch-test-suite | notmuch_date_sanitize)
test_expect_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org>
Message-Id: <msg-001@notmuch-test-suite>
Subject: Test message #1
-Date: Fri, 05 Jan 2001 15:43:57 +0000
+Date: GENERATED_DATE
This is just a test message (#1)"
test_begin_subtest "Show another raw message"
-output=$(notmuch show --format=raw id:msg-002@notmuch-test-suite)
+output=$(notmuch show --format=raw id:msg-002@notmuch-test-suite | notmuch_date_sanitize)
test_expect_equal "$output" "From: Notmuch Test Suite <test_suite@notmuchmail.org>
To: Notmuch Test Suite <test_suite@notmuchmail.org>
Message-Id: <msg-002@notmuch-test-suite>
Subject: Test message #2
-Date: Fri, 05 Jan 2001 15:43:57 +0000
+Date: GENERATED_DATE
This is just a test message (#2)"
test_begin_subtest "Show message: sexp, inline attachment filename"
subject='sexp-show-inline-attachment-filename'
id="sexp-show-inline-attachment-filename@notmuchmail.org"
-emacs_deliver_message \
+emacs_fcc_message \
"$subject" \
'This is a test message with inline attachment with a filename' \
"(mml-attach-file \"$TEST_DIRECTORY/README\" nil nil \"inline\")
fi
if [ -z "${template[date]}" ]; then
- template[date]="Fri, 05 Jan 2001 15:43:57 +0000"
+ # we use decreasing timestamps here for historical reasons;
+ # the existing test suite when we converted to unique timestamps just
+ # happened to have signicantly fewer failures with that choice.
+ template[date]=$(TZ=UTC printf "%(%a, %d %b %Y %T %z)T\n" \
+ $((978709437 - gen_msg_cnt)))
fi
additional_headers=""
(mail-host-address \"example.com\")
(smtpmail-smtp-server \"localhost\")
(smtpmail-smtp-service \"25025\"))
- (notmuch-hello)
(notmuch-mua-mail)
(message-goto-to)
(insert \"test_suite@notmuchmail.org\nDate: 01 Jan 2000 12:00:00 -0000\")
notmuch new >/dev/null
}
+# Pretend to deliver a message with emacs. Really save it to a file
+# and add it to the database
+#
+# Uses emacs to generate and deliver a message to the mail store.
+# Accepts arbitrary extra emacs/elisp functions to modify the message
+# before sending, which is useful to doing things like attaching files
+# to the message and encrypting/signing.
+emacs_fcc_message ()
+{
+ local subject="$1"
+ local body="$2"
+ shift 2
+ # before we can send a message, we have to prepare the FCC maildir
+ mkdir -p "$MAIL_DIR"/sent/{cur,new,tmp}
+
+ test_emacs \
+ "(let ((message-send-mail-function (lambda () t))
+ (mail-host-address \"example.com\"))
+ (notmuch-mua-mail)
+ (message-goto-to)
+ (insert \"test_suite@notmuchmail.org\nDate: 01 Jan 2000 12:00:00 -0000\")
+ (message-goto-subject)
+ (insert \"${subject}\")
+ (message-goto-body)
+ (insert \"${body}\")
+ $@
+ (message-send-and-exit))" || return 1
+ notmuch new >/dev/null
+}
+
# Generate a corpus of email and add it to the database.
#
# This corpus is fixed, (it happens to be 50 messages from early in
{
sed \
-e 's| filename:.*| filename:XXXXX|' \
- -e 's| id:[^ ]* | id:XXXXX |'
+ -e 's| id:[^ ]* | id:XXXXX |' | \
+ notmuch_date_sanitize
}
notmuch_json_show_sanitize ()
{
sed \
-e 's|"id": "[^"]*",|"id": "XXXXX",|g' \
- -e 's|"filename": "/[^"]*",|"filename": "YYYYY",|g'
+ -e 's|"Date": "Fri, 05 Jan 2001 [^"]*0000"|"Date": "GENERATED_DATE"|g' \
+ -e 's|"filename": "/[^"]*",|"filename": "YYYYY",|g' \
+ -e 's|"timestamp": 97.......|"timestamp": 42|g'
}
notmuch_emacs_error_sanitize ()
-e 's/^\[.*\]$/[XXX]/' \
-e "s|^\(command: \)\{0,1\}/.*/$command|\1YYY/$command|"
}
+
+notmuch_date_sanitize ()
+{
+ sed \
+ -e 's/^Date: Fri, 05 Jan 2001 .*0000/Date: GENERATED_DATE/'
+}
# End of notmuch helper functions
# Use test_set_prereq to tell that a particular prerequisite is available.