James Moger
2011-04-26 c1c3c6a7a2f0a2893ef36ab3dfc7b09d04a133bc
src/com/gitblit/GitBlit.java
@@ -5,16 +5,15 @@
import java.util.Date;
import java.util.List;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import org.apache.wicket.Request;
import org.apache.wicket.protocol.http.WebResponse;
import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
import org.eclipse.jgit.errors.RepositoryNotFoundException;
import org.eclipse.jgit.http.server.resolver.FileResolver;
import org.eclipse.jgit.http.server.resolver.ServiceNotEnabledException;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.resolver.FileResolver;
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -22,38 +21,43 @@
import com.gitblit.wicket.User;
import com.gitblit.wicket.models.RepositoryModel;
public class GitBlit {
public class GitBlit implements ServletContextListener {
   private static GitBlit gitblit;
   private final static GitBlit gitblit;
   private final Logger logger = LoggerFactory.getLogger(GitBlit.class);
   private final boolean debugMode;
   private FileResolver<Void> repositoryResolver;
   private final FileResolver repositoryResolver;
   private File repositories;
   private final File repositories;
   private final boolean exportAll;
   private boolean exportAll;
   private ILoginService loginService;
   private IStoredSettings storedSettings;
   static {
      gitblit = new GitBlit();
   }
   public static GitBlit self() {
      if (gitblit == null) {
         gitblit = new GitBlit();
      }
      return gitblit;
   }
   private GitBlit() {
      repositories = new File(StoredSettings.getString("repositoriesFolder", "repos"));
      exportAll = StoredSettings.getBoolean("exportAll", true);
      repositoryResolver = new FileResolver(repositories, exportAll);
      debugMode = StoredSettings.getBoolean("debugMode", false);
   }
   public IStoredSettings settings() {
      return storedSettings;
   }
   public boolean isDebugMode() {
      return debugMode;
      return storedSettings.getBoolean(Keys.web.debugMode, false);
   }
   public String getCloneUrl(String repositoryName) {
      return storedSettings.getString(Keys.git.cloneUrl, "https://localhost/git/") + repositoryName;
   }
   public void setLoginService(ILoginService loginService) {
@@ -88,32 +92,61 @@
      userCookie.setPath("/");
      response.addCookie(userCookie);
   }
   public List<String> getRepositoryList() {
      return JGitUtils.getRepositoryList(repositories, exportAll, StoredSettings.getBoolean("nestedRepositories", true));
   public void editRepository(RepositoryModel repository, boolean isCreate) {
      Repository r = null;
      if (isCreate) {
         // create repository
         logger.info("create repository " + repository.name);
         r = JGitUtils.createRepository(repositories, repository.name, true);
      } else {
         // load repository
         logger.info("edit repository " + repository.name);
         try {
            r = repositoryResolver.open(null, repository.name);
         } catch (RepositoryNotFoundException e) {
            logger.error("Repository not found", e);
         } catch (ServiceNotEnabledException e) {
            logger.error("Service not enabled", e);
         }
      }
      // update settings
      JGitUtils.setRepositoryDescription(r, repository.description);
      JGitUtils.setRepositoryOwner(r, repository.owner);
      JGitUtils.setRepositoryUseTickets(r, repository.useTickets);
      JGitUtils.setRepositoryUseDocs(r, repository.useDocs);
      JGitUtils.setRepositoryRestrictedAccess(r, repository.useRestrictedAccess);
   }
   public List<RepositoryModel> getRepositories(Request request) {
      List<String> list = getRepositoryList();
      ServletWebRequest servletWebRequest = (ServletWebRequest) request;
      HttpServletRequest req = servletWebRequest.getHttpServletRequest();
   public List<String> getRepositoryList() {
      return JGitUtils.getRepositoryList(repositories, exportAll, storedSettings.getBoolean(Keys.git.nestedRepositories, true));
   }
   public List<RepositoryModel> getRepositories() {
      List<String> list = getRepositoryList();
      List<RepositoryModel> repositories = new ArrayList<RepositoryModel>();
      for (String repo : list) {
         Repository r = getRepository(req, repo);
         Repository r = getRepository(repo);
         String description = JGitUtils.getRepositoryDescription(r);
         String owner = JGitUtils.getRepositoryOwner(r);
         String group = JGitUtils.getRepositoryGroup(r);
         Date lastchange = JGitUtils.getLastChange(r);
         RepositoryModel model = new RepositoryModel(repo, description, owner, lastchange);
         model.group = group;
         model.useTickets = JGitUtils.getRepositoryUseTickets(r);
         model.useDocs = JGitUtils.getRepositoryUseDocs(r);
         model.useRestrictedAccess = JGitUtils.getRepositoryRestrictedAccess(r);
         r.close();
         repositories.add(new RepositoryModel(repo, description, owner, lastchange));
         repositories.add(model);
      }
      return repositories;
   }
   public Repository getRepository(HttpServletRequest req, String repositoryName) {
   public Repository getRepository(String repositoryName) {
      Repository r = null;
      try {
         r = repositoryResolver.open(req, repositoryName);
         r = repositoryResolver.open(null, repositoryName);
      } catch (RepositoryNotFoundException e) {
         r = null;
         logger.error("Failed to find repository " + repositoryName);
@@ -124,4 +157,28 @@
      }
      return r;
   }
   public void setupContext(IStoredSettings settings) {
      logger.info("Setting up GitBlit context from " + settings.toString());
      this.storedSettings = settings;
      repositories = new File(settings.getString(Keys.git.repositoriesFolder, "repos"));
      exportAll = settings.getBoolean(Keys.git.exportAll, true);
      repositoryResolver = new FileResolver(repositories, exportAll);
   }
   @Override
   public void contextInitialized(ServletContextEvent contextEvent) {
      logger.info("GitBlit context initialization by servlet container...");
      if (storedSettings == null) {
         WebXmlSettings webxmlSettings = new WebXmlSettings(contextEvent.getServletContext());
         setupContext(webxmlSettings);
      } else {
         logger.info("GitBlit context already setup by " + storedSettings.toString());
      }
   }
   @Override
   public void contextDestroyed(ServletContextEvent contextEvent) {
      logger.info("GitBlit context destroyed by servlet container.");
   }
}