From 3e087ada55f8b0e83b146578b695552db9dc8d97 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Wed, 27 Apr 2011 20:55:38 -0400 Subject: [PATCH] Integrated pagelinks into RepositoryPage. Fixed string encoding. --- src/com/gitblit/GitBlit.java | 117 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 87 insertions(+), 30 deletions(-) diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java index f437e5f..c56b3cb 100644 --- a/src/com/gitblit/GitBlit.java +++ b/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(Keys.git_repositoriesFolder, "repos")); - exportAll = StoredSettings.getBoolean(Keys.git_exportAll, true); - repositoryResolver = new FileResolver(repositories, exportAll); - debugMode = StoredSettings.getBoolean(Keys.server_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) { @@ -89,31 +93,60 @@ response.addCookie(userCookie); } - public List<String> getRepositoryList() { - return JGitUtils.getRepositoryList(repositories, exportAll, StoredSettings.getBoolean(Keys.git_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."); + } } -- Gitblit v1.9.1