#include "diff.h"
static const char *diff_files_usage =
-"git-diff-files [-p] [-q] [-r] [-z] [-M] [-R] [paths...]";
+"git-diff-files [-p] [-q] [-r] [-z] [-M] [-C] [-R] [-S<string>] [paths...]";
static int generate_patch = 0;
static int line_termination = '\n';
static int detect_rename = 0;
static int reverse_diff = 0;
static int diff_score_opt = 0;
+static char *pickaxe = 0;
static int silent = 0;
static int matches_pathspec(struct cache_entry *ce, char **spec, int cnt)
line_termination = 0;
else if (!strcmp(argv[1], "-R"))
reverse_diff = 1;
+ else if (!strcmp(argv[1], "-S"))
+ pickaxe = argv[1] + 2;
else if (!strncmp(argv[1], "-M", 2)) {
diff_score_opt = diff_scoreopt_parse(argv[1]);
detect_rename = generate_patch = 1;
}
+ else if (!strncmp(argv[1], "-C", 2)) {
+ diff_score_opt = diff_scoreopt_parse(argv[1]);
+ detect_rename = 2;
+ generate_patch = 1;
+ }
else
usage(diff_files_usage);
argv++; argc--;
exit(1);
}
- diff_setup(detect_rename, diff_score_opt, reverse_diff,
- (generate_patch ? -1 : line_termination),
- 0, 0);
+ diff_setup(detect_rename, diff_score_opt, pickaxe,
+ reverse_diff, (generate_patch ? -1 : line_termination),
+ NULL, 0);
for (i = 0; i < entries; i++) {
struct stat st;
}
if (lstat(ce->name, &st) < 0) {
- if (errno != ENOENT) {
+ if (errno != ENOENT && errno != ENOTDIR) {
perror(ce->name);
continue;
}
continue;
}
changed = ce_match_stat(ce, &st);
- if (!changed)
+ if (!changed && detect_rename < 2)
continue;
oldmode = ntohl(ce->ce_mode);