merge with branch 1.x

This commit is contained in:
Sebastian Sdorra
2019-01-29 09:42:03 +01:00
53 changed files with 3802 additions and 242 deletions

View File

@@ -55,8 +55,10 @@ public class GitConfig extends RepositoryConfig {
@XmlElement(name = "gc-expression")
private String gcExpression;
public String getGcExpression()
{
@XmlElement(name = "disallow-non-fast-forward")
private boolean nonFastForwardDisallowed;
public String getGcExpression() {
return gcExpression;
}
@@ -64,6 +66,14 @@ public class GitConfig extends RepositoryConfig {
this.gcExpression = gcExpression;
}
public boolean isNonFastForwardDisallowed() {
return nonFastForwardDisallowed;
}
public void setNonFastForwardDisallowed(boolean nonFastForwardDisallowed) {
this.nonFastForwardDisallowed = nonFastForwardDisallowed;
}
@Override
@XmlTransient // Only for permission checks, don't serialize to XML
public String getId() {

View File

@@ -68,17 +68,40 @@ public class GitHookTagProvider implements HookTagProvider {
if (Strings.isNullOrEmpty(tag)){
logger.debug("received ref name {} is not a tag", refName);
} else if (rc.getType() == ReceiveCommand.Type.CREATE) {
createdTagBuilder.add(new Tag(tag, GitUtil.getId(rc.getNewId())));
} else if (rc.getType() == ReceiveCommand.Type.DELETE){
deletedTagBuilder.add(new Tag(tag, GitUtil.getId(rc.getOldId())));
} else if (isCreate(rc)) {
createdTagBuilder.add(createTagFromNewId(rc, tag));
} else if (isDelete(rc)){
deletedTagBuilder.add(createTagFromOldId(rc, tag));
} else if (isUpdate(rc)) {
createdTagBuilder.add(createTagFromNewId(rc, tag));
deletedTagBuilder.add(createTagFromOldId(rc, tag));
}
}
createdTags = createdTagBuilder.build();
deletedTags = deletedTagBuilder.build();
}
private Tag createTagFromNewId(ReceiveCommand rc, String tag) {
return new Tag(tag, GitUtil.getId(rc.getNewId()));
}
private Tag createTagFromOldId(ReceiveCommand rc, String tag) {
return new Tag(tag, GitUtil.getId(rc.getOldId()));
}
private boolean isUpdate(ReceiveCommand rc) {
return rc.getType() == ReceiveCommand.Type.UPDATE || rc.getType() == ReceiveCommand.Type.UPDATE_NONFASTFORWARD;
}
private boolean isDelete(ReceiveCommand rc) {
return rc.getType() == ReceiveCommand.Type.DELETE;
}
private boolean isCreate(ReceiveCommand rc) {
return rc.getType() == ReceiveCommand.Type.CREATE;
}
@Override
public List<Tag> getCreatedTags() {
return createdTags;

View File

@@ -35,79 +35,63 @@ package sonia.scm.web;
//~--- non-JDK imports --------------------------------------------------------
import com.google.common.annotations.VisibleForTesting;
import com.google.inject.Inject;
import org.eclipse.jgit.http.server.resolver.DefaultReceivePackFactory;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.ReceivePack;
import org.eclipse.jgit.transport.resolver.ReceivePackFactory;
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
import sonia.scm.repository.GitRepositoryHandler;
import sonia.scm.repository.spi.HookEventFacade;
//~--- JDK imports ------------------------------------------------------------
import javax.servlet.http.HttpServletRequest;
//~--- JDK imports ------------------------------------------------------------
/**
* GitReceivePackFactory creates {@link ReceivePack} objects and assigns the required
* Hook components.
*
* @author Sebastian Sdorra
*/
public class GitReceivePackFactory
implements ReceivePackFactory<HttpServletRequest>
public class GitReceivePackFactory implements ReceivePackFactory<HttpServletRequest>
{
/**
* Constructs ...
*
*
*
* @param hookEventFacade
* @param handler
*/
private final GitRepositoryHandler handler;
private ReceivePackFactory wrapped;
private final GitReceiveHook hook;
@Inject
public GitReceivePackFactory(HookEventFacade hookEventFacade,
GitRepositoryHandler handler)
{
hook = new GitReceiveHook(hookEventFacade, handler);
public GitReceivePackFactory(GitRepositoryHandler handler, HookEventFacade hookEventFacade) {
this.handler = handler;
this.hook = new GitReceiveHook(hookEventFacade, handler);
this.wrapped = new DefaultReceivePackFactory();
}
//~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @param request
* @param repository
*
* @return
*
* @throws ServiceNotAuthorizedException
* @throws ServiceNotEnabledException
*/
@Override
public ReceivePack create(HttpServletRequest request, Repository repository)
throws ServiceNotEnabledException, ServiceNotAuthorizedException
{
ReceivePack rpack = defaultFactory.create(request, repository);
throws ServiceNotEnabledException, ServiceNotAuthorizedException {
ReceivePack receivePack = wrapped.create(request, repository);
receivePack.setAllowNonFastForwards(isNonFastForwardAllowed());
rpack.setPreReceiveHook(hook);
rpack.setPostReceiveHook(hook);
receivePack.setPreReceiveHook(hook);
receivePack.setPostReceiveHook(hook);
// apply collecting listener, to be able to check which commits are new
CollectingPackParserListener.set(rpack);
CollectingPackParserListener.set(receivePack);
return rpack;
return receivePack;
}
//~--- fields ---------------------------------------------------------------
private boolean isNonFastForwardAllowed() {
return ! handler.getConfig().isNonFastForwardDisallowed();
}
/** Field description */
private DefaultReceivePackFactory defaultFactory =
new DefaultReceivePackFactory();
/** Field description */
private GitReceiveHook hook;
@VisibleForTesting
void setWrapped(ReceivePackFactory wrapped) {
this.wrapped = wrapped;
}
}