On Sun, 2 Apr 2006, Linus Torvalds wrote:
On Sun, 2 Apr 2006, Davide Libenzi wrote:
Yes, it does even vanilla libxdiff ;) It's not a problem though, since it is
created in xdl_cleanup_records() that tries to do a fast pass over the records
to try to simplify the real diff operation. In trying to be fast, only hashes
are compared, and it happens that the hash for "'')" collides with another one
(try to replace one of the "'')" chars with another one). Why is this not a
problem? Because what this lead to is only lines to be marked as changed, with
a probability of about N/2^(8 * sizeof(long) - 1), even though they are not.
And this happens only during sequential groups of lines changed, that is when
the hash-colliding line is either at the begin or the end of the run.
Hmm. It's still ugly, though. No possibility to have a "clean up identical
initial and final lines" stage to get rid of extraneous bogus diffs?
It does ;) If you make the second hunk (the one with the '') line) to be
the first, the shrink-initial-and-final lines optimizations will make it
eat the '') line.
I look at diffs a lot, and while this may be rare, if I were to end up
having to wonder what the difference is and it turns out that it's just
due to a libxdelta thing, I'd be a bit irritated and wish it gave me a
proper diff..
Tomorrow I'll take a look at it.
- Davide
-
: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html