From: Davide Libenzi Date: Mon, 03 Apr 2006 03:26:52 GMT Subject: Re: [RFH] xdiff shows trivially redundant diff. Message-ID: In-Reply-To: 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