1 Return-Path: <amdragon@mit.edu>
\r
2 X-Original-To: notmuch@notmuchmail.org
\r
3 Delivered-To: notmuch@notmuchmail.org
\r
4 Received: from localhost (localhost [127.0.0.1])
\r
5 by olra.theworths.org (Postfix) with ESMTP id 15DB7431E62
\r
6 for <notmuch@notmuchmail.org>; Tue, 29 Jul 2014 09:48:36 -0700 (PDT)
\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org
\r
11 X-Spam-Status: No, score=-2.3 tagged_above=-999 required=5
\r
12 tests=[RCVD_IN_DNSWL_MED=-2.3] autolearn=disabled
\r
13 Received: from olra.theworths.org ([127.0.0.1])
\r
14 by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)
\r
15 with ESMTP id 8XxPaj8Gw+Dd for <notmuch@notmuchmail.org>;
\r
16 Tue, 29 Jul 2014 09:48:27 -0700 (PDT)
\r
17 Received: from dmz-mailsec-scanner-3.mit.edu (dmz-mailsec-scanner-3.mit.edu
\r
19 (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
\r
20 (No client certificate requested)
\r
21 by olra.theworths.org (Postfix) with ESMTPS id 33CB6431FC3
\r
22 for <notmuch@notmuchmail.org>; Tue, 29 Jul 2014 09:48:21 -0700 (PDT)
\r
23 X-AuditID: 1209190e-f79946d000007db1-be-53d7d052b4c2
\r
24 Received: from mailhub-auth-1.mit.edu ( [18.9.21.35])
\r
25 (using TLS with cipher AES256-SHA (256/256 bits))
\r
26 (Client did not present a certificate)
\r
27 by dmz-mailsec-scanner-3.mit.edu (Symantec Messaging Gateway) with SMTP
\r
28 id B8.F5.32177.350D7D35; Tue, 29 Jul 2014 12:48:19 -0400 (EDT)
\r
29 Received: from outgoing.mit.edu (outgoing-auth-1.mit.edu [18.9.28.11])
\r
30 by mailhub-auth-1.mit.edu (8.13.8/8.9.2) with ESMTP id s6TGmHM2003473;
\r
31 Tue, 29 Jul 2014 12:48:18 -0400
\r
32 Received: from drake.dyndns.org (31-33-71.wireless.csail.mit.edu
\r
33 [128.31.33.71]) (authenticated bits=0)
\r
34 (User authenticated as amdragon@ATHENA.MIT.EDU)
\r
35 by outgoing.mit.edu (8.13.8/8.12.4) with ESMTP id s6TGmFNk030242
\r
36 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT);
\r
37 Tue, 29 Jul 2014 12:48:17 -0400
\r
38 Received: from amthrax by drake.dyndns.org with local (Exim 4.77)
\r
39 (envelope-from <amdragon@mit.edu>)
\r
40 id 1XCAZS-0007GZ-Ky; Tue, 29 Jul 2014 12:48:14 -0400
\r
41 From: Austin Clements <amdragon@MIT.EDU>
\r
42 To: notmuch@notmuchmail.org
\r
43 Subject: [PATCH v2 00/14] Implement and use database "features"
\r
44 Date: Tue, 29 Jul 2014 12:47:58 -0400
\r
45 Message-Id: <1406652492-27803-1-git-send-email-amdragon@mit.edu>
\r
46 X-Mailer: git-send-email 2.0.0
\r
47 X-Brightmail-Tracker:
\r
48 H4sIAAAAAAAAA+NgFtrIIsWRmVeSWpSXmKPExsUixCmqrBt84XqwQf8JdovVc3ksrt+cyezA
\r
49 5LFz1l12j2erbjEHMEVx2aSk5mSWpRbp2yVwZexvecZYcM66Yv2kk+wNjG2GXYycHBICJhIN
\r
50 87eyQNhiEhfurWfrYuTiEBKYzSQxacU9JghnI6NE6+XNUM4xJok5y6ZAOXMZJRpmtLGB9LMJ
\r
51 aEhs27+cEcQWEZCW2Hl3NiuIzSwgK/Hj/B8wW1jAXuLzur9g9SwCqhINEz+wg9i8Ag4SG69+
\r
52 Y4W4Q06i4cYntgmMvAsYGVYxyqbkVunmJmbmFKcm6xYnJ+blpRbpGuvlZpbopaaUbmIEh4Yk
\r
53 3w7GrweVDjEKcDAq8fBumHstWIg1say4MvcQoyQHk5Ior96+68FCfEn5KZUZicUZ8UWlOanF
\r
54 hxglOJiVRHj5zgLleFMSK6tSi/JhUtIcLErivG+trYKFBNITS1KzU1MLUotgsjIcHEoSvK/P
\r
55 AzUKFqWmp1akZeaUIKSZODhBhvMADd8HUsNbXJCYW5yZDpE/xajL8aH3TBuTEEtefl6qlDjv
\r
56 JpAiAZCijNI8uDmwmH7FKA70ljDvQZAqHmA6gJv0CmgJE9ASVhewJSWJCCmpBkY+o9IvuUzm
\r
57 IU47p2ld6sxYpKvJcZi5XOF0VJ9wyKw51TWBmbs2PKqfvH8Ot9tUOxNhi8KAZrdlYVoTlS/c
\r
58 1mD9Nj/amHNB1kaTDLWwQ4d7/jSLm1+PrLU+ulbiydnwEwtkwqP3H5+29e2XJbmSkQclkz6z
\r
59 zjffGD+xZbGS+84v/47ytm3cdESJpTgj0VCLuag4EQBdjj2VxAIAAA==
\r
60 X-BeenThere: notmuch@notmuchmail.org
\r
61 X-Mailman-Version: 2.1.13
\r
63 List-Id: "Use and development of the notmuch mail system."
\r
64 <notmuch.notmuchmail.org>
\r
65 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,
\r
66 <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>
\r
67 List-Archive: <http://notmuchmail.org/pipermail/notmuch>
\r
68 List-Post: <mailto:notmuch@notmuchmail.org>
\r
69 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>
\r
70 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,
\r
71 <mailto:notmuch-request@notmuchmail.org?subject=subscribe>
\r
72 X-List-Received-Date: Tue, 29 Jul 2014 16:48:36 -0000
\r
74 This is version 2 of
\r
75 id:1406433173-19169-1-git-send-email-amdragon@mit.edu. It fixes a bug
\r
76 pointed out by Mark [1] where the upgrade test would fail if the
\r
77 prerequisites were not available (rather than cleanly skipping the
\r
78 test like before). It also makes feature names more user-friendly and
\r
79 eliminates notmuch->needs_upgrade in favor of computing it on-the-fly
\r
80 in notmuch_database_needs_upgrade. The diff from v1 is below.
\r
82 [1] id:871tt718xp.fsf@qmul.ac.uk
\r
84 diff --git a/lib/database-private.h b/lib/database-private.h
\r
85 index 323b9fe..2ffab33 100644
\r
86 --- a/lib/database-private.h
\r
87 +++ b/lib/database-private.h
\r
88 @@ -41,7 +41,6 @@ struct _notmuch_database {
\r
92 - notmuch_bool_t needs_upgrade;
\r
93 notmuch_database_mode_t mode;
\r
95 Xapian::Database *xapian_db;
\r
96 diff --git a/lib/database.cc b/lib/database.cc
\r
97 index f105e27..b323691 100644
\r
98 --- a/lib/database.cc
\r
99 +++ b/lib/database.cc
\r
100 @@ -238,7 +238,6 @@ static prefix_t PROBABILISTIC_PREFIX[]= {
\r
101 { "subject", "XSUBJECT"},
\r
106 _find_prefix (const char *name)
\r
108 @@ -275,12 +274,12 @@ static const struct
\r
109 /* Compatibility flags when this feature is declared. */
\r
111 } feature_names[] = {
\r
112 - {NOTMUCH_FEATURE_FILE_TERMS, "file terms", "rw"},
\r
113 - {NOTMUCH_FEATURE_DIRECTORY_DOCS, "directory documents", "rw"},
\r
114 + {NOTMUCH_FEATURE_FILE_TERMS, "multiple paths per message", "rw"},
\r
115 + {NOTMUCH_FEATURE_DIRECTORY_DOCS, "relative directory paths", "rw"},
\r
116 /* Header values are not required for reading a database because a
\r
117 * reader can just refer to the message file. */
\r
118 - {NOTMUCH_FEATURE_FROM_SUBJECT_ID_VALUES, "from/subject/ID values", "w"},
\r
119 - {NOTMUCH_FEATURE_BOOL_FOLDER, "boolean folder terms", "rw"},
\r
120 + {NOTMUCH_FEATURE_FROM_SUBJECT_ID_VALUES, "from/subject/message-ID in database", "w"},
\r
121 + {NOTMUCH_FEATURE_BOOL_FOLDER, "exact folder:/path: search", "rw"},
\r
125 @@ -790,7 +789,6 @@ notmuch_database_open (const char *path,
\r
126 if (notmuch->path[strlen (notmuch->path) - 1] == '/')
\r
127 notmuch->path[strlen (notmuch->path) - 1] = '\0';
\r
129 - notmuch->needs_upgrade = FALSE;
\r
130 notmuch->mode = mode;
\r
131 notmuch->atomic_nesting = 0;
\r
133 @@ -839,11 +837,6 @@ notmuch_database_open (const char *path,
\r
137 - /* Do we want an upgrade? */
\r
138 - if (mode == NOTMUCH_DATABASE_MODE_READ_WRITE &&
\r
139 - NOTMUCH_FEATURES_CURRENT & ~notmuch->features)
\r
140 - notmuch->needs_upgrade = TRUE;
\r
142 notmuch->last_doc_id = notmuch->xapian_db->get_lastdocid ();
\r
143 last_thread_id = notmuch->xapian_db->get_metadata ("last_thread_id");
\r
144 if (last_thread_id.empty ()) {
\r
145 @@ -1173,7 +1166,8 @@ notmuch_database_get_version (notmuch_database_t *notmuch)
\r
147 notmuch_database_needs_upgrade (notmuch_database_t *notmuch)
\r
149 - return notmuch->needs_upgrade;
\r
150 + return notmuch->mode == NOTMUCH_DATABASE_MODE_READ_WRITE &&
\r
151 + (NOTMUCH_FEATURES_CURRENT & ~notmuch->features);
\r
154 static volatile sig_atomic_t do_progress_notify = 0;
\r
155 diff --git a/test/T530-upgrade.sh b/test/T530-upgrade.sh
\r
156 index c88bbc7..c4c4ac8 100755
\r
157 --- a/test/T530-upgrade.sh
\r
158 +++ b/test/T530-upgrade.sh
\r
159 @@ -3,52 +3,6 @@ test_description="database upgrade"
\r
163 -test_begin_subtest "future database versions abort open"
\r
164 -${TEST_DIRECTORY}/make-db-version ${MAIL_DIR} 9999 ""
\r
165 -output=$(notmuch search x 2>&1 | sed 's/\(database at\) .*/\1 FILENAME/')
\r
166 -rm -rf ${MAIL_DIR}/.notmuch
\r
167 -test_expect_equal "$output" "\
\r
168 -Error: Notmuch database at FILENAME
\r
169 - has a newer database format version (9999) than supported by this
\r
170 - version of notmuch (3)."
\r
172 -test_begin_subtest "unknown 'rw' feature aborts read/write open"
\r
173 -${TEST_DIRECTORY}/make-db-version ${MAIL_DIR} 3 $'test feature\trw'
\r
174 -output=$(notmuch new 2>&1 | sed 's/\(database at\) .*/\1 FILENAME/')
\r
175 -rm -rf ${MAIL_DIR}/.notmuch
\r
176 -test_expect_equal "$output" "\
\r
177 -Error: Notmuch database at FILENAME
\r
178 - requires features (test feature)
\r
179 - not supported by this version of notmuch."
\r
181 -test_begin_subtest "unknown 'rw' feature aborts read-only open"
\r
182 -${TEST_DIRECTORY}/make-db-version ${MAIL_DIR} 3 $'test feature\trw'
\r
183 -output=$(notmuch search x 2>&1 | sed 's/\(database at\) .*/\1 FILENAME/')
\r
184 -rm -rf ${MAIL_DIR}/.notmuch
\r
185 -test_expect_equal "$output" "\
\r
186 -Error: Notmuch database at FILENAME
\r
187 - requires features (test feature)
\r
188 - not supported by this version of notmuch."
\r
190 -test_begin_subtest "unknown 'w' feature aborts read/write open"
\r
191 -${TEST_DIRECTORY}/make-db-version ${MAIL_DIR} 3 $'test feature\tw'
\r
192 -output=$(notmuch new 2>&1 | sed 's/\(database at\) .*/\1 FILENAME/')
\r
193 -rm -rf ${MAIL_DIR}/.notmuch
\r
194 -test_expect_equal "$output" "\
\r
195 -Error: Notmuch database at FILENAME
\r
196 - requires features (test feature)
\r
197 - not supported by this version of notmuch."
\r
199 -test_begin_subtest "unknown 'w' feature does not abort read-only open"
\r
200 -${TEST_DIRECTORY}/make-db-version ${MAIL_DIR} 3 $'test feature\tw'
\r
201 -output=$(notmuch search x 2>&1 | sed 's/\(database at\) .*/\1 FILENAME/')
\r
202 -rm -rf ${MAIL_DIR}/.notmuch
\r
203 -test_expect_equal "$output" ""
\r
209 dbtarball=database-v1.tar.xz
\r
211 # XXX: Accomplish the same with test lib helpers
\r
212 diff --git a/test/T550-db-features.sh b/test/T550-db-features.sh
\r
213 new file mode 100755
\r
214 index 0000000..5569768
\r
216 +++ b/test/T550-db-features.sh
\r
218 +#!/usr/bin/env bash
\r
219 +test_description="database version and feature compatibility"
\r
223 +test_begin_subtest "future database versions abort open"
\r
224 +${TEST_DIRECTORY}/make-db-version ${MAIL_DIR} 9999 ""
\r
225 +output=$(notmuch search x 2>&1 | sed 's/\(database at\) .*/\1 FILENAME/')
\r
226 +rm -rf ${MAIL_DIR}/.notmuch
\r
227 +test_expect_equal "$output" "\
\r
228 +Error: Notmuch database at FILENAME
\r
229 + has a newer database format version (9999) than supported by this
\r
230 + version of notmuch (3)."
\r
232 +test_begin_subtest "unknown 'rw' feature aborts read/write open"
\r
233 +${TEST_DIRECTORY}/make-db-version ${MAIL_DIR} 3 $'test feature\trw'
\r
234 +output=$(notmuch new 2>&1 | sed 's/\(database at\) .*/\1 FILENAME/')
\r
235 +rm -rf ${MAIL_DIR}/.notmuch
\r
236 +test_expect_equal "$output" "\
\r
237 +Error: Notmuch database at FILENAME
\r
238 + requires features (test feature)
\r
239 + not supported by this version of notmuch."
\r
241 +test_begin_subtest "unknown 'rw' feature aborts read-only open"
\r
242 +${TEST_DIRECTORY}/make-db-version ${MAIL_DIR} 3 $'test feature\trw'
\r
243 +output=$(notmuch search x 2>&1 | sed 's/\(database at\) .*/\1 FILENAME/')
\r
244 +rm -rf ${MAIL_DIR}/.notmuch
\r
245 +test_expect_equal "$output" "\
\r
246 +Error: Notmuch database at FILENAME
\r
247 + requires features (test feature)
\r
248 + not supported by this version of notmuch."
\r
250 +test_begin_subtest "unknown 'w' feature aborts read/write open"
\r
251 +${TEST_DIRECTORY}/make-db-version ${MAIL_DIR} 3 $'test feature\tw'
\r
252 +output=$(notmuch new 2>&1 | sed 's/\(database at\) .*/\1 FILENAME/')
\r
253 +rm -rf ${MAIL_DIR}/.notmuch
\r
254 +test_expect_equal "$output" "\
\r
255 +Error: Notmuch database at FILENAME
\r
256 + requires features (test feature)
\r
257 + not supported by this version of notmuch."
\r
259 +test_begin_subtest "unknown 'w' feature does not abort read-only open"
\r
260 +${TEST_DIRECTORY}/make-db-version ${MAIL_DIR} 3 $'test feature\tw'
\r
261 +output=$(notmuch search x 2>&1 | sed 's/\(database at\) .*/\1 FILENAME/')
\r
262 +rm -rf ${MAIL_DIR}/.notmuch
\r
263 +test_expect_equal "$output" ""
\r