]> source.dussan.org Git - gitblit.git/commitdiff
Allow specifying a timezone in gitblit.properties/web.xml (issue 54)
authorJames Moger <james.moger@gitblit.com>
Tue, 21 Feb 2012 22:32:04 +0000 (17:32 -0500)
committerJames Moger <james.moger@gitblit.com>
Tue, 21 Feb 2012 22:32:04 +0000 (17:32 -0500)
distrib/gitblit.properties
docs/04_releases.mkd
src/com/gitblit/GitBlit.java
src/com/gitblit/wicket/WicketUtils.java
src/com/gitblit/wicket/pages/BasePage.java
src/com/gitblit/wicket/panels/BasePanel.java

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