summaryrefslogtreecommitdiffstats
path: root/xdiff
diff options
context:
space:
mode:
authorMichael Haggerty <mhagger@alum.mit.edu>2016-08-22 13:22:41 +0200
committerJunio C Hamano <gitster@pobox.com>2016-08-23 13:51:47 -0700
commitcb0eded863c62a38e39da7921373fc5be29846cc (patch)
treed3f8d23a26e74edec7159766a773ebac87fba6a2 /xdiff
parenta8fd78cc53456ec6831436690eba06b36093ed7e (diff)
downloadgit-cb0eded863c62a38e39da7921373fc5be29846cc.tar.gz
git-cb0eded863c62a38e39da7921373fc5be29846cc.tar.xz
xdl_change_compact(): only use heuristic if group can't be matched
If the changed group of lines can be matched to a group in the other file, then that positioning should take precedence over the compaction heuristic. The old code tried the heuristic unconditionally, which cost redundant effort and also was broken if the matching code had already shifted the group higher than the blank line. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'xdiff')
-rw-r--r--xdiff/xdiffi.c38
1 files changed, 19 insertions, 19 deletions
diff --git a/xdiff/xdiffi.c b/xdiff/xdiffi.c
index 95b037ee3..61deed8d4 100644
--- a/xdiff/xdiffi.c
+++ b/xdiff/xdiffi.c
@@ -504,25 +504,25 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
}
} while (grpsiz != ix - ixs);
- /*
- * Try to move back the possibly merged group of changes, to match
- * the recorded position in the other file.
- */
- while (ixref < ix) {
- rchg[--ixs] = 1;
- rchg[--ix] = 0;
- while (rchgo[--ixo]);
- }
-
- /*
- * If a group can be moved back and forth, see if there is a
- * blank line in the moving space. If there is a blank line,
- * make sure the last blank line is the end of the group.
- *
- * As we already shifted the group forward as far as possible
- * in the earlier loop, we need to shift it back only if at all.
- */
- if ((flags & XDF_COMPACTION_HEURISTIC) && blank_lines) {
+ if (ixref < ix) {
+ /*
+ * Try to move back the possibly merged group of changes, to match
+ * the recorded position in the other file.
+ */
+ while (ixref < ix) {
+ rchg[--ixs] = 1;
+ rchg[--ix] = 0;
+ while (rchgo[--ixo]);
+ }
+ } else if ((flags & XDF_COMPACTION_HEURISTIC) && blank_lines) {
+ /*
+ * The group can be slid up to make its last line a
+ * blank line. Do so.
+ *
+ * As we already shifted the group forward as far as
+ * possible in the earlier loop, we need to shift it
+ * back only if at all.
+ */
while (ixs > 0 &&
!is_blank_line(recs, ix - 1, flags) &&
recs_match(recs, ixs - 1, ix - 1, flags)) {