quoted
quoted
quoted
quoted
"JCH" == Junio C Hamano [off-list ref] writes:
quoted
quoted
quoted
quoted
"LT" == Linus Torvalds [off-list ref] writes:
LT> How about instead making sure that any "extra" text be NUL-terminated and
LT> never start with ':' after a NUL (which will automatically be true, since
LT> it's either "diff-tree " + ascii for the verbose case, or just the tree
LT> name).
JCH> Makes much more sense although it has certain amount of Yuck
JCH> factor ;-).
------------
NUL terminate diff-tree header lines under -z.
Thomas Glanzmann noticed that diff-tree -z HEAD piped to
diff-helper -z did not work. Since diff-helper -z expects NUL
terminated lines, we should generate such.
The output side of the diff-helper should always be using '\n'
termination; earlier it used the same line_termination used for
the input side, which was a mistake.
Signed-off-by: Junio C Hamano <redacted>
---
*** Against your head, not my head that already has the
*** rename/copy fix.
*** Only rightly tested with the exact command line Thomas used.
cd /opt/packrat/playpen/public/in-place/git/git.junio/
jit-diff
# - linus: Don't care about st_dev in the index file
# + (working tree)
diff --git a/diff-helper.c b/diff-helper.c
--- a/diff-helper.c
+++ b/diff-helper.c
@@ -121,7 +121,7 @@ int main(int ac, const char **av) {
if (status) {
unrecognized:
diff_flush(diff_output_style);
- printf("%s%c", sb1.buf, line_termination);
+ printf("%s\n", sb1.buf);
}
}
if (detect_rename)diff --git a/diff-tree.c b/diff-tree.c
--- a/diff-tree.c
+++ b/diff-tree.c
@@ -277,7 +277,18 @@ static int call_diff_flush(void)
if (nr_paths)
diffcore_pathspec(paths);
if (header) {
- printf("%s", header);
+ if (diff_output_format == DIFF_FORMAT_MACHINE) {
+ const char *ep, *cp;
+ for (cp = header; *cp; cp = ep) {
+ ep = strchr(cp, '\n');
+ if (ep == 0) ep = cp + strlen(cp);
+ printf("%.*s%c", ep-cp, cp, 0);
+ if (*ep) ep++;
+ }
+ }
+ else {
+ printf("%s", header);
+ }
header = NULL;
}
diff_flush(diff_output_format);