changeset 1320:5f277e73778f

Fix up representation of dates in hgweb. Date display is now uniform both on the command line and via the web interface.
author Bryan O'Sullivan <bos@serpentine.com>
date Thu, 22 Sep 2005 22:46:50 -0700
parents 5a15df632e6a
children b47f96a178a3
files mercurial/commands.py mercurial/hgweb.py mercurial/util.py
diffstat 3 files changed, 38 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Thu Sep 22 21:42:33 2005 -0700
+++ b/mercurial/commands.py	Thu Sep 22 22:46:50 2005 -0700
@@ -30,20 +30,6 @@
         return [util.normpath(os.path.join(cwd, x)) for x in args]
     return args
 
-def datestr(change=None):
-    if change is None:
-        t = time.time()
-        if time.daylight: tz = time.altzone
-        else: tz = time.timezone
-    else:
-        t, tz = change[2].split(' ')
-        try:
-            # a conversion tool was sticking non-integer offsets into repos
-            tz = int(tz)
-        except ValueError:
-            tz = 0
-    return time.asctime(time.gmtime(float(t) - tz)) + " %+05d" % (int(tz)/-36)
-
 def matchpats(repo, cwd, pats=[], opts={}, head=''):
     return util.matcher(repo.root, cwd, pats or ['.'], opts.get('include'),
                         opts.get('exclude'), head)
@@ -278,11 +264,11 @@
     if node2:
         change = repo.changelog.read(node2)
         mmap2 = repo.manifest.read(change[0])
-        date2 = datestr(change)
+        date2 = util.datestr(change)
         def read(f):
             return repo.file(f).read(mmap2[f])
     else:
-        date2 = datestr()
+        date2 = util.datestr()
         if not node1:
             node1 = repo.dirstate.parents()[0]
         def read(f):
@@ -296,7 +282,7 @@
 
     change = repo.changelog.read(node1)
     mmap = repo.manifest.read(change[0])
-    date1 = datestr(change)
+    date1 = util.datestr(change)
 
     for f in c:
         to = None
@@ -333,7 +319,7 @@
         return
 
     changes = log.read(changenode)
-    date = datestr(changes)
+    date = util.datestr(changes)
 
     parents = [(log.rev(p), ui.verbose and hex(p) or short(p))
                for p in log.parents(changenode)
--- a/mercurial/hgweb.py	Thu Sep 22 21:42:33 2005 -0700
+++ b/mercurial/hgweb.py	Thu Sep 22 22:46:50 2005 -0700
@@ -9,7 +9,7 @@
 import os, cgi, sys
 from demandload import demandload
 demandload(globals(), "mdiff time re socket zlib errno ui hg ConfigParser")
-demandload(globals(), "zipfile tempfile StringIO tarfile BaseHTTPServer")
+demandload(globals(), "zipfile tempfile StringIO tarfile BaseHTTPServer util")
 from node import *
 
 def templatepath():
@@ -18,7 +18,7 @@
         if os.path.isdir(p):
             return p
 
-def age(t):
+def age(x):
     def plural(t, c):
         if c == 1:
             return t
@@ -27,7 +27,8 @@
         return "%d %s" % (c, plural(t, c))
 
     now = time.time()
-    delta = max(1, int(now - t))
+    then = int(x[2].split(' ')[0])
+    delta = max(1, int(now - then))
 
     scales = [["second", 1],
               ["minute", 60],
@@ -151,23 +152,18 @@
                 yield tmpl
                 return
 
-def rfc822date(x):
-    return time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime(x))
-
 common_filters = {
     "escape": cgi.escape,
     "age": age,
-    "date": (lambda x: time.asctime(time.gmtime(x))),
+    "date": util.datestr,
     "addbreaks": nl2br,
     "obfuscate": obfuscate,
     "short": (lambda x: x[:12]),
     "firstline": (lambda x: x.splitlines(1)[0]),
     "permissions": (lambda x: x and "-rwxr-xr-x" or "-rw-r--r--"),
-    "rfc822date": rfc822date,
+    "rfc822date": lambda x: util.datestr(x, "%a, %d %b %Y %H:%M:%S"),
     }
 
-
-
 class hgweb:
     def __init__(self, repo, name=None):
         if type(repo) == type(""):
@@ -189,7 +185,7 @@
             self.allowpull = self.repo.ui.configbool("web", "allowpull", True)
 
     def date(self, cs):
-        return time.asctime(time.gmtime(float(cs[2].split(' ')[0])))
+        return util.datestr(cs)
 
     def listfiles(self, files, mf):
         for f in files[:self.maxfiles]:
@@ -307,7 +303,6 @@
                 n = cl.node(i)
                 changes = cl.read(n)
                 hn = hex(n)
-                t = float(changes[2].split(' ')[0])
 
                 l.insert(0, {"parity": parity,
                              "author": changes[1],
@@ -316,7 +311,7 @@
                              "changelogtag": self.showtag("changelogtag",n),
                              "manifest": hex(changes[0]),
                              "desc": changes[4],
-                             "date": t,
+                             "date": changes,
                              "files": self.listfilediffs(changes[3], n),
                              "rev": i,
                              "node": hn})
@@ -368,7 +363,6 @@
 
                 count += 1
                 hn = hex(n)
-                t = float(changes[2].split(' ')[0])
 
                 yield self.t('searchentry',
                              parity=count & 1,
@@ -378,7 +372,7 @@
                              changelogtag=self.showtag("changelogtag",n),
                              manifest=hex(changes[0]),
                              desc=changes[4],
-                             date=t,
+                             date=changes,
                              files=self.listfilediffs(changes[3], n),
                              rev=i,
                              node=hn)
@@ -399,7 +393,6 @@
         cl = self.repo.changelog
         changes = cl.read(n)
         p1 = cl.parents(n)[0]
-        t = float(changes[2].split(' ')[0])
 
         files = []
         mf = self.repo.manifest.read(changes[0])
@@ -425,7 +418,7 @@
                      manifest=hex(changes[0]),
                      author=changes[1],
                      desc=changes[4],
-                     date=t,
+                     date=changes,
                      files=files,
                      archives=archivelist())
 
