From f2ce9fde57513af026e0641073a6781a086251d5 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sat, 11 Jun 2005 20:57:13 -0700 Subject: [PATCH] Add --diff-filter= output restriction to diff-* family. This is a halfway between debugging aid and a helper to write an ultra-smart merge scripts. The new option takes a string that consists of a list of "status" letters, and limits the diff output to only those classes of changes, with two exceptions: - A broken pair (aka "complete rewrite"), does not match D (deleted) or N (created). Use B to look for them. - The letter "A" in the diff-filter string does not match anything itself, but causes the entire diff that contains selected patches to be output (this behaviour is similar to that of --pickaxe-all for the -S option). For example, $ git-rev-list HEAD | git-diff-tree --stdin -s -v -B -C --diff-filter=BCR shows a list of commits that have complete rewrite, copy, or rename. Signed-off-by: Junio C Hamano Signed-off-by: Linus Torvalds --- diff-tree.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'diff-tree.c') diff --git a/diff-tree.c b/diff-tree.c index a29c738cbe..2075715350 100644 --- a/diff-tree.c +++ b/diff-tree.c @@ -18,6 +18,7 @@ static const char *pickaxe = NULL; static int pickaxe_opts = 0; static int diff_break_opt = -1; static const char *orderfile = NULL; +static const char *diff_filter = NULL; static const char *header = NULL; static const char *header_prefix = ""; static enum cmit_fmt commit_format = CMIT_FMT_RAW; @@ -272,9 +273,10 @@ static int call_diff_flush(void) detect_rename, diff_score_opt, pickaxe, pickaxe_opts, diff_break_opt, - orderfile); + orderfile, + diff_filter); if (diff_queue_is_empty()) { - diff_flush(DIFF_FORMAT_NO_OUTPUT, 0); + diff_flush(DIFF_FORMAT_NO_OUTPUT); return 0; } if (header) { @@ -285,7 +287,7 @@ static int call_diff_flush(void) printf(fmt, header, 0); header = NULL; } - diff_flush(diff_output_format, 1); + diff_flush(diff_output_format); return 1; } @@ -468,6 +470,10 @@ int main(int argc, const char **argv) orderfile = arg + 2; continue; } + if (!strncmp(arg, "--diff-filter=", 14)) { + diff_filter = arg + 14; + continue; + } if (!strcmp(arg, "--pickaxe-all")) { pickaxe_opts = DIFF_PICKAXE_ALL; continue; -- cgit v1.2.1