git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v14 37/41] apply: change error_routine when silent

From
Christian Couder <christian.couder@gmail.com>
Date
Sep 4, 2016, 20:18 UTC
Message-ID
<20160904201833.21676-38-chriscool@tuxfamily.org>
In-Reply-To
<20160904201833.21676-1-chriscool@tuxfamily.org>

To avoid printing anything when applying with `state->apply_verbosity == verbosity_silent`, let's save the existing warn and error routines before applying, and let's replace them with a routine that does nothing.

Then after applying, let's restore the saved routines.

Note that, as we need to restore the saved routines in all cases, we cannot return early any more in apply_all_patches().

Helped-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
 apply.c | 21 ++++++++++++++++++++-
 apply.h |  8 ++++++++
 2 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/apply.c b/apply.c
index ddbb0a2..27baf0e 100644
--- a/apply.c
+++ b/apply.c
@@ -112,6 +112,11 @@ void clear_apply_state(struct apply_state *state)
 	/* &state->fn_table is cleared at the end of apply_patch() */
 }
 
+static void mute_routine(const char *msg, va_list params)
+{
+	/* do nothing */
+}
+
 int check_apply_state(struct apply_state *state, int force_apply)
 {
 	int is_not_gitdir = !startup_info->have_repository;
@@ -144,6 +149,13 @@ int check_apply_state(struct apply_state *state, int force_apply)
 	if (!state->lock_file)
 		return error("BUG: state->lock_file should not be NULL");
 
+	if (state->apply_verbosity <= verbosity_silent) {
+		state->saved_error_routine = get_error_routine();
+		state->saved_warn_routine = get_warn_routine();
+		set_error_routine(mute_routine);
+		set_warn_routine(mute_routine);
+	}
+
 	return 0;
 }
 
@@ -4864,7 +4876,7 @@ int apply_all_patches(struct apply_state *state,
 		state->newfd = -1;
 	}
 
-	return !!errs;
+	res = !!errs;
 
 end:
 	if (state->newfd >= 0) {
@@ -4872,5 +4884,12 @@ int apply_all_patches(struct apply_state *state,
 		state->newfd = -1;
 	}
 
+	if (state->apply_verbosity <= verbosity_silent) {
+		set_error_routine(state->saved_error_routine);
+		set_warn_routine(state->saved_warn_routine);
+	}
+
+	if (res > -1)
+		return res;
 	return (res == -1 ? 1 : 128);
 }
