From: Yann Dirson Date: Thu, 09 Dec 2010 21:38:04 GMT Subject: [PATCH 3/6] Raw diff output format for bulk moves. Message-ID: <1291930687-8990-4-git-send-email-ydirson@altern.org> In-Reply-To: <1291930687-8990-1-git-send-email-ydirson@altern.org> To distinguish the general bulk-move case (where the destination directory was pre-existing) from the directory-rename case (where it was not), the output of raw diff is displayed as "Rnnn a/* b/". Those cannot be confused with renames of files named "whatever/*" with a literal star character, from the full-zero SHA1's. Signed-off-by: Yann Dirson --- Documentation/gitdiffcore.txt | 2 +- diff.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Documentation/gitdiffcore.txt b/Documentation/gitdiffcore.txt index 93111ac..2538dc0 100644 --- a/Documentation/gitdiffcore.txt +++ b/Documentation/gitdiffcore.txt @@ -181,7 +181,7 @@ additional pass on top of the results of per-file rename detection. They are reported with NULL SHA1 id, in addition to the file renames: ------------------------------------------------ -:040000 040000 0000000... 0000000... R100 foo/ bar/ +:040000 040000 0000000... 0000000... R100 foo/* bar/ :100644 100644 0123456... 1234567... R090 foo/file0 bar/file3 :100644 100644 2345678... 2345678... R100 foo/file1 bar/file1 :100644 100644 3456789... 3456789... R100 foo/file2 bar/file2 diff --git a/diff.c b/diff.c index d64ae44..0694d7f 100644 --- a/diff.c +++ b/diff.c @@ -3499,7 +3499,14 @@ static void diff_flush_raw(struct diff_filepair *p, struct diff_options *opt) if (p->status == DIFF_STATUS_COPIED || p->status == DIFF_STATUS_RENAMED) { const char *name_a, *name_b; - name_a = p->one->path; + if (p->is_bulkmove) { + /* append "*" to the first dirname */ + char buf[PATH_MAX]; + char *next = memccpy(buf, p->one->path, '\0', PATH_MAX); + next[-1] = '*'; *next = '\0'; + name_a = buf; + } else + name_a = p->one->path; name_b = p->two->path; strip_prefix(opt->prefix_length, &name_a, &name_b); write_name_quoted(name_a, opt->file, inter_name_termination); -- 1.7.2.3