summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Kaseorg <andersk@MIT.EDU>2014-05-12 07:25:58 -0400
committerPaul Mackerras <paulus@samba.org>2014-06-15 11:35:50 +1000
commit019e1630ac16f82fa6322869c8dfc3dee029e7ae (patch)
treefdeccd2dd885cdd21e4d9c543359daf7ad82ccf6
parent4135d36b0c99329eff69686f7a17406053941b5c (diff)
downloadgit-019e1630ac16f82fa6322869c8dfc3dee029e7ae.tar.gz
gitk: Allow displaying time zones from author and commit dates timestamps
Now gitk can be configured to display author and commit dates in their original timezone, by putting %z into datetimeformat in ~/.gitk. Signed-off-by: Anders Kaseorg <andersk@mit.edu> Signed-off-by: Paul Mackerras <paulus@samba.org>
-rwxr-xr-xgitk24
1 files changed, 23 insertions, 1 deletions
diff --git a/gitk b/gitk
index a4a8bd30ae..a40de31ce0 100755
--- a/gitk
+++ b/gitk
@@ -11580,7 +11580,29 @@ proc prefsok {} {
proc formatdate {d} {
global datetimeformat
if {$d ne {}} {
- set d [clock format [lindex $d 0] -format $datetimeformat]
+ # If $datetimeformat includes a timezone, display in the
+ # timezone of the argument. Otherwise, display in local time.
+ if {[string match {*%[zZ]*} $datetimeformat]} {
+ if {[catch {set d [clock format [lindex $d 0] -timezone [lindex $d 1] -format $datetimeformat]}]} {
+ # Tcl < 8.5 does not support -timezone. Emulate it by
+ # setting TZ (e.g. TZ=<-0430>+04:30).
+ global env
+ if {[info exists env(TZ)]} {
+ set savedTZ $env(TZ)
+ }
+ set zone [lindex $d 1]
+ set sign [string map {+ - - +} [string index $zone 0]]
+ set env(TZ) <$zone>$sign[string range $zone 1 2]:[string range $zone 3 4]
+ set d [clock format [lindex $d 0] -format $datetimeformat]
+ if {[info exists savedTZ]} {
+ set env(TZ) $savedTZ
+ } else {
+ unset env(TZ)
+ }
+ }
+ } else {
+ set d [clock format [lindex $d 0] -format $datetimeformat]
+ }
}
return $d
}