If a filter is not defined or if it fails, git behaves as if the filter is a no-op passthru. However, if the filter exits before reading all the content, and depending on the timing git, could be kill with SIGPIPE instead. Ignore SIGPIPE while processing the filter to detect when it exits early and fallback to using the unfiltered content. Signed-off-by: Jehan Bing <jehan@xxxxxxx> --- Since it's not really a problem in the "required-filter" patch but a general one with filter drivers, I'm submitting this patch independently. I'm also wording it as a pre-patch to "required-filter". -Jehan convert.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/convert.c b/convert.c index c06309f..5d312cb 100644 --- a/convert.c +++ b/convert.c @@ -2,6 +2,7 @@ #include "attr.h" #include "run-command.h" #include "quote.h" +#include "sigchain.h" /* * convert.c - convert a file when checking it out and checking it in. @@ -360,12 +361,16 @@ static int filter_buffer(int in, int out, void *data) if (start_command(&child_process)) return error("cannot fork to run external filter %s", params->cmd); + sigchain_push(SIGPIPE, SIG_IGN); + write_err = (write_in_full(child_process.in, params->src, params->size) < 0); if (close(child_process.in)) write_err = 1; if (write_err) error("cannot feed the input to external filter %s", params->cmd); + sigchain_pop(SIGPIPE); + status = finish_command(&child_process); if (status) error("external filter %s failed %d", params->cmd, status); -- 1.7.9 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html