James Moger
2012-02-21 6c6e7d393119dc31a8a6c407236af10290abc77e
Allow specifying a timezone in gitblit.properties/web.xml (issue-54)
6 files modified
81 ■■■■ changed files
distrib/gitblit.properties 9 ●●●●● patch | view | raw | blame | history
docs/04_releases.mkd 9 ●●●●● patch | view | raw | blame | history
src/com/gitblit/GitBlit.java 37 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/WicketUtils.java 22 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/BasePage.java 2 ●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/BasePanel.java 2 ●●● patch | view | raw | blame | history
distrib/gitblit.properties
@@ -232,6 +232,15 @@
# SINCE 0.5.0
web.repositoriesMessage = gitblit
# Manually set the default timezone to be used by Gitblit for display in the
# web ui.  This value is independent of the JVM timezone.  Specifying a blank
# value will default to the JVM timezone.
# e.g. America/New_York, US/Pacific, UTC, Europe/Berlin
#
# SINCE 0.9.0
# RESTART REQUIRED
web.timezone =
# Use the client timezone when formatting dates.
# This uses AJAX to determine the browser's timezone and may require more
# server overhead because a Wicket session is created.  All Gitblit pages
docs/04_releases.mkd
@@ -10,12 +10,14 @@
#### changes
- block pushes to a repository with a working copy (i.e. non-bare repository) (issue-49)
- web.datetimestampLongFormat from *EEEE, MMMM d, yyyy h:mm a z* to *EEEE, MMMM d, yyyy HH:mm Z* (issue 50)
- expanded commit age coloring from 2 days to 30 days (issue 57)
- Block pushes to a repository with a working copy (i.e. non-bare repository) (issue-49)
- Changed default web.datetimestampLongFormat from *EEEE, MMMM d, yyyy h:mm a z* to *EEEE, MMMM d, yyyy HH:mm Z* (issue 50)
- Expanded commit age coloring from 2 days to 30 days (issue 57)
#### additions
- Allow specifying timezone to use for Gitblit which is independent of both the JVM and the system timezone (issue 54)
    **New:** *web.timezone =*
- Added a built-in AJP connector for integrating Gitblit GO into an Apache mod_proxy setup (issue 59)  
    **New:** *server.ajpPort = 0*  
    **New:** *server.ajpBindInterface = localhost*
