Missing headers when forwarding html message as RFC822
[notmuch-archives.git] / 7e / 6fb0dfb26578c9fbb02ba233cbab5daa77e652
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 733C7431FAE\r
6         for <notmuch@notmuchmail.org>; Tue, 29 Jul 2014 09:48:47 -0700 (PDT)\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
8 X-Spam-Flag: NO\r
9 X-Spam-Score: -2.3\r
10 X-Spam-Level: \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 eeFEN+UzuBel for <notmuch@notmuchmail.org>;\r
16         Tue, 29 Jul 2014 09:48:41 -0700 (PDT)\r
17 Received: from dmz-mailsec-scanner-3.mit.edu (dmz-mailsec-scanner-3.mit.edu\r
18         [18.9.25.14])\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 31D0F431FC9\r
22         for <notmuch@notmuchmail.org>; Tue, 29 Jul 2014 09:48:22 -0700 (PDT)\r
23 X-AuditID: 1209190e-f79946d000007db1-cd-53d7d055d027\r
24 Received: from mailhub-auth-3.mit.edu ( [18.9.21.43])\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 A9.F5.32177.550D7D35; Tue, 29 Jul 2014 12:48:22 -0400 (EDT)\r
29 Received: from outgoing.mit.edu (outgoing-auth-1.mit.edu [18.9.28.11])\r
30         by mailhub-auth-3.mit.edu (8.13.8/8.9.2) with ESMTP id s6TGmIuU030919; \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 s6TGmFav030262\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-0007Gw-Sd; 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 08/14] lib: Simplify upgrade code using a transaction\r
44 Date: Tue, 29 Jul 2014 12:48:06 -0400\r
45 Message-Id: <1406652492-27803-9-git-send-email-amdragon@mit.edu>\r
46 X-Mailer: git-send-email 2.0.0\r
47 In-Reply-To: <1406652492-27803-1-git-send-email-amdragon@mit.edu>\r
48 References: <1406652492-27803-1-git-send-email-amdragon@mit.edu>\r
49 X-Brightmail-Tracker:\r
50  H4sIAAAAAAAAA+NgFtrNIsWRmVeSWpSXmKPExsUixCmqrRt24XqwwSV3i9VzeSyu35zJ7MDk\r
51         sXPWXXaPZ6tuMQcwRXHZpKTmZJalFunbJXBl7Jm1nLFgrVzFvPVNjA2ML8W7GDk5JARMJJ6f\r
52         O8ECYYtJXLi3nq2LkYtDSGA2k8SEw5eZIJyNjBK/172Eco4xSXRcvMMM4cxllHjYf44NpJ9N\r
53         QENi2/7ljCC2iIC0xM67s1lBbGYBR4nP+xeB1QgLeEgc+38VKM7BwSKgKnFvvhZImFfAQeLb\r
54         36tsEGfISTTc+ARmcwK13rp3lwnEFgKqOTRrM8sERv4FjAyrGGVTcqt0cxMzc4pTk3WLkxPz\r
55         8lKLdI31cjNL9FJTSjcxgsNIkm8H49eDSocYBTgYlXh4N8y9FizEmlhWXJl7iFGSg0lJlFdv\r
56         3/VgIb6k/JTKjMTijPii0pzU4kOMEhzMSiK8fGeBcrwpiZVVqUX5MClpDhYlcd631lbBQgLp\r
57         iSWp2ampBalFMFkZDg4lCd7X54EaBYtS01Mr0jJzShDSTBycIMN5gIbvA6nhLS5IzC3OTIfI\r
58         n2JUlBLn3QSSEABJZJTmwfXC4vwVozjQK8K8B0GqeIApAq77FdBgJqDBrC5gg0sSEVJSDYzx\r
59         p/o3T7pr9YfDu203g8aDUqVeyfdbiwKK3Zb61AmcYVk6/83/ayGx9epWhcJrnBnvRLcX7P8s\r
60         oXFowe7jD84IpbKVP2A6uJFXimHadL1V2y6YJlx0PBXPHbDdat/Oc5Xfpv9ymFq0bunHLG3X\r
61         zRJ9SZtCWJsKdCWy1ATLS6e9iOi/KvdEp1mJpTgj0VCLuag4EQBt4z+fzgIAAA==\r
62 X-BeenThere: notmuch@notmuchmail.org\r
63 X-Mailman-Version: 2.1.13\r
64 Precedence: list\r
65 List-Id: "Use and development of the notmuch mail system."\r
66         <notmuch.notmuchmail.org>\r
67 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
68         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
69 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
70 List-Post: <mailto:notmuch@notmuchmail.org>\r
71 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
72 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
73         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
74 X-List-Received-Date: Tue, 29 Jul 2014 16:48:47 -0000\r
75 \r
76 Previously, the upgrade was organized as two passes -- an upgrade\r
77 pass, and a separate cleanup pass -- so the database was always in a\r
78 valid state.  This change substantially simplifies this code by\r
79 performing the upgrade in a transaction and combining both passes in\r
80 to one.  This 1) eliminates a lot of duplicate code between the\r
81 passes, 2) speeds up the upgrade process, 3) makes progress reporting\r
82 more accurate, 4) eliminates the potential for stale data if the\r
83 upgrade is interrupted during the cleanup pass, and 5) makes it easier\r
84 to reason about the safety of the upgrade code.\r
85 ---\r
86  lib/database.cc | 67 ++++++---------------------------------------------------\r
87  1 file changed, 7 insertions(+), 60 deletions(-)\r
88 \r
89 diff --git a/lib/database.cc b/lib/database.cc\r
90 index e650798..e4a1072 100644\r
91 --- a/lib/database.cc\r
92 +++ b/lib/database.cc\r
93 @@ -1232,6 +1232,9 @@ notmuch_database_upgrade (notmuch_database_t *notmuch,\r
94         timer_is_active = TRUE;\r
95      }\r
96  \r
97 +    /* Perform the upgrade in a transaction. */\r
98 +    db->begin_transaction (true);\r
99 +\r
100      /* Before version 1, each message document had its filename in the\r
101       * data field. Copy that into the new format by calling\r
102       * notmuch_message_add_filename.\r
103 @@ -1259,6 +1262,7 @@ notmuch_database_upgrade (notmuch_database_t *notmuch,\r
104             filename = _notmuch_message_talloc_copy_data (message);\r
105             if (filename && *filename != '\0') {\r
106                 _notmuch_message_add_filename (message, filename);\r
107 +               _notmuch_message_clear_data (message);\r
108                 _notmuch_message_sync (message);\r
109             }\r
110             talloc_free (filename);\r
111 @@ -1306,6 +1310,8 @@ notmuch_database_upgrade (notmuch_database_t *notmuch,\r
112                                                        NOTMUCH_FIND_CREATE, &status);\r
113                 notmuch_directory_set_mtime (directory, mtime);\r
114                 notmuch_directory_destroy (directory);\r
115 +\r
116 +               db->delete_document (*p);\r
117             }\r
118         }\r
119      }\r
120 @@ -1347,67 +1353,8 @@ notmuch_database_upgrade (notmuch_database_t *notmuch,\r
121      notmuch->features |= NOTMUCH_FEATURES_CURRENT;\r
122      db->set_metadata ("features", _print_features (local, notmuch->features));\r
123      db->set_metadata ("version", STRINGIFY (NOTMUCH_DATABASE_VERSION));\r
124 -    db->flush ();\r
125 -\r
126 -    /* Now that the upgrade is complete we can remove the old data\r
127 -     * and documents that are no longer needed. */\r
128 -    if (version < 1) {\r
129 -       notmuch_query_t *query = notmuch_query_create (notmuch, "");\r
130 -       notmuch_messages_t *messages;\r
131 -       notmuch_message_t *message;\r
132 -       char *filename;\r
133 -\r
134 -       for (messages = notmuch_query_search_messages (query);\r
135 -            notmuch_messages_valid (messages);\r
136 -            notmuch_messages_move_to_next (messages))\r
137 -       {\r
138 -           if (do_progress_notify) {\r
139 -               progress_notify (closure, (double) count / total);\r
140 -               do_progress_notify = 0;\r
141 -           }\r
142 -\r
143 -           message = notmuch_messages_get (messages);\r
144 -\r
145 -           filename = _notmuch_message_talloc_copy_data (message);\r
146 -           if (filename && *filename != '\0') {\r
147 -               _notmuch_message_clear_data (message);\r
148 -               _notmuch_message_sync (message);\r
149 -           }\r
150 -           talloc_free (filename);\r
151 -\r
152 -           notmuch_message_destroy (message);\r
153 -       }\r
154  \r
155 -       notmuch_query_destroy (query);\r
156 -    }\r
157 -\r
158 -    if (version < 1) {\r
159 -       Xapian::TermIterator t, t_end;\r
160 -\r
161 -       t_end = notmuch->xapian_db->allterms_end ("XTIMESTAMP");\r
162 -\r
163 -       for (t = notmuch->xapian_db->allterms_begin ("XTIMESTAMP");\r
164 -            t != t_end;\r
165 -            t++)\r
166 -       {\r
167 -           Xapian::PostingIterator p, p_end;\r
168 -           std::string term = *t;\r
169 -\r
170 -           p_end = notmuch->xapian_db->postlist_end (term);\r
171 -\r
172 -           for (p = notmuch->xapian_db->postlist_begin (term);\r
173 -                p != p_end;\r
174 -                p++)\r
175 -           {\r
176 -               if (do_progress_notify) {\r
177 -                   progress_notify (closure, (double) count / total);\r
178 -                   do_progress_notify = 0;\r
179 -               }\r
180 -\r
181 -               db->delete_document (*p);\r
182 -           }\r
183 -       }\r
184 -    }\r
185 +    db->commit_transaction ();\r
186  \r
187      if (timer_is_active) {\r
188         /* Now stop the timer. */\r
189 -- \r
190 2.0.0\r
191 \r