Opened 15 years ago
Last modified 9 years ago
#9129 new defect
TypeError: expecting datetime, int, long, float, or None; got <class 'genshi.template.eval.Undefined'>
Reported by: | exarkun | Owned by: | |
---|---|---|---|
Priority: | low | Milestone: | next-major-releases |
Component: | version control | Version: | 0.11.6 |
Severity: | normal | Keywords: | cache sync |
Cc: | Branch: | ||
Release Notes: | |||
API Changes: | |||
Internal Changes: |
Description
How to Reproduce
While doing a GET operation on /log/trunk
, Trac issued an internal error.
(please provide additional details here)
Request parameters:
{'action': u'stop_on_copy', 'limit': u'100', 'mode': u'stop_on_copy', 'path': u'/trunk', 'rev': u'100', 'stop_rev': u''}
User Agent was: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.8
System Information
Trac | 0.11.6
|
Python | 2.5.2 (r252:60911, Jan 20 2010, 21:48:48) [GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu3)]
|
setuptools | 0.6c11
|
psycopg2 | 2.0.13
|
Genshi | 0.5.1
|
Subversion | 1.4.6 (r28521)
|
Docutils | 0.4.1
|
jQuery: | 1.2.6
|
Python Traceback
Traceback (most recent call last): File "/home/trac-migration/.local/lib/python2.5/site-packages/Trac-0.11.6-py2.5.egg/trac/web/main.py", line 450, in _dispatch_request dispatcher.dispatch(req) File "/home/trac-migration/.local/lib/python2.5/site-packages/Trac-0.11.6-py2.5.egg/trac/web/main.py", line 227, in dispatch data, content_type) File "/home/trac-migration/.local/lib/python2.5/site-packages/Trac-0.11.6-py2.5.egg/trac/web/chrome.py", line 773, in render_template stream.render(method, doctype=doctype, out=buffer) File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/core.py", line 179, in render return encode(generator, method=method, encoding=encoding, out=out) File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py", line 61, in encode for chunk in iterator: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py", line 311, in __call__ for kind, data, pos in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py", line 753, in __call__ for kind, data, pos in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py", line 592, in __call__ for kind, data, pos in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py", line 698, in __call__ for kind, data, pos in chain(stream, [(None, None, None)]): File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/output.py", line 532, in __call__ for ev in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/core.py", line 283, in _ensure for event in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/core.py", line 283, in _ensure for event in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Trac-0.11.6-py2.5.egg/trac/web/chrome.py", line 838, in _strip_accesskeys for kind, data, pos in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/core.py", line 283, in _ensure for event in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Trac-0.11.6-py2.5.egg/trac/web/chrome.py", line 827, in _generate for kind, data, pos in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py", line 569, in _include for event in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/markup.py", line 298, in _match ctxt, start=idx + 1, **vars): File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/markup.py", line 298, in _match ctxt, start=idx + 1, **vars): File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/markup.py", line 245, in _match for event in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py", line 543, in _exec for event in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py", line 533, in _eval for event in substream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py", line 496, in _eval for kind, data, pos in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py", line 551, in _flatten for event in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/core.py", line 283, in _ensure for event in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/path.py", line 141, in _generate subevent = stream.next() File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py", line 569, in _include for event in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/markup.py", line 234, in _strip event = stream.next() File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py", line 543, in _exec for event in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py", line 533, in _eval for event in substream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py", line 496, in _eval for kind, data, pos in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py", line 551, in _flatten for event in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/core.py", line 283, in _ensure for event in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/path.py", line 141, in _generate subevent = stream.next() File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py", line 569, in _include for event in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/markup.py", line 234, in _strip event = stream.next() File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py", line 543, in _exec for event in stream: File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py", line 520, in _eval result = _eval_expr(data, ctxt, **vars) File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/base.py", line 286, in _eval_expr retval = expr.evaluate(ctxt) File "/home/trac-migration/.local/lib/python2.5/site-packages/Genshi-0.5.1-py2.5-linux-i686.egg/genshi/template/eval.py", line 180, in evaluate return eval(self.code, _globals, {'__data__': data}) File "/home/trac-migration/.local/lib/python2.5/site-packages/Trac-0.11.6-py2.5.egg/trac/versioncontrol/templates/revisionlog.html", line 148, in <Expression u'dateinfo(change.date)'> <td class="date" py:content="dateinfo(change.date)" /> File "/home/trac-migration/.local/lib/python2.5/site-packages/Trac-0.11.6-py2.5.egg/trac/timeline/web_ui.py", line 236, in dateinfo pretty_timedelta(date), File "/home/trac-migration/.local/lib/python2.5/site-packages/Trac-0.11.6-py2.5.egg/trac/util/datefmt.py", line 73, in pretty_timedelta time1 = to_datetime(time1) File "/home/trac-migration/.local/lib/python2.5/site-packages/Trac-0.11.6-py2.5.egg/trac/util/datefmt.py", line 53, in to_datetime type(t)) TypeError: expecting datetime, int, long, float, or None; got <class 'genshi.template.eval.Undefined'>
Attachments (0)
Change History (14)
comment:1 by , 15 years ago
comment:2 by , 15 years ago
Milestone: | → next-minor-0.12.x |
---|
Additional info: this error happened while a resync was in progress (maybe more than one, see #9130). This is likely to be a race condition, and even though it is infrequent, we should try to avoid it.
comment:3 by , 15 years ago
Component: | general → version control |
---|---|
Keywords: | cache sync added |
Priority: | normal → high |
Severity: | normal → critical |
Interesting, this is exactly what I've seen recently with the Babel Trac (ticket:5932#comment:25). Here we also have the PostgreSQL backend, like on t.e.o.
follow-up: 5 comment:4 by , 15 years ago
Milestone: | next-minor-0.12.x → 0.12 |
---|
Another occurrence of this issue detected on t.e.o/demo-0.12, the problem there was a missing revision r9202. For that Trac instance, the backend is SQLite.
Looking at the revisions in table revision
, I found a mix of "int" and 0-padded string revs:
... (u'0000009200',), (u'0000009201',), (u'9202',), (u'9203',), (u'9204',), (u'0000009205',), (u'9206',), (u'9207',), (u'0000009208',), (u'9209',), (u'9210',), ..
Not sure how this happened.
Worse, when trying to do a resync
to "fix" this problem, I got the following error:
$ trac-admin ./trac-0.12 repository resync trac Resyncing repository history for (default)... ProgrammingError: Cannot operate on a closed cursor.
Trying to finish with a sync
:
$ trac-admin ./trac-0.12 repository sync trac Resyncing repository history for (default)... ProgrammingError: Cannot operate on a closed cursor. $ trac-admin ./trac-0.12 repository sync trac Resyncing repository history for (default)... 5371 revisions cached. Done.
etc. it stayed at 5371.
In the db, repository.youngest_rev
was u'5153'
, and:
>>> list(c.execute("SELECT count(*) FROM revision WHERE repos=1")) [(5371,)] >>> list(c.execute("SELECT count(distinct(rev)) FROM node_change WHERE repos=1")) [(5371,)]
The rows contained good looking 0-padded revisions, ending with the '0000005371' one.
After fixing the youngest_rev by hand, another sync was able to complete.
Very strange, very broken…
comment:5 by , 15 years ago
Replying to cboos:
Worse, when trying to do a
resync
to "fix" this problem, I got the following error:$ trac-admin ./trac-0.12 repository resync trac Resyncing repository history for (default)... ProgrammingError: Cannot operate on a closed cursor.
Can you please post the full traceback for this error? IIRC it should be in the log.
comment:6 by , 15 years ago
Yep, so here's one:
2010-03-29 11:45:45,891 Trac[cache] INFO: Trying to sync revision [4803] 2010-03-29 11:45:45,897 Trac[cache] INFO: Trying to sync revision [4804] 2010-03-29 11:45:45,904 Trac[cache] WARNING: Revision 4287 already cached: OperationalError('database is locked',) 2010-03-29 11:45:45,904 Trac[cache] WARNING: Revision 4287 already cached: OperationalError('database is locked',) 2010-03-29 11:45:45,904 Trac[api] INFO: Synchronized '' repository in 10.86 seconds 2010-03-29 11:45:45,908 Trac[console] ERROR: Exception in trac-admin command: Traceback (most recent call last): File "build/bdist.linux-x86_64/egg/trac/admin/console.py", line 107, in onecmd rv = cmd.Cmd.onecmd(self, line) or 0 File "/usr/lib/python2.5/cmd.py", line 218, in onecmd return self.default(line) File "build/bdist.linux-x86_64/egg/trac/admin/console.py", line 257, in default return cmd_mgr.execute_command(*args) File "build/bdist.linux-x86_64/egg/trac/admin/api.py", line 118, in execute_command return f(*fargs) File "build/bdist.linux-x86_64/egg/trac/versioncontrol/admin.py", line 152, in _do_sync self._sync(reponame, rev, clean=False) File "build/bdist.linux-x86_64/egg/trac/versioncontrol/admin.py", line 138, in _sync (repos.id,)) File "build/bdist.linux-x86_64/egg/trac/db/util.py", line 90, in execute return self.cursor.execute(sql_escape_percent(sql), args) File "build/bdist.linux-x86_64/egg/trac/db/sqlite_backend.py", line 77, in execute result = PyFormatCursor.execute(self, *args) File "build/bdist.linux-x86_64/egg/trac/db/sqlite_backend.py", line 56, in execute args or []) File "build/bdist.linux-x86_64/egg/trac/db/sqlite_backend.py", line 48, in _rollback_on_error return function(self, *args, **kwargs) ProgrammingError: Cannot operate on a closed cursor. 2010-03-29 11:45:45,985 Trac[cache] INFO: Trying to sync revision [4805]
Here's also something interesting:
2010-03-29 11:45:50,185 Trac[cache] INFO: Trying to sync revision [5151] 2010-03-29 11:45:50,191 Trac[cache] INFO: Trying to sync revision [5152] 2010-03-29 11:45:50,199 Trac[cache] INFO: Trying to sync revision [5153] 2010-03-29 11:45:50,225 Trac[cache] INFO: Trying to sync revision [5154] 2010-03-29 11:45:50,226 Trac[cache] WARNING: Revision 5154 already cached: IntegrityError('columns repos, rev are not unique',) 2010-03-29 11:45:50,226 Trac[api] INFO: Synchronized '' repository in 27.81 seconds 2010-03-29 11:45:50,513 Trac[env] INFO: -------------------------------- environment startup [Trac 0.12dev-r9404] -------------------------------- 2010-03-29 11:45:50,992 Trac[cache] INFO: repos rev [9405] != cached rev [5153] 2010-03-29 11:45:54,798 Trac[env] INFO: -------------------------------- environment startup [Trac 0.12dev-r9404] -------------------------------- 2010-03-29 11:45:55,284 Trac[cache] INFO: repos rev [9405] != cached rev [5153] 2010-03-29 11:45:57,046 Trac[env] INFO: -------------------------------- environment startup [Trac 0.12dev-r9404] -------------------------------- 2010-03-29 11:45:57,513 Trac[cache] INFO: repos rev [9405] != cached rev [5153] 2010-03-29 11:45:59,055 Trac[cache] INFO: repos rev [9405] != cached rev [5153] 2010-03-29 11:45:59,057 Trac[api] INFO: Synchronized '' repository in 0.02 seconds 2010-03-29 11:45:59,228 Trac[cache] INFO: repos rev [9405] != cached rev [5153] 2010-03-29 11:45:59,229 Trac[api] INFO: Synchronized '' repository in 0.01 seconds 2010-03-29 11:45:59,265 Trac[cache] INFO: repos rev [9405] != cached rev [5153] 2010-03-29 11:45:59,266 Trac[api] INFO: Synchronized '' repository in 0.01 seconds 2010-03-29 11:45:59,277 Trac[cache] INFO: repos rev [9405] != cached rev [5153] 2010-03-29 11:45:59,279 Trac[api] INFO: Synchronized '' repository in 0.01 seconds 2010-03-29 11:45:59,329 Trac[cache] INFO: repos rev [9405] != cached rev [5153] 2010-03-29 11:45:59,330 Trac[api] INFO: Synchronized '' repository in 0.01 seconds 2010-03-29 11:45:59,358 Trac[cache] INFO: repos rev [9405] != cached rev [5153]
The above repeats until the manual fix, at which point:
2010-03-29 12:01:42,093 Trac[cache] INFO: repos rev [9405] != cached rev [5153] 2010-03-29 12:01:42,095 Trac[api] INFO: Synchronized '' repository in 0.01 seconds 2010-03-29 12:01:54,535 Trac[env] INFO: -------------------------------- environment startup [Trac 0.12dev-r9404] -------------------------------- 2010-03-29 12:01:55,101 Trac[cache] INFO: repos rev [9405] != cached rev [5371] 2010-03-29 12:01:55,103 Trac[cache] INFO: Trying to sync revision [5372] 2010-03-29 12:01:55,156 Trac[cache] INFO: Trying to sync revision [5373] 2010-03-29 12:01:55,176 Trac[cache] INFO: Trying to sync revision [5374] 2010-03-29 12:01:55,202 Trac[cache] INFO: Trying to sync revision [5375]
That resync nearly completes:
2010-03-29 12:03:37,258 Trac[cache] INFO: Trying to sync revision [8159] 2010-03-29 12:03:52,664 Trac[cache] WARNING: Revision 8155 already cached: OperationalError('database is locked',) 2010-03-29 12:03:52,667 Trac[console] ERROR: Exception in trac-admin command: Traceback (most recent call last): File "build/bdist.linux-x86_64/egg/trac/admin/console.py", line 107, in onecmd rv = cmd.Cmd.onecmd(self, line) or 0 File "/usr/lib/python2.5/cmd.py", line 218, in onecmd return self.default(line) File "build/bdist.linux-x86_64/egg/trac/admin/console.py", line 257, in default return cmd_mgr.execute_command(*args) File "build/bdist.linux-x86_64/egg/trac/admin/api.py", line 118, in execute_command return f(*fargs) File "build/bdist.linux-x86_64/egg/trac/versioncontrol/admin.py", line 152, in _do_sync self._sync(reponame, rev, clean=False) File "build/bdist.linux-x86_64/egg/trac/versioncontrol/admin.py", line 138, in _sync (repos.id,)) File "build/bdist.linux-x86_64/egg/trac/db/util.py", line 90, in execute return self.cursor.execute(sql_escape_percent(sql), args) File "build/bdist.linux-x86_64/egg/trac/db/sqlite_backend.py", line 77, in execute result = PyFormatCursor.execute(self, *args) File "build/bdist.linux-x86_64/egg/trac/db/sqlite_backend.py", line 56, in execute args or []) File "build/bdist.linux-x86_64/egg/trac/db/sqlite_backend.py", line 48, in _rollback_on_error return function(self, *args, **kwargs) ProgrammingError: Cannot operate on a closed cursor. 2010-03-29 12:03:57,407 Trac[cache] INFO: Trying to sync revision [8160]
and then it completes to [9405].
Time to rethink my "bullet proof" resync algorithm :-(
follow-up: 8 comment:7 by , 15 years ago
Ah, so the "ProgrammingError: Cannot operate on a closed cursor" is a side-effect, and the actual error is "OperationalError: database is locked", which is interpreted as "revision already cached".
I'm puzzled about the other errors, probably due to concurrent sync requests. Especially by the fact that we haven't seen those errors before. AFAIR we haven't changed the sync algorithm (yet), except for the addition of the repos
field.
comment:8 by , 15 years ago
Replying to rblank:
Ah, so the "ProgrammingError: Cannot operate on a closed cursor" is a side-effect, and the actual error is "OperationalError: database is locked", which is interpreted as "revision already cached".
Right, I believe the following change should fix this secondary issue:
-
trac/versioncontrol/admin.py
129 129 repositories = [repos] 130 130 131 131 db = self.env.get_db_cnx() 132 cursor = db.cursor()133 132 for repos in sorted(repositories, key=lambda r: r.reponame): 134 133 printout(_('Resyncing repository history for %(reponame)s... ', 135 134 reponame=repos.reponame or _('(default)'))) 136 135 repos.sync(self._sync_feedback, clean=clean) 136 cursor = db.cursor() 137 137 cursor.execute("SELECT count(rev) FROM revision WHERE repos=%s", 138 138 (repos.id,)) 139 139 for cnt, in cursor:
(not tested yet)
I'm puzzled about the other errors, probably due to concurrent sync requests. Especially by the fact that we haven't seen those errors before.
Well, we have, it's #8067.
AFAIR we haven't changed the sync algorithm (yet), except for the addition of the
repos
field.
I don't think it's because of recent changes, the problem was always there.
comment:9 by , 15 years ago
Ok for #8067, but there we pointed to MySQL - MyISAM, which is clearly not the case here. The discussion there should be helpful in designing the sync-ng :-)
comment:10 by , 15 years ago
I was referring to the discussion in ticket:8067#comment:9 and ticket:8067#comment:10, and the reference to #4043 from there.
comment:11 by , 15 years ago
Milestone: | 0.12 → next-major-0.1X |
---|
Worth a rewrite, but probably not for 0.12, neither for 0.12.x, realistically.
comment:12 by , 15 years ago
I have other idea about source of this issue. In my case it happened when I have ADDED one file to fresh SVN, and then REMOVED it, so repository became empty. As a result, there was non-zero latest revision, but no files in it!
Here is my traceback:
Traceback (most recent call last): File "build/bdist.linux-i686/egg/trac/web/main.py", line 512, in _dispatch_request dispatcher.dispatch(req) File "build/bdist.linux-i686/egg/trac/web/main.py", line 255, in dispatch content_type) File "build/bdist.linux-i686/egg/trac/web/chrome.py", line 864, in render_template stream.render(method, doctype=doctype, out=buffer) File "build/bdist.linux-i686/egg/genshi/core.py", line 183, in render return encode(generator, method=method, encoding=encoding, out=out) File "build/bdist.linux-i686/egg/genshi/output.py", line 58, in encode for chunk in iterator: File "build/bdist.linux-i686/egg/genshi/output.py", line 339, in __call__ for kind, data, pos in stream: File "build/bdist.linux-i686/egg/genshi/output.py", line 826, in __call__ for kind, data, pos in stream: File "build/bdist.linux-i686/egg/genshi/output.py", line 670, in __call__ for kind, data, pos in stream: File "build/bdist.linux-i686/egg/genshi/output.py", line 771, in __call__ for kind, data, pos in chain(stream, [(None, None, None)]): File "build/bdist.linux-i686/egg/genshi/output.py", line 586, in __call__ for ev in stream: File "build/bdist.linux-i686/egg/genshi/core.py", line 288, in _ensure for event in stream: File "build/bdist.linux-i686/egg/genshi/core.py", line 288, in _ensure for event in stream: File "build/bdist.linux-i686/egg/trac/web/chrome.py", line 968, in _strip_accesskeys for kind, data, pos in stream: File "build/bdist.linux-i686/egg/genshi/core.py", line 288, in _ensure for event in stream: File "build/bdist.linux-i686/egg/trac/web/chrome.py", line 957, in _generate for kind, data, pos in stream: File "build/bdist.linux-i686/egg/genshi/core.py", line 288, in _ensure for event in stream: File "build/bdist.linux-i686/egg/genshi/template/base.py", line 592, in _include for event in stream: File "build/bdist.linux-i686/egg/genshi/template/markup.py", line 381, in _match ctxt, start=idx + 1, **vars): File "build/bdist.linux-i686/egg/genshi/template/markup.py", line 381, in _match ctxt, start=idx + 1, **vars): File "build/bdist.linux-i686/egg/genshi/template/markup.py", line 330, in _match for event in stream: File "build/bdist.linux-i686/egg/genshi/template/base.py", line 532, in _flatten for kind, data, pos in stream: File "build/bdist.linux-i686/egg/genshi/core.py", line 288, in _ensure for event in stream: File "build/bdist.linux-i686/egg/genshi/path.py", line 588, in _generate subevent = next() File "build/bdist.linux-i686/egg/genshi/template/base.py", line 592, in _include for event in stream: File "build/bdist.linux-i686/egg/genshi/template/markup.py", line 319, in _strip event = next() File "build/bdist.linux-i686/egg/genshi/template/base.py", line 532, in _flatten for kind, data, pos in stream: File "build/bdist.linux-i686/egg/genshi/core.py", line 288, in _ensure for event in stream: File "build/bdist.linux-i686/egg/genshi/path.py", line 588, in _generate subevent = next() File "build/bdist.linux-i686/egg/genshi/template/base.py", line 592, in _include for event in stream: File "build/bdist.linux-i686/egg/genshi/template/markup.py", line 319, in _strip event = next() File "build/bdist.linux-i686/egg/genshi/template/base.py", line 552, in _flatten result = _eval_expr(data, ctxt, vars) File "build/bdist.linux-i686/egg/genshi/template/base.py", line 277, in _eval_expr retval = expr.evaluate(ctxt) File "build/bdist.linux-i686/egg/genshi/template/eval.py", line 178, in evaluate return eval(self.code, _globals, {'__data__': data}) File "/home/oracle/.python-eggs/Trac-0.12dev_r9476-py2.6.egg-tmp/trac/versioncontrol/templates/revisionlog.html", line 151, in <Expression u'dateinfo(change.date)'> <td class="age" py:content="dateinfo(change.date)" /> File "build/bdist.linux-i686/egg/trac/timeline/web_ui.py", line 258, in dateinfo pretty_timedelta(date), File "build/bdist.linux-i686/egg/trac/util/datefmt.py", line 93, in pretty_timedelta time1 = to_datetime(time1) File "build/bdist.linux-i686/egg/trac/util/datefmt.py", line 54, in to_datetime type(t)) TypeError: expecting datetime, int, long, float, or None; got <class 'genshi.template.eval.Undefined'>
comment:13 by , 12 years ago
Priority: | high → low |
---|
Obviously low prio, as it hasn't seen any activity in two years.
Yet the problem seems to be real, so triaging as "known issue" that should be taken in consideration when (re)working on the versioncontrol cache sync code.
comment:14 by , 9 years ago
Severity: | critical → normal |
---|
It looks like one revision between 1 and 100 has no date. But in that case, the value should be
None
and notundefined
. Was this a one-off, or can you reproduce the issue consistenly? Any chance I could access the Trac instance and see the error page, showing the locals with the traceback?