Merge "PatchApplier fix - init cache with provided tree"
This commit is contained in:
commit
f94ab7680c
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -24,6 +24,7 @@
|
|||
import java.io.OutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import org.eclipse.jgit.annotations.Nullable;
|
||||
import org.eclipse.jgit.api.Git;
|
||||
import org.eclipse.jgit.api.errors.PatchApplyException;
|
||||
import org.eclipse.jgit.api.errors.PatchFormatException;
|
||||
|
@ -71,27 +72,21 @@ public abstract static class Base extends RepositoryTestCase {
|
|||
this.inCore = inCore;
|
||||
}
|
||||
|
||||
void init(final String aName) throws Exception {
|
||||
init(aName, true, true);
|
||||
}
|
||||
|
||||
protected void init(String aName, boolean preExists, boolean postExists)
|
||||
throws Exception {
|
||||
// Patch and pre/postimage are read from data
|
||||
// org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/
|
||||
this.name = aName;
|
||||
if (postExists) {
|
||||
postImage = IO
|
||||
.readWholeStream(getTestResource(name + "_PostImage"), 0)
|
||||
.array();
|
||||
expectedText = new String(postImage, StandardCharsets.UTF_8);
|
||||
expectedText = initPostImage(aName);
|
||||
}
|
||||
|
||||
File f = new File(db.getWorkTree(), name);
|
||||
if (preExists) {
|
||||
preImage = IO
|
||||
.readWholeStream(getTestResource(name + "_PreImage"), 0)
|
||||
.array();
|
||||
try (Git git = new Git(db)) {
|
||||
Files.write(f.toPath(), preImage);
|
||||
git.add().addFilepattern(name).call();
|
||||
}
|
||||
initPreImage(aName);
|
||||
}
|
||||
try (Git git = new Git(db)) {
|
||||
RevCommit base = git.commit().setMessage("PreImage").call();
|
||||
|
@ -99,8 +94,22 @@ protected void init(String aName, boolean preExists, boolean postExists)
|
|||
}
|
||||
}
|
||||
|
||||
void init(final String aName) throws Exception {
|
||||
init(aName, true, true);
|
||||
protected void initPreImage(String aName) throws Exception {
|
||||
File f = new File(db.getWorkTree(), aName);
|
||||
preImage = IO
|
||||
.readWholeStream(getTestResource(aName + "_PreImage"), 0)
|
||||
.array();
|
||||
try (Git git = new Git(db)) {
|
||||
Files.write(f.toPath(), preImage);
|
||||
git.add().addFilepattern(aName).call();
|
||||
}
|
||||
}
|
||||
|
||||
protected String initPostImage(String aName) throws Exception {
|
||||
postImage = IO
|
||||
.readWholeStream(getTestResource(aName + "_PostImage"), 0)
|
||||
.array();
|
||||
return new String(postImage, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
protected Result applyPatch()
|
||||
|
@ -118,27 +127,33 @@ protected static InputStream getTestResource(String patchFile) {
|
|||
return PatchApplierTest.class.getClassLoader()
|
||||
.getResourceAsStream("org/eclipse/jgit/diff/" + patchFile);
|
||||
}
|
||||
|
||||
void verifyChange(Result result, String aName) throws Exception {
|
||||
verifyChange(result, aName, true);
|
||||
}
|
||||
|
||||
protected void verifyContent(Result result, String path, boolean exists)
|
||||
throws Exception {
|
||||
verifyContent(result, path, exists ? expectedText : null);
|
||||
}
|
||||
|
||||
protected void verifyContent(Result result, String path,
|
||||
@Nullable String expectedContent) throws Exception {
|
||||
if (inCore) {
|
||||
byte[] output = readBlob(result.getTreeId(), path);
|
||||
if (!exists)
|
||||
if (expectedContent == null)
|
||||
assertNull(output);
|
||||
else {
|
||||
assertNotNull(output);
|
||||
assertEquals(expectedText,
|
||||
assertEquals(expectedContent,
|
||||
new String(output, StandardCharsets.UTF_8));
|
||||
}
|
||||
} else {
|
||||
File f = new File(db.getWorkTree(), path);
|
||||
if (!exists)
|
||||
if (expectedContent == null)
|
||||
assertFalse(f.exists());
|
||||
else
|
||||
checkFile(f, expectedText);
|
||||
checkFile(f, expectedContent);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -154,7 +169,7 @@ protected byte[] readBlob(ObjectId treeish, String path)
|
|||
RevWalk rw = tr.getRevWalk()) {
|
||||
db.incrementOpen();
|
||||
RevTree tree = rw.parseTree(treeish);
|
||||
try (TreeWalk tw = TreeWalk.forPath(db,path,tree)){
|
||||
try (TreeWalk tw = TreeWalk.forPath(db, path, tree)) {
|
||||
if (tw == null) {
|
||||
return null;
|
||||
}
|
||||
|
@ -300,7 +315,7 @@ public void testRenameNoHunks() throws Exception {
|
|||
assertTrue(result.getPaths().contains("RenameNoHunks"));
|
||||
assertTrue(result.getPaths().contains("nested/subdir/Renamed"));
|
||||
|
||||
verifyContent(result,"nested/subdir/Renamed", true);
|
||||
verifyContent(result, "nested/subdir/Renamed", true);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -312,7 +327,7 @@ public void testRenameWithHunks() throws Exception {
|
|||
assertTrue(result.getPaths().contains("RenameWithHunks"));
|
||||
assertTrue(result.getPaths().contains("nested/subdir/Renamed"));
|
||||
|
||||
verifyContent(result,"nested/subdir/Renamed", true);
|
||||
verifyContent(result, "nested/subdir/Renamed", true);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -355,6 +370,16 @@ public void testShiftDown2() throws Exception {
|
|||
verifyChange(result, "ShiftDown2");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDoesNotAffectUnrelatedFiles() throws Exception {
|
||||
initPreImage("Unaffected");
|
||||
String expectedUnaffectedText = initPostImage("Unaffected");
|
||||
init("X");
|
||||
|
||||
Result result = applyPatch();
|
||||
verifyChange(result, "X");
|
||||
verifyContent(result, "Unaffected", expectedUnaffectedText);
|
||||
}
|
||||
}
|
||||
|
||||
public static class InCore extends Base {
|
||||
|
|
|
@ -194,7 +194,7 @@ public Result applyPatch(InputStream patchInput)
|
|||
throw new PatchFormatException(p.getErrors());
|
||||
}
|
||||
|
||||
DirCache dirCache = (inCore()) ? DirCache.newInCore()
|
||||
DirCache dirCache = inCore() ? DirCache.read(reader, beforeTree)
|
||||
: repo.lockDirCache();
|
||||
|
||||
DirCacheBuilder dirCacheBuilder = dirCache.builder();
|
||||
|
|
Loading…
Reference in New Issue