From 2c18933951cd9757d922ced2f17bcb6c60d27301 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Mon, 9 Mar 2020 11:12:21 +0100 Subject: [PATCH 1/5] update .gitignore --- .gitignore | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.gitignore b/.gitignore index 99c7fb9eb8..f84085cd69 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,13 @@ Desktop DF .project .classpath .settings +# idea files +\.iml +.idea +# ui +scm-ui/build +scm-ui/coverage +node_modules +# jrebel +rebel.xml +\.pyc From 6ad7ebeb181e1c6268eb6ee3c626adaa4510afb8 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Mon, 9 Mar 2020 11:17:16 +0100 Subject: [PATCH 2/5] update .gitignore // delete .hgignore --- .gitignore | 2 +- .hgignore | 36 ------------------------------------ 2 files changed, 1 insertion(+), 37 deletions(-) delete mode 100644 .hgignore diff --git a/.gitignore b/.gitignore index f84085cd69..52d9a728a6 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,7 @@ Desktop DF .classpath .settings # idea files -\.iml +*.iml .idea # ui scm-ui/build diff --git a/.hgignore b/.hgignore deleted file mode 100644 index 00efb50c1f..0000000000 --- a/.hgignore +++ /dev/null @@ -1,36 +0,0 @@ -# netbeans temp & private files -/?target/ -nbactions.*\.xml -/?nbproject/ -nb-configuration\.xml -# MacOS X Files -\.DS_Store$ -\._\.DS_Store$ -\._\. -Desktop DB$ -Desktop DF$ -\.hotfiles\.btree$ -\.orig$ -~$ -\.\~.*$ -\.bak$ -.*\.NavData$ -\.orig\..*$ -\.chg\..*$ -\.rej$ -\.conflict\~$ -# Eclipse Files -\.project -\.classpath -\.settings -# idea files -\.iml -\.idea$ -# jrebel -rebel.xml -\.pyc -# ui -scm-ui/build -scm-ui/coverage -/?node_modules/ - From 5879249bd5169c2f9e068c468d78d89842a8cd2b Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 9 Mar 2020 14:26:48 +0100 Subject: [PATCH 3/5] fix wrong ignore rule for .pyc files --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 52d9a728a6..5bfa2ff9b5 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,4 @@ scm-ui/coverage node_modules # jrebel rebel.xml -\.pyc +*.pyc From 2d117648babb08a266bb6b1b77dbcf864f1f8285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 9 Mar 2020 15:33:58 +0100 Subject: [PATCH 4/5] 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 --- CHANGELOG.md | 1 + Jenkinsfile | 2 +- .../spi/GitConfigContextListener.java | 41 +++++++++++++++++++ .../spi/GitConfigContextListenerTest.java | 21 ++++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitConfigContextListener.java create mode 100644 scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitConfigContextListenerTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fa1f5ff79..15720de4e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/Jenkinsfile b/Jenkinsfile index 8dee82b57a..8d6ef93d76 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -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') { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitConfigContextListener.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitConfigContextListener.java new file mode 100644 index 0000000000..453a18a690 --- /dev/null +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitConfigContextListener.java @@ -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 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 + } +} diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitConfigContextListenerTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitConfigContextListenerTest.java new file mode 100644 index 0000000000..468f1b88c3 --- /dev/null +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitConfigContextListenerTest.java @@ -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"); + } +} From 4b1c74fa7854a183f61434d070343928134eee4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 10 Mar 2020 08:13:58 +0100 Subject: [PATCH 5/5] Try other jgit configuration to prevent flappy git integration tests --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 8d6ef93d76..65f8428034 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -39,7 +39,7 @@ node('docker') { } stage('Integration Test') { - mvn 'verify -Pit -pl :scm-webapp,:scm-it -Dmaven.test.failure.ignore=true -Dscm.git.core.supportsatomicfilecreation=false' + mvn 'verify -Pit -pl :scm-webapp,:scm-it -Dmaven.test.failure.ignore=true -Dscm.git.core.trustfolderstat=false' } stage('SonarQube') {