[PATCH] teach ls-tree how to handle names with embedded LF
- From
Junio C Hamano <junkio@cox.net>
- Date
- Apr 13, 2005, 23:43 UTC
- Message-ID
- <7vd5sytf94.fsf@assigned-by-dhcp.cox.net>
GIT dircache can represent filenames with embedded newline. Give ls-tree an option to terminate its output with '\0', so that its output can be further processed with tools like "sort -z" (and custom perl/python scripts).
Signed-off-by: Junio C Hamano <junkio@cox.net>
---
ls-tree.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletion(-)
ls-tree.c: 3e2a6c7d183a42e41f1073dfec6794e8f8a5e75c --- ls-tree.c +++ ls-tree.c 2005-04-13 16:17:29.000000000 -0700
@@ -5,6 +5,8 @@ */ #include "cache.h" +int line_termination = '\n'; + static int list(unsigned char *sha1) { void *buffer; @@ -31,7 +33,8 @@ * It seems not worth it to read each file just to get this * and the file size. -- pasky@ucw.cz */ type = S_ISDIR(mode) ? "tree" : "blob"; - printf("%03o\t%s\t%s\t%s\n", mode, type, sha1_to_hex(sha1), path); + printf("%03o\t%s\t%s\t%s%c", mode, type, sha1_to_hex(sha1), + path, line_termination); } return 0; } @@ -40,6 +43,10 @@ { unsigned char sha1[20]; + if (argc == 3 && !strcmp(argv[1], "-z")) { + line_termination = 0; + argc--; argv++; + } if (argc != 2) usage("ls-tree <key>"); if (get_sha1_hex(argv[1], sha1) < 0) --- head before this patch: f6803ddd4e97a8b0cc090c546d1ff085ed0a4316 tree after this patch: 0aa0af6254226f0811c72282c46e7e4d9438371c head after this patch: 63582e5e8c40790d6255206d6bde65f4ce3820bf