Merge "Added check for null on DirCacheEntry in checkoutEntry method"

This commit is contained in:
Christian Halstrick 2020-12-30 03:05:00 -05:00 committed by Gerrit Code Review @ Eclipse.org
commit 086f474054
2 changed files with 15 additions and 2 deletions

View File

@ -13,6 +13,7 @@
package org.eclipse.jgit.lib; package org.eclipse.jgit.lib;
import static java.nio.charset.StandardCharsets.UTF_8; import static java.nio.charset.StandardCharsets.UTF_8;
import static org.eclipse.jgit.dircache.DirCacheCheckout.checkoutEntry;
import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
@ -47,6 +48,7 @@
import org.eclipse.jgit.errors.NoWorkTreeException; import org.eclipse.jgit.errors.NoWorkTreeException;
import org.eclipse.jgit.events.ChangeRecorder; import org.eclipse.jgit.events.ChangeRecorder;
import org.eclipse.jgit.events.ListenerHandle; import org.eclipse.jgit.events.ListenerHandle;
import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
import org.eclipse.jgit.junit.RepositoryTestCase; import org.eclipse.jgit.junit.RepositoryTestCase;
import org.eclipse.jgit.junit.TestRepository; import org.eclipse.jgit.junit.TestRepository;
import org.eclipse.jgit.junit.TestRepository.BranchBuilder; import org.eclipse.jgit.junit.TestRepository.BranchBuilder;
@ -2146,4 +2148,11 @@ public void assertWorkDir(Map<String, String> i)
assertEquals("WorkDir has not the right size.", i.size(), nrFiles); assertEquals("WorkDir has not the right size.", i.size(), nrFiles);
} }
} }
@Test
public void shouldReturnAndNotThrowNPEWhenCheckoutEntryIsCalledWithNullEntry() throws Exception{
checkoutEntry(new InMemoryRepository(null), null, null, true, new CheckoutMetadata(null, null));
}
} }

View File

@ -1214,9 +1214,10 @@ private void conflict(String path, DirCacheEntry e, AbstractTreeIterator h, Abst
private void keep(String path, DirCacheEntry e, WorkingTreeIterator f) private void keep(String path, DirCacheEntry e, WorkingTreeIterator f)
throws IOException { throws IOException {
if (e != null && !FileMode.TREE.equals(e.getFileMode())) if (e != null && !FileMode.TREE.equals(e.getFileMode())) {
builder.add(e); builder.add(e);
if (force) { }
if (e != null && force) {
if (f == null || f.isModified(e, true, walk.getObjectReader())) { if (f == null || f.isModified(e, true, walk.getObjectReader())) {
kept.add(path); kept.add(path);
checkoutEntry(repo, e, walk.getObjectReader(), false, checkoutEntry(repo, e, walk.getObjectReader(), false,
@ -1447,6 +1448,9 @@ public static void checkoutEntry(Repository repo, DirCacheEntry entry,
public static void checkoutEntry(Repository repo, DirCacheEntry entry, public static void checkoutEntry(Repository repo, DirCacheEntry entry,
ObjectReader or, boolean deleteRecursive, ObjectReader or, boolean deleteRecursive,
CheckoutMetadata checkoutMetadata) throws IOException { CheckoutMetadata checkoutMetadata) throws IOException {
if (entry == null) {
return;
}
if (checkoutMetadata == null) if (checkoutMetadata == null)
checkoutMetadata = CheckoutMetadata.EMPTY; checkoutMetadata = CheckoutMetadata.EMPTY;
ObjectLoader ol = or.open(entry.getObjectId()); ObjectLoader ol = or.open(entry.getObjectId());