James Moger
2011-04-06 7ba0ec1e871a1f7b5a40b3272e860ade13038e95
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.
2 files added
12 files modified
173 ■■■■ changed files
gitblit.properties 17 ●●●●● patch | view | raw | blame | history
resources/gitblit.css 21 ●●●●● patch | view | raw | blame | history
src/com/gitblit/GitBlitServer.java 30 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/RepositoryPage.java 11 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/DiffPage.html 2 ●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/RepositoriesPage.html 6 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/RepositoriesPage.java 5 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/TicGitPage.html patch | view | raw | blame | history
src/com/gitblit/wicket/pages/TicGitTicketPage.java 18 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/AdminLinksPanel.html 9 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/AdminLinksPanel.java 16 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/PageFooter.java 2 ●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/PageLinksPanel.html 2 ●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/PageLinksPanel.java 34 ●●●●● patch | view | raw | blame | history
gitblit.properties
@@ -1,6 +1,9 @@
#
# 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!!
@@ -20,8 +23,8 @@
# 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 @@
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!<br>A quick and easy way to host your own GIT repositories.<br>Built with <a href="http://eclipse.org/jgit">JGit</a>, <a href="http://wicket.apache.org">Wicket</a>, <a href="http://code.google.com/p/google-code-prettify/">google-code-prettify</a>, <a href="http://eclipse.org/jetty">Jetty</a>, <a href="http://www.slf4j.org">SLF4J</a>, <a href="http://logging.apache.org/log4j">Log4j</a>, and <a href="http://jcommander.org">JCommander</a>.
repositoriesMessage = Welcome to Git:Blit!<br>A quick and easy way to host your own Git repositories.<br>Built with <a href="http://eclipse.org/jgit">JGit</a>, <a href="http://wicket.apache.org">Wicket</a>, <a href="http://code.google.com/p/google-code-prettify/">google-code-prettify</a>, <a href="http://eclipse.org/jetty">Jetty</a>, <a href="http://www.slf4j.org">SLF4J</a>, <a href="http://logging.apache.org/log4j">Log4j</a>, and <a href="http://jcommander.org">JCommander</a>.
# Date and Time formats
timestampFormat = h:mm a
resources/gitblit.css
@@ -63,6 +63,10 @@
    padding: 8px;
}
div.repositories_message {
    line-height: inherit;
}
div.header {
    background-color: #D2C3AF;
    padding: 3px;
@@ -176,27 +180,27 @@
    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 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 th a {
    color:#ddd;
    color:black;/*#ddd;*/
    text-decoration: none;
    font-weight: normal;
}
@@ -324,7 +328,8 @@
}
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; }
src/com/gitblit/GitBlitServer.java
@@ -40,7 +40,6 @@
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;
@@ -176,17 +175,19 @@
        wicketFilter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, wicketPathSpec);
        rootContext.addFilter(wicketFilter, wicketPathSpec, FilterMapping.DEFAULT);
        // GIT Servlet
        Handler handler;
        // Git Servlet
        ServletHolder gitServlet = null;
        String gitServletPathSpec = "/git/*";
        ServletHolder gitServlet = rootContext.addServlet(GitServlet.class, gitServletPathSpec);
        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;
        // Authentication Realm
        Handler handler;
        if (realmUsers != null && new File(realmUsers).exists() && params.authenticateAccess) {
            if (realmUsers != null && new File(realmUsers).exists() && params.authenticatePushPull) {
                // Authenticate Pull/Push
            List<String> list = StoredSettings.getStrings("gitRoles");
            String[] roles;
            if (list.size() == 0) {
@@ -194,7 +195,7 @@
            } else {
                roles = list.toArray(new String[list.size()]);
            }
            logger.info("Authentication required for GIT access");
                logger.info("Authentication required for git servlet pull/push access");
            logger.info("Setting up realm from " + realmUsers);
            HashLoginService loginService = new HashLoginService(Constants.NAME, realmUsers);
@@ -220,7 +221,12 @@
            handler = security;
        } else {
            logger.info("Setting up anonymous access");
                // Anonymous Pull/Push
                logger.info("Setting up anonymous git servlet pull/push access");
                handler = rootContext;
            }
        } else {
            logger.info("Git servlet pull/push disabled");
            handler = rootContext;
        }
