X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=diff-stages.c;h=dcd20e79e4fb67cdf6ed577a42277ad00b087c68;hb=refs%2Fheads%2Fmaint;hp=85170b21d632dbb490b28ad426069ce4e1011bc1;hpb=6b5ee137e56af8093391411389dd4b18416707ec;p=git.git diff --git a/diff-stages.c b/diff-stages.c index 85170b21..dcd20e79 100644 --- a/diff-stages.c +++ b/diff-stages.c @@ -11,15 +11,17 @@ static const char diff_stages_usage[] = "git-diff-stages [] [...]" COMMON_DIFF_OPTIONS_HELP; -static void diff_stages(int stage1, int stage2) +static void diff_stages(int stage1, int stage2, const char **pathspec) { int i = 0; while (i < active_nr) { struct cache_entry *ce, *stages[4] = { NULL, }; struct cache_entry *one, *two; const char *name; - int len; + int len, skip; + ce = active_cache[i]; + skip = !ce_path_match(ce, pathspec); len = ce_namelen(ce); name = ce->name; for (;;) { @@ -34,7 +36,8 @@ static void diff_stages(int stage1, int stage2) } one = stages[stage1]; two = stages[stage2]; - if (!one && !two) + + if (skip || (!one && !two)) continue; if (!one) diff_addremove(&diff_options, '+', ntohl(two->ce_mode), @@ -54,7 +57,10 @@ static void diff_stages(int stage1, int stage2) int main(int ac, const char **av) { int stage1, stage2; + const char *prefix = setup_git_directory(); + const char **pathspec = NULL; + git_config(git_diff_config); read_cache(); diff_setup(&diff_options); while (1 < ac && av[1][0] == '-') { @@ -86,12 +92,12 @@ int main(int ac, const char **av) usage(diff_stages_usage); av += 3; /* The rest from av[0] are for paths restriction. */ - diff_options.paths = av; + pathspec = get_pathspec(prefix, av); if (diff_setup_done(&diff_options) < 0) usage(diff_stages_usage); - diff_stages(stage1, stage2); + diff_stages(stage1, stage2, pathspec); diffcore_std(&diff_options); diff_flush(&diff_options); return 0;