@@ -28,6 +30,7 @@
#### fixes 
- Fixed timezone bug on the activity apge (issue 54)
- Prevent add/edit team with no selected repositories (issue 56) 
- Disallow browser autocomplete on add/edit user/team/repository pages
- Fixed username case-sensitivity issues (issue 43)
src/com/gitblit/GitBlit.java
@@ -23,16 +23,19 @@
import java.io.InputStreamReader;
import java.lang.reflect.Field;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TimeZone;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
@@ -103,7 +106,7 @@
public class GitBlit implements ServletContextListener {
    private static GitBlit gitblit;
    private final Logger logger = LoggerFactory.getLogger(GitBlit.class);
    private final ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(5);
@@ -132,6 +135,8 @@
    private ServerStatus serverStatus;
    private MailExecutor mailExecutor;
    private TimeZone timezone;
    public GitBlit() {
        if (gitblit == null) {
@@ -159,6 +164,23 @@
     */
    public static boolean isGO() {
        return self().settings instanceof FileSettings;
    }
    /**
     * Returns the preferred timezone for the Gitblit instance.
     *
     * @return a timezone
     */
    public static TimeZone getTimezone() {
        if (self().timezone == null) {
            String tzid = getString("web.timezone", null);
            if (StringUtils.isEmpty(tzid)) {
                self().timezone = TimeZone.getDefault();
                return self().timezone;
            }
            self().timezone = TimeZone.getTimeZone(tzid);
        }
        return self().timezone;
    }
    /**
@@ -1767,6 +1789,10 @@
        repositoriesFolder = getRepositoriesFolder();
        logger.info("Git repositories folder " + repositoriesFolder.getAbsolutePath());
        repositoryResolver = new FileResolver<Void>(repositoriesFolder, true);
        logTimezone("JVM", TimeZone.getDefault());
        logTimezone(Constants.NAME, getTimezone());
        serverStatus = new ServerStatus(isGO());
        String realm = settings.getString(Keys.realm.userService, "users.properties");
        IUserService loginService = null;
@@ -1786,7 +1812,14 @@
        }
        if (startFederation) {
            configureFederation();
        }
        }
    }
    private void logTimezone(String type, TimeZone zone) {
        SimpleDateFormat df = new SimpleDateFormat("z Z");
        df.setTimeZone(zone);
        String offset = df.format(new Date());
        logger.info(type + " timezone is " + zone.getID() + " (" + offset + ")");
    }
    /**
src/com/gitblit/wicket/WicketUtils.java
@@ -408,9 +408,10 @@
    public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone) {
        String format = GitBlit.getString(Keys.web.datestampShortFormat, "MM/dd/yy");
        DateFormat df = new SimpleDateFormat(format);
        if (timeZone != null) {
            df.setTimeZone(timeZone);
        if (timeZone == null) {
            timeZone = GitBlit.getTimezone();
        }
        df.setTimeZone(timeZone);
        String dateString;
        if (date.getTime() == 0) {
            dateString = "--";
@@ -438,9 +439,10 @@
    public static Label createTimeLabel(String wicketId, Date date, TimeZone timeZone) {
        String format = GitBlit.getString(Keys.web.timeFormat, "HH:mm");
        DateFormat df = new SimpleDateFormat(format);
        if (timeZone != null) {
            df.setTimeZone(timeZone);
        if (timeZone == null) {
            timeZone = GitBlit.getTimezone();
        }
        df.setTimeZone(timeZone);
        String timeString;
        if (date.getTime() == 0) {
            timeString = "--";
@@ -449,7 +451,6 @@
        }
        String title = TimeUtils.timeAgo(date);
        Label label = new Label(wicketId, timeString);
        WicketUtils.setCssClass(label, TimeUtils.timeAgoCss(date));
        if (!StringUtils.isEmpty(title)) {
            WicketUtils.setHtmlTooltip(label, title);
        }
@@ -459,9 +460,10 @@
    public static Label createDatestampLabel(String wicketId, Date date, TimeZone timeZone) {
        String format = GitBlit.getString(Keys.web.datestampLongFormat, "EEEE, MMMM d, yyyy");
        DateFormat df = new SimpleDateFormat(format);
        if (timeZone != null) {
            df.setTimeZone(timeZone);
        if (timeZone == null) {
            timeZone = GitBlit.getTimezone();
        }
        df.setTimeZone(timeZone);
        String dateString;
        if (date.getTime() == 0) {
            dateString = "--";
@@ -483,7 +485,6 @@
            title = tmp;
        }
        Label label = new Label(wicketId, dateString);
        WicketUtils.setCssClass(label, TimeUtils.timeAgoCss(date));
        if (!StringUtils.isEmpty(title)) {
            WicketUtils.setHtmlTooltip(label, title);
        }
@@ -494,9 +495,10 @@
        String format = GitBlit.getString(Keys.web.datetimestampLongFormat,
                "EEEE, MMMM d, yyyy HH:mm Z");
        DateFormat df = new SimpleDateFormat(format);
        if (timeZone != null) {
            df.setTimeZone(timeZone);
        if (timeZone == null) {
            timeZone = GitBlit.getTimezone();
        }
        df.setTimeZone(timeZone);
        String dateString;
        if (date.getTime() == 0) {
            dateString = "--";
src/com/gitblit/wicket/pages/BasePage.java
@@ -181,7 +181,7 @@
    protected TimeZone getTimeZone() {
        return GitBlit.getBoolean(Keys.web.useClientTimezone, false) ? GitBlitWebSession.get()
                .getTimezone() : TimeZone.getDefault();
                .getTimezone() : GitBlit.getTimezone();
    }
    protected String getServerName() {
src/com/gitblit/wicket/panels/BasePanel.java
@@ -38,7 +38,7 @@
    protected TimeZone getTimeZone() {
        return GitBlit.getBoolean(Keys.web.useClientTimezone, false) ? GitBlitWebSession.get()
                .getTimezone() : TimeZone.getDefault();
                .getTimezone() : GitBlit.getTimezone();
    }
    protected void setPersonSearchTooltip(Component component, String value, Constants.SearchType searchType) {