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
diff --git a/W b/W | |||||
index a3648a1..2d44096 100644 | |||||
--- a/W | |||||
+++ b/W | |||||
@@ -1 +0,0 @@ | |||||
-a | |||||
\ No newline at end of file |
a |
b.getString(0, b.size(), false)); | 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 | @Test | ||||
public void testModifyX() throws Exception { | public void testModifyX() throws Exception { | ||||
ApplyResult result = init("X"); | ApplyResult result = init("X"); |
pos++; | pos++; | ||||
break; | break; | ||||
case '-': | 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; | break; | ||||
case '+': | case '+': | ||||
newLines.add(hh.getNewStartLine() - 1 + pos, | newLines.add(hh.getNewStartLine() - 1 + pos, | ||||
// still there! | // still there! | ||||
sb.append(l).append('\n'); | sb.append(l).append('\n'); | ||||
} | } | ||||
sb.deleteCharAt(sb.length() - 1); | |||||
if (sb.length() > 0) { | |||||
sb.deleteCharAt(sb.length() - 1); | |||||
} | |||||
FileWriter fw = new FileWriter(f); | FileWriter fw = new FileWriter(f); | ||||
fw.write(sb.toString()); | fw.write(sb.toString()); | ||||
fw.close(); | fw.close(); |