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

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

From
Torsten Bögershausen <tboegi@web.de>
Date
Jun 18, 2017, 07:20 UTC
Message-ID
<be787e74-5f37-8429-9976-abdf8725737c@web.de>
In-Reply-To
<20170601082203.50397-5-larsxschneider@gmail.com>
On 2017-06-01 10:22, Lars Schneider wrote:
> This is useful for the subsequent patch 'convert: add "status=delayed" to
> filter process protocol'.
May be
 Collecting all filter error handling is useful for the subsequent patch
 'convert: add "status=delayed" to filter process protocol'.
Show 47 quoted lines
> 
> Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
> ---
>  convert.c | 47 ++++++++++++++++++++++++++---------------------
>  1 file changed, 26 insertions(+), 21 deletions(-)
> 
> diff --git a/convert.c b/convert.c
> index f1e168bc30..a5e09bb0e8 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. */
                Note1: Do we need a line with a single ";" here ?
                Question: What should/will happen to the file ?
                Will Git complain later ? Retry later ?
Show 7 quoted lines
> -		} 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;
                         Hm, could this be clarified somewhat ?
                         Mapping "abort" to "permanent problem" makes sense as
                         such, but the only action that is done is to reset
                         a capablity.
		/*
		 * The filter signaled a missing capabilty. Don't try to filter
		 * files with the same command for the lifetime of the current
		 * Git process.
		 */
                 # And the there is a question why the answer is "abort" and not
                 # "unsupported"
Show 19 quoted lines
> -		} 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: Lars SchneiderNext: Lars Schneider
Message 13 of 20 in “convert: add "status=delayed" to filter process protocol”
  1. 0/5 convert: add "status=delayed" to filter process protocolLars Schneider, Jun 1, 2017
  2. 1/5 t0021: keep filter log files on comparisonLars Schneider, Jun 1, 2017
  3. 2/5 t0021: make debug log file name configurableLars Schneider, Jun 1, 2017
  4. 5/5 convert: add "status=delayed" to filter process protocolLars Schneider, Jun 1, 2017
  5. Junio C HamanoJun 2, 2017
  6. Lars SchneiderJun 5, 2017
  7. Jeff KingJun 24, 2017
  8. Lars SchneiderJun 24, 2017
  9. Junio C HamanoJun 24, 2017
  10. Jeff KingJun 24, 2017
  11. Jeff KingJun 24, 2017
  12. 4/5 convert: move multiple file filter error handling to separate functionLars Schneider, Jun 1, 2017
  13. Torsten BögershausenJun 18, 2017
  14. Lars SchneiderJun 18, 2017
  15. Torsten BögershausenJun 19, 2017
  16. Lars SchneiderJun 19, 2017
  17. 3/5 t0021: write "OUT" only on successLars Schneider, Jun 1, 2017
  18. Junio C HamanoJun 1, 2017
  19. Junio C HamanoJun 2, 2017
  20. Jeff KingJun 24, 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.