Browse Source

convert: move multiple file filter error handling to separate function

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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Lars Schneider 8 years ago committed by Junio C Hamano
parent
commit
9364fc298a
  1. 47
      convert.c

47
convert.c

@ -565,6 +565,29 @@ done:
return err; 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, static int apply_multi_file_filter(const char *path, const char *src, size_t len,
int fd, struct strbuf *dst, const char *cmd, int fd, struct strbuf *dst, const char *cmd,
const unsigned int wanted_capability) 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: done:
sigchain_pop(SIGPIPE); sigchain_pop(SIGPIPE);


if (err) { if (err)
if (!strcmp(filter_status.buf, "error")) { handle_filter_error(&filter_status, entry, wanted_capability);
/* The filter signaled a problem with the file. */ else
} 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 {
strbuf_swap(dst, &nbuf); strbuf_swap(dst, &nbuf);
}
strbuf_release(&nbuf); strbuf_release(&nbuf);
return !err; return !err;
} }

Loading…
Cancel
Save