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

Re: [PATCH v6 5/6] convert: move multiple file filter error handling to separate function

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 26, 2017, 18:00 UTC
Message-ID
<xmqqinji633p.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20170625182125.6741-6-larsxschneider@gmail.com>
Lars Schneider <larsxschneider@gmail.com> writes:
Show 10 quoted lines
> Refactoring the filter error handling is useful for the subsequent patch
> 'convert: add "status=delayed" to filter process protocol'.
>
> In addition, replace the parentheses around the empty "if" block with a
> single semicolon to adhere to the Git style guide.
>
> Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
> ---
>  convert.c | 47 ++++++++++++++++++++++++++---------------------
>  1 file changed, 26 insertions(+), 21 deletions(-)
The patch looks obviously correct.  Thanks.
Show 66 quoted lines
> diff --git a/convert.c b/convert.c
> index 9907e3b9ba..e55c034d86 100644
> --- a/convert.c
> +++ b/convert.c
> @@ -565,6 +565,29 @@ static int start_multi_file_filter_fn(struct subprocess_entry *subprocess)
>  	return err;
>  }
>  
> +static void handle_filter_error(const struct strbuf *filter_status,
> +				struct cmd2process *entry,
> +				const unsigned int wanted_capability) {
> +	if (!strcmp(filter_status->buf, "error"))
> +		; /* The filter signaled a problem with the file. */
> +	else if (!strcmp(filter_status->buf, "abort") && wanted_capability) {
> +		/*
> +		 * The filter signaled a permanent problem. Don't try to filter
> +		 * files with the same command for the lifetime of the current
> +		 * Git process.
> +		 */
> +		 entry->supported_capabilities &= ~wanted_capability;
> +	} else {
> +		/*
> +		 * Something went wrong with the protocol filter.
> +		 * Force shutdown and restart if another blob requires filtering.
> +		 */
> +		error("external filter '%s' failed", entry->subprocess.cmd);
> +		subprocess_stop(&subprocess_map, &entry->subprocess);
> +		free(entry);
> +	}
> +}
> +
>  static int apply_multi_file_filter(const char *path, const char *src, size_t len,
>  				   int fd, struct strbuf *dst, const char *cmd,
>  				   const unsigned int wanted_capability)
> @@ -656,28 +679,10 @@ static int apply_multi_file_filter(const char *path, const char *src, size_t len
>  done:
>  	sigchain_pop(SIGPIPE);
>  
> -	if (err) {
> -		if (!strcmp(filter_status.buf, "error")) {
> -			/* The filter signaled a problem with the file. */
> -		} else if (!strcmp(filter_status.buf, "abort")) {
> -			/*
> -			 * The filter signaled a permanent problem. Don't try to filter
> -			 * files with the same command for the lifetime of the current
> -			 * Git process.
> -			 */
> -			 entry->supported_capabilities &= ~wanted_capability;
> -		} else {
> -			/*
> -			 * Something went wrong with the protocol filter.
> -			 * Force shutdown and restart if another blob requires filtering.
> -			 */
> -			error("external filter '%s' failed", cmd);
> -			subprocess_stop(&subprocess_map, &entry->subprocess);
> -			free(entry);
> -		}
> -	} else {
> +	if (err)
> +		handle_filter_error(&filter_status, entry, wanted_capability);
> +	else
>  		strbuf_swap(dst, &nbuf);
> -	}
>  	strbuf_release(&nbuf);
>  	return !err;
>  }
Previous: Stefan Beller
Message 24 of 24 in “convert: add "status=delayed" to filter process protocol”
  1. 0/6 convert: add "status=delayed" to filter process protocolLars Schneider, Jun 25, 2017
  2. 1/6 t0021: keep filter log files on comparisonLars Schneider, Jun 25, 2017
  3. Junio C HamanoJun 25, 2017
  4. Lars SchneiderJun 26, 2017
  5. Junio C HamanoJun 26, 2017
  6. 2/6 t0021: make debug log file name configurableLars Schneider, Jun 25, 2017
  7. Junio C HamanoJun 25, 2017
  8. 3/6 t0021: write "OUT" only on successLars Schneider, Jun 25, 2017
  9. Junio C HamanoJun 25, 2017
  10. Lars SchneiderJun 26, 2017
  11. Junio C HamanoJun 26, 2017
  12. Lars SchneiderJun 26, 2017
  13. 6/6 convert: add "status=delayed" to filter process protocolLars Schneider, Jun 25, 2017
  14. Junio C HamanoJun 26, 2017
  15. Lars SchneiderJun 26, 2017
  16. Junio C HamanoJun 26, 2017
  17. Junio C HamanoJun 26, 2017
  18. Lars SchneiderJun 27, 2017
  19. 4/6 convert: put the flags field before the flag itself for consistent styleLars Schneider, Jun 25, 2017
  20. Junio C HamanoJun 25, 2017
  21. 5/6 convert: move multiple file filter error handling to separate functionLars Schneider, Jun 25, 2017
  22. Junio C HamanoJun 26, 2017
  23. Stefan BellerJun 27, 2017
  24. Junio C HamanoJun 26, 2017

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.