ApplyCommand: fix "no newline at end" detection
Check the last line of the last hunk of a file, not the last line of the whole patch. Note that C git only checks that this line starts with "\ " and is at least 12 characters long because of possible different texts when non- English messages are used. Change-Id: I0db81699eb3e99ed7b536a3e2b8dc97df1f58a89 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
This commit is contained in:
parent
2a0295ccfd
commit
1126f26d21
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -20,6 +20,7 @@
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
|
||||||
import org.eclipse.jgit.api.errors.PatchApplyException;
|
import org.eclipse.jgit.api.errors.PatchApplyException;
|
||||||
|
@ -251,6 +252,11 @@ public void testFiltering() throws Exception {
|
||||||
|
|
||||||
private void checkBinary(String name, boolean hasPreImage)
|
private void checkBinary(String name, boolean hasPreImage)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
|
checkBinary(name, hasPreImage, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkBinary(String name, boolean hasPreImage,
|
||||||
|
int numberOfFiles) throws Exception {
|
||||||
try (Git git = new Git(db)) {
|
try (Git git = new Git(db)) {
|
||||||
byte[] post = IO
|
byte[] post = IO
|
||||||
.readWholeStream(getTestResource(name + "_PostImage"), 0)
|
.readWholeStream(getTestResource(name + "_PostImage"), 0)
|
||||||
|
@ -266,7 +272,7 @@ private void checkBinary(String name, boolean hasPreImage)
|
||||||
}
|
}
|
||||||
ApplyResult result = git.apply()
|
ApplyResult result = git.apply()
|
||||||
.setPatch(getTestResource(name + ".patch")).call();
|
.setPatch(getTestResource(name + ".patch")).call();
|
||||||
assertEquals(1, result.getUpdatedFiles().size());
|
assertEquals(numberOfFiles, result.getUpdatedFiles().size());
|
||||||
assertEquals(f, result.getUpdatedFiles().get(0));
|
assertEquals(f, result.getUpdatedFiles().get(0));
|
||||||
assertArrayEquals(post, Files.readAllBytes(f.toPath()));
|
assertArrayEquals(post, Files.readAllBytes(f.toPath()));
|
||||||
}
|
}
|
||||||
|
@ -303,6 +309,18 @@ public void testEmptyLine() throws Exception {
|
||||||
checkBinary("emptyLine", true);
|
checkBinary("emptyLine", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMultiFileNoNewline() throws Exception {
|
||||||
|
// This test needs two files. One is in the test resources.
|
||||||
|
try (Git git = new Git(db)) {
|
||||||
|
Files.write(db.getWorkTree().toPath().resolve("yello"),
|
||||||
|
"yello".getBytes(StandardCharsets.US_ASCII));
|
||||||
|
git.add().addFilepattern("yello").call();
|
||||||
|
git.commit().setMessage("yello").call();
|
||||||
|
}
|
||||||
|
checkBinary("hello", true, 2);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAddA1() throws Exception {
|
public void testAddA1() throws Exception {
|
||||||
ApplyResult result = init("A1", false, true);
|
ApplyResult result = init("A1", false, true);
|
||||||
|
|
|
@ -742,7 +742,11 @@ private boolean isNoNewlineAtEndOfFile(FileHeader fh) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
HunkHeader lastHunk = hunks.get(hunks.size() - 1);
|
HunkHeader lastHunk = hunks.get(hunks.size() - 1);
|
||||||
RawText lhrt = new RawText(lastHunk.getBuffer());
|
byte[] buf = new byte[lastHunk.getEndOffset()
|
||||||
|
- lastHunk.getStartOffset()];
|
||||||
|
System.arraycopy(lastHunk.getBuffer(), lastHunk.getStartOffset(), buf,
|
||||||
|
0, buf.length);
|
||||||
|
RawText lhrt = new RawText(buf);
|
||||||
return lhrt.getString(lhrt.size() - 1)
|
return lhrt.getString(lhrt.size() - 1)
|
||||||
.equals("\\ No newline at end of file"); //$NON-NLS-1$
|
.equals("\\ No newline at end of file"); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue