|
|
@@ -42,6 +42,10 @@ |
|
|
|
|
|
|
|
package org.eclipse.jgit.internal.storage.file; |
|
|
|
|
|
|
|
import static org.junit.Assert.assertFalse; |
|
|
|
import static org.junit.Assert.assertTrue; |
|
|
|
|
|
|
|
import java.util.Arrays; |
|
|
|
import java.util.Collection; |
|
|
|
import java.util.Collections; |
|
|
|
import java.util.concurrent.Callable; |
|
|
@@ -49,14 +53,29 @@ import java.util.concurrent.ExecutorService; |
|
|
|
import java.util.concurrent.Executors; |
|
|
|
import java.util.concurrent.Future; |
|
|
|
|
|
|
|
import org.eclipse.jgit.internal.storage.file.ObjectDirectory; |
|
|
|
import org.eclipse.jgit.junit.RepositoryTestCase; |
|
|
|
import org.eclipse.jgit.junit.TestRepository; |
|
|
|
import org.eclipse.jgit.lib.ConfigConstants; |
|
|
|
import org.eclipse.jgit.lib.Constants; |
|
|
|
import org.eclipse.jgit.lib.ObjectId; |
|
|
|
import org.eclipse.jgit.storage.file.FileBasedConfig; |
|
|
|
import org.junit.Test; |
|
|
|
import org.junit.runner.RunWith; |
|
|
|
import org.junit.runners.Parameterized; |
|
|
|
import org.junit.runners.Parameterized.Parameter; |
|
|
|
import org.junit.runners.Parameterized.Parameters; |
|
|
|
|
|
|
|
@RunWith(Parameterized.class) |
|
|
|
public class ObjectDirectoryTest extends RepositoryTestCase { |
|
|
|
|
|
|
|
@Parameter |
|
|
|
public Boolean trustFolderStats; |
|
|
|
|
|
|
|
@Parameters(name= "core.trustfolderstat={0}") |
|
|
|
public static Iterable<? extends Object> data() { |
|
|
|
return Arrays.asList(Boolean.TRUE, Boolean.FALSE); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testConcurrentInsertionOfBlobsToTheSameNewFanOutDirectory() |
|
|
|
throws Exception { |
|
|
@@ -69,6 +88,34 @@ public class ObjectDirectoryTest extends RepositoryTestCase { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testShouldNotSearchPacksAgainTheSecondTime() throws Exception { |
|
|
|
FileRepository bareRepository = newTestRepositoryWithOnePackfile(); |
|
|
|
ObjectDirectory dir = bareRepository.getObjectDatabase(); |
|
|
|
|
|
|
|
// Make sure that timestamps are modified and read so that a full |
|
|
|
// file snapshot check is performed |
|
|
|
Thread.sleep(3000L); |
|
|
|
|
|
|
|
assertTrue(dir.searchPacksAgain(dir.packList.get())); |
|
|
|
assertFalse(dir.searchPacksAgain(dir.packList.get())); |
|
|
|
} |
|
|
|
|
|
|
|
private FileRepository newTestRepositoryWithOnePackfile() throws Exception { |
|
|
|
FileRepository repository = createBareRepository(); |
|
|
|
TestRepository<FileRepository> testRepository = new TestRepository<FileRepository>(repository); |
|
|
|
testRepository.commit(); |
|
|
|
testRepository.packAndPrune(); |
|
|
|
|
|
|
|
FileBasedConfig repoConfig = repository.getConfig(); |
|
|
|
repoConfig.setBoolean(ConfigConstants.CONFIG_CORE_SECTION,null, |
|
|
|
ConfigConstants.CONFIG_KEY_TRUSTFOLDERSTAT, |
|
|
|
trustFolderStats.booleanValue()); |
|
|
|
repoConfig.save(); |
|
|
|
|
|
|
|
return repository; |
|
|
|
} |
|
|
|
|
|
|
|
private Collection<Callable<ObjectId>> blobInsertersForTheSameFanOutDir( |
|
|
|
final ObjectDirectory dir) { |
|
|
|
Callable<ObjectId> callable = new Callable<ObjectId>() { |