diff options
author | Junio C Hamano <junkio@cox.net> | 2005-04-19 00:07:24 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-19 00:07:24 +0200 |
commit | ff69ab9ad87d839e381b1e4abfe45032d18bada7 (patch) | |
tree | 8c335c69f5f8fdf31f5f863643de0e30bd352ac4 /show-diff.c | |
parent | [PATCH] show-diff.c: adjust default format for the Linux kernel. (diff) | |
download | git-ff69ab9ad87d839e381b1e4abfe45032d18bada7.tar.xz git-ff69ab9ad87d839e381b1e4abfe45032d18bada7.zip |
[PATCH] show-diff.c: make diff options customizable.
This makes the diff output formatting options customizable via the
environment variables. The default is still the Linux kernel style.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'show-diff.c')
-rw-r--r-- | show-diff.c | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/show-diff.c b/show-diff.c index 32d2fceaff..42359339bd 100644 --- a/show-diff.c +++ b/show-diff.c @@ -5,7 +5,23 @@ */ #include "cache.h" -static char *diff_cmd = "diff -L 'a/%s' -L 'b/%s' -p -u - '%s'"; +static char *diff_cmd = "diff -L 'a/%s' -L 'b/%s' "; +static char *diff_opts = "-p -u"; + +static void prepare_diff_cmd(void) +{ + /* + * Default values above are meant to match the + * Linux kernel development style. Examples of + * alternative styles you can specify via environment + * variables are: + * + * GIT_DIFF_CMD="diff -L '%s' -L '%s'" + * GIT_DIFF_OPTS="-c"; + */ + diff_cmd = getenv("GIT_DIFF_CMD") ? : diff_cmd; + diff_opts = getenv("GIT_DIFF_OPTS") ? : diff_opts; +} /* Help to copy the thing properly quoted for the shell safety. * any single quote is replaced with '\'', and the caller is @@ -49,15 +65,19 @@ static char *sq_expand(char *src) static void show_differences(char *name, char *label, void *old_contents, unsigned long long old_size) { + static char *diff_arg = " - '%s'"; FILE *f; char *name_sq = sq_expand(name); char *label_sq = (name != label) ? sq_expand(label) : name_sq; - int cmd_size = strlen(name_sq) + - strlen(label_sq) * 2 + strlen(diff_cmd); + int cmd_size = strlen(name_sq) + strlen(label_sq) * 2 + + strlen(diff_cmd) + strlen(diff_opts) + strlen(diff_arg); char *cmd = malloc(cmd_size); + int next_at; fflush(stdout); - snprintf(cmd, cmd_size, diff_cmd, label_sq, label_sq, name_sq); + next_at = snprintf(cmd, cmd_size, diff_cmd, label_sq, label_sq); + next_at += snprintf(cmd+next_at, cmd_size-next_at, "%s", diff_opts); + next_at += snprintf(cmd+next_at, cmd_size-next_at, diff_arg, name_sq); f = popen(cmd, "w"); if (old_size) fwrite(old_contents, old_size, 1, f); @@ -127,6 +147,7 @@ int main(int argc, char **argv) perror("read_cache"); exit(1); } + prepare_diff_cmd(); for (i = 0; i < entries; i++) { struct stat st; struct cache_entry *ce = active_cache[i]; |