mirror of
				https://github.com/scm-manager/scm-manager.git
				synced 2025-11-03 20:15:52 +01:00 
			
		
		
		
	Merged 2.0.0-m3 into feature/global_config_v2_endpoint
This commit is contained in:
		@@ -39,6 +39,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 | 
			
		||||
import javax.xml.bind.annotation.XmlAccessorType;
 | 
			
		||||
import javax.xml.bind.annotation.XmlElement;
 | 
			
		||||
import javax.xml.bind.annotation.XmlRootElement;
 | 
			
		||||
import javax.xml.bind.annotation.XmlTransient;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
@@ -46,7 +47,7 @@ import javax.xml.bind.annotation.XmlRootElement;
 | 
			
		||||
 */
 | 
			
		||||
@XmlRootElement(name = "config")
 | 
			
		||||
@XmlAccessorType(XmlAccessType.FIELD)
 | 
			
		||||
public class GitConfig extends SimpleRepositoryConfig {
 | 
			
		||||
public class GitConfig extends RepositoryConfig {
 | 
			
		||||
  
 | 
			
		||||
  @XmlElement(name = "gc-expression")
 | 
			
		||||
  private String gcExpression;
 | 
			
		||||
@@ -59,4 +60,11 @@ public class GitConfig extends SimpleRepositoryConfig {
 | 
			
		||||
  public void setGcExpression(String gcExpression) {
 | 
			
		||||
    this.gcExpression = gcExpression;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  @XmlTransient // Only for permission checks, don't serialize to XML
 | 
			
		||||
  public String getId() {
 | 
			
		||||
    // Don't change this without migrating SCM permission configuration!
 | 
			
		||||
    return "git";
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -30,9 +30,9 @@
 | 
			
		||||
 */
 | 
			
		||||
package sonia.scm.repository;
 | 
			
		||||
 | 
			
		||||
import com.github.legman.Subscribe;
 | 
			
		||||
import com.google.common.annotations.VisibleForTesting;
 | 
			
		||||
import com.google.common.base.Objects;
 | 
			
		||||
import com.google.common.eventbus.Subscribe;
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
import sonia.scm.EagerSingleton;
 | 
			
		||||
 
 | 
			
		||||
@@ -40,24 +40,21 @@ import org.eclipse.jgit.transport.PostReceiveHook;
 | 
			
		||||
import org.eclipse.jgit.transport.PreReceiveHook;
 | 
			
		||||
import org.eclipse.jgit.transport.ReceiveCommand;
 | 
			
		||||
import org.eclipse.jgit.transport.ReceivePack;
 | 
			
		||||
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
 | 
			
		||||
import sonia.scm.repository.GitRepositoryHandler;
 | 
			
		||||
import sonia.scm.repository.RepositoryHookType;
 | 
			
		||||
import sonia.scm.repository.RepositoryUtil;
 | 
			
		||||
import sonia.scm.repository.spi.GitHookContextProvider;
 | 
			
		||||
import sonia.scm.repository.spi.HookEventFacade;
 | 
			
		||||
 | 
			
		||||
//~--- JDK imports ------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
//~--- JDK imports ------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 * @author Sebastian Sdorra
 | 
			
		||||
@@ -131,15 +128,14 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
 | 
			
		||||
    try
 | 
			
		||||
    {
 | 
			
		||||
      Repository repository = rpack.getRepository();
 | 
			
		||||
      String repositoryName = resolveRepositoryName(repository);
 | 
			
		||||
      String id = resolveRepositoryId(repository);
 | 
			
		||||
 | 
			
		||||
      logger.trace("resolved repository name to {}", repositoryName);
 | 
			
		||||
      logger.trace("resolved repository to id {}", id);
 | 
			
		||||
 | 
			
		||||
      GitHookContextProvider context = new GitHookContextProvider(rpack,
 | 
			
		||||
                                         receiveCommands);
 | 
			
		||||
 | 
			
		||||
      hookEventFacade.handle(GitRepositoryHandler.TYPE_NAME,
 | 
			
		||||
        repositoryName).fireHookEvent(type, context);
 | 
			
		||||
      hookEventFacade.handle(id).fireHookEvent(type, context);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    catch (Exception ex)
 | 
			
		||||
@@ -191,7 +187,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
 | 
			
		||||
   *
 | 
			
		||||
   * @throws IOException
 | 
			
		||||
   */
 | 
			
		||||
  private String resolveRepositoryName(Repository repository) throws IOException
 | 
			
		||||
  private String resolveRepositoryId(Repository repository) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    File directory;
 | 
			
		||||
 | 
			
		||||
@@ -204,7 +200,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
 | 
			
		||||
      directory = repository.getWorkTree();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return RepositoryUtil.getRepositoryName(handler, directory);
 | 
			
		||||
    return RepositoryUtil.getRepositoryId(handler, directory);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  //~--- fields ---------------------------------------------------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -36,8 +36,8 @@ package sonia.scm.web;
 | 
			
		||||
//~--- non-JDK imports --------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
import com.google.common.annotations.VisibleForTesting;
 | 
			
		||||
import com.google.common.base.Preconditions;
 | 
			
		||||
import com.google.inject.Inject;
 | 
			
		||||
 | 
			
		||||
import org.eclipse.jgit.errors.RepositoryNotFoundException;
 | 
			
		||||
import org.eclipse.jgit.lib.Repository;
 | 
			
		||||
import org.eclipse.jgit.lib.RepositoryCache;
 | 
			
		||||
@@ -46,19 +46,17 @@ import org.eclipse.jgit.transport.resolver.RepositoryResolver;
 | 
			
		||||
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
 | 
			
		||||
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
 | 
			
		||||
import org.eclipse.jgit.util.FS;
 | 
			
		||||
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
 | 
			
		||||
import sonia.scm.repository.GitConfig;
 | 
			
		||||
import sonia.scm.repository.GitRepositoryHandler;
 | 
			
		||||
import sonia.scm.repository.RepositoryProvider;
 | 
			
		||||
 | 
			
		||||
//~--- JDK imports ------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
import javax.servlet.http.HttpServletRequest;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
 | 
			
		||||
import javax.servlet.http.HttpServletRequest;
 | 
			
		||||
//~--- JDK imports ------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
@@ -72,17 +70,11 @@ public class GitRepositoryResolver implements RepositoryResolver<HttpServletRequ
 | 
			
		||||
 | 
			
		||||
  //~--- constructors ---------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Constructs ...
 | 
			
		||||
   *
 | 
			
		||||
   *
 | 
			
		||||
   *
 | 
			
		||||
   * @param handler
 | 
			
		||||
   */
 | 
			
		||||
  @Inject
 | 
			
		||||
  public GitRepositoryResolver(GitRepositoryHandler handler)
 | 
			
		||||
  public GitRepositoryResolver(GitRepositoryHandler handler, RepositoryProvider repositoryProvider)
 | 
			
		||||
  {
 | 
			
		||||
    this.handler = handler;
 | 
			
		||||
    this.repositoryProvider = repositoryProvider;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  //~--- methods --------------------------------------------------------------
 | 
			
		||||
@@ -101,26 +93,27 @@ public class GitRepositoryResolver implements RepositoryResolver<HttpServletRequ
 | 
			
		||||
   * @throws ServiceNotEnabledException
 | 
			
		||||
   */
 | 
			
		||||
  @Override
 | 
			
		||||
  public Repository open(HttpServletRequest request, String repositoryName)
 | 
			
		||||
          throws RepositoryNotFoundException, ServiceNotAuthorizedException,
 | 
			
		||||
                 ServiceNotEnabledException
 | 
			
		||||
  public Repository open(HttpServletRequest request, String repositoryName) throws RepositoryNotFoundException, ServiceNotEnabledException
 | 
			
		||||
  {
 | 
			
		||||
    Repository repository = null;
 | 
			
		||||
 | 
			
		||||
    try
 | 
			
		||||
    {
 | 
			
		||||
      sonia.scm.repository.Repository repo = repositoryProvider.get();
 | 
			
		||||
 | 
			
		||||
      Preconditions.checkState(repo != null, "repository to handle not found");
 | 
			
		||||
      Preconditions.checkState(GitRepositoryHandler.TYPE_NAME.equals(repo.getType()), "got a non git repository in GitRepositoryResolver of type " + repo.getType());
 | 
			
		||||
 | 
			
		||||
      GitConfig config = handler.getConfig();
 | 
			
		||||
 | 
			
		||||
      if (config.isValid())
 | 
			
		||||
      {
 | 
			
		||||
        File gitdir = findRepository(config.getRepositoryDirectory(), repositoryName);
 | 
			
		||||
        File gitdir = findRepository(config.getRepositoryDirectory(), repo.getId());
 | 
			
		||||
        if (gitdir == null) {
 | 
			
		||||
          throw new RepositoryNotFoundException(repositoryName);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        logger.debug("try to open git repository at {}", gitdir);
 | 
			
		||||
 | 
			
		||||
        repository = RepositoryCache.open(FileKey.lenient(gitdir, FS.DETECTED), true);
 | 
			
		||||
        return RepositoryCache.open(FileKey.lenient(gitdir, FS.DETECTED), true);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
@@ -136,10 +129,8 @@ public class GitRepositoryResolver implements RepositoryResolver<HttpServletRequ
 | 
			
		||||
    {
 | 
			
		||||
      throw new RepositoryNotFoundException(repositoryName, e);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return repository;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  @VisibleForTesting
 | 
			
		||||
  File findRepository(File parentDirectory, String repositoryName) {
 | 
			
		||||
    File repositoryDirectory = new File(parentDirectory, repositoryName);
 | 
			
		||||
@@ -168,6 +159,6 @@ public class GitRepositoryResolver implements RepositoryResolver<HttpServletRequ
 | 
			
		||||
 | 
			
		||||
  //~--- fields ---------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
  /** Field description */
 | 
			
		||||
  private GitRepositoryHandler handler;
 | 
			
		||||
  private final GitRepositoryHandler handler;
 | 
			
		||||
  private final RepositoryProvider repositoryProvider;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -56,9 +56,6 @@ import sonia.scm.repository.api.RepositoryServiceFactory;
 | 
			
		||||
import sonia.scm.template.Template;
 | 
			
		||||
import sonia.scm.template.TemplateEngine;
 | 
			
		||||
import sonia.scm.template.TemplateEngineFactory;
 | 
			
		||||
import sonia.scm.url.RepositoryUrlProvider;
 | 
			
		||||
import sonia.scm.url.UrlProvider;
 | 
			
		||||
import sonia.scm.url.UrlProviderFactory;
 | 
			
		||||
import sonia.scm.util.HttpUtil;
 | 
			
		||||
import sonia.scm.util.IOUtil;
 | 
			
		||||
import sonia.scm.util.Util;
 | 
			
		||||
@@ -137,21 +134,14 @@ public class GitRepositoryViewer
 | 
			
		||||
 | 
			
		||||
    logger.trace("render git repository quick view with base url {}", baseUrl);
 | 
			
		||||
 | 
			
		||||
    UrlProvider urlProvider = UrlProviderFactory.createUrlProvider(baseUrl,
 | 
			
		||||
                                UrlProviderFactory.TYPE_WUI);
 | 
			
		||||
 | 
			
		||||
    response.setContentType(MIMETYPE_HTML);
 | 
			
		||||
 | 
			
		||||
    RepositoryUrlProvider rup = urlProvider.getRepositoryUrlProvider();
 | 
			
		||||
 | 
			
		||||
    TemplateEngine engine = templateEngineFactory.getDefaultEngine();
 | 
			
		||||
    Template template = engine.getTemplate(RESOURCE_GITINDEX);
 | 
			
		||||
    //J-
 | 
			
		||||
    ImmutableMap<String,Object> env = ImmutableMap.of(
 | 
			
		||||
      "repository", repository, 
 | 
			
		||||
      "branches", createBranchesModel(repository),
 | 
			
		||||
      "commitViewLink", rup.getChangesetUrl(repository.getId(), 0, 20),
 | 
			
		||||
      "sourceViewLink", rup.getBrowseUrl(repository.getId(), null, null)
 | 
			
		||||
      "branches", createBranchesModel(repository)
 | 
			
		||||
    );
 | 
			
		||||
    //J+
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@
 | 
			
		||||
 | 
			
		||||
package sonia.scm.web.lfs;
 | 
			
		||||
 | 
			
		||||
import com.google.common.eventbus.Subscribe;
 | 
			
		||||
import com.github.legman.Subscribe;
 | 
			
		||||
import com.google.inject.Inject;
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user