X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=diff.c;h=7d06b035ae8b6a53f10a7f94251a24d911baa509;hb=bc162e40ea6dc3208e3bda76301d6409607ed3ff;hp=cafc755406761f69e14584b4b459c15d92f1cf7b;hpb=8082d8d3050e3fdd7b0f13c7a7b3ad68af7f478a;p=git.git diff --git a/diff.c b/diff.c index cafc7554..7d06b035 100644 --- a/diff.c +++ b/diff.c @@ -10,7 +10,6 @@ #include "diffcore.h" static const char *diff_opts = "-pu"; -static unsigned char null_sha1[20] = { 0, }; static int use_size_cache; @@ -414,7 +413,7 @@ void diff_free_filespec_data(struct diff_filespec *s) static void prep_temp_blob(struct diff_tempfile *temp, void *blob, unsigned long size, - unsigned char *sha1, + const unsigned char *sha1, int mode) { int fd; @@ -709,6 +708,8 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) options->rename_limit = strtoul(arg+2, NULL, 10); else if (!strcmp(arg, "--name-only")) options->output_format = DIFF_FORMAT_NAME; + else if (!strcmp(arg, "--name-status")) + options->output_format = DIFF_FORMAT_NAME_STATUS; else if (!strcmp(arg, "-R")) options->reverse_diff = 1; else if (!strncmp(arg, "-S", 2)) @@ -835,7 +836,8 @@ void diff_free_filepair(struct diff_filepair *p) static void diff_flush_raw(struct diff_filepair *p, int line_termination, - int inter_name_termination) + int inter_name_termination, + int output_format) { int two_paths; char status[10]; @@ -871,13 +873,12 @@ static void diff_flush_raw(struct diff_filepair *p, two_paths = 0; break; } - printf(":%06o %06o %s ", - p->one->mode, p->two->mode, sha1_to_hex(p->one->sha1)); - printf("%s %s%c%s", - sha1_to_hex(p->two->sha1), - status, - inter_name_termination, - p->one->path); + if (output_format != DIFF_FORMAT_NAME_STATUS) { + printf(":%06o %06o %s ", + p->one->mode, p->two->mode, sha1_to_hex(p->one->sha1)); + printf("%s ", sha1_to_hex(p->two->sha1)); + } + printf("%s%c%s",status, inter_name_termination, p->one->path); if (two_paths) printf("%c%s", inter_name_termination, p->two->path); putchar(line_termination); @@ -1067,8 +1068,10 @@ void diff_flush(struct diff_options *options) diff_flush_patch(p); break; case DIFF_FORMAT_RAW: + case DIFF_FORMAT_NAME_STATUS: diff_flush_raw(p, line_termination, - inter_name_termination); + inter_name_termination, + diff_output_format); break; case DIFF_FORMAT_NAME: diff_flush_name(p, line_termination);