Add possibility to set jgit nfs related config

It may be necessary for users to configure jgit behaviour related to
file handling. This commit makes the following two configurations
available (among others):

- core.trustfolderstat
- core.supportsatomicfilecreation
This commit is contained in:
René Pfeuffer
2020-03-09 15:33:58 +01:00
parent 5879249bd5
commit 2d117648ba
4 changed files with 64 additions and 1 deletions

View File

@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added footer extension points for links and avatar
- Create OpenAPI specification during build
- Extension point entries with supplied extensionName are sorted ascending
- Possibility to configure git core config entries for jgit like core.trustfolderstat and core.supportsatomicfilecreation
### Changed
- New footer design

2
Jenkinsfile vendored
View File

@@ -39,7 +39,7 @@ node('docker') {
}
stage('Integration Test') {
mvn 'verify -Pit -pl :scm-webapp,:scm-it -Dmaven.test.failure.ignore=true'
mvn 'verify -Pit -pl :scm-webapp,:scm-it -Dmaven.test.failure.ignore=true -Dscm.git.core.supportsatomicfilecreation=false'
}
stage('SonarQube') {

View File

@@ -0,0 +1,41 @@
package sonia.scm.repository.spi;
import org.eclipse.jgit.util.SystemReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.plugin.Extension;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.Map;
@Extension
public class GitConfigContextListener implements ServletContextListener {
private static final Logger LOG = LoggerFactory.getLogger(GitConfigContextListener.class);
private static final String SCM_JGIT_CORE = "scm.git.core.";
@Override
public void contextInitialized(ServletContextEvent sce) {
System.getProperties()
.entrySet().stream()
.filter(e -> e.getKey().toString().startsWith(SCM_JGIT_CORE))
.forEach(this::setConfig);
}
private void setConfig(Map.Entry<Object, Object> property) {
String key = property.getKey().toString().substring(SCM_JGIT_CORE.length());
String value = property.getValue().toString();
try {
SystemReader.getInstance().getSystemConfig().setString("core", null, key, value);
LOG.info("set git config core.{} = {}", key,value);
} catch (Exception e) {
LOG.error("could not set git config core.{} = {}", key,value, e);
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// nothing to do
}
}

View File

@@ -0,0 +1,21 @@
package sonia.scm.repository.spi;
import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.util.SystemReader;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import static org.assertj.core.api.Assertions.assertThat;
class GitConfigContextListenerTest {
@Test
void shouldSetGitConfig() throws IOException, ConfigInvalidException {
System.setProperty("scm.git.core.someTestKey", "testValue");
new GitConfigContextListener().contextInitialized(null);
assertThat(
SystemReader.getInstance().getSystemConfig().getString("core", null, "someTestKey")
).isEqualTo("testValue");
}
}