Re: A systematic way of handling Xapian lock errors?
[notmuch-archives.git] / e5 / c3ce7f2fdbba3c82ff65c910810721ae9bbf79
1 Return-Path: <awg@lagos.xvx.ca>\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 13563431FC2\r
6         for <notmuch@notmuchmail.org>; Sat, 13 Jul 2013 17:55:29 -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\r
10 X-Spam-Level: \r
11 X-Spam-Status: No, score=0 tagged_above=-999 required=5\r
12         tests=[RCVD_IN_DNSWL_NONE=-0.0001] 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 XgI9yu5KBwMj for <notmuch@notmuchmail.org>;\r
16         Sat, 13 Jul 2013 17:55:23 -0700 (PDT)\r
17 X-Greylist: delayed 569 seconds by postgrey-1.32 at olra;\r
18         Sat, 13 Jul 2013 17:55:23 PDT\r
19 Received: from smtp-out-01.shaw.ca (smtp-out-01.shaw.ca [64.59.136.137])\r
20         by olra.theworths.org (Postfix) with ESMTP id 22909431FBD\r
21         for <notmuch@notmuchmail.org>; Sat, 13 Jul 2013 17:55:23 -0700 (PDT)\r
22 X-Cloudmark-SP-Filtered: true\r
23 X-Cloudmark-SP-Result: v=1.1 cv=GLqYwptGXHjY6tPk5kWRtHXJM/YfZPTWiIs1znw4zms=\r
24         c=1 sm=1\r
25         a=rp4hpZfak4kA:10 a=BLceEmwcHowA:10 a=gumk1giGF0obp6xRQyl7Yg==:17\r
26         a=CxbBOAgXj7yANbSEhssA:9 a=Wdz57yXjOC6DuMvi:21 a=0pJnlCBgKrPFDJOa:21\r
27         a=HpAAvcLHHh0Zw7uRqdWCyQ==:117\r
28 Received: from unknown (HELO lagos.xvx.ca) ([68.150.39.45])\r
29         by smtp-out-01.shaw.ca with ESMTP; 13 Jul 2013 18:46:04 -0600\r
30 Received: by lagos.xvx.ca (Postfix, from userid 1000)\r
31         id 57CD58009323; Sat, 13 Jul 2013 18:46:04 -0600 (MDT)\r
32 From: Adam Wolfe Gordon <awg+notmuch@xvx.ca>\r
33 To: notmuch@notmuchmail.org\r
34 Subject: [PATCH 2/3] cli: Introduce the add command\r
35 Date: Sat, 13 Jul 2013 18:45:45 -0600\r
36 Message-Id: <1373762746-22308-3-git-send-email-awg+notmuch@xvx.ca>\r
37 X-Mailer: git-send-email 1.7.9.5\r
38 In-Reply-To: <1373762746-22308-1-git-send-email-awg+notmuch@xvx.ca>\r
39 References: <1373762746-22308-1-git-send-email-awg+notmuch@xvx.ca>\r
40 X-BeenThere: notmuch@notmuchmail.org\r
41 X-Mailman-Version: 2.1.13\r
42 Precedence: list\r
43 List-Id: "Use and development of the notmuch mail system."\r
44         <notmuch.notmuchmail.org>\r
45 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
46         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
47 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
48 List-Post: <mailto:notmuch@notmuchmail.org>\r
49 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
50 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
51         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
52 X-List-Received-Date: Sun, 14 Jul 2013 00:55:29 -0000\r
53 \r
54 Introduce a new add command, which works the same as insert, except\r
55 that it is for adding files that already exist in the maildir. This\r
56 provides an alternative to notmuch new for situations where the user\r
57 knows what has changed. For example, if the user uses inotify to check\r
58 for new files in the maildir, the new files can be indexed using\r
59 notmuch add, avoiding the need to scan the whole maildir.\r
60 ---\r
61  notmuch-client.h |    3 +++\r
62  notmuch-insert.c |   49 +++++++++++++++++++++++++++++++++++++++++++++++++\r
63  notmuch.c        |    2 ++\r
64  3 files changed, 54 insertions(+)\r
65 \r
66 diff --git a/notmuch-client.h b/notmuch-client.h\r
67 index da332f3..09d7e5c 100644\r
68 --- a/notmuch-client.h\r
69 +++ b/notmuch-client.h\r
70 @@ -183,6 +183,9 @@ int\r
71  notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[]);\r
72  \r
73  int\r
74 +notmuch_add_command (notmuch_config_t *config, int argc, char *argv[]);\r
75 +\r
76 +int\r
77  notmuch_reply_command (notmuch_config_t *config, int argc, char *argv[]);\r
78  \r
79  int\r
80 diff --git a/notmuch-insert.c b/notmuch-insert.c\r
81 index d32a535..c141450 100644\r
82 --- a/notmuch-insert.c\r
83 +++ b/notmuch-insert.c\r
84 @@ -479,3 +479,52 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[])\r
85  \r
86      return (ret) ? 0 : 1;\r
87  }\r
88 +\r
89 +int\r
90 +notmuch_add_command (notmuch_config_t *config, int argc, char *argv[])\r
91 +{\r
92 +    notmuch_database_t *notmuch;\r
93 +    const char *db_path;\r
94 +    const char **new_tags;\r
95 +    size_t new_tags_length;\r
96 +    tag_op_list_t *tag_ops;\r
97 +    const char *filename = NULL;\r
98 +    unsigned int i;\r
99 +    notmuch_bool_t ret;\r
100 +\r
101 +    if (argc != 2) {\r
102 +       fprintf (stderr, "Error: no filename given.\n");\r
103 +       return 1;\r
104 +    }\r
105 +    filename = argv[1];\r
106 +\r
107 +    db_path = notmuch_config_get_database_path (config);\r
108 +    new_tags = notmuch_config_get_new_tags (config, &new_tags_length);\r
109 +\r
110 +    tag_ops = tag_op_list_create (config);\r
111 +    if (tag_ops == NULL) {\r
112 +       fprintf (stderr, "Out of memory.\n");\r
113 +       return 1;\r
114 +    }\r
115 +    for (i = 0; i < new_tags_length; i++) {\r
116 +       if (tag_op_list_append (tag_ops, new_tags[i], FALSE))\r
117 +           return 1;\r
118 +    }\r
119 +\r
120 +    /* Check that the message given on the commandline is in the maildir. */\r
121 +    if (strncmp (filename, db_path, strlen(db_path)) != 0) {\r
122 +       fprintf(stderr, "Error: file %s is not in maildir %s.\n", filename,\r
123 +               db_path);\r
124 +       return 1;\r
125 +    }\r
126 +\r
127 +    if (notmuch_database_open (notmuch_config_get_database_path (config),\r
128 +                              NOTMUCH_DATABASE_MODE_READ_WRITE, &notmuch))\r
129 +       return 1;\r
130 +\r
131 +    ret = add_file_to_database (notmuch, filename, tag_ops);\r
132 +\r
133 +    notmuch_database_destroy (notmuch);\r
134 +\r
135 +    return (ret) ? 0 : 1;\r
136 +}\r
137 diff --git a/notmuch.c b/notmuch.c\r
138 index 78d29a8..b61149d 100644\r
139 --- a/notmuch.c\r
140 +++ b/notmuch.c\r
141 @@ -46,6 +46,8 @@ static command_t commands[] = {\r
142        "Find and import new messages to the notmuch database." },\r
143      { "insert", notmuch_insert_command, FALSE,\r
144        "Add a new message into the maildir and notmuch database." },\r
145 +    { "add", notmuch_add_command, FALSE,\r
146 +      "Add a message from the maildir into the notmuch database." },\r
147      { "search", notmuch_search_command, FALSE,\r
148        "Search for messages matching the given search terms." },\r
149      { "show", notmuch_show_command, FALSE,\r
150 -- \r
151 1.7.9.5\r
152 \r