Browse Source

[PATCH] git-diff-*: --name-only and --name-only-z.

Porcelain layers often want to find only names of changed files,
and even with diff-raw output format they end up having to pick
out only the filename.  Support --name-only (and --name-only-z
for xargs -0 and cpio -0 users that want to treat filenames with
embedded newlines sanely) flag to help them.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
maint
Junio C Hamano 20 years ago committed by Linus Torvalds
parent
commit
52f28529f4
  1. 8
      diff-cache.c
  2. 4
      diff-files.c
  3. 4
      diff-stages.c
  4. 8
      diff-tree.c
  5. 13
      diff.c
  6. 2
      diff.h

8
diff-cache.c

@ -223,6 +223,14 @@ int main(int argc, const char **argv) @@ -223,6 +223,14 @@ int main(int argc, const char **argv)
diff_output_format = DIFF_FORMAT_MACHINE;
continue;
}
if (!strcmp(arg, "--name-only")) {
diff_output_format = DIFF_FORMAT_NAME;
continue;
}
if (!strcmp(arg, "--name-only-z")) {
diff_output_format = DIFF_FORMAT_NAME_Z;
continue;
}
if (!strcmp(arg, "-R")) {
diff_setup_opt |= DIFF_SETUP_REVERSE;
continue;

4
diff-files.c

@ -55,6 +55,10 @@ int main(int argc, const char **argv) @@ -55,6 +55,10 @@ int main(int argc, const char **argv)
; /* no-op */
else if (!strcmp(argv[1], "-z"))
diff_output_format = DIFF_FORMAT_MACHINE;
else if (!strcmp(argv[1], "--name-only"))
diff_output_format = DIFF_FORMAT_NAME;
else if (!strcmp(argv[1], "--name-only-z"))
diff_output_format = DIFF_FORMAT_NAME_Z;
else if (!strcmp(argv[1], "-R"))
diff_setup_opt |= DIFF_SETUP_REVERSE;
else if (!strncmp(argv[1], "-S", 2))

4
diff-stages.c

@ -87,6 +87,10 @@ int main(int ac, const char **av) @@ -87,6 +87,10 @@ int main(int ac, const char **av)
find_copies_harder = 1;
else if (!strcmp(arg, "-z"))
diff_output_format = DIFF_FORMAT_MACHINE;
else if (!strcmp(arg, "--name-only"))
diff_output_format = DIFF_FORMAT_NAME;
else if (!strcmp(arg, "--name-only-z"))
diff_output_format = DIFF_FORMAT_NAME_Z;
else if (!strcmp(arg, "-R"))
diff_setup_opt |= DIFF_SETUP_REVERSE;
else if (!strncmp(arg, "-S", 2))

8
diff-tree.c

@ -480,6 +480,14 @@ int main(int argc, const char **argv) @@ -480,6 +480,14 @@ int main(int argc, const char **argv)
find_copies_harder = 1;
continue;
}
if (!strcmp(arg, "--name-only")) {
diff_output_format = DIFF_FORMAT_NAME;
continue;
}
if (!strcmp(arg, "--name-only-z")) {
diff_output_format = DIFF_FORMAT_NAME_Z;
continue;
}
if (!strcmp(arg, "-z")) {
diff_output_format = DIFF_FORMAT_MACHINE;
continue;

13
diff.c

@ -818,6 +818,12 @@ static void diff_flush_raw(struct diff_filepair *p, @@ -818,6 +818,12 @@ static void diff_flush_raw(struct diff_filepair *p,
putchar(line_termination);
}

static void diff_flush_name(struct diff_filepair *p,
int line_termination)
{
printf("%s%c", p->two->path, line_termination);
}

int diff_unmodified_pair(struct diff_filepair *p)
{
/* This function is written stricter than necessary to support
@ -978,7 +984,8 @@ void diff_flush(int diff_output_style) @@ -978,7 +984,8 @@ void diff_flush(int diff_output_style)
int line_termination = '\n';
int inter_name_termination = '\t';

if (diff_output_style == DIFF_FORMAT_MACHINE)
if (diff_output_style == DIFF_FORMAT_MACHINE ||
diff_output_style == DIFF_FORMAT_NAME_Z)
line_termination = inter_name_termination = 0;

for (i = 0; i < q->nr; i++) {
@ -997,6 +1004,10 @@ void diff_flush(int diff_output_style) @@ -997,6 +1004,10 @@ void diff_flush(int diff_output_style)
diff_flush_raw(p, line_termination,
inter_name_termination);
break;
case DIFF_FORMAT_NAME:
case DIFF_FORMAT_NAME_Z:
diff_flush_name(p, line_termination);
break;
}
}
for (i = 0; i < q->nr; i++)

2
diff.h

@ -59,6 +59,8 @@ extern int diff_queue_is_empty(void); @@ -59,6 +59,8 @@ extern int diff_queue_is_empty(void);
#define DIFF_FORMAT_MACHINE 1
#define DIFF_FORMAT_PATCH 2
#define DIFF_FORMAT_NO_OUTPUT 3
#define DIFF_FORMAT_NAME 4
#define DIFF_FORMAT_NAME_Z 5

extern void diff_flush(int output_style);


Loading…
Cancel
Save