From 946f5f7c245a0f9398417be5946795cfebfd1c62 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Wed, 21 Sep 2005 00:20:06 -0700 Subject: [PATCH] Diff: --name-status output format. The new output format shows only the status letter and paths. Signed-off-by: Junio C Hamano --- Documentation/diff-options.txt | 4 ++-- diff.c | 22 +++++++++++++--------- diff.h | 2 ++ 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt index 616d4a412..613a60d60 100644 --- a/Documentation/diff-options.txt +++ b/Documentation/diff-options.txt @@ -15,8 +15,8 @@ --name-only:: Show only names of changed files. ---name-only-z:: - Same as --name-only, but terminate lines with NUL. +--name-status:: + Show only names and status of changed files. -B:: Break complete rewrite changes into pairs of delete and create. diff --git a/diff.c b/diff.c index cafc75540..9bded2872 100644 --- a/diff.c +++ b/diff.c @@ -709,6 +709,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 +837,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 +874,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 +1069,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); diff --git a/diff.h b/diff.h index 2e3287090..7f4079c87 100644 --- a/diff.h +++ b/diff.h @@ -67,6 +67,7 @@ extern void diffcore_std_no_resolve(struct diff_options *); " -p output patch format.\n" \ " -u synonym for -p.\n" \ " --name-only show only names of changed files.\n" \ +" --name-status show names and status of changed files.\n" \ " -R swap input file pairs.\n" \ " -B detect complete rewrites.\n" \ " -M detect renames.\n" \ @@ -85,6 +86,7 @@ extern int diff_queue_is_empty(void); #define DIFF_FORMAT_PATCH 2 #define DIFF_FORMAT_NO_OUTPUT 3 #define DIFF_FORMAT_NAME 4 +#define DIFF_FORMAT_NAME_STATUS 5 extern void diff_flush(struct diff_options*); -- 2.30.2