mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-10 07:25:44 +01:00
implement new hook api for mercurial repositories
This commit is contained in:
@@ -49,11 +49,13 @@ import org.slf4j.LoggerFactory;
|
||||
import sonia.scm.repository.HgContext;
|
||||
import sonia.scm.repository.HgHookManager;
|
||||
import sonia.scm.repository.HgRepositoryHandler;
|
||||
import sonia.scm.repository.HgRepositoryHookEvent;
|
||||
import sonia.scm.repository.RepositoryHookType;
|
||||
import sonia.scm.repository.RepositoryManager;
|
||||
import sonia.scm.repository.RepositoryNotFoundException;
|
||||
import sonia.scm.repository.RepositoryUtil;
|
||||
import sonia.scm.repository.spi.HgHookContextProvider;
|
||||
import sonia.scm.repository.spi.HookEventFacade;
|
||||
import sonia.scm.repositorya.api.HgHookMessage;
|
||||
import sonia.scm.repositorya.api.HgHookMessage.Severity;
|
||||
import sonia.scm.security.CipherUtil;
|
||||
import sonia.scm.security.Tokens;
|
||||
import sonia.scm.util.HttpUtil;
|
||||
@@ -64,6 +66,7 @@ import sonia.scm.util.Util;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@@ -118,18 +121,18 @@ public class HgHookCallbackServlet extends HttpServlet
|
||||
* Constructs ...
|
||||
*
|
||||
*
|
||||
* @param repositoryManager
|
||||
*
|
||||
* @param hookEventFacade
|
||||
* @param handler
|
||||
* @param hookManager
|
||||
* @param contextProvider
|
||||
* @param securityContextProvider
|
||||
*/
|
||||
@Inject
|
||||
public HgHookCallbackServlet(RepositoryManager repositoryManager,
|
||||
public HgHookCallbackServlet(HookEventFacade hookEventFacade,
|
||||
HgRepositoryHandler handler, HgHookManager hookManager,
|
||||
Provider<HgContext> contextProvider)
|
||||
{
|
||||
this.repositoryManager = repositoryManager;
|
||||
this.hookEventFacade = hookEventFacade;
|
||||
this.handler = handler;
|
||||
this.hookManager = hookManager;
|
||||
this.contextProvider = contextProvider;
|
||||
@@ -228,7 +231,6 @@ public class HgHookCallbackServlet extends HttpServlet
|
||||
*
|
||||
*
|
||||
* @param request
|
||||
* @param response
|
||||
* @param credentials
|
||||
*/
|
||||
private void authenticate(HttpServletRequest request, String credentials)
|
||||
@@ -278,9 +280,14 @@ public class HgHookCallbackServlet extends HttpServlet
|
||||
contextProvider.get().setPending(true);
|
||||
}
|
||||
|
||||
repositoryManager.fireHookEvent(HgRepositoryHandler.TYPE_NAME,
|
||||
repositoryName,
|
||||
new HgRepositoryHookEvent(handler, hookManager, repositoryName, node, type));
|
||||
HgHookContextProvider context = new HgHookContextProvider(handler,
|
||||
repositoryName, hookManager, node,
|
||||
type);
|
||||
|
||||
hookEventFacade.handle(HgRepositoryHandler.TYPE_NAME,
|
||||
repositoryName).fireHookEvent(type, context);
|
||||
|
||||
printMessages(response, context);
|
||||
}
|
||||
catch (RepositoryNotFoundException ex)
|
||||
{
|
||||
@@ -356,6 +363,52 @@ public class HgHookCallbackServlet extends HttpServlet
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param resonse
|
||||
* @param context
|
||||
*
|
||||
* @throws IOException
|
||||
*/
|
||||
private void printMessages(HttpServletResponse resonse,
|
||||
HgHookContextProvider context)
|
||||
throws IOException
|
||||
{
|
||||
List<HgHookMessage> msgs = context.getHgMessageProvider().getMessages();
|
||||
|
||||
if (Util.isNotEmpty(msgs))
|
||||
{
|
||||
PrintWriter writer = null;
|
||||
|
||||
try
|
||||
{
|
||||
writer = resonse.getWriter();
|
||||
|
||||
for (HgHookMessage msg : msgs)
|
||||
{
|
||||
writer.append('_');
|
||||
|
||||
if (msg.getSeverity() == Severity.ERROR)
|
||||
{
|
||||
writer.append("e[SCM] Error: ");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.append("n[SCM] ");
|
||||
}
|
||||
|
||||
writer.println(msg.getMessage());
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
Closeables.close(writer, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
@@ -437,8 +490,8 @@ public class HgHookCallbackServlet extends HttpServlet
|
||||
private HgRepositoryHandler handler;
|
||||
|
||||
/** Field description */
|
||||
private HgHookManager hookManager;
|
||||
private HookEventFacade hookEventFacade;
|
||||
|
||||
/** Field description */
|
||||
private RepositoryManager repositoryManager;
|
||||
private HgHookManager hookManager;
|
||||
}
|
||||
|
||||
@@ -35,15 +35,29 @@ package sonia.scm.web;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
import com.aragost.javahg.Repository;
|
||||
import com.aragost.javahg.RepositoryConfiguration;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import sonia.scm.SCMContext;
|
||||
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;
|
||||
import sonia.scm.repository.spi.javahg.HgFileviewExtension;
|
||||
import sonia.scm.util.Util;
|
||||
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Sebastian Sdorra
|
||||
@@ -54,6 +68,11 @@ public final class HgUtil
|
||||
/** Field description */
|
||||
public static final String REVISION_TIP = "tip";
|
||||
|
||||
/**
|
||||
* the logger for HgUtil
|
||||
*/
|
||||
private static final Logger logger = LoggerFactory.getLogger(HgUtil.class);
|
||||
|
||||
//~--- constructors ---------------------------------------------------------
|
||||
|
||||
/**
|
||||
@@ -62,6 +81,56 @@ public final class HgUtil
|
||||
*/
|
||||
private HgUtil() {}
|
||||
|
||||
//~--- methods --------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param handler
|
||||
* @param hookManager
|
||||
* @param directory
|
||||
* @param encoding
|
||||
* @param pending
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static Repository open(HgRepositoryHandler handler,
|
||||
HgHookManager hookManager, File directory, String encoding, boolean pending)
|
||||
{
|
||||
String enc = encoding;
|
||||
|
||||
if (Strings.isNullOrEmpty(enc))
|
||||
{
|
||||
enc = handler.getConfig().getEncoding();
|
||||
}
|
||||
|
||||
RepositoryConfiguration repoConfiguration = RepositoryConfiguration.DEFAULT;
|
||||
|
||||
HgEnvironment.prepareEnvironment(repoConfiguration.getEnvironment(),
|
||||
handler, hookManager);
|
||||
|
||||
repoConfiguration.addExtension(HgFileviewExtension.class);
|
||||
repoConfiguration.setEnablePendingChangesets(pending);
|
||||
|
||||
try
|
||||
{
|
||||
Charset charset = Charset.forName(enc);
|
||||
|
||||
logger.trace("set encoding {} for mercurial", enc);
|
||||
|
||||
repoConfiguration.setEncoding(charset);
|
||||
}
|
||||
catch (IllegalArgumentException ex)
|
||||
{
|
||||
logger.error("could not set encoding for mercurial", ex);
|
||||
}
|
||||
|
||||
repoConfiguration.setHgBin(handler.getConfig().getHgBinary());
|
||||
|
||||
return Repository.open(repoConfiguration, directory);
|
||||
}
|
||||
|
||||
//~--- get methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user