@@ -356,7 +362,7 @@
        /*
         * 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 @@
        /*
         * 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");
src/com/gitblit/wicket/RepositoryPage.java
@@ -20,12 +20,13 @@
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);
@@ -36,12 +37,15 @@
        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() {
        if (r == null) {
        ServletWebRequest servletWebRequest = (ServletWebRequest) getRequest();
        HttpServletRequest req = servletWebRequest.getHttpServletRequest();
        req.getServerName();
@@ -53,6 +57,8 @@
            return null;
        }
        description = JGitUtils.getRepositoryDescription(r);
            this.r = r;
        }
        return r;
    }
@@ -91,6 +97,7 @@
    }
    protected void addFooter() {
        r.close();
        add(new PageFooter("pageFooter", description));
    }
src/com/gitblit/wicket/pages/DiffPage.html
@@ -4,7 +4,7 @@
       <link href="prettify/prettify.css" type="text/css" rel="stylesheet" />
    <script type="text/javascript" src="prettify/prettify.js"></script>
</head>
<body onload="prettyPrint()">
<body>
    <!-- page header -->
    <div wicket:id="pageHeader"></div>
src/com/gitblit/wicket/pages/RepositoriesPage.html
@@ -2,7 +2,11 @@
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
    <div wicket:id="pageHeader"></div>
    <div class="repositories_message" wicket:id="indexInclude"></div>
    <div wicket:id="adminPanel"></div>
    <div class="repositories_message" wicket:id="repositoriesMessage"></div>
    <table class="repositories">
        <tr>
            <th wicket:id="orderByRepository">Repository</th>
src/com/gitblit/wicket/pages/RepositoriesPage.java
@@ -22,6 +22,7 @@
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 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<RepositoryModel> rows = GitBlitWebApp.get().getRepositories(getRequest());
        DataProvider dp = new DataProvider(rows);
src/com/gitblit/wicket/pages/TicGitPage.html
src/com/gitblit/wicket/pages/TicGitTicketPage.java
@@ -19,7 +19,7 @@
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 @@
        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<Comment> commentsDp = new ListDataProvider<Comment>(t.comments);
src/com/gitblit/wicket/panels/AdminLinksPanel.html
New file
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<wicket:panel>
    <!-- page nav links -->
    <div class="page_nav">
        <span wicket:id="newRepository"></span> | <span wicket:id="newUser"></span>
    </div>
</wicket:panel>
</html>
src/com/gitblit/wicket/panels/AdminLinksPanel.java
New file
@@ -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"));
    }
}
src/com/gitblit/wicket/panels/PageFooter.java
@@ -19,7 +19,7 @@
        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();
        }
    }
src/com/gitblit/wicket/panels/PageLinksPanel.html
@@ -3,7 +3,7 @@
<wicket:panel>
    <!-- page nav links -->    
    <div class="page_nav">
        <span wicket:id="summary"></span> | <span wicket:id="shortlog"></span> | <span wicket:id="branches"></span> | <span wicket:id="tags"></span> | <span wicket:id="tree"></span>
        <span wicket:id="summary"></span> | <span wicket:id="shortlog"></span> | <span wicket:id="branches"></span> | <span wicket:id="tags"></span> | <span wicket:id="tree"></span> <span wicket:id="extra"><span wicket:id="extraSeparator"></span><span wicket:id="extraLink"></span></span>
    </div>    
</wicket:panel>
</html>
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));
@@ -53,5 +61,25 @@
        } else {
            add(new LinkPanel("tree", null, "tree", TreePage.class, new PageParameters("p=" + repositoryName + ",h=HEAD")));
        }        
        // Add dynamic repository extras
        List<String> extras = new ArrayList<String>();
        if (JGitUtils.getTicGitBranch(r) != null) {
            extras.add("ticgit");
        }
        ListDataProvider<String> extrasDp = new ListDataProvider<String>(extras);
        DataView<String> extrasView = new DataView<String>("extra", extrasDp) {
            private static final long serialVersionUID = 1L;
            public void populateItem(final Item<String> 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);
    }
}