From: Johannes Schindelin Date: Fri, 17 Feb 2006 14:23:16 +0000 (+0100) Subject: Optionally support old diffs X-Git-Tag: v1.3.0-rc1~166^2~6 X-Git-Url: https://git.octo.it/?p=git.git;a=commitdiff_plain;h=5b5d4d9e1b31997b3179e6a253d47b7eea03d0fa Optionally support old diffs Some versions of diff do not correctly detect a missing new-line at the end of the file under certain circumstances. When defining NO_ACCURATE_DIFF, work around this bug. Signed-off-by: Johannes E. Schindelin Signed-off-by: Junio C Hamano --- diff --git a/Makefile b/Makefile index 317be3c3..697a6ddf 100644 --- a/Makefile +++ b/Makefile @@ -55,6 +55,9 @@ all: # # Define NO_ICONV if your libc does not properly support iconv. # +# Define NO_ACCURATE_DIFF if your diff program at least sometimes misses +# a missing newline at the end of the file. +# # Define COLLISION_CHECK below if you believe that SHA1's # 1461501637330902918203684832716283019655932542976 hashes do not give you # sufficient guarantee that no collisions between objects will ever happen. @@ -403,6 +406,9 @@ else endif endif endif +ifdef NO_ACCURATE_DIFF + ALL_CFLAGS += -DNO_ACCURATE_DIFF +endif ALL_CFLAGS += -DSHA1_HEADER=$(call shellquote,$(SHA1_HEADER)) $(COMPAT_CFLAGS) LIB_OBJS += $(COMPAT_OBJS) diff --git a/apply.c b/apply.c index 2ad47fbb..1083d4f3 100644 --- a/apply.c +++ b/apply.c @@ -1142,6 +1142,14 @@ static int apply_one_fragment(struct buffer_desc *desc, struct fragment *frag) size -= len; } +#ifdef NO_ACCURATE_DIFF + if (oldsize > 0 && old[oldsize - 1] == '\n' && + newsize > 0 && new[newsize - 1] == '\n') { + oldsize--; + newsize--; + } +#endif + offset = find_offset(buf, desc->size, old, oldsize, frag->newpos); if (offset >= 0) { int diff = newsize - oldsize;