diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgEnvironment.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgEnvironment.java new file mode 100644 index 0000000000..2c948b0396 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgEnvironment.java @@ -0,0 +1,145 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.repository; + +//~--- non-JDK imports -------------------------------------------------------- + +import com.google.common.base.Strings; + +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.session.Session; +import org.apache.shiro.subject.Subject; + +import sonia.scm.web.HgUtil; + +//~--- JDK imports ------------------------------------------------------------ + +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +/** + * + * @author Sebastian Sdorra + */ +public final class HgEnvironment +{ + + /** Field description */ + public static final String ENV_PYTHON_PATH = "PYTHONPATH"; + + /** Field description */ + private static final String ENV_CHALLENGE = "SCM_CHALLENGE"; + + /** Field description */ + private static final String ENV_URL = "SCM_URL"; + + /** Field description */ + private static final String SCM_CREDENTIALS = "SCM_CREDENTIALS"; + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + */ + private HgEnvironment() {} + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @param environment + * @param handler + * @param hookManager + * @param request + */ + public static void prepareEnvironment(Map environment, + HgRepositoryHandler handler, HgHookManager hookManager, + HttpServletRequest request) + { + String hookUrl; + + if (request != null) + { + hookUrl = hookManager.createUrl(request); + } + else + { + hookUrl = hookManager.createUrl(); + } + + environment.put(ENV_PYTHON_PATH, HgUtil.getPythonPath(handler.getConfig())); + environment.put(ENV_URL, hookUrl); + environment.put(ENV_CHALLENGE, hookManager.getChallenge()); + environment.put(SCM_CREDENTIALS, getCredentials()); + } + + /** + * Method description + * + * + * @param environment + * @param handler + * @param hookManager + */ + public static void prepareEnvironment(Map environment, + HgRepositoryHandler handler, HgHookManager hookManager) + { + prepareEnvironment(environment, handler, hookManager, null); + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + private static String getCredentials() + { + String credentials = null; + + Subject subject = SecurityUtils.getSubject(); + Session session = subject.getSession(false); + + if (session != null) + { + credentials = (String) session.getAttribute(SCM_CREDENTIALS); + } + + return Strings.nullToEmpty(credentials); + } +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java index dc709f71b3..bd3e065bd4 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java @@ -82,14 +82,17 @@ public class HgHookManager implements ConfigChangedListener * * * @param configuration + * @param httpServletRequestProvider * @param httpClientProvider */ @Inject public HgHookManager(ScmConfiguration configuration, + Provider httpServletRequestProvider, Provider httpClientProvider) { this.configuration = configuration; this.configuration.addListener(this); + this.httpServletRequestProvider = httpServletRequestProvider; this.httpClientProvider = httpClientProvider; } @@ -136,6 +139,36 @@ public class HgHookManager implements ConfigChangedListener return hookUrl; } + /** + * Method description + * + * + * @return + */ + public String createUrl() + { + String url = hookUrl; + + if (url == null) + { + HttpServletRequest request = httpServletRequestProvider.get(); + + if (request != null) + { + url = createUrl(request); + } + else + { + logger.warn( + "created hook url {} without request, in some cases this could cause problems", + hookUrl); + url = createConfiguredUrl(); + } + } + + return url; + } + //~--- get methods ---------------------------------------------------------- /** @@ -330,4 +363,7 @@ public class HgHookManager implements ConfigChangedListener /** Field description */ private Provider httpClientProvider; + + /** Field description */ + private Provider httpServletRequestProvider; } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHookEvent.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHookEvent.java index d0b070b5a5..60e8d9a34f 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHookEvent.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHookEvent.java @@ -73,14 +73,17 @@ public class HgRepositoryHookEvent extends AbstractRepositoryHookEvent * * * @param handler + * @param hookManager * @param repositoryName * @param startRev * @param type */ public HgRepositoryHookEvent(HgRepositoryHandler handler, - String repositoryName, String startRev, RepositoryHookType type) + HgHookManager hookManager, String repositoryName, String startRev, + RepositoryHookType type) { this.handler = handler; + this.hookManager = hookManager; this.repositoryName = repositoryName; this.startRev = startRev; this.type = type; @@ -153,7 +156,7 @@ public class HgRepositoryHookEvent extends AbstractRepositoryHookEvent Repository repository = getRepository(); - return new HgCommandContext(handler.getConfig(), repository, + return new HgCommandContext(hookManager, handler, repository, repositoryDirectory, pending); } @@ -165,6 +168,9 @@ public class HgRepositoryHookEvent extends AbstractRepositoryHookEvent /** Field description */ private HgRepositoryHandler handler; + /** Field description */ + private HgHookManager hookManager; + /** Field description */ private String repositoryName; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContext.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContext.java index 9b9cf86043..bf9f74182e 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContext.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContext.java @@ -44,6 +44,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.HgConfig; +import sonia.scm.repository.HgEnvironment; +import sonia.scm.repository.HgHookManager; +import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.spi.javahg.HgFileviewExtension; //~--- JDK imports ------------------------------------------------------------ @@ -76,36 +79,44 @@ public class HgCommandContext implements Closeable * Constructs ... * * - * @param config + * + * @param hookManager + * @param handler * @param repository * @param directory */ - public HgCommandContext(HgConfig config, - sonia.scm.repository.Repository repository, File directory) + public HgCommandContext(HgHookManager hookManager, + HgRepositoryHandler handler, sonia.scm.repository.Repository repository, + File directory) { - this(config, repository, directory, false); + this(hookManager, handler, repository, directory, false); } /** * Constructs ... * * + * + * @param hookManager * @param config + * @param hanlder * @param repository * @param directory * @param pending */ - public HgCommandContext(HgConfig config, - sonia.scm.repository.Repository repository, File directory, boolean pending) + public HgCommandContext(HgHookManager hookManager, + HgRepositoryHandler hanlder, sonia.scm.repository.Repository repository, + File directory, boolean pending) { - this.config = config; + this.hookManager = hookManager; + this.hanlder = hanlder; this.directory = directory; this.encoding = repository.getProperty(PROPERTY_ENCODING); this.pending = pending; if (Strings.isNullOrEmpty(encoding)) { - encoding = config.getEncoding(); + encoding = hanlder.getConfig().getEncoding(); } } @@ -139,6 +150,9 @@ public class HgCommandContext implements Closeable RepositoryConfiguration repoConfiguration = RepositoryConfiguration.DEFAULT; + HgEnvironment.prepareEnvironment(repoConfiguration.getEnvironment(), + hanlder, hookManager); + repoConfiguration.addExtension(HgFileviewExtension.class); repoConfiguration.setEnablePendingChangesets(pending); @@ -158,7 +172,7 @@ public class HgCommandContext implements Closeable logger.error("could not set encoding for mercurial", ex); } - repoConfiguration.setHgBin(config.getHgBinary()); + repoConfiguration.setHgBin(hanlder.getConfig().getHgBinary()); repository = Repository.open(repoConfiguration, directory); } @@ -175,20 +189,23 @@ public class HgCommandContext implements Closeable */ public HgConfig getConfig() { - return config; + return hanlder.getConfig(); } //~--- fields --------------------------------------------------------------- - /** Field description */ - private HgConfig config; - /** Field description */ private File directory; /** Field description */ private String encoding; + /** Field description */ + private HgRepositoryHandler hanlder; + + /** Field description */ + private HgHookManager hookManager; + /** Field description */ private boolean pending; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java index 21aa71711a..80b10f7ffc 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java @@ -38,6 +38,7 @@ package sonia.scm.repository.spi; import com.google.common.io.Closeables; import sonia.scm.repository.Feature; +import sonia.scm.repository.HgHookManager; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.Repository; import sonia.scm.repository.api.Command; @@ -85,16 +86,18 @@ public class HgRepositoryServiceProvider extends RepositoryServiceProvider * * * + * + * @param hookManager * @param handler * @param repository */ HgRepositoryServiceProvider(HgRepositoryHandler handler, - Repository repository) + HgHookManager hookManager, Repository repository) { this.repository = repository; this.handler = handler; this.repositoryDirectory = handler.getDirectory(repository); - this.context = new HgCommandContext(handler.getConfig(), repository, + this.context = new HgCommandContext(hookManager, handler, repository, repositoryDirectory); } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceResolver.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceResolver.java index 0a4d4e6641..c98acf0f78 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceResolver.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceResolver.java @@ -38,6 +38,7 @@ package sonia.scm.repository.spi; import com.google.inject.Inject; import sonia.scm.plugin.ext.Extension; +import sonia.scm.repository.HgHookManager; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.Repository; @@ -58,12 +59,16 @@ public class HgRepositoryServiceResolver implements RepositoryServiceResolver * Constructs ... * * + * + * @param hookManager * @param handler */ @Inject - public HgRepositoryServiceResolver(HgRepositoryHandler handler) + public HgRepositoryServiceResolver(HgRepositoryHandler handler, + HgHookManager hookManager) { this.handler = handler; + this.hookManager = hookManager; } //~--- methods -------------------------------------------------------------- @@ -83,7 +88,8 @@ public class HgRepositoryServiceResolver implements RepositoryServiceResolver if (TYPE.equalsIgnoreCase(repository.getType())) { - provider = new HgRepositoryServiceProvider(handler, repository); + provider = new HgRepositoryServiceProvider(handler, hookManager, + repository); } return provider; @@ -93,4 +99,7 @@ public class HgRepositoryServiceResolver implements RepositoryServiceResolver /** Field description */ private HgRepositoryHandler handler; + + /** Field description */ + private HgHookManager hookManager; } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java index 0447b8f8fb..a9346b3027 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java @@ -44,6 +44,7 @@ import org.slf4j.LoggerFactory; import sonia.scm.SCMContext; import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.HgConfig; +import sonia.scm.repository.HgEnvironment; import sonia.scm.repository.HgHookManager; import sonia.scm.repository.HgPythonScript; import sonia.scm.repository.HgRepositoryHandler; @@ -51,7 +52,6 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryProvider; import sonia.scm.repository.RepositoryRequestListenerUtil; import sonia.scm.util.AssertUtil; -import sonia.scm.util.Util; import sonia.scm.web.cgi.CGIExecutor; import sonia.scm.web.cgi.CGIExecutorFactory; import sonia.scm.web.cgi.EnvList; @@ -77,12 +77,6 @@ import javax.servlet.http.HttpSession; public class HgCGIServlet extends HttpServlet { - /** Field description */ - public static final String ENV_CHALLENGE = "SCM_CHALLENGE"; - - /** Field description */ - public static final String ENV_PYTHON_PATH = "PYTHONPATH"; - /** Field description */ public static final String ENV_REPOSITORY_NAME = "REPO_NAME"; @@ -92,12 +86,6 @@ public class HgCGIServlet extends HttpServlet /** Field description */ public static final String ENV_SESSION_PREFIX = "SCM_"; - /** Field description */ - public static final String ENV_URL = "SCM_URL"; - - /** Field description */ - public static final String SCM_CREDENTIALS = "SCM_CREDENTIALS"; - /** Field description */ private static final long serialVersionUID = -3492811300905099810L; @@ -240,12 +228,6 @@ public class HgCGIServlet extends HttpServlet env.set(key, session.getAttribute(key).toString()); } } - - // issue-97 - if (!env.containsKey(SCM_CREDENTIALS)) - { - env.set(SCM_CREDENTIALS, Util.EMPTY_STRING); - } } /** @@ -265,7 +247,6 @@ public class HgCGIServlet extends HttpServlet { String name = repository.getName(); File directory = handler.getDirectory(repository); - String pythonPath = HgUtil.getPythonPath(handler.getConfig()); CGIExecutor executor = cgiExecutorFactory.createExecutor(configuration, getServletContext(), request, response); @@ -277,9 +258,15 @@ public class HgCGIServlet extends HttpServlet executor.getEnvironment().set(ENV_REPOSITORY_NAME, name); executor.getEnvironment().set(ENV_REPOSITORY_PATH, directory.getAbsolutePath()); - executor.getEnvironment().set(ENV_URL, hookManager.createUrl(request)); - executor.getEnvironment().set(ENV_CHALLENGE, hookManager.getChallenge()); - executor.getEnvironment().set(ENV_PYTHON_PATH, pythonPath); + // add hook environment + //J- + HgEnvironment.prepareEnvironment( + executor.getEnvironment().asMutableMap(), + handler, + hookManager, + request + ); + //J+ HttpSession session = request.getSession(); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgHookCallbackServlet.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgHookCallbackServlet.java index 90ff22974d..d86ea6d9f6 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgHookCallbackServlet.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgHookCallbackServlet.java @@ -280,7 +280,7 @@ public class HgHookCallbackServlet extends HttpServlet repositoryManager.fireHookEvent(HgRepositoryHandler.TYPE_NAME, repositoryName, - new HgRepositoryHookEvent(handler, repositoryName, node, type)); + new HgRepositoryHookEvent(handler, hookManager, repositoryName, node, type)); } catch (RepositoryNotFoundException ex) { diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgTestUtil.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgTestUtil.java index 5f3bcab580..a029007298 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgTestUtil.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgTestUtil.java @@ -41,12 +41,14 @@ import sonia.scm.SCMContext; import sonia.scm.io.FileSystem; import sonia.scm.store.MemoryStoreFactory; -import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.*; //~--- JDK imports ------------------------------------------------------------ import java.io.File; +import javax.servlet.http.HttpServletRequest; + /** * * @author Sebastian Sdorra @@ -110,4 +112,23 @@ public final class HgTestUtil return handler; } + + /** + * Method description + * + * + * @return + */ + public static HgHookManager createHookManager() + { + HgHookManager hookManager = mock(HgHookManager.class); + + when(hookManager.getChallenge()).thenReturn("challenge"); + when(hookManager.createUrl()).thenReturn( + "http://localhost:8081/scm/hook/hg/"); + when(hookManager.createUrl(any(HttpServletRequest.class))).thenReturn( + "http://localhost:8081/scm/hook/hg/"); + + return hookManager; + } } diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/AbstractHgCommandTestBase.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/AbstractHgCommandTestBase.java index db8e99725a..b5284c737c 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/AbstractHgCommandTestBase.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/AbstractHgCommandTestBase.java @@ -38,20 +38,13 @@ package sonia.scm.repository.spi; import org.junit.After; import org.junit.Before; -import sonia.scm.SCMContext; -import sonia.scm.io.FileSystem; -import sonia.scm.repository.HgContextProvider; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.HgTestUtil; import sonia.scm.repository.RepositoryTestData; -import sonia.scm.repository.TempSCMContextProvider; -import sonia.scm.store.MemoryStoreFactory; - -import static org.mockito.Mockito.*; +import sonia.scm.util.MockUtil; //~--- JDK imports ------------------------------------------------------------ -import java.io.File; import java.io.IOException; /** @@ -89,10 +82,22 @@ public class AbstractHgCommandTestBase extends ZippedRepositoryTestBase HgTestUtil.checkForSkip(handler); - cmdContext = new HgCommandContext(handler.getConfig(), + cmdContext = new HgCommandContext(HgTestUtil.createHookManager(), handler, RepositoryTestData.createHeartOfGold(), repositoryDirectory); } + //~--- set methods ---------------------------------------------------------- + + /** + * Method description + * + */ + @Before + public void setUp() + { + setSubject(MockUtil.createAdminSubject()); + } + //~--- get methods ---------------------------------------------------------- /** diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgIncomingCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgIncomingCommandTest.java index c6d8c354d9..518f8cab58 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgIncomingCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgIncomingCommandTest.java @@ -38,6 +38,7 @@ import com.aragost.javahg.Changeset; import org.junit.Test; import sonia.scm.repository.ChangesetPagingResult; +import sonia.scm.repository.HgTestUtil; import sonia.scm.repository.RepositoryException; import static org.junit.Assert.*; @@ -145,7 +146,9 @@ public class HgIncomingCommandTest extends IncomingOutgoingTestBase */ private HgIncomingCommand createIncomingCommand() { - return new HgIncomingCommand(new HgCommandContext(handler.getConfig(), - incomingRepository, incomingDirectory), incomingRepository, handler); + return new HgIncomingCommand( + new HgCommandContext( + HgTestUtil.createHookManager(), handler, incomingRepository, + incomingDirectory), incomingRepository, handler); } } diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgOutgoingCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgOutgoingCommandTest.java index 807ab9644c..51d1b99d79 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgOutgoingCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgOutgoingCommandTest.java @@ -38,6 +38,7 @@ import com.aragost.javahg.Changeset; import org.junit.Test; import sonia.scm.repository.ChangesetPagingResult; +import sonia.scm.repository.HgTestUtil; import sonia.scm.repository.RepositoryException; import static org.junit.Assert.assertEquals; @@ -148,7 +149,9 @@ public class HgOutgoingCommandTest extends IncomingOutgoingTestBase */ private HgOutgoingCommand createOutgoingCommand() { - return new HgOutgoingCommand(new HgCommandContext(handler.getConfig(), - outgoingRepository, outgoingDirectory), outgoingRepository, handler); + return new HgOutgoingCommand( + new HgCommandContext( + HgTestUtil.createHookManager(), handler, outgoingRepository, + outgoingDirectory), outgoingRepository, handler); } } diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/IncomingOutgoingTestBase.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/IncomingOutgoingTestBase.java index 173892b29d..5e00f1805d 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/IncomingOutgoingTestBase.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/IncomingOutgoingTestBase.java @@ -26,43 +26,52 @@ * http://bitbucket.org/sdorra/scm-manager * */ + + + package sonia.scm.repository.spi; +//~--- non-JDK imports -------------------------------------------------------- + import com.aragost.javahg.BaseRepository; import com.aragost.javahg.Changeset; import com.aragost.javahg.Repository; import com.aragost.javahg.RepositoryConfiguration; import com.aragost.javahg.commands.AddCommand; import com.aragost.javahg.commands.CommitCommand; + import com.google.common.base.Charsets; import com.google.common.io.Files; -import java.io.File; -import java.io.IOException; -import static org.junit.Assert.*; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; -import static org.mockito.Mockito.*; + +import sonia.scm.AbstractTestBase; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.HgConfig; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.HgTestUtil; import sonia.scm.user.User; import sonia.scm.user.UserTestData; +import sonia.scm.util.MockUtil; + +import static org.junit.Assert.*; + +import static org.mockito.Mockito.*; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.File; +import java.io.IOException; /** * * @author Sebastian Sdorra */ -public abstract class IncomingOutgoingTestBase +public abstract class IncomingOutgoingTestBase extends AbstractTestBase { - - /** Field description */ - @Rule - public TemporaryFolder tempFolder = new TemporaryFolder(); - - //~--- methods -------------------------------------------------------------- /** * Method description @@ -96,6 +105,20 @@ public abstract class IncomingOutgoingTestBase when(handler.getConfig()).thenReturn(temp.getConfig()); } + //~--- set methods ---------------------------------------------------------- + + /** + * Method description + * + */ + @Before + public void setUp() + { + setSubject(MockUtil.createAdminSubject()); + } + + //~--- methods -------------------------------------------------------------- + /** * Method description * @@ -130,26 +153,6 @@ public abstract class IncomingOutgoingTestBase return c.execute(); } - /** - * Method description - * - * - * - * @param handler - * @return - */ - private RepositoryConfiguration createConfig(HgRepositoryHandler handler) - { - HgConfig cfg = handler.getConfig(); - RepositoryConfiguration configuration = RepositoryConfiguration.DEFAULT; - - configuration.setHgBin(cfg.getHgBinary()); - - return configuration; - } - - - /** * Method description * @@ -185,8 +188,30 @@ public abstract class IncomingOutgoingTestBase AddCommand.on(repository).execute(file); } + /** + * Method description + * + * + * + * @param handler + * @return + */ + private RepositoryConfiguration createConfig(HgRepositoryHandler handler) + { + HgConfig cfg = handler.getConfig(); + RepositoryConfiguration configuration = RepositoryConfiguration.DEFAULT; + + configuration.setHgBin(cfg.getHgBinary()); + + return configuration; + } + //~--- fields --------------------------------------------------------------- + /** Field description */ + @Rule + public TemporaryFolder tempFolder = new TemporaryFolder(); + /** Field description */ protected HgRepositoryHandler handler; @@ -206,5 +231,5 @@ public abstract class IncomingOutgoingTestBase protected File outgoingDirectory; /** Field description */ - protected sonia.scm.repository.Repository outgoingRepository; + protected sonia.scm.repository.Repository outgoingRepository; }