Browse Source

Fix ApplyCommand when result of patch is an empty file

Such hunks are identifiable by a zero value for "new start line". Prior
to the fix, JGit throws and ArrayIndexOutOfBoundsException on such
patches.

Change-Id: I4f3deb5e5f41a08af965fcc178d678c77270cddb
Signed-off-by: Jonathan Schneider <jkschneider@gmail.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
tags/v4.3.1.201605051710-r
Jon Schneider 8 years ago
parent
commit
80fa5f39f9

+ 7
- 0
org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/W.patch View File

@@ -0,0 +1,7 @@
diff --git a/W b/W
index a3648a1..2d44096 100644
--- a/W
+++ b/W
@@ -1 +0,0 @@
-a
\ No newline at end of file

+ 0
- 0
org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/W_PostImage View File


+ 1
- 0
org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/W_PreImage View File

@@ -0,0 +1 @@
a

+ 10
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ApplyCommandTest.java View File

@@ -146,6 +146,16 @@ public class ApplyCommandTest extends RepositoryTestCase {
b.getString(0, b.size(), false));
}

@Test
public void testModifyW() throws Exception {
ApplyResult result = init("W");
assertEquals(1, result.getUpdatedFiles().size());
assertEquals(new File(db.getWorkTree(), "W"),
result.getUpdatedFiles().get(0));
checkFile(new File(db.getWorkTree(), "W"),
b.getString(0, b.size(), false));
}

@Test
public void testModifyX() throws Exception {
ApplyResult result = init("X");

+ 12
- 6
org.eclipse.jgit/src/org/eclipse/jgit/api/ApplyCommand.java View File

@@ -223,12 +223,16 @@ public class ApplyCommand extends GitCommand<ApplyResult> {
pos++;
break;
case '-':
if (!newLines.get(hh.getNewStartLine() - 1 + pos).equals(
hunkLine.substring(1))) {
throw new PatchApplyException(MessageFormat.format(
JGitText.get().patchApplyException, hh));
if (hh.getNewStartLine() == 0) {
newLines.clear();
} else {
if (!newLines.get(hh.getNewStartLine() - 1 + pos)
.equals(hunkLine.substring(1))) {
throw new PatchApplyException(MessageFormat.format(
JGitText.get().patchApplyException, hh));
}
newLines.remove(hh.getNewStartLine() - 1 + pos);
}
newLines.remove(hh.getNewStartLine() - 1 + pos);
break;
case '+':
newLines.add(hh.getNewStartLine() - 1 + pos,
@@ -250,7 +254,9 @@ public class ApplyCommand extends GitCommand<ApplyResult> {
// still there!
sb.append(l).append('\n');
}
sb.deleteCharAt(sb.length() - 1);
if (sb.length() > 0) {
sb.deleteCharAt(sb.length() - 1);
}
FileWriter fw = new FileWriter(f);
fw.write(sb.toString());
fw.close();

Loading…
Cancel
Save