From e0b02ea1a3a56bcfc734fd93d6b9d34d2cf958ff Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Tue, 3 Mar 2020 16:13:17 +0100 Subject: [PATCH] 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