Diff: --name-status output format.
authorJunio C Hamano <junkio@cox.net>
Wed, 21 Sep 2005 07:20:06 +0000 (00:20 -0700)
committerJunio C Hamano <junkio@cox.net>
Sun, 25 Sep 2005 06:50:44 +0000 (23:50 -0700)
The new output format shows only the status letter and paths.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Documentation/diff-options.txt
diff.c
diff.h

index 616d4a4..613a60d 100644 (file)
@@ -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 cafc755..9bded28 100644 (file)
--- 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 2e32870..7f4079c 100644 (file)
--- 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*);