Thread (27 messages) flat view 27 messages, 5 authors, 2016-06-15

Re: [PATCH v4 2/2] gitweb: introduce localtime feature

From: "J.H." <warthog9@eaglescrag.net>
Date: 2016-06-15 22:50:49

On 03/20/2011 05:20 PM, Jakub Narebski wrote:
On Sun, 20 Mar 2011, J.H. wrote:
quoted
quoted
With this feature enabled, all timestamps are shown in the local
timezone instead of GMT.  The timezone is taken from the appropriate
timezone string stored in the commit object.
I'd argue there are two types of "local" time that anyone using gitweb
would be looking for (particularly if this is called local time)

1) Time Local to the observer:  Specifically I don't care where every
other commit has taken place, I want to know what time it was in my
preferred time zone (local time zone likely)
This can be done only via JavaScript, otherwise how would you get user's
timezone?  Well, you could specify timezone via a form, save it in
a cookie and do conversion to timezone from cookie on server... but this
means more code, and would screw up with output caching if/where 
implemented.
I think this would screw up less caching vs. more caching w/ Javascript.
 Without doing this with Javascript having any hard coded timezone like
what's proposed here is bad, particularly if for some reason two people
can select different time zones for whatever reason (not an unreasonable
extension of what's been proposed)
quoted
2) Time local to the project:  There will be instances where a project
is based in a specific time zone (home office perhaps?) and you will
want to see the commits from that perspective.
Kevin's patch assumes that geographically concentrated project means all
or almost all commits are generated "in office" and use the same timezone,
which is a timezone of a project.

Currently there is no way to specify _project_ timezone.  Perhaps instead
of 'localtime' feature, which since v2 means also per-project 
`gitweb.localtime' configuration variable, we would allow for 
`gitweb.timezone' configuration variable, which can be "gmt", "utc", or
"localtime" (meaning local to author / committer / tagger).

What do you think?
Not specifically thinking of setting a per-repo timezone, when I was
thinking of "project" I was thinking of the entire gitweb install (I.E.
git.kernel.org as a project or pkgs.fedoraproject.org or drupal.org as a
project)

I would think, if we are doing this in JavaScript, that this is an over
complication to do on a per-repo basis.  I would guess setting a generic
default and letting people deviate makes more sense.  Just my thought
anyway, but I think there's a lot of extra per-repo configurations that
add complexity with minimal gain.
quoted
The patch itself (as a commit in gitweb) shows the time + TZ (which is
somewhat useful), but there is something quite useful about the rest of
gitweb only handling a single timezone (GMT/UTC) from the backend (I'll
come back to this point), if for no other reason it makes for uniform
handling of time overall.
Single timezone (currently GMT/UTC, perhaps made configurable, perhaps
made client local via JavaScript) is good to compare dates.  Author local
time is good to notice "atnight" commits.

[...]
quoted
quoted
This change does not affect relative timestamps (e.g. "5 hours ago"),
nor does it affect 'patch' and 'patches' views which already use
localtime because they are generated by "git format-patch".
Agreed.
[...]
quoted
Ok, while I agree with the use case(s) I think the solution is barking
up completely the wrong tree.  My basic complaint is that this is a
change that effects the backend and ties the backend to a specific TZ,
when this is a front facing / client issue.

While I don't always like JavaScript, this is a situation where I think
it would be a much better solution than doing some extensive changes to
time handling in gitweb.

Basically the change would leave things alone should this be disabled
(you are already doing this, which is good), however should this be
enabled a couple of minor things change:

	1) By default gitweb will continue to display things in UTC.
	   This is a good fallback, and a reasonably safe thing to do
	   should someone have JavaScript disabled.  The reality is
	   most users with it disabled will know or understand what to
	   do with UTC times

	2) Keep the original TZ marked in the html, somewhere hidden on
	   the page is fine
We can use what microformats use for date, i.e. 1997-07-16T19:20:30+01:00
or 1997-07-16T19:20:30+0100, in 'date' or 'title' attribute (with 
appropriate microformat class)... or we can use raw git date, i.e. epoch
plus numerical timezone.
Well we already have the time in the html, it's just the original TZ
that would need to get added.  Though it's still likely easier to store
the timestamp + tz than use the microformats in the JS.
Note that JavaScript mangling of dates is quite independent on whether
dates are displayed in GMT/UTC or in author / committer / tagger timezone
like for current 'localtime' feature.
I wasn't intending to change the current formatting of the times we have
in place currently.  Just allowing people to change what time was being
displayed.
quoted
	3) Once a page is loaded attempt to execute the Javascript,
	   which will just cycle through the page and update the Date /
	   Times based on a set of possible (though user choosable
	   options):
		- Local Time (could easily default to this and
		  JavaScript can detect that from the browser)
		- Specific Timezone
		- Default / UTC
		- Original Timezone (from author / commit)
Hmmm... we could also automatically update relative dates to reflect
passing of time ;-)
Yup, which could also go into changing the "22 minutes ago" kind of
stuff in real time (beyond just dates).  Bonus to cached pages.
quoted
	   Could easily include the original timestamp / utc if
	   Javascript modifies it.  Easy enough to just automatically
	   store the choice (should one be made) in a cookie in the
	   browser, and give the maintainer of the site and easy way
	   to set a rational default given their specific environment.

The obvious advantages:
	- Doesn't give weird data to people behind caching proxies
	- Ability for people working diverse timezones to see things
	  in their local time zone pretty trivially
	- If a site is using gitweb-caching they can take advantage
	  of the feature
	- Won't break bots / scripts that may be crawling the pages or
	  reading the rss feeds (because the timestamps will all be the
	  same assuming it doesn't try to render the javascript)

If you are interested I can bang that out tomorrow (shouldn't take
long), but I would *MUCH* rather see this done via JavaScript than to
muddy up the backend with multiple timezones and such.
Note that we would have to write this JavaScript code...
I'll mock something up tomorrow.

- John 'Warthog9' Hawley
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help