Re: [feature request] emacs: use `notmuch insert` for FCC
[notmuch-archives.git] / 04 / 83eb28cd35e1f10a0ce9cd1c905a20d4e7ed56
1 Return-Path: <amthrax@drake.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 34C74429E35\r
6         for <notmuch@notmuchmail.org>; Sat, 11 Jun 2011 13:06:06 -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: -0.7\r
10 X-Spam-Level: \r
11 X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5\r
12         tests=[RCVD_IN_DNSWL_LOW=-0.7] 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 sbvJFx2la6Vm for <notmuch@notmuchmail.org>;\r
16         Sat, 11 Jun 2011 13:06:05 -0700 (PDT)\r
17 Received: from dmz-mailsec-scanner-5.mit.edu (DMZ-MAILSEC-SCANNER-5.MIT.EDU\r
18         [18.7.68.34])\r
19         by olra.theworths.org (Postfix) with ESMTP id 4BC0A429E34\r
20         for <notmuch@notmuchmail.org>; Sat, 11 Jun 2011 13:06:05 -0700 (PDT)\r
21 X-AuditID: 12074422-b7b0eae000007f48-aa-4df3cab18636\r
22 Received: from mailhub-auth-2.mit.edu ( [18.7.62.36])\r
23         by dmz-mailsec-scanner-5.mit.edu (Symantec Messaging Gateway) with SMTP\r
24         id AA.F8.32584.1BAC3FD4; Sat, 11 Jun 2011 16:06:09 -0400 (EDT)\r
25 Received: from outgoing.mit.edu (OUTGOING-AUTH.MIT.EDU [18.7.22.103])\r
26         by mailhub-auth-2.mit.edu (8.13.8/8.9.2) with ESMTP id p5BK64eb030810; \r
27         Sat, 11 Jun 2011 16:06:04 -0400\r
28 Received: from drake.mit.edu\r
29         (209-6-116-242.c3-0.arl-ubr1.sbo-arl.ma.cable.rcn.com\r
30         [209.6.116.242]) (authenticated bits=0)\r
31         (User authenticated as amdragon@ATHENA.MIT.EDU)\r
32         by outgoing.mit.edu (8.13.6/8.12.4) with ESMTP id p5BK63En005922\r
33         (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT);\r
34         Sat, 11 Jun 2011 16:06:04 -0400 (EDT)\r
35 Received: from amthrax by drake.mit.edu with local (Exim 4.76)\r
36         (envelope-from <amthrax@drake.mit.edu>)\r
37         id 1QVURX-0000I5-Ag; Sat, 11 Jun 2011 16:06:03 -0400\r
38 From: Austin Clements <amdragon@MIT.EDU>\r
39 To: notmuch@notmuchmail.org\r
40 Subject: [PATCH 06/17] new: Defer updating directory mtimes until the end.\r
41 Date: Sat, 11 Jun 2011 16:04:32 -0400\r
42 Message-Id: <1307822683-848-7-git-send-email-amdragon@mit.edu>\r
43 X-Mailer: git-send-email 1.7.5.1\r
44 In-Reply-To: <1307822683-848-1-git-send-email-amdragon@mit.edu>\r
45 References: <87ei34rnc5.fsf@yoom.home.cworth.org>\r
46         <1307822683-848-1-git-send-email-amdragon@mit.edu>\r
47 X-Brightmail-Tracker:\r
48  H4sIAAAAAAAAA+NgFtrHIsWRmVeSWpSXmKPExsUixG6norvx1GdfgxPr9Syu35zJ7MDo8WzV\r
49         LeYAxigum5TUnMyy1CJ9uwSujJb3AgXnxSp23PvG1MD4V7CLkZNDQsBE4uqmvcwQtpjEhXvr\r
50         2boYuTiEBPYxSvxbPIsVwtnAKDHh/0WozH0miTXXG5kgnPmMEpt/f2IH6WcT0JDYtn85I4gt\r
51         IiAtsfPubKB2Dg5mATWJP10qIGFhAS+JrgUTwEpYBFQlVm74B7aaV8BO4tKNdawQZyhIXLky\r
52         jwXE5hSwl5h38CqYLSSQJrHk1m72CYz8CxgZVjHKpuRW6eYmZuYUpybrFicn5uWlFuma6uVm\r
53         luilppRuYgQHjYvSDsafB5UOMQpwMCrx8Cqu/ewrxJpYVlyZe4hRkoNJSZRX5wRQiC8pP6Uy\r
54         I7E4I76oNCe1+BCjBAezkgjv+vZPvkK8KYmVValF+TApaQ4WJXHeOZLqvkIC6YklqdmpqQWp\r
55         RTBZGQ4OJQleSWB0CAkWpaanVqRl5pQgpJk4OEGG8wANP3oSqIa3uCAxtzgzHSJ/ilGX4/GG\r
56         TYcYhVjy8vNSpcR574MUCYAUZZTmwc2BRfsrRnGgt4R5f4BU8QATBdykV0BLmICWCJSCLSlJ\r
57         REhJNTDW8TP9+XRCh23V0Tmd9jkWb9dp1LUsSj/5XyCVhcvsxEPVrRy6aUFifpO//fr2oW+Z\r
58         VvcDPrW/+194h+VsKFHz/MaSxc4X/XdKq5z6I9vpq3ik9+wrn8gifnHy/hOJvK+4e7LUD12J\r
59         njHv0vu3d/aIiHsfWLzm+2Uv3hCHvLDYYLZ/Qhc4hGSVWIozEg21mIuKEwG5ULlt0QIAAA==\r
60 Cc: Austin Clements <amdragon@mit.edu>\r
61 X-BeenThere: notmuch@notmuchmail.org\r
62 X-Mailman-Version: 2.1.13\r
63 Precedence: list\r
64 List-Id: "Use and development of the notmuch mail system."\r
65         <notmuch.notmuchmail.org>\r
66 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
67         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
68 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
69 List-Post: <mailto:notmuch@notmuchmail.org>\r
70 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
71 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
72         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
73 X-List-Received-Date: Sat, 11 Jun 2011 20:06:06 -0000\r
74 \r
75 Previously, if notmuch new were interrupted between updating the\r
76 directory mtime and handling removals from that directory, a\r
77 subsequent notmuch new would not handle those removals until something\r
78 else changed in that directory.  This defers recording the updated\r
79 mtime until after removals are handled to eliminate this problem.\r
80 ---\r
81  notmuch-new.c |   23 +++++++++++++++++------\r
82  1 files changed, 17 insertions(+), 6 deletions(-)\r
83 \r
84 diff --git a/notmuch-new.c b/notmuch-new.c\r
85 index 6859594..b76b608 100644\r
86 --- a/notmuch-new.c\r
87 +++ b/notmuch-new.c\r
88 @@ -24,6 +24,7 @@\r
89  \r
90  typedef struct _filename_node {\r
91      char *filename;\r
92 +    time_t mtime;\r
93      struct _filename_node *next;\r
94  } _filename_node_t;\r
95  \r
96 @@ -46,6 +47,7 @@ typedef struct {\r
97  \r
98      _filename_list_t *removed_files;\r
99      _filename_list_t *removed_directories;\r
100 +    _filename_list_t *directory_mtimes;\r
101  \r
102      notmuch_bool_t synchronize_flags;\r
103      _filename_list_t *message_ids_to_sync;\r
104 @@ -86,7 +88,7 @@ _filename_list_create (const void *ctx)\r
105      return list;\r
106  }\r
107  \r
108 -static void\r
109 +static _filename_node_t *\r
110  _filename_list_add (_filename_list_t *list,\r
111                     const char *filename)\r
112  {\r
113 @@ -99,6 +101,8 @@ _filename_list_add (_filename_list_t *list,\r
114  \r
115      *(list->tail) = node;\r
116      list->tail = &node->next;\r
117 +\r
118 +    return node;\r
119  }\r
120  \r
121  static void\r
122 @@ -509,11 +513,7 @@ add_files_recursive (notmuch_database_t *notmuch,\r
123         notmuch_filenames_move_to_next (db_subdirs);\r
124      }\r
125  \r
126 -    if (! interrupted) {\r
127 -       status = notmuch_directory_set_mtime (directory, fs_mtime);\r
128 -       if (status && ret == NOTMUCH_STATUS_SUCCESS)\r
129 -           ret = status;\r
130 -    }\r
131 +    _filename_list_add (state->directory_mtimes, path)->mtime = fs_mtime;\r
132  \r
133    DONE:\r
134      if (next)\r
135 @@ -829,6 +829,7 @@ notmuch_new_command (void *ctx, int argc, char *argv[])\r
136  \r
137      add_files_state.removed_files = _filename_list_create (ctx);\r
138      add_files_state.removed_directories = _filename_list_create (ctx);\r
139 +    add_files_state.directory_mtimes = _filename_list_create (ctx);\r
140  \r
141      if (! debugger_is_active () && add_files_state.output_is_a_tty\r
142         && ! add_files_state.verbose) {\r
143 @@ -867,8 +868,18 @@ notmuch_new_command (void *ctx, int argc, char *argv[])\r
144         }\r
145      }\r
146  \r
147 +    for (f = add_files_state.directory_mtimes->head; f && !interrupted; f = f->next) {\r
148 +       notmuch_directory_t *directory;\r
149 +       directory = notmuch_database_get_directory (notmuch, f->filename);\r
150 +       if (directory) {\r
151 +           notmuch_directory_set_mtime (directory, f->mtime);\r
152 +           notmuch_directory_destroy (directory);\r
153 +       }\r
154 +    }\r
155 +\r
156      talloc_free (add_files_state.removed_files);\r
157      talloc_free (add_files_state.removed_directories);\r
158 +    talloc_free (add_files_state.directory_mtimes);\r
159  \r
160      /* Now that removals are done (hence the database is aware of all\r
161       * renames), we can synchronize maildir_flags to tags for all\r
162 -- \r
163 1.7.5.1\r
164 \r