From b8f80925e3cdf229f03245f2ebb02323ddd98118 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sat, 16 Apr 2005 21:29:45 -0700 Subject: [PATCH] [PATCH] Optionally tell show-diff to show only named files SCMs have ways to say "I want diff only this particular file", or "I want diff files under this directory". This patch teaches show-diff to do something similar. Without command line arguments, it still examines everything in the dircache as before. Signed-off-by: Junio C Hamano Signed-off-by: Linus Torvalds --- show-diff.c | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/show-diff.c b/show-diff.c index 6f343c56b..f9e8c12f9 100644 --- a/show-diff.c +++ b/show-diff.c @@ -55,6 +55,23 @@ static void show_diff_empty(struct cache_entry *ce) } } +static const char *show_diff_usage = "show-diff [-s] [-q] [paths...]"; + +static int matches_pathspec(struct cache_entry *ce, char **spec, int cnt) +{ + int i; + int namelen = ce_namelen(ce); + for (i = 0; i < cnt; i++) { + int speclen = strlen(spec[i]); + if (! strncmp(spec[i], ce->name, speclen) && + speclen <= namelen && + (ce->name[speclen] == 0 || + ce->name[speclen] == '/')) + return 1; + } + return 0; +} + int main(int argc, char **argv) { int silent = 0; @@ -62,18 +79,19 @@ int main(int argc, char **argv) int entries = read_cache(); int i; - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-s")) { + while (1 < argc && argv[1][0] == '-') { + if (!strcmp(argv[1], "-s")) silent_on_nonexisting_files = silent = 1; - continue; - } - if (!strcmp(argv[i], "-q")) { + else if (!strcmp(argv[1], "-q")) silent_on_nonexisting_files = 1; - continue; - } - usage("show-diff [-s] [-q]"); + else + usage(show_diff_usage); + argv++; argc--; } + /* At this point, if argc == 1, then we are doing everything. + * Otherwise argv[1] .. argv[argc-1] have the explicit paths. + */ if (entries < 0) { perror("read_cache"); exit(1); @@ -86,6 +104,10 @@ int main(int argc, char **argv) char type[20]; void *new; + if (1 name, &st) < 0) { if (errno == ENOENT && silent_on_nonexisting_files) continue; -- 2.26.2