aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test/tst/org
diff options
context:
space:
mode:
authorMatthias Sohn <matthias.sohn@sap.com>2019-08-15 01:25:28 +0200
committerMatthias Sohn <matthias.sohn@sap.com>2019-08-18 11:47:26 +0200
commitf383206ace187ec92672b806e18a54e8d398a27d (patch)
tree28403a0987ef5b4dd5af51e4d29944ff07826d61 /org.eclipse.jgit.test/tst/org
parent7f92a70fb3a5b7e91e5d370098fa65f6c8f35efa (diff)
downloadjgit-f383206ace187ec92672b806e18a54e8d398a27d.tar.gz
jgit-f383206ace187ec92672b806e18a54e8d398a27d.zip
Cache user global and system-wide git configurations
So far the git configuration and the system wide git configuration were always reloaded when jgit accessed these global configuration files to access global configuration options which are not in the context of a single git repository. Cache these configurations in SystemReader and only reload them if their file metadata observed using FileSnapshot indicates a modification. Change-Id: I092fe11a5d95f1c5799273cacfc7a415d0b7786c Signed-off-by: Matthias Sohn <matthias.sohn@sap.com> Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
Diffstat (limited to 'org.eclipse.jgit.test/tst/org')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java6
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FS_POSIXTest.java74
2 files changed, 47 insertions, 33 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java
index 0d7009dca4..613ca5ce95 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java
@@ -68,9 +68,9 @@ import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.lib.StoredConfig;
import org.eclipse.jgit.revwalk.RevBlob;
import org.eclipse.jgit.revwalk.RevCommit;
-import org.eclipse.jgit.storage.file.FileBasedConfig;
import org.eclipse.jgit.submodule.SubmoduleStatus;
import org.eclipse.jgit.submodule.SubmoduleStatusType;
import org.eclipse.jgit.submodule.SubmoduleWalk;
@@ -633,8 +633,8 @@ public class CloneCommandTest extends RepositoryTestCase {
ConfigConstants.CONFIG_BRANCH_SECTION, "test",
ConfigConstants.CONFIG_KEY_REBASE, null));
- FileBasedConfig userConfig = SystemReader.getInstance().openUserConfig(
- null, git.getRepository().getFS());
+ StoredConfig userConfig = SystemReader.getInstance()
+ .getUserConfig();
userConfig.setString(ConfigConstants.CONFIG_BRANCH_SECTION, null,
ConfigConstants.CONFIG_KEY_AUTOSETUPREBASE,
ConfigConstants.CONFIG_KEY_ALWAYS);
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FS_POSIXTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FS_POSIXTest.java
index 9683f93e69..87349a25a4 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FS_POSIXTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FS_POSIXTest.java
@@ -43,48 +43,63 @@
package org.eclipse.jgit.util;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import org.eclipse.jgit.junit.MockSystemReader;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.storage.file.FileBasedConfig;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import org.mockito.Mockito;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
public class FS_POSIXTest {
private SystemReader originalSystemReaderInstance;
- private FileBasedConfig mockSystemConfig;
+ private FileBasedConfig systemConfig;
+
+ private FileBasedConfig userConfig;
- private FileBasedConfig mockUserConfig;
+ private Path tmp;
@Before
public void setUp() throws Exception {
- SystemReader systemReader = Mockito.mock(SystemReader.class);
+ tmp = Files.createTempDirectory("jgit_test_");
+ MockSystemReader mockSystemReader = new MockSystemReader();
+ SystemReader.setInstance(mockSystemReader);
+
+ // Measure timer resolution before the test to avoid time critical tests
+ // are affected by time needed for measurement.
+ // The MockSystemReader must be configured first since we need to use
+ // the same one here
+ FS.getFileStoreAttributes(tmp.getParent());
+ systemConfig = new FileBasedConfig(
+ new File(tmp.toFile(), "systemgitconfig"), FS.DETECTED);
+ userConfig = new FileBasedConfig(systemConfig,
+ new File(tmp.toFile(), "usergitconfig"), FS.DETECTED);
+ // We have to set autoDetach to false for tests, because tests expect to
+ // be able to clean up by recursively removing the repository, and
+ // background GC might be in the middle of writing or deleting files,
+ // which would disrupt this.
+ userConfig.setBoolean(ConfigConstants.CONFIG_GC_SECTION, null,
+ ConfigConstants.CONFIG_KEY_AUTODETACH, false);
+ userConfig.save();
+ mockSystemReader.setSystemGitConfig(systemConfig);
+ mockSystemReader.setUserGitConfig(userConfig);
originalSystemReaderInstance = SystemReader.getInstance();
- SystemReader.setInstance(systemReader);
-
- mockSystemConfig = mock(FileBasedConfig.class);
- mockUserConfig = mock(FileBasedConfig.class);
- when(systemReader.openSystemConfig(any(), any()))
- .thenReturn(mockSystemConfig);
- when(systemReader.openUserConfig(any(), any()))
- .thenReturn(mockUserConfig);
-
- when(mockSystemConfig.getString(ConfigConstants.CONFIG_CORE_SECTION,
- null, ConfigConstants.CONFIG_KEY_SUPPORTSATOMICFILECREATION))
- .thenReturn(null);
+ SystemReader.setInstance(mockSystemReader);
}
@After
- public void tearDown() {
+ public void tearDown() throws IOException {
SystemReader.setInstance(originalSystemReaderInstance);
+ FileUtils.delete(tmp.toFile(), FileUtils.RECURSIVE | FileUtils.RETRY);
}
@Test
@@ -94,32 +109,31 @@ public class FS_POSIXTest {
@Test
public void supportsAtomicCreateNewFile_shouldReturnTrueIfFlagIsSetInUserConfig() {
- setAtomicCreateCreationFlag(mockUserConfig, "true");
+ setAtomicCreateCreationFlag(userConfig, "true");
assertTrue(new FS_POSIX().supportsAtomicCreateNewFile());
}
@Test
public void supportsAtomicCreateNewFile_shouldReturnTrueIfFlagIsSetInSystemConfig() {
- setAtomicCreateCreationFlag(mockSystemConfig, "true");
+ setAtomicCreateCreationFlag(systemConfig, "true");
assertTrue(new FS_POSIX().supportsAtomicCreateNewFile());
}
@Test
public void supportsAtomicCreateNewFile_shouldReturnFalseIfFlagUnsetInUserConfig() {
- setAtomicCreateCreationFlag(mockUserConfig, "false");
+ setAtomicCreateCreationFlag(userConfig, "false");
assertFalse(new FS_POSIX().supportsAtomicCreateNewFile());
}
@Test
public void supportsAtomicCreateNewFile_shouldReturnFalseIfFlagUnsetInSystemConfig() {
- setAtomicCreateCreationFlag(mockSystemConfig, "false");
+ setAtomicCreateCreationFlag(systemConfig, "false");
assertFalse(new FS_POSIX().supportsAtomicCreateNewFile());
}
private void setAtomicCreateCreationFlag(FileBasedConfig config,
String value) {
- when(config.getString(ConfigConstants.CONFIG_CORE_SECTION, null,
- ConfigConstants.CONFIG_KEY_SUPPORTSATOMICFILECREATION))
- .thenReturn(value);
+ config.setString(ConfigConstants.CONFIG_CORE_SECTION, null,
+ ConfigConstants.CONFIG_KEY_SUPPORTSATOMICFILECREATION, value);
}
}