update-ref --stdin: narrow scope of err strbuf

Making the strbuf local in each function that needs to print errors saves the reader from having to think about action at a distance, such as * errors piling up and being concatenated with no newline between them * errors unhandled in one function, to be later handled in another * concurrency issues, if this code starts using threads some day No functional change intended. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Reviewed-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jonathan Nieder committed Sep 2, 2014 at 14:10 UTC ab5ac95725f7a4f36f72be48f340a84e46996e90
1 file changed +10 -1
builtin/update-ref.c
+10 -1
@@ -16,7 +16,6 @@ static struct ref_transaction *transaction;
16
17 static char line_termination = '\n';
18 static int update_flags;
19 -static struct strbuf err = STRBUF_INIT;
19
20 /*
21 * Parse one whitespace- or NUL-terminated, possibly C-quoted argument
@@ -179,6 +178,7 @@ static int parse_next_sha1(struct strbuf *input, const char **next,
178
179 static const char *parse_cmd_update(struct strbuf *input, const char *next)
180 {
181 + struct strbuf err = STRBUF_INIT;
182 char *refname;
183 unsigned char new_sha1[20];
184 unsigned char old_sha1[20];
@@ -204,12 +204,14 @@ static const char *parse_cmd_update(struct strbuf *input, const char *next)
204
205 update_flags = 0;
206 free(refname);
207 + strbuf_release(&err);
208
209 return next;
210 }
211
212 static const char *parse_cmd_create(struct strbuf *input, const char *next)
213 {
214 + struct strbuf err = STRBUF_INIT;
215 char *refname;
216 unsigned char new_sha1[20];
217
@@ -232,12 +234,14 @@ static const char *parse_cmd_create(struct strbuf *input, const char *next)
234
235 update_flags = 0;
236 free(refname);
237 + strbuf_release(&err);
238
239 return next;
240 }
241
242 static const char *parse_cmd_delete(struct strbuf *input, const char *next)
243 {
244 + struct strbuf err = STRBUF_INIT;
245 char *refname;
246 unsigned char old_sha1[20];
247 int have_old;
@@ -264,12 +268,14 @@ static const char *parse_cmd_delete(struct strbuf *input, const char *next)
268
269 update_flags = 0;
270 free(refname);
271 + strbuf_release(&err);
272
273 return next;
274 }
275
276 static const char *parse_cmd_verify(struct strbuf *input, const char *next)
277 {
278 + struct strbuf err = STRBUF_INIT;
279 char *refname;
280 unsigned char new_sha1[20];
281 unsigned char old_sha1[20];
@@ -297,6 +303,7 @@ static const char *parse_cmd_verify(struct strbuf *input, const char *next)
303
304 update_flags = 0;
305 free(refname);
306 + strbuf_release(&err);
307
308 return next;
309 }
@@ -365,6 +372,8 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
372 die("Refusing to perform update with empty message.");
373
374 if (read_stdin) {
375 + struct strbuf err = STRBUF_INIT;
376 +
377 transaction = ref_transaction_begin(&err);
378 if (!transaction)
379 die("%s", err.buf);