Re: [PATCH] emacs: wash: make word-wrap bound message width
[notmuch-archives.git] / e3 / 74b7a09e6cdf28720e0db2519c5463e905c9e6
1 Return-Path: <dottedmag@dottedmag.net>\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 1FEFE431FBC\r
6         for <notmuch@notmuchmail.org>; Thu, 26 Nov 2009 12:23:51 -0800 (PST)\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
8 Received: from olra.theworths.org ([127.0.0.1])\r
9         by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
10         with ESMTP id yqSzF81pNVVO for <notmuch@notmuchmail.org>;\r
11         Thu, 26 Nov 2009 12:23:50 -0800 (PST)\r
12 Received: from dottedmag.net (burger.dottedmag.net [212.75.37.82])\r
13         by olra.theworths.org (Postfix) with ESMTP id 922B7431FAE\r
14         for <notmuch@notmuchmail.org>; Thu, 26 Nov 2009 12:23:49 -0800 (PST)\r
15 Received: from vertex.dottedmag (unknown [91.197.127.125])\r
16         by dottedmag.net (Postfix) with ESMTPSA id 2C6788C025\r
17         for <notmuch@notmuchmail.org>; Thu, 26 Nov 2009 21:23:48 +0100 (CET)\r
18 Received: from dottedmag by vertex.dottedmag with local (Exim 4.69)\r
19         (envelope-from <dottedmag@dottedmag.net>) id 1NDksT-0007U0-55\r
20         for notmuch@notmuchmail.org; Fri, 27 Nov 2009 02:23:45 +0600\r
21 From: Mikhail Gusarov <dottedmag@dottedmag.net>\r
22 To: notmuch@notmuchmail.org\r
23 Date: Fri, 27 Nov 2009 02:23:45 +0600\r
24 Message-Id: <1259267025-28733-1-git-send-email-dottedmag@dottedmag.net>\r
25 X-Mailer: git-send-email 1.6.3.3\r
26 Subject: [notmuch] [PATCH] Handle message renames in mail spool\r
27 X-BeenThere: notmuch@notmuchmail.org\r
28 X-Mailman-Version: 2.1.12\r
29 Precedence: list\r
30 List-Id: "Use and development of the notmuch mail system."\r
31         <notmuch.notmuchmail.org>\r
32 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
33         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
34 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
35 List-Post: <mailto:notmuch@notmuchmail.org>\r
36 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
37 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
38         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
39 X-List-Received-Date: Thu, 26 Nov 2009 20:23:51 -0000\r
40 \r
41 In order to handle message renames the following changes were deemed necessary:\r
42 \r
43 * Mtime check on individual files was disabled. As files may be moved around\r
44 without changing their mtime, it's necessary to parse them even if they appear\r
45 old in case old message was moved. mtime check on directories was kept as moving\r
46 files changes mtime of directory.\r
47 \r
48 * If message being parsed is already found in database under different path,\r
49 then this message is considered to be moved, path is updated in database and\r
50 this file does not undergo further processing.\r
51 \r
52 Note that after applying this patch notmuch still does not handle copying files\r
53 (which is harmless, database will point to the last copy of message found during\r
54 'notmuch new') and deleting files (which is more serious, as dangling entries\r
55 will show up in searches).\r
56 \r
57 Signed-off-by: Mikhail Gusarov <dottedmag@dottedmag.net>\r
58 ---\r
59  lib/database.cc |   32 +++++++++++++------\r
60  notmuch-new.c   |   92 ++++++++++++++++++++++++++----------------------------\r
61  2 files changed, 66 insertions(+), 58 deletions(-)\r
62 \r
63 diff --git a/lib/database.cc b/lib/database.cc\r
64 index 2c90019..257c0b8 100644\r
65 --- a/lib/database.cc\r
66 +++ b/lib/database.cc\r
67 @@ -990,19 +990,31 @@ notmuch_database_add_message (notmuch_database_t *notmuch,\r
68         if (private_status == NOTMUCH_PRIVATE_STATUS_NO_DOCUMENT_FOUND) {\r
69             _notmuch_message_set_filename (message, filename);\r
70             _notmuch_message_add_term (message, "type", "mail");\r
71 -       } else {\r
72 -           ret = NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID;\r
73 -           goto DONE;\r
74 -       }\r
75  \r
76 -       ret = _notmuch_database_link_message (notmuch, message, message_file);\r
77 -       if (ret)\r
78 -           goto DONE;\r
79 +           ret = _notmuch_database_link_message (notmuch, message, message_file);\r
80 +           if (ret)\r
81 +               goto DONE;\r
82  \r
83 -       date = notmuch_message_file_get_header (message_file, "date");\r
84 -       _notmuch_message_set_date (message, date);\r
85 +           date = notmuch_message_file_get_header (message_file, "date");\r
86 +           _notmuch_message_set_date (message, date);\r
87  \r
88 -       _notmuch_message_index_file (message, filename);\r
89 +           _notmuch_message_index_file (message, filename);\r
90 +       } else {\r
91 +           const char *old_filename = notmuch_message_get_filename (message);\r
92 +           if (strcmp (old_filename, filename) == 0) {\r
93 +               /* We have already seen it */\r
94 +               goto DONE;\r
95 +           } else {\r
96 +               if (access (old_filename, R_OK) == 0) {\r
97 +                   /* old_filename still exists, we've got a duplicate */\r
98 +                   ret = NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID;\r
99 +                   goto DONE;\r
100 +               } else {\r
101 +                   /* Message file has been moved/renamed */\r
102 +                   _notmuch_message_set_filename (message, filename);\r
103 +               }\r
104 +           }\r
105 +       }\r
106  \r
107         _notmuch_message_sync (message);\r
108      } catch (const Xapian::Error &error) {\r
109 diff --git a/notmuch-new.c b/notmuch-new.c\r
110 index 0dd2784..d16679c 100644\r
111 --- a/notmuch-new.c\r
112 +++ b/notmuch-new.c\r
113 @@ -174,54 +174,50 @@ add_files_recursive (notmuch_database_t *notmuch,\r
114         }\r
115  \r
116         if (S_ISREG (st->st_mode)) {\r
117 -           /* If the file hasn't been modified since the last\r
118 -            * add_files, then we need not look at it. */\r
119 -           if (path_dbtime == 0 || st->st_mtime > path_dbtime) {\r
120 -               state->processed_files++;\r
121 -\r
122 -               status = notmuch_database_add_message (notmuch, next, &message);\r
123 -               switch (status) {\r
124 -                   /* success */\r
125 -                   case NOTMUCH_STATUS_SUCCESS:\r
126 -                       state->added_messages++;\r
127 -                       tag_inbox_and_unread (message);\r
128 -                       break;\r
129 -                   /* Non-fatal issues (go on to next file) */\r
130 -                   case NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID:\r
131 -                       /* Stay silent on this one. */\r
132 -                       break;\r
133 -                   case NOTMUCH_STATUS_FILE_NOT_EMAIL:\r
134 -                       fprintf (stderr, "Note: Ignoring non-mail file: %s\n",\r
135 -                                next);\r
136 -                       break;\r
137 -                   /* Fatal issues. Don't process anymore. */\r
138 -                   case NOTMUCH_STATUS_READONLY_DATABASE:\r
139 -                   case NOTMUCH_STATUS_XAPIAN_EXCEPTION:\r
140 -                   case NOTMUCH_STATUS_OUT_OF_MEMORY:\r
141 -                       fprintf (stderr, "Error: %s. Halting processing.\n",\r
142 -                                notmuch_status_to_string (status));\r
143 -                       ret = status;\r
144 -                       goto DONE;\r
145 -                   default:\r
146 -                   case NOTMUCH_STATUS_FILE_ERROR:\r
147 -                   case NOTMUCH_STATUS_NULL_POINTER:\r
148 -                   case NOTMUCH_STATUS_TAG_TOO_LONG:\r
149 -                   case NOTMUCH_STATUS_UNBALANCED_FREEZE_THAW:\r
150 -                   case NOTMUCH_STATUS_LAST_STATUS:\r
151 -                       INTERNAL_ERROR ("add_message returned unexpected value: %d",  status);\r
152 -                       goto DONE;\r
153 -               }\r
154 -\r
155 -               if (message) {\r
156 -                   notmuch_message_destroy (message);\r
157 -                   message = NULL;\r
158 -               }\r
159 -\r
160 -               if (do_add_files_print_progress) {\r
161 -                   do_add_files_print_progress = 0;\r
162 -                   add_files_print_progress (state);\r
163 -               }\r
164 -           }\r
165 +            state->processed_files++;\r
166 +\r
167 +            status = notmuch_database_add_message (notmuch, next, &message);\r
168 +            switch (status) {\r
169 +                /* success */\r
170 +                case NOTMUCH_STATUS_SUCCESS:\r
171 +                    state->added_messages++;\r
172 +                    tag_inbox_and_unread (message);\r
173 +                    break;\r
174 +               /* Non-fatal issues (go on to next file) */\r
175 +                case NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID:\r
176 +                    /* Stay silent on this one. */\r
177 +                    break;\r
178 +                case NOTMUCH_STATUS_FILE_NOT_EMAIL:\r
179 +                    fprintf (stderr, "Note: Ignoring non-mail file: %s\n",\r
180 +                             next);\r
181 +                    break;\r
182 +               /* Fatal issues. Don't process anymore. */\r
183 +                case NOTMUCH_STATUS_READONLY_DATABASE:\r
184 +                case NOTMUCH_STATUS_XAPIAN_EXCEPTION:\r
185 +                case NOTMUCH_STATUS_OUT_OF_MEMORY:\r
186 +                    fprintf (stderr, "Error: %s. Halting processing.\n",\r
187 +                             notmuch_status_to_string (status));\r
188 +                    ret = status;\r
189 +                    goto DONE;\r
190 +                default:\r
191 +                case NOTMUCH_STATUS_FILE_ERROR:\r
192 +                case NOTMUCH_STATUS_NULL_POINTER:\r
193 +                case NOTMUCH_STATUS_TAG_TOO_LONG:\r
194 +                case NOTMUCH_STATUS_UNBALANCED_FREEZE_THAW:\r
195 +                case NOTMUCH_STATUS_LAST_STATUS:\r
196 +                    INTERNAL_ERROR ("add_message returned unexpected value: %d",  status);\r
197 +                    goto DONE;\r
198 +            }\r
199 +\r
200 +            if (message) {\r
201 +                notmuch_message_destroy (message);\r
202 +                message = NULL;\r
203 +            }\r
204 +\r
205 +            if (do_add_files_print_progress) {\r
206 +                do_add_files_print_progress = 0;\r
207 +                add_files_print_progress (state);\r
208 +            }\r
209         } else if (S_ISDIR (st->st_mode)) {\r
210             status = add_files_recursive (notmuch, next, st, state);\r
211             if (status && ret == NOTMUCH_STATUS_SUCCESS)\r
212 -- \r
213 1.6.3.3\r
214 \r