@@ -443,7 +436,6 @@
                 lr = fl.linkrev(n)
                 cn = cl.node(lr)
                 cs = cl.read(cl.node(lr))
-                t = float(cs[2].split(' ')[0])
 
                 l.insert(0, {"parity": parity,
                              "filenode": hex(n),
@@ -451,7 +443,7 @@
                              "file": f,
                              "node": hex(cn),
                              "author": cs[1],
-                             "date": t,
+                             "date": cs,
                              "parent": self.parents("filelogparent",
                                                     fl.parents(n),
                                                     fl.rev, file=f),
@@ -471,7 +463,6 @@
         cl = self.repo.changelog
         cn = cl.node(changerev)
         cs = cl.read(cn)
-        t = float(cs[2].split(' ')[0])
         mfn = cs[0]
 
         def lines():
@@ -489,7 +480,7 @@
                      node=hex(cn),
                      manifest=hex(mfn),
                      author=cs[1],
-                     date=t,
+                     date=cs,
                      parent=self.parents("filerevparent",
                                          fl.parents(n), fl.rev, file=f),
                      permissions=self.repo.manifest.readflags(mfn)[f])
@@ -504,7 +495,6 @@
         cl = self.repo.changelog
         cn = cl.node(changerev)
         cs = cl.read(cn)
-        t = float(cs[2].split(' ')[0])
         mfn = cs[0]
 
         def annotate(**map):
@@ -542,7 +532,7 @@
                      node=hex(cn),
                      manifest=hex(mfn),
                      author=cs[1],
-                     date=t,
+                     date=cs,
                      parent=self.parents("fileannotateparent",
                                          fl.parents(n), fl.rev, file=f),
                      permissions=self.repo.manifest.readflags(mfn)[f])
--- a/mercurial/util.py	Thu Sep 22 21:42:33 2005 -0700
+++ b/mercurial/util.py	Thu Sep 22 22:46:50 2005 -0700
@@ -12,7 +12,7 @@
 
 import os, errno
 from demandload import *
-demandload(globals(), "re cStringIO shutil popen2 tempfile threading")
+demandload(globals(), "re cStringIO shutil popen2 tempfile threading time")
 
 def pipefilter(s, cmd):
     '''filter string S through command CMD, returning its output'''
@@ -543,3 +543,23 @@
     while len(s) >= 0:
         yield s
         s = f.read(size)
+
+def datestr(change=None, format='%c'):
+    """represent a change date as a localized time.
+    a change date is a 'unixtime offset' string, where unixtime is
+    seconds since the epoch, and offset is seconds away from UTC."""
+    if change is None:
+        t = time.time()
+        if time.daylight: tz = time.altzone
+        else: tz = time.timezone
+    else:
+        t, tz = change[2].split(' ')
+        try:
+            # a conversion tool was sticking non-integer offsets into repos
+            tz = int(tz)
+        except ValueError:
+            tz = 0
+    return ("%s %+03d%02d" %
+            (time.strftime(format, time.gmtime(float(t) - tz)),
+             -tz / 3600,
+             ((-tz % 3600) / 60)))