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.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
|
||||
import org.eclipse.jgit.api.errors.PatchApplyException;
|
||||
|
@ -251,6 +252,11 @@ public void testFiltering() throws Exception {
|
|||
|
||||
private void checkBinary(String name, boolean hasPreImage)
|
||||
throws Exception {
|
||||
checkBinary(name, hasPreImage, 1);
|
||||
}
|
||||
|
||||
private void checkBinary(String name, boolean hasPreImage,
|
||||
int numberOfFiles) throws Exception {
|
||||
try (Git git = new Git(db)) {
|
||||
byte[] post = IO
|
||||
.readWholeStream(getTestResource(name + "_PostImage"), 0)
|
||||
|
@ -266,7 +272,7 @@ private void checkBinary(String name, boolean hasPreImage)
|
|||
}
|
||||
ApplyResult result = git.apply()
|
||||
.setPatch(getTestResource(name + ".patch")).call();
|
||||
assertEquals(1, result.getUpdatedFiles().size());
|
||||
assertEquals(numberOfFiles, result.getUpdatedFiles().size());
|
||||
assertEquals(f, result.getUpdatedFiles().get(0));
|
||||
assertArrayEquals(post, Files.readAllBytes(f.toPath()));
|
||||
}
|
||||
|
@ -303,6 +309,18 @@ public void testEmptyLine() throws Exception {
|
|||
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
|
||||
public void testAddA1() throws Exception {
|
||||
ApplyResult result = init("A1", false, true);
|
||||
|
|
|
@ -742,7 +742,11 @@ private boolean isNoNewlineAtEndOfFile(FileHeader fh) {
|
|||
return false;
|
||||
}
|
||||
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)
|
||||
.equals("\\ No newline at end of file"); //$NON-NLS-1$
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue