summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 5942706)
raw | patch | inline | side by side (parent: 5942706)
author | Junio C Hamano <junkio@cox.net> | |
Fri, 22 Sep 2006 23:17:58 +0000 (16:17 -0700) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Wed, 22 Nov 2006 05:27:51 +0000 (21:27 -0800) |
Somebody was wondering on #git channel why a git generated diff
does not apply with GNU patch when the filename contains a SP.
It is because GNU patch expects to find TAB (and trailing timestamp)
on ---/+++ (old_name and new_name) lines after the filenames.
The "diff --git" output format was carefully designed to be
compatible with GNU patch where it can, but whitespace
characters were always a pain.
This adds an extra TAB (but not trailing timestamp) to old_name
and new_name lines of git-diff output when the filename has a SP
in it. An earlier patch updated git-apply to prepare for this.
Signed-off-by: Junio C Hamano <junkio@cox.net>
does not apply with GNU patch when the filename contains a SP.
It is because GNU patch expects to find TAB (and trailing timestamp)
on ---/+++ (old_name and new_name) lines after the filenames.
The "diff --git" output format was carefully designed to be
compatible with GNU patch where it can, but whitespace
characters were always a pain.
This adds an extra TAB (but not trailing timestamp) to old_name
and new_name lines of git-diff output when the filename has a SP
in it. An earlier patch updated git-apply to prepare for this.
Signed-off-by: Junio C Hamano <junkio@cox.net>
diff.c | patch | blob | history |
index 33153787b8117396cf906e69e656849ac04f3257..b026c737b682f9249792600032792f3e36230163 100644 (file)
--- a/diff.c
+++ b/diff.c
struct diff_filespec *two)
{
int lc_a, lc_b;
+ const char *name_a_tab, *name_b_tab;
+
+ name_a_tab = strchr(name_a, ' ') ? "\t" : "";
+ name_b_tab = strchr(name_b, ' ') ? "\t" : "";
+
diff_populate_filespec(one, 0);
diff_populate_filespec(two, 0);
lc_a = count_lines(one->data, one->size);
lc_b = count_lines(two->data, two->size);
- printf("--- a/%s\n+++ b/%s\n@@ -", name_a, name_b);
+ printf("--- a/%s%s\n+++ b/%s%s\n@@ -",
+ name_a, name_a_tab,
+ name_b, name_b_tab);
print_line_count(lc_a);
printf(" +");
print_line_count(lc_b);
const char *reset = diff_get_color(ecbdata->color_diff, DIFF_RESET);
if (ecbdata->label_path[0]) {
- printf("%s--- %s%s\n", set, ecbdata->label_path[0], reset);
- printf("%s+++ %s%s\n", set, ecbdata->label_path[1], reset);
+ const char *name_a_tab, *name_b_tab;
+
+ name_a_tab = strchr(ecbdata->label_path[0], ' ') ? "\t" : "";
+ name_b_tab = strchr(ecbdata->label_path[1], ' ') ? "\t" : "";
+
+ printf("%s--- %s%s%s\n",
+ set, ecbdata->label_path[0], reset, name_a_tab);
+ printf("%s+++ %s%s%s\n",
+ set, ecbdata->label_path[1], reset, name_b_tab);
ecbdata->label_path[0] = ecbdata->label_path[1] = NULL;
}