From: James Moger Date: Wed, 6 Apr 2011 21:25:23 +0000 (-0400) Subject: Added placeholder for Admin links on main page. X-Git-Tag: v0.5.0~102 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7ba0ec1e871a1f7b5a40b3272e860ade13038e95;p=gitblit.git Added placeholder for Admin links on main page. Added placeholder for Admin links on main page. Dynamically add ticgit link to nav links, if ticgit branch is discovered. Settings refinements. --- diff --git a/gitblit.properties b/gitblit.properties index 560515a1..b7a879b7 100644 --- a/gitblit.properties +++ b/gitblit.properties @@ -1,7 +1,10 @@ # -# GIT Servlet Settings +# Git Servlet Settings # +# Allow push/pull over http/https with JGit servlet +allowPushPull = true + # Base folder for repositories # Use forward slashes on Windows!! repositoriesFolder = c:/projects/git @@ -20,8 +23,8 @@ cloneUrl = https://localhost/git/ # Authentication Settings # -# Require authentication for http push/pull of git repositories -authenticateAccess = true +# Require authentication for http/https push/pull access of git repositories +authenticatePushPull = true # Simple user realm file to authenticate users for push/pull realmFile = users.properties @@ -42,16 +45,16 @@ adminRoles = * debug = true tempFolder = temp log4jPattern = %-5p %d{MM-dd HH:mm:ss.SSS} %-20.20c{1} %m%n -# Aggressive garbage collection will run the collector on every generated page -# this slows down page generation but improves heap consumption -aggressiveGC = true +# Aggressive heap management will run the garbage collector on every generated +# page. This slows down page generation but improves heap consumption. +aggressiveHeapManagement = true # # Git:Blit UI Settings # siteName = Repositories allowAdministration = true -indexMessage = Welcome to Git:Blit!
A quick and easy way to host your own GIT repositories.
Built with JGit, Wicket, google-code-prettify, Jetty, SLF4J, Log4j, and JCommander. +repositoriesMessage = Welcome to Git:Blit!
A quick and easy way to host your own Git repositories.
Built with JGit, Wicket, google-code-prettify, Jetty, SLF4J, Log4j, and JCommander. # Date and Time formats timestampFormat = h:mm a diff --git a/resources/gitblit.css b/resources/gitblit.css index 96815bd5..675a2585 100644 --- a/resources/gitblit.css +++ b/resources/gitblit.css @@ -63,6 +63,10 @@ img.activityGraph { padding: 8px; } +div.repositories_message { + line-height: inherit; +} + div.header { background-color: #D2C3AF; padding: 3px; @@ -176,27 +180,27 @@ div.commit_message { border-width: 1px 0px 1px; } -div.bug_open { +div.bug_open, span.bug_open { padding: 2px; background-color: #800000; color: white; text-align: center; } -div.bug_resolved { +div.bug_resolved, span.bug_resolved { padding: 2px; background-color: #008000; color: white; text-align: center; } -div.bug_invalid { +div.bug_invalid, span.bug_invalid { padding: 2px; background-color: gray; text-align: center; } -div.bug_hold { +div.bug_hold, span.bug_hold { padding: 2px; background-color: orange; text-align: center; @@ -304,9 +308,9 @@ table.repositories { } table.repositories th { - background-color:#000070; + background-color:#D2C3AF; padding: 4px; - border-bottom: 1px solid #bbb; + border-bottom: 1px solid #808080; } table.repositories td { @@ -314,7 +318,7 @@ table.repositories td { } table.repositories th a { - color:#ddd; + color:black;/*#ddd;*/ text-decoration: none; font-weight: normal; } @@ -324,7 +328,8 @@ table.repositories th a:hover { } table.repositories th.wicket_orderDown a, table.repositories th.wicket_orderUp a { - color: yellow; + color: black; + font-weight: bold; } tr th a { padding-right: 15px; background-position: right; background-repeat:no-repeat; } diff --git a/src/com/gitblit/GitBlitServer.java b/src/com/gitblit/GitBlitServer.java index ae542e8d..9991a75d 100644 --- a/src/com/gitblit/GitBlitServer.java +++ b/src/com/gitblit/GitBlitServer.java @@ -40,7 +40,6 @@ import org.eclipse.jetty.util.thread.QueuedThreadPool; import org.eclipse.jetty.webapp.WebAppContext; import org.eclipse.jgit.http.server.GitServlet; - import com.beust.jcommander.JCommander; import com.beust.jcommander.Parameter; import com.beust.jcommander.ParameterException; @@ -134,7 +133,7 @@ public class GitBlitServer { Connector httpConnector = createConnector(params.useNIO, params.port); connectors.add(httpConnector); } - + if (params.securePort > 0) { if (new File("keystore").exists()) { Connector secureConnector = createSSLConnector(params.useNIO, params.securePort, params.storePassword); @@ -176,51 +175,58 @@ public class GitBlitServer { wicketFilter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, wicketPathSpec); rootContext.addFilter(wicketFilter, wicketPathSpec, FilterMapping.DEFAULT); - // GIT Servlet - String gitServletPathSpec = "/git/*"; - ServletHolder gitServlet = rootContext.addServlet(GitServlet.class, gitServletPathSpec); - gitServlet.setInitParameter("base-path", params.repositoriesFolder); - gitServlet.setInitParameter("export-all", params.exportAll ? "1" : "0"); - - String realmUsers = params.realmFile; - - // Authentication Realm Handler handler; - if (realmUsers != null && new File(realmUsers).exists() && params.authenticateAccess) { - List list = StoredSettings.getStrings("gitRoles"); - String[] roles; - if (list.size() == 0) { - roles = new String[] { "*" }; + + // Git Servlet + ServletHolder gitServlet = null; + String gitServletPathSpec = "/git/*"; + if (StoredSettings.getBoolean("allowPushPull", true)) { + gitServlet = rootContext.addServlet(GitServlet.class, gitServletPathSpec); + gitServlet.setInitParameter("base-path", params.repositoriesFolder); + gitServlet.setInitParameter("export-all", params.exportAll ? "1" : "0"); + String realmUsers = params.realmFile; + + if (realmUsers != null && new File(realmUsers).exists() && params.authenticatePushPull) { + // Authenticate Pull/Push + List list = StoredSettings.getStrings("gitRoles"); + String[] roles; + if (list.size() == 0) { + roles = new String[] { "*" }; + } else { + roles = list.toArray(new String[list.size()]); + } + logger.info("Authentication required for git servlet pull/push access"); + logger.info("Setting up realm from " + realmUsers); + HashLoginService loginService = new HashLoginService(Constants.NAME, realmUsers); + + Constraint constraint = new Constraint(); + constraint.setName("auth"); + constraint.setAuthenticate(true); + constraint.setRoles(roles); + + ConstraintMapping mapping = new ConstraintMapping(); + mapping.setPathSpec(gitServletPathSpec); + mapping.setConstraint(constraint); + + ConstraintSecurityHandler security = new ConstraintSecurityHandler(); + security.addConstraintMapping(mapping); + for (String role : roles) { + security.addRole(role); + } + security.setAuthenticator(new BasicAuthenticator()); + security.setLoginService(loginService); + security.setStrict(false); + + security.setHandler(rootContext); + + handler = security; } else { - roles = list.toArray(new String[list.size()]); - } - logger.info("Authentication required for GIT access"); - logger.info("Setting up realm from " + realmUsers); - HashLoginService loginService = new HashLoginService(Constants.NAME, realmUsers); - - Constraint constraint = new Constraint(); - constraint.setName("auth"); - constraint.setAuthenticate(true); - constraint.setRoles(roles); - - ConstraintMapping mapping = new ConstraintMapping(); - mapping.setPathSpec(gitServletPathSpec); - mapping.setConstraint(constraint); - - ConstraintSecurityHandler security = new ConstraintSecurityHandler(); - security.addConstraintMapping(mapping); - for (String role : roles) { - security.addRole(role); + // Anonymous Pull/Push + logger.info("Setting up anonymous git servlet pull/push access"); + handler = rootContext; } - security.setAuthenticator(new BasicAuthenticator()); - security.setLoginService(loginService); - security.setStrict(false); - - security.setHandler(rootContext); - - handler = security; } else { - logger.info("Setting up anonymous access"); + logger.info("Git servlet pull/push disabled"); handler = rootContext; } @@ -356,7 +362,7 @@ public class GitBlitServer { /* * GIT Servlet Parameters */ - @Parameter(names = { "--repos" }, description = "GIT Repositories Folder") + @Parameter(names = { "--repos" }, description = "Git Repositories Folder") public String repositoriesFolder = StoredSettings.getString("repositoriesFolder", "repos"); @Parameter(names = { "--exportAll" }, description = "Export All Found Repositories") @@ -365,8 +371,8 @@ public class GitBlitServer { /* * Authentication Parameters */ - @Parameter(names = { "--authenticateAccess" }, description = "Authenticate GIT access") - public Boolean authenticateAccess = StoredSettings.getBoolean("authenticateAccess", true); + @Parameter(names = { "--authenticatePushPull" }, description = "Authenticate Git Push/Pull access") + public Boolean authenticatePushPull = StoredSettings.getBoolean("authenticatePushPull", true); @Parameter(names = { "--realm" }, description = "Users Realm Hash File") public String realmFile = StoredSettings.getString("realmFile", "users.properties"); diff --git a/src/com/gitblit/wicket/RepositoryPage.java b/src/com/gitblit/wicket/RepositoryPage.java index b4f6fdc3..2f2b9676 100644 --- a/src/com/gitblit/wicket/RepositoryPage.java +++ b/src/com/gitblit/wicket/RepositoryPage.java @@ -20,13 +20,14 @@ import com.gitblit.wicket.panels.PageHeader; import com.gitblit.wicket.panels.PageLinksPanel; import com.gitblit.wicket.panels.RefsPanel; - public abstract class RepositoryPage extends BasePage { protected final String repositoryName; protected final String commitId; protected String description; + private transient Repository r = null; + public RepositoryPage(PageParameters params, String pageName) { super(params); if (!params.containsKey("p")) { @@ -36,23 +37,28 @@ public abstract class RepositoryPage extends BasePage { repositoryName = params.getString("p", ""); commitId = params.getString("h", ""); + Repository r = getRepository(); + add(new PageHeader("pageHeader", repositoryName, "/ " + pageName)); - add(new PageLinksPanel("pageLinks", repositoryName, pageName)); + add(new PageLinksPanel("pageLinks", r, repositoryName, pageName)); setStatelessHint(true); } protected Repository getRepository() { - ServletWebRequest servletWebRequest = (ServletWebRequest) getRequest(); - HttpServletRequest req = servletWebRequest.getHttpServletRequest(); - req.getServerName(); - - Repository r = GitBlitWebApp.get().getRepository(req, repositoryName); if (r == null) { - error("Can not load repository " + repositoryName); - redirectToInterceptPage(new RepositoriesPage()); - return null; + ServletWebRequest servletWebRequest = (ServletWebRequest) getRequest(); + HttpServletRequest req = servletWebRequest.getHttpServletRequest(); + req.getServerName(); + + Repository r = GitBlitWebApp.get().getRepository(req, repositoryName); + if (r == null) { + error("Can not load repository " + repositoryName); + redirectToInterceptPage(new RepositoriesPage()); + return null; + } + description = JGitUtils.getRepositoryDescription(r); + this.r = r; } - description = JGitUtils.getRepositoryDescription(r); return r; } @@ -64,22 +70,22 @@ public abstract class RepositoryPage extends BasePage { String html = WicketUtils.breakLines(text); if (substituteRegex) { Map map = new HashMap(); - // global regex keys + // global regex keys for (String key : StoredSettings.getAllKeys("regex.global")) { String subKey = key.substring(key.lastIndexOf('.') + 1); map.put(subKey, StoredSettings.getString(key, "")); } - + // repository-specific regex keys List keys = StoredSettings.getAllKeys("regex." + repositoryName.toLowerCase()); for (String key : keys) { String subKey = key.substring(key.lastIndexOf('.') + 1); map.put(subKey, StoredSettings.getString(key, "")); } - + for (String key : map.keySet()) { String definition = map.get(key).trim(); - String [] chunks = definition.split("!!!"); + String[] chunks = definition.split("!!!"); if (chunks.length == 2) { html = html.replaceAll(chunks[0], chunks[1]); } else { @@ -91,28 +97,29 @@ public abstract class RepositoryPage extends BasePage { } protected void addFooter() { + r.close(); add(new PageFooter("pageFooter", description)); } protected PageParameters newRepositoryParameter() { - return new PageParameters("p=" + repositoryName); + return new PageParameters("p=" + repositoryName); } - + protected PageParameters newCommitParameter() { return newCommitParameter(commitId); } - + protected PageParameters newCommitParameter(String commitId) { if (commitId == null || commitId.trim().length() == 0) { - return newRepositoryParameter(); + return newRepositoryParameter(); } return new PageParameters("p=" + repositoryName + ",h=" + commitId); } - protected PageParameters newPathParameter(String path) { + protected PageParameters newPathParameter(String path) { if (path == null || path.trim().length() == 0) { return newCommitParameter(); } return new PageParameters("p=" + repositoryName + ",h=" + commitId + ",f=" + path); - } + } } diff --git a/src/com/gitblit/wicket/pages/DiffPage.html b/src/com/gitblit/wicket/pages/DiffPage.html index b7aa03b2..b001dead 100644 --- a/src/com/gitblit/wicket/pages/DiffPage.html +++ b/src/com/gitblit/wicket/pages/DiffPage.html @@ -4,7 +4,7 @@ - +
diff --git a/src/com/gitblit/wicket/pages/RepositoriesPage.html b/src/com/gitblit/wicket/pages/RepositoriesPage.html index 0a7b2706..43168bba 100644 --- a/src/com/gitblit/wicket/pages/RepositoriesPage.html +++ b/src/com/gitblit/wicket/pages/RepositoriesPage.html @@ -2,7 +2,11 @@
-
+ +
+ +
+ diff --git a/src/com/gitblit/wicket/pages/RepositoriesPage.java b/src/com/gitblit/wicket/pages/RepositoriesPage.java index 50bcba28..4755e415 100644 --- a/src/com/gitblit/wicket/pages/RepositoriesPage.java +++ b/src/com/gitblit/wicket/pages/RepositoriesPage.java @@ -22,6 +22,7 @@ import com.gitblit.wicket.GitBlitWebApp; import com.gitblit.wicket.LinkPanel; import com.gitblit.wicket.WicketUtils; import com.gitblit.wicket.models.RepositoryModel; +import com.gitblit.wicket.panels.AdminLinksPanel; import com.gitblit.wicket.panels.PageFooter; import com.gitblit.wicket.panels.PageHeader; @@ -31,7 +32,9 @@ public class RepositoriesPage extends BasePage { public RepositoriesPage() { add(new PageHeader("pageHeader")); - add(new Label("indexInclude", StoredSettings.getString("indexMessage", "")).setEscapeModelStrings(false)); + add(new AdminLinksPanel("adminPanel").setVisible(StoredSettings.getBoolean("allowAdministration", false))); + + add(new Label("repositoriesMessage", StoredSettings.getString("repositoriesMessage", "")).setEscapeModelStrings(false)); List rows = GitBlitWebApp.get().getRepositories(getRequest()); DataProvider dp = new DataProvider(rows); diff --git a/src/com/gitblit/wicket/pages/TicGitPage.html b/src/com/gitblit/wicket/pages/TicGitPage.html index e3b9ed8e..451058d0 100644 --- a/src/com/gitblit/wicket/pages/TicGitPage.html +++ b/src/com/gitblit/wicket/pages/TicGitPage.html @@ -12,7 +12,7 @@
Repository
- + diff --git a/src/com/gitblit/wicket/pages/TicGitTicketPage.java b/src/com/gitblit/wicket/pages/TicGitTicketPage.java index 63905001..c73a3ce5 100644 --- a/src/com/gitblit/wicket/pages/TicGitTicketPage.java +++ b/src/com/gitblit/wicket/pages/TicGitTicketPage.java @@ -19,7 +19,7 @@ import com.gitblit.wicket.WicketUtils; public class TicGitTicketPage extends RepositoryPage { public TicGitTicketPage(PageParameters params) { - super(params, "ticgit ticket"); + super(params, "ticket"); final String ticketFolder = params.getString("f", ""); @@ -32,7 +32,21 @@ public class TicGitTicketPage extends RepositoryPage { add(new Label("ticketHandler", t.handler)); String openDate = GitBlitWebSession.get().formatDateTimeLong(t.date); add(new Label("ticketOpenDate", openDate)); - add(new Label("ticketState", t.state)); + Label stateLabel = new Label("ticketState", t.state); + String css = null; + if (t.state.equals("open")) { + css = "bug_open"; + } else if (t.state.equals("hold")) { + css = "bug_hold"; + } else if (t.state.equals("resolved")) { + css = "bug_resolved"; + } else if (t.state.equals("invalid")) { + css = "bug_invalid"; + } + if (css != null) { + WicketUtils.setCssClass(stateLabel, css); + } + add(stateLabel); add(new Label("ticketTags", flattenStrings(t.tags))); ListDataProvider commentsDp = new ListDataProvider(t.comments); diff --git a/src/com/gitblit/wicket/panels/AdminLinksPanel.html b/src/com/gitblit/wicket/panels/AdminLinksPanel.html new file mode 100644 index 00000000..5643c84d --- /dev/null +++ b/src/com/gitblit/wicket/panels/AdminLinksPanel.html @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/src/com/gitblit/wicket/panels/AdminLinksPanel.java b/src/com/gitblit/wicket/panels/AdminLinksPanel.java new file mode 100644 index 00000000..2089f489 --- /dev/null +++ b/src/com/gitblit/wicket/panels/AdminLinksPanel.java @@ -0,0 +1,16 @@ +package com.gitblit.wicket.panels; + +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.panel.Panel; + +public class AdminLinksPanel extends Panel { + + private static final long serialVersionUID = 1L; + + public AdminLinksPanel(String id) { + super(id); + + add(new Label("newRepository", "new repository")); + add(new Label("newUser", "new user")); + } +} \ No newline at end of file diff --git a/src/com/gitblit/wicket/panels/PageFooter.java b/src/com/gitblit/wicket/panels/PageFooter.java index b7440e8c..a6a691ff 100644 --- a/src/com/gitblit/wicket/panels/PageFooter.java +++ b/src/com/gitblit/wicket/panels/PageFooter.java @@ -19,7 +19,7 @@ public class PageFooter extends Panel { super(id); add(new Label("footerText", description)); add(new Label("gbVersion", "v" + Constants.VERSION)); - if (StoredSettings.getBoolean("aggressiveGC", false)) { + if (StoredSettings.getBoolean("aggressiveHeapManagement", false)) { System.gc(); } } diff --git a/src/com/gitblit/wicket/panels/PageLinksPanel.html b/src/com/gitblit/wicket/panels/PageLinksPanel.html index 072221fe..0aabffc6 100644 --- a/src/com/gitblit/wicket/panels/PageLinksPanel.html +++ b/src/com/gitblit/wicket/panels/PageLinksPanel.html @@ -3,7 +3,7 @@ \ No newline at end of file diff --git a/src/com/gitblit/wicket/panels/PageLinksPanel.java b/src/com/gitblit/wicket/panels/PageLinksPanel.java index 23f33835..d2034267 100644 --- a/src/com/gitblit/wicket/panels/PageLinksPanel.java +++ b/src/com/gitblit/wicket/panels/PageLinksPanel.java @@ -1,24 +1,32 @@ package com.gitblit.wicket.panels; +import java.util.ArrayList; +import java.util.List; + import org.apache.wicket.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.markup.repeater.Item; +import org.apache.wicket.markup.repeater.data.DataView; +import org.apache.wicket.markup.repeater.data.ListDataProvider; +import org.eclipse.jgit.lib.Repository; +import com.gitblit.utils.JGitUtils; import com.gitblit.wicket.LinkPanel; import com.gitblit.wicket.pages.BranchesPage; -import com.gitblit.wicket.pages.CommitPage; import com.gitblit.wicket.pages.ShortLogPage; import com.gitblit.wicket.pages.SummaryPage; import com.gitblit.wicket.pages.TagsPage; +import com.gitblit.wicket.pages.TicGitPage; import com.gitblit.wicket.pages.TreePage; - public class PageLinksPanel extends Panel { private static final long serialVersionUID = 1L; - public PageLinksPanel(String id, String repositoryName, String pageName) { + public PageLinksPanel(String id, Repository r, final String repositoryName, String pageName) { super(id); + // summary if (pageName.equals("summary")) { add(new Label("summary", pageName)); @@ -32,26 +40,46 @@ public class PageLinksPanel extends Panel { } else { add(new LinkPanel("shortlog", null, "shortlog", ShortLogPage.class, new PageParameters("p=" + repositoryName))); } - + // branches if (pageName.equals("branches")) { add(new Label("branches", pageName)); } else { add(new LinkPanel("branches", null, "branches", BranchesPage.class, new PageParameters("p=" + repositoryName))); } - + // tags if (pageName.equals("tags")) { add(new Label("tags", pageName)); } else { add(new LinkPanel("tags", null, "tags", TagsPage.class, new PageParameters("p=" + repositoryName))); } - + // tree if (pageName.equals("tree")) { add(new Label("tree", pageName)); } else { add(new LinkPanel("tree", null, "tree", TreePage.class, new PageParameters("p=" + repositoryName + ",h=HEAD"))); - } + } + + // Add dynamic repository extras + List extras = new ArrayList(); + if (JGitUtils.getTicGitBranch(r) != null) { + extras.add("ticgit"); + } + + ListDataProvider extrasDp = new ListDataProvider(extras); + DataView extrasView = new DataView("extra", extrasDp) { + private static final long serialVersionUID = 1L; + + public void populateItem(final Item item) { + String extra = item.getModelObject(); + if (extra.equals("ticgit")) { + item.add(new Label("extraSeparator", " | ")); + item.add(new LinkPanel("extraLink", null, "ticgit", TicGitPage.class, new PageParameters("p=" + repositoryName))); + } + } + }; + add(extrasView); } } \ No newline at end of file