diff --git a/apply.h b/apply.h
index f015403..902346b 100644
--- a/apply.h
+++ b/apply.h
@@ -94,6 +94,14 @@ struct apply_state {
 	 */
 	struct string_list fn_table;
 
+	/*
+	 * This is to save reporting routines before using
+	 * set_error_routine() or set_warn_routine() to install muting
+	 * routines when in verbosity_silent mode.
+	 */
+	void (*saved_error_routine)(const char *err, va_list params);
+	void (*saved_warn_routine)(const char *warn, va_list params);
+
 	/* These control whitespace errors */
 	enum apply_ws_error_action ws_error_action;
 	enum apply_ws_ignore ws_ignore_action;
-- 
2.10.0.41.g9df52c3
Previous: Christian CouderNext: Christian Couder
Message 34 of 44 in “libify apply and use lib in am, part 2”
  1. 00/41 libify apply and use lib in am, part 2Christian Couder, Sep 4, 2016
  2. 01/41 apply: make some names more specificChristian Couder, Sep 4, 2016
  3. 02/41 apply: move 'struct apply_state' to apply.hChristian Couder, Sep 4, 2016
  4. 04/41 builtin/apply: read_patch_file() return -1 instead of die()ingChristian Couder, Sep 4, 2016
  5. 03/41 builtin/apply: make apply_patch() return -1 or -128 instead of die()ingChristian Couder, Sep 4, 2016
  6. 12/41 builtin/apply: make check_apply_state() return -1 instead of die()ingChristian Couder, Sep 4, 2016
  7. 11/41 apply: make init_apply_state() return -1 instead of exit()ingChristian Couder, Sep 4, 2016
  8. 14/41 builtin/apply: make apply_all_patches() return 128 or 1 on errorChristian Couder, Sep 4, 2016
  9. 15/41 builtin/apply: make parse_traditional_patch() return -1 on errorChristian Couder, Sep 4, 2016
  10. 17/41 builtin/apply: make gitdiff_*() return -1 on errorChristian Couder, Sep 4, 2016
  11. 13/41 builtin/apply: move check_apply_state() to apply.cChristian Couder, Sep 4, 2016
  12. 19/41 builtin/apply: make build_fake_ancestor() return -1 on errorChristian Couder, Sep 4, 2016
  13. 20/41 builtin/apply: make remove_file() return -1 on errorChristian Couder, Sep 4, 2016
  14. 16/41 builtin/apply: make gitdiff_*() return 1 at end of headerChristian Couder, Sep 4, 2016
  15. 23/41 builtin/apply: make create_file() return -1 on errorChristian Couder, Sep 4, 2016
  16. 22/41 builtin/apply: make add_index_file() return -1 on errorChristian Couder, Sep 4, 2016
  17. 18/41 builtin/apply: change die_on_unsafe_path() to check_unsafe_path()Christian Couder, Sep 4, 2016
  18. 24/41 builtin/apply: make write_out_one_result() return -1 on errorChristian Couder, Sep 4, 2016
  19. 21/41 builtin/apply: make add_conflicted_stages_file() return -1 on errorChristian Couder, Sep 4, 2016
  20. 25/41 builtin/apply: make write_out_results() return -1 on errorChristian Couder, Sep 4, 2016
  21. 29/41 apply: rename and move opt constants to apply.hChristian Couder, Sep 4, 2016
  22. 27/41 builtin/apply: make create_one_file() return -1 on errorChristian Couder, Sep 4, 2016
  23. 31/41 apply: make some parsing functions static againChristian Couder, Sep 4, 2016
  24. 32/41 apply: use error_errno() where possibleChristian Couder, Sep 4, 2016
  25. 28/41 builtin/apply: rename option parsing functionsChristian Couder, Sep 4, 2016
  26. 33/41 apply: make it possible to silently applyChristian Couder, Sep 4, 2016
  27. 34/41 apply: don't print on stdout in verbosity_silent modeChristian Couder, Sep 4, 2016
  28. 26/41 builtin/apply: make try_create_file() return -1 on errorChristian Couder, Sep 4, 2016
  29. 35/41 usage: add set_warn_routine()Christian Couder, Sep 4, 2016
  30. 41/41 builtin/am: use apply API in run_apply()Christian Couder, Sep 4, 2016
  31. 40/41 apply: learn to use a different index fileChristian Couder, Sep 4, 2016
  32. 39/41 apply: pass apply state to build_fake_ancestor()Christian Couder, Sep 4, 2016
  33. 38/41 apply: refactor `git apply` option parsingChristian Couder, Sep 4, 2016
  34. 37/41 apply: change error_routine when silentChristian Couder, Sep 4, 2016
  35. 36/41 usage: add get_error_routine() and get_warn_routine()Christian Couder, Sep 4, 2016
  36. 06/41 builtin/apply: make parse_chunk() return a negative integer on errorChristian Couder, Sep 4, 2016
  37. 10/41 builtin/apply: move init_apply_state() to apply.cChristian Couder, Sep 4, 2016
  38. 09/41 builtin/apply: make parse_ignorewhitespace_option() return -1 instead of die()ingChristian Couder, Sep 4, 2016
  39. 07/41 builtin/apply: make parse_single_patch() return -1 on errorChristian Couder, Sep 4, 2016
  40. 08/41 builtin/apply: make parse_whitespace_option() return -1 instead of die()ingChristian Couder, Sep 4, 2016
  41. 05/41 builtin/apply: make find_header() return -128 instead of die()ingChristian Couder, Sep 4, 2016
  42. Stefan BellerSep 6, 2016
  43. Junio C HamanoSep 7, 2016
  44. Stefan BellerSep 6, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.