Re: v4 of DB_RETRY_LOCK patches
[notmuch-archives.git] / f9 / d0cb9b108d79a80b3c418adca247ae7e6f4367
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 1D002431FBF\r
6         for <notmuch@notmuchmail.org>; Mon, 27 May 2013 14:44:49 -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 iJc467Op9lHs for <notmuch@notmuchmail.org>;\r
16         Mon, 27 May 2013 14:44: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         by olra.theworths.org (Postfix) with ESMTP id 5CE59431FAF\r
20         for <notmuch@notmuchmail.org>; Mon, 27 May 2013 14:44:41 -0700 (PDT)\r
21 X-AuditID: 1209190e-b7f4f6d000005142-92-51a3d3c88eec\r
22 Received: from mailhub-auth-2.mit.edu ( [18.7.62.36])\r
23         by dmz-mailsec-scanner-3.mit.edu (Symantec Messaging Gateway) with SMTP\r
24         id 56.8F.20802.8C3D3A15; Mon, 27 May 2013 17:44:40 -0400 (EDT)\r
25 Received: from outgoing.mit.edu (OUTGOING-AUTH-1.MIT.EDU [18.9.28.11])\r
26         by mailhub-auth-2.mit.edu (8.13.8/8.9.2) with ESMTP id r4RLidvF006404; \r
27         Mon, 27 May 2013 17:44:40 -0400\r
28 Received: from awakening.csail.mit.edu (awakening.csail.mit.edu [18.26.4.91])\r
29         (authenticated bits=0)\r
30         (User authenticated as amdragon@ATHENA.MIT.EDU)\r
31         by outgoing.mit.edu (8.13.8/8.12.4) with ESMTP id r4RLibL7009904\r
32         (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT);\r
33         Mon, 27 May 2013 17:44:38 -0400\r
34 Received: from amthrax by awakening.csail.mit.edu with local (Exim 4.80)\r
35         (envelope-from <amdragon@mit.edu>)\r
36         id 1Uh5DY-0000d7-Ox; Mon, 27 May 2013 17:44:36 -0400\r
37 Date: Mon, 27 May 2013 17:44:36 -0400\r
38 From: Austin Clements <amdragon@MIT.EDU>\r
39 To: Tomi Ollila <tomi.ollila@iki.fi>\r
40 Subject: Re: [PATCH v2 1/4] cli: add global option --stderr=FILE\r
41 Message-ID: <20130527214436.GT5999@mit.edu>\r
42 References: <1369557954-13439-1-git-send-email-tomi.ollila@iki.fi>\r
43         <1369557954-13439-2-git-send-email-tomi.ollila@iki.fi>\r
44 MIME-Version: 1.0\r
45 Content-Type: text/plain; charset=us-ascii\r
46 Content-Disposition: inline\r
47 In-Reply-To: <1369557954-13439-2-git-send-email-tomi.ollila@iki.fi>\r
48 User-Agent: Mutt/1.5.21 (2010-09-15)\r
49 X-Brightmail-Tracker:\r
50  H4sIAAAAAAAAA+NgFmpileLIzCtJLcpLzFFi42IRYrdT0T1xeXGgwZsrphbXb85ktnizch6r\r
51         A5PH4a8LWTyerbrFHMAUxWWTkpqTWZZapG+XwJXRcv05W8F1sYodrx8xNjD2C3YxcnJICJhI\r
52         dD9axQ5hi0lcuLeeDcQWEtjHKHG1zaWLkQvI3sgosWL/OqjEaSaJndcFIBJLgBKHzjOBJFgE\r
53         VCV23+hhBbHZBDQktu1fzghiiwioSDxoWw8WZxaQlvj2uxmsXljAQeJVzxNmEJtXQFvi2rmP\r
54         LBALqiXOtD+FigtKnJz5hAWiV0vixr+XQL0cYHOW/+MACXMKOEvs6JoA9oAo0KopJ7exTWAU\r
55         moWkexaS7lkI3QsYmVcxyqbkVunmJmbmFKcm6xYnJ+blpRbpGuvlZpbopaaUbmIEBTWnJN8O\r
56         xq8HlQ4xCnAwKvHwTsxeHCjEmlhWXJl7iFGSg0lJlHfWJaAQX1J+SmVGYnFGfFFpTmrxIUYJ\r
57         DmYlEd7tK4ByvCmJlVWpRfkwKWkOFiVx3ispN/2FBNITS1KzU1MLUotgsjIcHEoSvK9BhgoW\r
58         paanVqRl5pQgpJk4OEGG84AMB6nhLS5IzC3OTIfIn2JUlBLnvQeSEABJZJTmwfXCks4rRnGg\r
59         V4R5r4NU8QATFlz3K6DBTECDxZnBBpckIqSkGhjjVm28tXKzzISZD/IUfrcnPmWuVJ5o7O7n\r
60         LHiurWwZR5HQr2N9730/CZ/a+PDF8diJOiutb7mf1Ztnp5cTFmJV/9p14RsPEf0K1v3x4bsb\r
61         N/8Pf65tzpr8xiD5fdd8pv9TT5/eVD3P7NXk7b9M7E26VKyZVNPn/L/EuTxklnPUvsSVPrYi\r
62         DG+UWIozEg21mIuKEwGHteB2FQMAAA==\r
63 Cc: notmuch@notmuchmail.org\r
64 X-BeenThere: notmuch@notmuchmail.org\r
65 X-Mailman-Version: 2.1.13\r
66 Precedence: list\r
67 List-Id: "Use and development of the notmuch mail system."\r
68         <notmuch.notmuchmail.org>\r
69 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
70         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
71 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
72 List-Post: <mailto:notmuch@notmuchmail.org>\r
73 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
74 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
75         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
76 X-List-Received-Date: Mon, 27 May 2013 21:44:49 -0000\r
77 \r
78 Quoth Tomi Ollila on May 26 at 11:45 am:\r
79 > With this option all writes to stderr are redirected to the spesified\r
80 > FILE (or to stdout on case FILE is '-'). This is immediately useful\r
81 > in emacs interface as some of its exec intefaces do not provide\r
82 > separation of stdout and stderr.\r
83 > ---\r
84 >  notmuch-client.h |  1 +\r
85 >  notmuch.c        | 32 ++++++++++++++++++++++++++++++++\r
86 >  2 files changed, 33 insertions(+)\r
87\r
88 > diff --git a/notmuch-client.h b/notmuch-client.h\r
89 > index 45749a6..4a3c7ac 100644\r
90 > --- a/notmuch-client.h\r
91 > +++ b/notmuch-client.h\r
92 > @@ -54,6 +54,7 @@ typedef GMimeCipherContext notmuch_crypto_context_t;\r
93 >  #include <sys/stat.h>\r
94 >  #include <sys/time.h>\r
95 >  #include <unistd.h>\r
96 > +#include <fcntl.h>\r
97 >  #include <dirent.h>\r
98 >  #include <errno.h>\r
99 >  #include <signal.h>\r
100 > diff --git a/notmuch.c b/notmuch.c\r
101 > index f51a84f..654a568 100644\r
102 > --- a/notmuch.c\r
103 > +++ b/notmuch.c\r
104 > @@ -251,6 +251,32 @@ notmuch_command (notmuch_config_t *config,\r
105 >      return 0;\r
106 >  }\r
107 >  \r
108 > +static int\r
109 > +redirect_stderr (const char * stderr_file)\r
110 > +{\r
111 > +    if (strcmp (stderr_file, "-") == 0) {\r
112 > +     if (dup2 (STDOUT_FILENO, STDERR_FILENO) < 0) {\r
113 > +         perror ("dup2");\r
114 > +         return 1;\r
115 > +     }\r
116 > +    } else {\r
117 > +     int fd = open (stderr_file, O_WRONLY|O_CREAT|O_APPEND, 0644);\r
118 \r
119 I think this should include O_TRUNC; otherwise it's too error-prone to\r
120 use programmatically.  The permissions should be 0666 (if the user's\r
121 umask says things should be group or world writable, it's not our job\r
122 to disagree).\r
123 \r
124 > +     if (fd < 0) {\r
125 > +         fprintf (stderr, "Error: Cannot redirect stderr to '%s': %s\n",\r
126 > +                  stderr_file, strerror (errno));\r
127 > +         return 1;\r
128 > +     }\r
129 > +     if (fd != STDERR_FILENO) {\r
130 > +         if (dup2 (fd, STDERR_FILENO) < 0) {\r
131 > +             perror ("dup2");\r
132 > +             return 1;\r
133 > +         }\r
134 > +         close (fd);\r
135 > +     }\r
136 > +    }\r
137 > +    return 0;\r
138 > +}\r
139 > +\r
140 >  int\r
141 >  main (int argc, char *argv[])\r
142 >  {\r
143 > @@ -259,6 +285,7 @@ main (int argc, char *argv[])\r
144 >      const char *command_name = NULL;\r
145 >      command_t *command;\r
146 >      char *config_file_name = NULL;\r
147 > +    char *stderr_file = NULL;\r
148 >      notmuch_config_t *config;\r
149 >      notmuch_bool_t print_help=FALSE, print_version=FALSE;\r
150 >      int opt_index;\r
151 > @@ -268,6 +295,7 @@ main (int argc, char *argv[])\r
152 >       { NOTMUCH_OPT_BOOLEAN, &print_help, "help", 'h', 0 },\r
153 >       { NOTMUCH_OPT_BOOLEAN, &print_version, "version", 'v', 0 },\r
154 >       { NOTMUCH_OPT_STRING, &config_file_name, "config", 'c', 0 },\r
155 > +     { NOTMUCH_OPT_STRING, &stderr_file, "stderr", '\0', 0 },\r
156 >       { 0, 0, 0, 0, 0 }\r
157 >      };\r
158 >  \r
159 > @@ -287,6 +315,10 @@ main (int argc, char *argv[])\r
160 >       return 1;\r
161 >      }\r
162 >  \r
163 > +    if (stderr_file && redirect_stderr (stderr_file) != 0) {\r
164 > +     /* error already printed */\r
165 > +     return 1;\r
166 > +    }\r
167 >      if (print_help)\r
168 >       return notmuch_help_command (NULL, argc - 1, &argv[1]);\r
169 >  \r