From 9a5bb6d25e53bab8b454a11ff344405ee34edc05 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 19 Feb 2020 16:19:45 +0100 Subject: [PATCH 1/5] Update jgit to version 5.4.3.201909031940-r-scm1 --- CHANGELOG.md | 3 +++ pom.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd845f009c..03231cd5a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Changed +- Update jgit to version 5.4.3.201909031940-r-scm1 + ### Fixed - Modification for mercurial repositories with enabled XSRF protection diff --git a/pom.xml b/pom.xml index 48e94c11de..6bd458e551 100644 --- a/pom.xml +++ b/pom.xml @@ -849,7 +849,7 @@ 1.4.1 - v5.4.0.201906121030-r-scm2 + 5.4.3.201909031940-r-scm1 1.9.0-scm3 From 24de6c89a5f14fa2b111df43564d7d7aec44bac3 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 24 Feb 2020 16:27:42 +0100 Subject: [PATCH 2/5] update jgit to version 5.6.1.202002131546-r-scm1 --- pom.xml | 2 +- .../java/sonia/scm/web/CollectingPackParserListener.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 6bd458e551..02d3d35fc8 100644 --- a/pom.xml +++ b/pom.xml @@ -849,7 +849,7 @@ 1.4.1 - 5.4.3.201909031940-r-scm1 + 5.6.1.202002131546-r-scm1 1.9.0-scm3 diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/CollectingPackParserListener.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/CollectingPackParserListener.java index fdb96d18d7..20873b3229 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/CollectingPackParserListener.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/CollectingPackParserListener.java @@ -39,8 +39,8 @@ import com.google.common.collect.ImmutableSet; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectIdSubclassMap; import org.eclipse.jgit.revwalk.RevObject; -import org.eclipse.jgit.transport.BaseReceivePack; -import org.eclipse.jgit.transport.BaseReceivePack.PackParserListener; +import org.eclipse.jgit.transport.ReceivePack; +import org.eclipse.jgit.transport.ReceivePack.PackParserListener; import org.eclipse.jgit.transport.PackParser; import org.slf4j.Logger; @@ -76,7 +76,7 @@ public class CollectingPackParserListener implements PackParserListener * * @return listener */ - public static CollectingPackParserListener get(BaseReceivePack pack) + public static CollectingPackParserListener get(ReceivePack pack) { PackParserListener listener = pack.getPackParserListener(); @@ -101,7 +101,7 @@ public class CollectingPackParserListener implements PackParserListener * * @param pack receive pack */ - public static void set(BaseReceivePack pack) + public static void set(ReceivePack pack) { logger.trace("apply collecting listener to receive pack"); pack.setPackParserListener(new CollectingPackParserListener()); From 34b570fddf569f6d544895c7fa1a718dde95542d Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Tue, 3 Mar 2020 09:30:24 +0100 Subject: [PATCH 3/5] Fix unit test It looks like the system config is cached somehow from jgit 5.4.3 on, so that putting the config in a file that is deleted after the first test invalidates this config, which leads to the effect, that for the test that runs second the filter is not applied. --- .../spi/GitModifyCommand_LFSTest.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java index b1a5c7bbcc..e5902921d6 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java @@ -5,15 +5,17 @@ import com.github.sdorra.shiro.SubjectAware; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.revwalk.RevCommit; -import org.junit.After; -import org.junit.Before; +import org.junit.AfterClass; +import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; +import sonia.scm.SCMContextProvider; import sonia.scm.repository.Person; import sonia.scm.repository.util.WorkdirProvider; import sonia.scm.store.Blob; import sonia.scm.store.BlobStore; +import sonia.scm.util.IOUtil; import sonia.scm.web.lfs.LfsBlobStoreFactory; import java.io.ByteArrayOutputStream; @@ -29,6 +31,8 @@ import static org.mockito.Mockito.when; @SubjectAware(configuration = "classpath:sonia/scm/configuration/shiro.ini", username = "admin", password = "secret") public class GitModifyCommand_LFSTest extends AbstractGitCommandTestBase { + private static File contextDir; + @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); @Rule @@ -38,14 +42,18 @@ public class GitModifyCommand_LFSTest extends AbstractGitCommandTestBase { private final LfsBlobStoreFactory lfsBlobStoreFactory = mock(LfsBlobStoreFactory.class); - @Before - public void registerFilter() { + @BeforeClass + public static void registerFilter() throws IOException { + SCMContextProvider contextProvider = mock(SCMContextProvider.class); + contextDir = Files.createTempDirectory("scm").toFile(); + when(contextProvider.getBaseDirectory()).thenReturn(contextDir); new GitLfsFilterContextListener(contextProvider).contextInitialized(null); } - @After - public void unregisterFilter() { - new GitLfsFilterContextListener(contextProvider).contextDestroyed(null); + @AfterClass + public static void unregisterFilter() throws IOException { + new GitLfsFilterContextListener(null).contextDestroyed(null); + IOUtil.delete(contextDir); } @Test From e0b02ea1a3a56bcfc734fd93d6b9d34d2cf958ff Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Tue, 3 Mar 2020 16:13:17 +0100 Subject: [PATCH 4/5] Use api to set system config for lfs Could be so simple if this works :-) --- .../spi/GitLfsFilterContextListener.java | 34 ++++--------------- .../spi/GitModifyCommand_LFSTest.java | 16 +++------ 2 files changed, 11 insertions(+), 39 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLfsFilterContextListener.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLfsFilterContextListener.java index c202874781..f116bcc550 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLfsFilterContextListener.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLfsFilterContextListener.java @@ -4,54 +4,34 @@ import com.google.common.io.ByteStreams; import org.eclipse.jgit.attributes.FilterCommand; import org.eclipse.jgit.attributes.FilterCommandRegistry; import org.eclipse.jgit.lib.Repository; -import org.eclipse.jgit.util.FS; +import org.eclipse.jgit.util.SystemReader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import sonia.scm.SCMContextProvider; import sonia.scm.plugin.Extension; -import javax.inject.Inject; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.regex.Pattern; -import static java.nio.file.StandardOpenOption.CREATE; -import static java.nio.file.StandardOpenOption.TRUNCATE_EXISTING; - @Extension public class GitLfsFilterContextListener implements ServletContextListener { - public static final String GITCONFIG = "[filter \"lfs\"]\n" + - "clean = git-lfs clean -- %f\n" + - "smudge = git-lfs smudge -- %f\n" + - "process = git-lfs filter-process\n" + - "required = true\n"; public static final Pattern COMMAND_NAME_PATTERN = Pattern.compile("git-lfs (smudge|clean) -- .*"); private static final Logger LOG = LoggerFactory.getLogger(GitLfsFilterContextListener.class); - private final SCMContextProvider contextProvider; - - @Inject - public GitLfsFilterContextListener(SCMContextProvider contextProvider) { - this.contextProvider = contextProvider; - } - @Override public void contextInitialized(ServletContextEvent sce) { - Path gitconfig = contextProvider.getBaseDirectory().toPath().resolve("gitconfig"); try { - Files.write(gitconfig, GITCONFIG.getBytes(Charset.defaultCharset()), TRUNCATE_EXISTING, CREATE); - FS.DETECTED.setGitSystemConfig(gitconfig.toFile()); - LOG.info("wrote git config file: {}", gitconfig); - } catch (IOException e) { - LOG.error("could not write git config in path {}; git lfs support may not work correctly", gitconfig, e); + SystemReader.getInstance().getSystemConfig().setString("filter", "lfs", "clean", "git-lfs clean -- %f"); + SystemReader.getInstance().getSystemConfig().setString("filter", "lfs", "smudge", "git-lfs smudge -- %f"); + SystemReader.getInstance().getSystemConfig().setString("filter", "lfs", "process", "git-lfs filter-process"); + SystemReader.getInstance().getSystemConfig().setString("filter", "lfs", "required", "true"); + } catch (Exception e) { + LOG.error("could not set git config; git lfs support may not work correctly", e); } FilterCommandRegistry.register(COMMAND_NAME_PATTERN, NoOpFilterCommand::new); } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java index e5902921d6..90c4985d35 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java @@ -10,12 +10,10 @@ import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; -import sonia.scm.SCMContextProvider; import sonia.scm.repository.Person; import sonia.scm.repository.util.WorkdirProvider; import sonia.scm.store.Blob; import sonia.scm.store.BlobStore; -import sonia.scm.util.IOUtil; import sonia.scm.web.lfs.LfsBlobStoreFactory; import java.io.ByteArrayOutputStream; @@ -31,8 +29,6 @@ import static org.mockito.Mockito.when; @SubjectAware(configuration = "classpath:sonia/scm/configuration/shiro.ini", username = "admin", password = "secret") public class GitModifyCommand_LFSTest extends AbstractGitCommandTestBase { - private static File contextDir; - @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); @Rule @@ -43,17 +39,13 @@ public class GitModifyCommand_LFSTest extends AbstractGitCommandTestBase { private final LfsBlobStoreFactory lfsBlobStoreFactory = mock(LfsBlobStoreFactory.class); @BeforeClass - public static void registerFilter() throws IOException { - SCMContextProvider contextProvider = mock(SCMContextProvider.class); - contextDir = Files.createTempDirectory("scm").toFile(); - when(contextProvider.getBaseDirectory()).thenReturn(contextDir); - new GitLfsFilterContextListener(contextProvider).contextInitialized(null); + public static void registerFilter() { + new GitLfsFilterContextListener().contextInitialized(null); } @AfterClass - public static void unregisterFilter() throws IOException { - new GitLfsFilterContextListener(null).contextDestroyed(null); - IOUtil.delete(contextDir); + public static void unregisterFilter() { + new GitLfsFilterContextListener().contextDestroyed(null); } @Test From 62dd29c4d7865a6c8ab7706083c21571e26c10f2 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 4 Mar 2020 08:23:25 +0100 Subject: [PATCH 5/5] close branch feature/update_jgit