From c2b87d59a0ca13f1444ea3a62decfa3f04ee7600 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Mon, 16 May 2011 11:28:23 -0700 Subject: [PATCH] Fix diff bug on inserted line For the following patch on the linux 2.6.32 tag: --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c @@ -685,6 +685,7 @@ static void enqueue_sleeper(struct cfs_rq *cfs_rq, struct sc static void check_spread(struct cfs_rq *cfs_rq, struct sched_entity *se) { +#if 0 #ifdef CONFIG_SCHED_DEBUG s64 d = se->vruntime - cfs_rq->min_vruntime; @@ -694,6 +695,7 @@ static void check_spread(struct cfs_rq *cfs_rq, struct sched if (d > 3*sysctl_sched_latency) schedstat_inc(cfs_rq, nr_spread_over); #endif +#endif } static void JGit produced an incorrect diff, attempting to add a new "}" instead of the new "#endif" at the end of the hunk. This was caused by a prior fix for bug 328895 where we wanted to "slide" a diff down in the file when adding a new method/function and want to show the closing curly brace as being added after the new method, rather than added onto the end of the prior function or method just before the insertion point. Bug: 345956 Change-Id: I32b9e24f1e2980258b1b39dd1807919ab1c5f9b2 Signed-off-by: Shawn O. Pearce --- .../org/eclipse/jgit/diff/AbstractDiffTestCase.java | 10 +++++++++- .../src/org/eclipse/jgit/diff/DiffAlgorithm.java | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/AbstractDiffTestCase.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/AbstractDiffTestCase.java index 85b5eb7c0..b8f8dcb5a 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/AbstractDiffTestCase.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/AbstractDiffTestCase.java @@ -191,7 +191,15 @@ public abstract class AbstractDiffTestCase { public void testEdit_InsertNearCommonTail() { EditList r = diff(t("aq}nb"), t("aCq}nD}nb")); assertEquals(new Edit(1, 1, 1, 2), r.get(0)); - assertEquals(new Edit(3, 3, 4, 7), r.get(1)); + assertEquals(new Edit(4, 4, 5, 8), r.get(1)); + assertEquals(2, r.size()); + } + + @Test + public void testEdit_LinuxBug() { + EditList r = diff(t("a{bcdE}z"), t("a{0bcdEE}z")); + assertEquals(new Edit(2, 2, 2, 3), r.get(0)); + assertEquals(new Edit(6, 6, 7, 8), r.get(1)); assertEquals(2, r.size()); } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffAlgorithm.java b/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffAlgorithm.java index b20e3258b..96f4d1185 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffAlgorithm.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffAlgorithm.java @@ -126,7 +126,7 @@ public abstract class DiffAlgorithm { Edit last = e.get(e.size() - 1); if (last.getType() == Edit.Type.INSERT) { while (last.endB < b.size() - && cmp.equals(b, last.beginB, b, region.endB)) { + && cmp.equals(b, last.beginB, b, last.endB)) { last.beginA++; last.endA++; last.beginB++;