You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bloodhound.apache.org by Apache Bloodhound <de...@bloodhound.apache.org> on 2014/03/10 18:06:32 UTC

[Apache Bloodhound] #790: Expansion of log TracLinks fails for changeset hash ID

#790: Expansion of log TracLinks fails for changeset hash ID
---------------------+--------------------
  Reporter:  olemis  |    Owner:
      Type:  defect  |   Status:  new
  Priority:  major   |  Version:  0.8.0dev
Resolution:          |
---------------------+--------------------
 ==== How to Reproduce ====

 While doing a POST operation on `/ticket/300`, Trac issued an internal
 error.
 Changeset IDs belong in a mercurial repository .

 This happened while expanding the TracLinks expression in `edited_comment`
 below.

 Request parameters:
 {{{
 {'__FORM_TOKEN': u'aeaea20ec38330adabe8f4d5',
  'cnum_edit': u'4',
  'edited_comment': u'Options for format clause implemented in
 log:tracgviz@4d00cd2:233a8bb .',
  'id': u'300',
  'preview_comment': u'Preview'}
 }}}

 User agent: `Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16`

 ==== System Information ====
 || '''`Trac`''' || `1.0.1` [[br]] `` ||
 || '''`Babel`''' || `0.9.6` ||
 || '''`Bloodhound Trac`''' || `1.0.1` ||
 || '''`Genshi`''' || `0.7 (with speedups)` ||
 || '''`Mercurial`''' || `2.6.2` ||
 || '''`mod_wsgi`''' || `3.3 (WSGIProcessGroup bloodhound_net
 WSGIApplicationGroup %{GLOBAL})` ||
 || '''`psycopg2`''' || `2.5` ||
 || '''`Pygments`''' || `1.6` ||
 || '''`Python`''' || `2.7.3 (default, Aug  1 2012, 05:25:23) ` [[br]]
 `[GCC 4.6.3]` ||
 || '''`pytz`''' || `2013b` ||
 || '''`RPC`''' || `1.1.2` ||
 || '''`setuptools`''' || `0.6` ||
 || '''`jQuery`''' || `1.7.2` ||

 ==== Enabled Plugins ====
 || '''`BloodhoundDashboardPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundLabs`''' || `0.1.0` ||
 || '''`BloodhoundMultiProduct`''' || `0.8.0dev` ||
 || '''`BloodhoundRelationsPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundRPC`''' || `1.1.2` ||
 || '''`BloodhoundSearchPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundTheme`''' || `0.8.0dev` ||
 || '''`TracAccountManager`''' || `0.4.3` ||
 || '''`TracGViz`''' || `1.4.2` ||
 || '''`TracIncludeMacro`''' || `3.0.0dev` ||
 || '''`TracMercurial`''' || `1.0.0.3dev` ||
 || '''`TracPermRedirect`''' || `3.0` ||
 || '''`TracThemeEngine`''' || `2.2.2dev-r13718` ||
 || '''`TracTocMacro`''' || `11.0.0.3` ||

 ==== Python Traceback ====
 {{{
 Traceback (most recent call last):
   File "/path/to/bh//trac/trac/web/main.py", line 477, in
 _dispatch_request
     dispatcher.dispatch(req)
   File "/path/to/bh//trac/trac/web/main.py", line 233, in dispatch
     content_type)
   File "/path/to/bh//trac/trac/web/chrome.py", line 1019, in
 render_template
     encoding='utf-8')
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 184, in render
     return encode(generator, method=method, encoding=encoding, out=out)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 58, in encode
     for chunk in iterator:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 350, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 829, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 669, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 774, in __call__
     for kind, data, pos in chain(stream, [(None, None, None)]):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 594, in __call__
     for ev in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/trac/web/chrome.py", line 1156, in
 _strip_accesskeys
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/trac/web/chrome.py", line 1145, in _generate
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 702, in _mark
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 702, in _mark
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 378, in _match
     ctxt, start=idx + 1, **vars):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 378, in _match
     ctxt, start=idx + 1, **vars):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 362, in _match
     content = list(content)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 326, in _match
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 558, in _flatten
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/path.py", line 588, in _generate
     subevent = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 558, in _flatten
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/path.py", line 588, in _generate
     subevent = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 578, in _flatten
     result = _eval_expr(data, ctxt, vars)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 289, in _eval_expr
     retval = expr.evaluate(ctxt)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/eval.py", line 177, in evaluate
     return eval(self.code, _globals, {'__data__': data})
   File
 "/path/to/bh//bloodhound_theme/bhtheme/templates/bh_ticket_change.html",
 line 106, in <Expression u'wiki_to_html(context, text,
 escape_newlines=preserve_newlines)'>
     ${wiki_to_html(context, text, escape_newlines=preserve_newlines)}
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1546, in
 format_to_html
     return HtmlFormatter(env, context, wikidom).generate(escape_newlines)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1501, in generate
     escape_newlines)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1283, in format
     result = re.sub(self.wikiparser.rules, self.replace, line)
   File "/usr/lib/python2.7/re.py", line 151, in sub
     return _compile(pattern, flags).sub(repl, string, count)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1201, in replace
     replacement = self.handle_match(fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1197, in
 handle_match
     return internal_handler(match, fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 584, in
 _shref_formatter
     return self._make_link(ns, target, match, match, fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 635, in _make_link
     fullmatch)
   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 393, in
 _format_link
     revranges = self._normalize_ranges(repos, path, revs)
   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 436, in
 _normalize_ranges
     return Ranges(ranges)
   File "/path/to/bh//trac/trac/util/__init__.py", line 823, in __init__
     self.appendrange(r)
   File "/path/to/bh//trac/trac/util/__init__.py", line 841, in appendrange
     a, b = int(x), int(x)
 ValueError: invalid literal for int() with base 10:
 '4d00cd2713712ca230080dbbda24d0d25540d0fe-
 233a8bbebb2c77c607661767c03689512a16637f'
 }}}

-- 
Ticket URL: <https://issues.apache.org/bloodhound/ticket/790>
Apache Bloodhound <https://issues.apache.org/bloodhound/>
The Apache Bloodhound issue tracker

Re: [Apache Bloodhound] #790: Expansion of log TracLinks fails for changeset hash ID

Posted by Apache Bloodhound <de...@bloodhound.apache.org>.
#790: Expansion of log TracLinks fails for changeset hash ID
------------------------+---------------------------------------
  Reporter:  olemis     |      Owner:  nobody
      Type:  defect     |     Status:  new
  Priority:  critical   |  Milestone:
 Component:  trac core  |    Version:  0.8.0dev
Resolution:             |   Keywords:  hg, browser log TracLinks
------------------------+---------------------------------------

Old description:

> ==== How to Reproduce ====
>
> While doing a POST operation on `/ticket/300`, Trac issued an internal
> error.
>

> This happened while expanding the TracLinks expression in
> `edited_comment` below. Changeset correspond to a mercurial repository .
>
> Request parameters:
> {{{
> {'__FORM_TOKEN': u'aeaea20ec38330adabe8f4d5',
>  'cnum_edit': u'4',
>  'edited_comment': u'Options for format clause implemented in
> log:tracgviz@4d00cd2:233a8bb .',
>  'id': u'300',
>  'preview_comment': u'Preview'}
> }}}
>
> User agent: `Opera/9.80 (X11; Linux x86_64) Presto/2.12.388
> Version/12.16`
>
> ==== System Information ====
> || '''`Trac`''' || `1.0.1` [[br]] `` ||
> || '''`Babel`''' || `0.9.6` ||
> || '''`Bloodhound Trac`''' || `1.0.1` ||
> || '''`Genshi`''' || `0.7 (with speedups)` ||
> || '''`Mercurial`''' || `2.6.2` ||
> || '''`mod_wsgi`''' || `3.3 (WSGIProcessGroup bloodhound_net
> WSGIApplicationGroup %{GLOBAL})` ||
> || '''`psycopg2`''' || `2.5` ||
> || '''`Pygments`''' || `1.6` ||
> || '''`Python`''' || `2.7.3 (default, Aug  1 2012, 05:25:23) ` [[br]]
> `[GCC 4.6.3]` ||
> || '''`pytz`''' || `2013b` ||
> || '''`RPC`''' || `1.1.2` ||
> || '''`setuptools`''' || `0.6` ||
> || '''`jQuery`''' || `1.7.2` ||
>
> ==== Enabled Plugins ====
> || '''`BloodhoundDashboardPlugin`''' || `0.8.0dev` ||
> || '''`BloodhoundLabs`''' || `0.1.0` ||
> || '''`BloodhoundMultiProduct`''' || `0.8.0dev` ||
> || '''`BloodhoundRelationsPlugin`''' || `0.8.0dev` ||
> || '''`BloodhoundRPC`''' || `1.1.2` ||
> || '''`BloodhoundSearchPlugin`''' || `0.8.0dev` ||
> || '''`BloodhoundTheme`''' || `0.8.0dev` ||
> || '''`TracAccountManager`''' || `0.4.3` ||
> || '''`TracGViz`''' || `1.4.2` ||
> || '''`TracIncludeMacro`''' || `3.0.0dev` ||
> || '''`TracMercurial`''' || `1.0.0.3dev` ||
> || '''`TracPermRedirect`''' || `3.0` ||
> || '''`TracThemeEngine`''' || `2.2.2dev-r13718` ||
> || '''`TracTocMacro`''' || `11.0.0.3` ||
>
> ==== Python Traceback ====
> {{{
> Traceback (most recent call last):
>   File "/path/to/bh//trac/trac/web/main.py", line 477, in
> _dispatch_request
>     dispatcher.dispatch(req)
>   File "/path/to/bh//trac/trac/web/main.py", line 233, in dispatch
>     content_type)
>   File "/path/to/bh//trac/trac/web/chrome.py", line 1019, in
> render_template
>     encoding='utf-8')
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 184, in render
>     return encode(generator, method=method, encoding=encoding, out=out)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 58, in encode
>     for chunk in iterator:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 350, in __call__
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 829, in __call__
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 669, in __call__
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 774, in __call__
>     for kind, data, pos in chain(stream, [(None, None, None)]):
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 594, in __call__
>     for ev in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/trac/web/chrome.py", line 1156, in
> _strip_accesskeys
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/trac/web/chrome.py", line 1145, in _generate
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 702, in _mark
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 702, in _mark
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 378, in _match
>     ctxt, start=idx + 1, **vars):
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 378, in _match
>     ctxt, start=idx + 1, **vars):
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 362, in _match
>     content = list(content)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 326, in _match
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 315, in _strip
>     event = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 558, in _flatten
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/path.py", line 588, in _generate
>     subevent = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 315, in _strip
>     event = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 558, in _flatten
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/path.py", line 588, in _generate
>     subevent = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 315, in _strip
>     event = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 578, in _flatten
>     result = _eval_expr(data, ctxt, vars)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 289, in _eval_expr
>     retval = expr.evaluate(ctxt)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/eval.py", line 177, in evaluate
>     return eval(self.code, _globals, {'__data__': data})
>   File
> "/path/to/bh//bloodhound_theme/bhtheme/templates/bh_ticket_change.html",
> line 106, in <Expression u'wiki_to_html(context, text,
> escape_newlines=preserve_newlines)'>
>     ${wiki_to_html(context, text, escape_newlines=preserve_newlines)}
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1546, in
> format_to_html
>     return HtmlFormatter(env, context, wikidom).generate(escape_newlines)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1501, in generate
>     escape_newlines)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1283, in format
>     result = re.sub(self.wikiparser.rules, self.replace, line)
>   File "/usr/lib/python2.7/re.py", line 151, in sub
>     return _compile(pattern, flags).sub(repl, string, count)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1201, in replace
>     replacement = self.handle_match(fullmatch)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1197, in
> handle_match
>     return internal_handler(match, fullmatch)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 584, in
> _shref_formatter
>     return self._make_link(ns, target, match, match, fullmatch)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 635, in
> _make_link
>     fullmatch)
>   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 393,
> in _format_link
>     revranges = self._normalize_ranges(repos, path, revs)
>   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 436,
> in _normalize_ranges
>     return Ranges(ranges)
>   File "/path/to/bh//trac/trac/util/__init__.py", line 823, in __init__
>     self.appendrange(r)
>   File "/path/to/bh//trac/trac/util/__init__.py", line 841, in
> appendrange
>     a, b = int(x), int(x)
> ValueError: invalid literal for int() with base 10:
> '4d00cd2713712ca230080dbbda24d0d25540d0fe-
> 233a8bbebb2c77c607661767c03689512a16637f'
> }}}

New description:

 ==== How to Reproduce ====

 While doing a POST operation on `/ticket/300`, Trac issued an internal
 error.


 This happened while expanding the TracLinks expression in `edited_comment`
 below. Changeset correspond to a mercurial repository .

 Request parameters:
 {{{#!py
 {'__FORM_TOKEN': u'aeaea20ec38330adabe8f4d5',
  'cnum_edit': u'4',
  'edited_comment': u'Options for format clause implemented in
 log:tracgviz@4d00cd2:233a8bb .',
  'id': u'300',
  'preview_comment': u'Preview'}
 }}}

 User agent: `Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16`

 ==== System Information ====
 || '''`Trac`''' || `1.0.1` [[br]] `` ||
 || '''`Babel`''' || `0.9.6` ||
 || '''`Bloodhound Trac`''' || `1.0.1` ||
 || '''`Genshi`''' || `0.7 (with speedups)` ||
 || '''`Mercurial`''' || `2.6.2` ||
 || '''`mod_wsgi`''' || `3.3 (WSGIProcessGroup bloodhound_net
 WSGIApplicationGroup %{GLOBAL})` ||
 || '''`psycopg2`''' || `2.5` ||
 || '''`Pygments`''' || `1.6` ||
 || '''`Python`''' || `2.7.3 (default, Aug  1 2012, 05:25:23) ` [[br]]
 `[GCC 4.6.3]` ||
 || '''`pytz`''' || `2013b` ||
 || '''`RPC`''' || `1.1.2` ||
 || '''`setuptools`''' || `0.6` ||
 || '''`jQuery`''' || `1.7.2` ||

 ==== Enabled Plugins ====
 || '''`BloodhoundDashboardPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundLabs`''' || `0.1.0` ||
 || '''`BloodhoundMultiProduct`''' || `0.8.0dev` ||
 || '''`BloodhoundRelationsPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundRPC`''' || `1.1.2` ||
 || '''`BloodhoundSearchPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundTheme`''' || `0.8.0dev` ||
 || '''`TracAccountManager`''' || `0.4.3` ||
 || '''`TracGViz`''' || `1.4.2` ||
 || '''`TracIncludeMacro`''' || `3.0.0dev` ||
 || '''`TracMercurial`''' || `1.0.0.3dev` ||
 || '''`TracPermRedirect`''' || `3.0` ||
 || '''`TracThemeEngine`''' || `2.2.2dev-r13718` ||
 || '''`TracTocMacro`''' || `11.0.0.3` ||

 ==== Python Traceback ====
 {{{#!pycon
 Traceback (most recent call last):
   File "/path/to/bh//trac/trac/web/main.py", line 477, in
 _dispatch_request
     dispatcher.dispatch(req)
   File "/path/to/bh//trac/trac/web/main.py", line 233, in dispatch
     content_type)
   File "/path/to/bh//trac/trac/web/chrome.py", line 1019, in
 render_template
     encoding='utf-8')
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 184, in render
     return encode(generator, method=method, encoding=encoding, out=out)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 58, in encode
     for chunk in iterator:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 350, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 829, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 669, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 774, in __call__
     for kind, data, pos in chain(stream, [(None, None, None)]):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 594, in __call__
     for ev in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/trac/web/chrome.py", line 1156, in
 _strip_accesskeys
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/trac/web/chrome.py", line 1145, in _generate
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 702, in _mark
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 702, in _mark
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 378, in _match
     ctxt, start=idx + 1, **vars):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 378, in _match
     ctxt, start=idx + 1, **vars):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 362, in _match
     content = list(content)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 326, in _match
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 558, in _flatten
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/path.py", line 588, in _generate
     subevent = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 558, in _flatten
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/path.py", line 588, in _generate
     subevent = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 578, in _flatten
     result = _eval_expr(data, ctxt, vars)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 289, in _eval_expr
     retval = expr.evaluate(ctxt)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/eval.py", line 177, in evaluate
     return eval(self.code, _globals, {'__data__': data})
   File
 "/path/to/bh//bloodhound_theme/bhtheme/templates/bh_ticket_change.html",
 line 106, in <Expression u'wiki_to_html(context, text,
 escape_newlines=preserve_newlines)'>
     ${wiki_to_html(context, text, escape_newlines=preserve_newlines)}
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1546, in
 format_to_html
     return HtmlFormatter(env, context, wikidom).generate(escape_newlines)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1501, in generate
     escape_newlines)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1283, in format
     result = re.sub(self.wikiparser.rules, self.replace, line)
   File "/usr/lib/python2.7/re.py", line 151, in sub
     return _compile(pattern, flags).sub(repl, string, count)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1201, in replace
     replacement = self.handle_match(fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1197, in
 handle_match
     return internal_handler(match, fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 584, in
 _shref_formatter
     return self._make_link(ns, target, match, match, fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 635, in _make_link
     fullmatch)
   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 393, in
 _format_link
     revranges = self._normalize_ranges(repos, path, revs)
   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 436, in
 _normalize_ranges
     return Ranges(ranges)
   File "/path/to/bh//trac/trac/util/__init__.py", line 823, in __init__
     self.appendrange(r)
   File "/path/to/bh//trac/trac/util/__init__.py", line 841, in appendrange
     a, b = int(x), int(x)
 ValueError: invalid literal for int() with base 10:
 '4d00cd2713712ca230080dbbda24d0d25540d0fe-
 233a8bbebb2c77c607661767c03689512a16637f'
 }}}

--

Comment (by olemis):

 Highlighting traceback text and request args

-- 
Ticket URL: <https://issues.apache.org/bloodhound/ticket/790#comment:2>
Apache Bloodhound <https://issues.apache.org/bloodhound/>
The Apache Bloodhound issue tracker

Re: [Apache Bloodhound] #790: Expansion of log TracLinks fails for changeset hash ID

Posted by Apache Bloodhound <de...@bloodhound.apache.org>.
#790: Expansion of log TracLinks fails for changeset hash ID
------------------------+---------------------------------------
  Reporter:  olemis     |      Owner:  nobody
      Type:  defect     |     Status:  new
  Priority:  critical   |  Milestone:
 Component:  trac core  |    Version:  0.8.0dev
Resolution:             |   Keywords:  hg, browser log TracLinks
------------------------+---------------------------------------
Changes (by olemis):

 * owner:   => nobody
 * keywords:   => hg, browser log TracLinks
 * component:   => trac core
 * priority:  major => critical


Old description:

> ==== How to Reproduce ====
>
> While doing a POST operation on `/ticket/300`, Trac issued an internal
> error.
> Changeset IDs belong in a mercurial repository .
>
> This happened while expanding the TracLinks expression in
> `edited_comment` below.
>
> Request parameters:
> {{{
> {'__FORM_TOKEN': u'aeaea20ec38330adabe8f4d5',
>  'cnum_edit': u'4',
>  'edited_comment': u'Options for format clause implemented in
> log:tracgviz@4d00cd2:233a8bb .',
>  'id': u'300',
>  'preview_comment': u'Preview'}
> }}}
>
> User agent: `Opera/9.80 (X11; Linux x86_64) Presto/2.12.388
> Version/12.16`
>
> ==== System Information ====
> || '''`Trac`''' || `1.0.1` [[br]] `` ||
> || '''`Babel`''' || `0.9.6` ||
> || '''`Bloodhound Trac`''' || `1.0.1` ||
> || '''`Genshi`''' || `0.7 (with speedups)` ||
> || '''`Mercurial`''' || `2.6.2` ||
> || '''`mod_wsgi`''' || `3.3 (WSGIProcessGroup bloodhound_net
> WSGIApplicationGroup %{GLOBAL})` ||
> || '''`psycopg2`''' || `2.5` ||
> || '''`Pygments`''' || `1.6` ||
> || '''`Python`''' || `2.7.3 (default, Aug  1 2012, 05:25:23) ` [[br]]
> `[GCC 4.6.3]` ||
> || '''`pytz`''' || `2013b` ||
> || '''`RPC`''' || `1.1.2` ||
> || '''`setuptools`''' || `0.6` ||
> || '''`jQuery`''' || `1.7.2` ||
>
> ==== Enabled Plugins ====
> || '''`BloodhoundDashboardPlugin`''' || `0.8.0dev` ||
> || '''`BloodhoundLabs`''' || `0.1.0` ||
> || '''`BloodhoundMultiProduct`''' || `0.8.0dev` ||
> || '''`BloodhoundRelationsPlugin`''' || `0.8.0dev` ||
> || '''`BloodhoundRPC`''' || `1.1.2` ||
> || '''`BloodhoundSearchPlugin`''' || `0.8.0dev` ||
> || '''`BloodhoundTheme`''' || `0.8.0dev` ||
> || '''`TracAccountManager`''' || `0.4.3` ||
> || '''`TracGViz`''' || `1.4.2` ||
> || '''`TracIncludeMacro`''' || `3.0.0dev` ||
> || '''`TracMercurial`''' || `1.0.0.3dev` ||
> || '''`TracPermRedirect`''' || `3.0` ||
> || '''`TracThemeEngine`''' || `2.2.2dev-r13718` ||
> || '''`TracTocMacro`''' || `11.0.0.3` ||
>
> ==== Python Traceback ====
> {{{
> Traceback (most recent call last):
>   File "/path/to/bh//trac/trac/web/main.py", line 477, in
> _dispatch_request
>     dispatcher.dispatch(req)
>   File "/path/to/bh//trac/trac/web/main.py", line 233, in dispatch
>     content_type)
>   File "/path/to/bh//trac/trac/web/chrome.py", line 1019, in
> render_template
>     encoding='utf-8')
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 184, in render
>     return encode(generator, method=method, encoding=encoding, out=out)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 58, in encode
>     for chunk in iterator:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 350, in __call__
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 829, in __call__
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 669, in __call__
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 774, in __call__
>     for kind, data, pos in chain(stream, [(None, None, None)]):
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 594, in __call__
>     for ev in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/trac/web/chrome.py", line 1156, in
> _strip_accesskeys
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/trac/web/chrome.py", line 1145, in _generate
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 702, in _mark
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 702, in _mark
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 378, in _match
>     ctxt, start=idx + 1, **vars):
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 378, in _match
>     ctxt, start=idx + 1, **vars):
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 362, in _match
>     content = list(content)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 326, in _match
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 315, in _strip
>     event = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 558, in _flatten
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/path.py", line 588, in _generate
>     subevent = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 315, in _strip
>     event = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 558, in _flatten
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/path.py", line 588, in _generate
>     subevent = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 315, in _strip
>     event = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 578, in _flatten
>     result = _eval_expr(data, ctxt, vars)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 289, in _eval_expr
>     retval = expr.evaluate(ctxt)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/eval.py", line 177, in evaluate
>     return eval(self.code, _globals, {'__data__': data})
>   File
> "/path/to/bh//bloodhound_theme/bhtheme/templates/bh_ticket_change.html",
> line 106, in <Expression u'wiki_to_html(context, text,
> escape_newlines=preserve_newlines)'>
>     ${wiki_to_html(context, text, escape_newlines=preserve_newlines)}
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1546, in
> format_to_html
>     return HtmlFormatter(env, context, wikidom).generate(escape_newlines)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1501, in generate
>     escape_newlines)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1283, in format
>     result = re.sub(self.wikiparser.rules, self.replace, line)
>   File "/usr/lib/python2.7/re.py", line 151, in sub
>     return _compile(pattern, flags).sub(repl, string, count)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1201, in replace
>     replacement = self.handle_match(fullmatch)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1197, in
> handle_match
>     return internal_handler(match, fullmatch)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 584, in
> _shref_formatter
>     return self._make_link(ns, target, match, match, fullmatch)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 635, in
> _make_link
>     fullmatch)
>   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 393,
> in _format_link
>     revranges = self._normalize_ranges(repos, path, revs)
>   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 436,
> in _normalize_ranges
>     return Ranges(ranges)
>   File "/path/to/bh//trac/trac/util/__init__.py", line 823, in __init__
>     self.appendrange(r)
>   File "/path/to/bh//trac/trac/util/__init__.py", line 841, in
> appendrange
>     a, b = int(x), int(x)
> ValueError: invalid literal for int() with base 10:
> '4d00cd2713712ca230080dbbda24d0d25540d0fe-
> 233a8bbebb2c77c607661767c03689512a16637f'
> }}}

New description:

 ==== How to Reproduce ====

 While doing a POST operation on `/ticket/300`, Trac issued an internal
 error.


 This happened while expanding the TracLinks expression in `edited_comment`
 below. Changeset correspond to a mercurial repository .

 Request parameters:
 {{{
 {'__FORM_TOKEN': u'aeaea20ec38330adabe8f4d5',
  'cnum_edit': u'4',
  'edited_comment': u'Options for format clause implemented in
 log:tracgviz@4d00cd2:233a8bb .',
  'id': u'300',
  'preview_comment': u'Preview'}
 }}}

 User agent: `Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16`

 ==== System Information ====
 || '''`Trac`''' || `1.0.1` [[br]] `` ||
 || '''`Babel`''' || `0.9.6` ||
 || '''`Bloodhound Trac`''' || `1.0.1` ||
 || '''`Genshi`''' || `0.7 (with speedups)` ||
 || '''`Mercurial`''' || `2.6.2` ||
 || '''`mod_wsgi`''' || `3.3 (WSGIProcessGroup bloodhound_net
 WSGIApplicationGroup %{GLOBAL})` ||
 || '''`psycopg2`''' || `2.5` ||
 || '''`Pygments`''' || `1.6` ||
 || '''`Python`''' || `2.7.3 (default, Aug  1 2012, 05:25:23) ` [[br]]
 `[GCC 4.6.3]` ||
 || '''`pytz`''' || `2013b` ||
 || '''`RPC`''' || `1.1.2` ||
 || '''`setuptools`''' || `0.6` ||
 || '''`jQuery`''' || `1.7.2` ||

 ==== Enabled Plugins ====
 || '''`BloodhoundDashboardPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundLabs`''' || `0.1.0` ||
 || '''`BloodhoundMultiProduct`''' || `0.8.0dev` ||
 || '''`BloodhoundRelationsPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundRPC`''' || `1.1.2` ||
 || '''`BloodhoundSearchPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundTheme`''' || `0.8.0dev` ||
 || '''`TracAccountManager`''' || `0.4.3` ||
 || '''`TracGViz`''' || `1.4.2` ||
 || '''`TracIncludeMacro`''' || `3.0.0dev` ||
 || '''`TracMercurial`''' || `1.0.0.3dev` ||
 || '''`TracPermRedirect`''' || `3.0` ||
 || '''`TracThemeEngine`''' || `2.2.2dev-r13718` ||
 || '''`TracTocMacro`''' || `11.0.0.3` ||

 ==== Python Traceback ====
 {{{
 Traceback (most recent call last):
   File "/path/to/bh//trac/trac/web/main.py", line 477, in
 _dispatch_request
     dispatcher.dispatch(req)
   File "/path/to/bh//trac/trac/web/main.py", line 233, in dispatch
     content_type)
   File "/path/to/bh//trac/trac/web/chrome.py", line 1019, in
 render_template
     encoding='utf-8')
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 184, in render
     return encode(generator, method=method, encoding=encoding, out=out)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 58, in encode
     for chunk in iterator:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 350, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 829, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 669, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 774, in __call__
     for kind, data, pos in chain(stream, [(None, None, None)]):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 594, in __call__
     for ev in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/trac/web/chrome.py", line 1156, in
 _strip_accesskeys
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/trac/web/chrome.py", line 1145, in _generate
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 702, in _mark
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 702, in _mark
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 378, in _match
     ctxt, start=idx + 1, **vars):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 378, in _match
     ctxt, start=idx + 1, **vars):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 362, in _match
     content = list(content)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 326, in _match
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 558, in _flatten
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/path.py", line 588, in _generate
     subevent = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 558, in _flatten
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/path.py", line 588, in _generate
     subevent = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 578, in _flatten
     result = _eval_expr(data, ctxt, vars)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 289, in _eval_expr
     retval = expr.evaluate(ctxt)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/eval.py", line 177, in evaluate
     return eval(self.code, _globals, {'__data__': data})
   File
 "/path/to/bh//bloodhound_theme/bhtheme/templates/bh_ticket_change.html",
 line 106, in <Expression u'wiki_to_html(context, text,
 escape_newlines=preserve_newlines)'>
     ${wiki_to_html(context, text, escape_newlines=preserve_newlines)}
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1546, in
 format_to_html
     return HtmlFormatter(env, context, wikidom).generate(escape_newlines)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1501, in generate
     escape_newlines)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1283, in format
     result = re.sub(self.wikiparser.rules, self.replace, line)
   File "/usr/lib/python2.7/re.py", line 151, in sub
     return _compile(pattern, flags).sub(repl, string, count)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1201, in replace
     replacement = self.handle_match(fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1197, in
 handle_match
     return internal_handler(match, fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 584, in
 _shref_formatter
     return self._make_link(ns, target, match, match, fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 635, in _make_link
     fullmatch)
   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 393, in
 _format_link
     revranges = self._normalize_ranges(repos, path, revs)
   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 436, in
 _normalize_ranges
     return Ranges(ranges)
   File "/path/to/bh//trac/trac/util/__init__.py", line 823, in __init__
     self.appendrange(r)
   File "/path/to/bh//trac/trac/util/__init__.py", line 841, in appendrange
     a, b = int(x), int(x)
 ValueError: invalid literal for int() with base 10:
 '4d00cd2713712ca230080dbbda24d0d25540d0fe-
 233a8bbebb2c77c607661767c03689512a16637f'
 }}}

--

Comment:

 This breaks the ticket page if changes are committed .

-- 
Ticket URL: <https://issues.apache.org/bloodhound/ticket/790#comment:1>
Apache Bloodhound <https://issues.apache.org/bloodhound/>
The Apache Bloodhound issue tracker

Re: [Apache Bloodhound] #790: Expansion of log TracLinks fails for changeset hash ID

Posted by Apache Bloodhound <de...@bloodhound.apache.org>.
#790: Expansion of log TracLinks fails for changeset hash ID
------------------------+--------------------------------------------------
  Reporter:  olemis     |      Owner:  nobody
      Type:  defect     |     Status:  new
  Priority:  major      |  Milestone:  Release 9
 Component:  trac core  |    Version:  0.8.0dev
Resolution:             |   Keywords:  hg, browser log TracLinks trac-1.0.2
------------------------+--------------------------------------------------

Comment (by jun66j5):

 Replying to [comment:3 rjollos]:
 > After trac:#11308 this shouldn't result in a traceback, but it still
 won't render a valid !TracLink. We could open an upstream ticket to
 discuss whether revision ranges can be supported for the DVCS
 repositories.

 That has been reported in trac:#11050, see trac:log:jomae.git@t11050.

-- 
Ticket URL: <https://issues.apache.org/bloodhound/ticket/790#comment:6>
Apache Bloodhound <https://issues.apache.org/bloodhound/>
The Apache Bloodhound issue tracker

Re: [Apache Bloodhound] #790: Expansion of log TracLinks fails for changeset hash ID

Posted by Apache Bloodhound <de...@bloodhound.apache.org>.
#790: Expansion of log TracLinks fails for changeset hash ID
------------------------+----------------------
  Reporter:  olemis     |      Owner:  nobody
      Type:  defect     |     Status:  new
  Priority:  major      |  Milestone:
 Component:  dashboard  |    Version:  0.8.0dev
Resolution:             |   Keywords:
------------------------+----------------------
Changes (by rjollos):

 * priority:  critical => major
 * keywords:  hg, browser log TracLinks =>
 * component:  trac core => dashboard


Old description:

> ==== How to Reproduce ====
>
> While doing a POST operation on `/ticket/300`, Trac issued an internal
> error.
>

> This happened while expanding the TracLinks expression in
> `edited_comment` below. Changeset correspond to a mercurial repository .
>
> Request parameters:
> {{{#!py
> {'__FORM_TOKEN': u'aeaea20ec38330adabe8f4d5',
>  'cnum_edit': u'4',
>  'edited_comment': u'Options for format clause implemented in
> log:tracgviz@4d00cd2:233a8bb .',
>  'id': u'300',
>  'preview_comment': u'Preview'}
> }}}
>
> User agent: `Opera/9.80 (X11; Linux x86_64) Presto/2.12.388
> Version/12.16`
>
> ==== System Information ====
> || '''`Trac`''' || `1.0.1` [[br]] `` ||
> || '''`Babel`''' || `0.9.6` ||
> || '''`Bloodhound Trac`''' || `1.0.1` ||
> || '''`Genshi`''' || `0.7 (with speedups)` ||
> || '''`Mercurial`''' || `2.6.2` ||
> || '''`mod_wsgi`''' || `3.3 (WSGIProcessGroup bloodhound_net
> WSGIApplicationGroup %{GLOBAL})` ||
> || '''`psycopg2`''' || `2.5` ||
> || '''`Pygments`''' || `1.6` ||
> || '''`Python`''' || `2.7.3 (default, Aug  1 2012, 05:25:23) ` [[br]]
> `[GCC 4.6.3]` ||
> || '''`pytz`''' || `2013b` ||
> || '''`RPC`''' || `1.1.2` ||
> || '''`setuptools`''' || `0.6` ||
> || '''`jQuery`''' || `1.7.2` ||
>
> ==== Enabled Plugins ====
> || '''`BloodhoundDashboardPlugin`''' || `0.8.0dev` ||
> || '''`BloodhoundLabs`''' || `0.1.0` ||
> || '''`BloodhoundMultiProduct`''' || `0.8.0dev` ||
> || '''`BloodhoundRelationsPlugin`''' || `0.8.0dev` ||
> || '''`BloodhoundRPC`''' || `1.1.2` ||
> || '''`BloodhoundSearchPlugin`''' || `0.8.0dev` ||
> || '''`BloodhoundTheme`''' || `0.8.0dev` ||
> || '''`TracAccountManager`''' || `0.4.3` ||
> || '''`TracGViz`''' || `1.4.2` ||
> || '''`TracIncludeMacro`''' || `3.0.0dev` ||
> || '''`TracMercurial`''' || `1.0.0.3dev` ||
> || '''`TracPermRedirect`''' || `3.0` ||
> || '''`TracThemeEngine`''' || `2.2.2dev-r13718` ||
> || '''`TracTocMacro`''' || `11.0.0.3` ||
>
> ==== Python Traceback ====
> {{{#!pycon
> Traceback (most recent call last):
>   File "/path/to/bh//trac/trac/web/main.py", line 477, in
> _dispatch_request
>     dispatcher.dispatch(req)
>   File "/path/to/bh//trac/trac/web/main.py", line 233, in dispatch
>     content_type)
>   File "/path/to/bh//trac/trac/web/chrome.py", line 1019, in
> render_template
>     encoding='utf-8')
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 184, in render
>     return encode(generator, method=method, encoding=encoding, out=out)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 58, in encode
>     for chunk in iterator:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 350, in __call__
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 829, in __call__
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 669, in __call__
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 774, in __call__
>     for kind, data, pos in chain(stream, [(None, None, None)]):
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 594, in __call__
>     for ev in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/trac/web/chrome.py", line 1156, in
> _strip_accesskeys
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/trac/web/chrome.py", line 1145, in _generate
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 702, in _mark
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 702, in _mark
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 378, in _match
>     ctxt, start=idx + 1, **vars):
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 378, in _match
>     ctxt, start=idx + 1, **vars):
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 362, in _match
>     content = list(content)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 326, in _match
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 315, in _strip
>     event = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 558, in _flatten
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/path.py", line 588, in _generate
>     subevent = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 315, in _strip
>     event = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 558, in _flatten
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/path.py", line 588, in _generate
>     subevent = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 315, in _strip
>     event = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 578, in _flatten
>     result = _eval_expr(data, ctxt, vars)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 289, in _eval_expr
>     retval = expr.evaluate(ctxt)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/eval.py", line 177, in evaluate
>     return eval(self.code, _globals, {'__data__': data})
>   File
> "/path/to/bh//bloodhound_theme/bhtheme/templates/bh_ticket_change.html",
> line 106, in <Expression u'wiki_to_html(context, text,
> escape_newlines=preserve_newlines)'>
>     ${wiki_to_html(context, text, escape_newlines=preserve_newlines)}
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1546, in
> format_to_html
>     return HtmlFormatter(env, context, wikidom).generate(escape_newlines)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1501, in generate
>     escape_newlines)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1283, in format
>     result = re.sub(self.wikiparser.rules, self.replace, line)
>   File "/usr/lib/python2.7/re.py", line 151, in sub
>     return _compile(pattern, flags).sub(repl, string, count)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1201, in replace
>     replacement = self.handle_match(fullmatch)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1197, in
> handle_match
>     return internal_handler(match, fullmatch)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 584, in
> _shref_formatter
>     return self._make_link(ns, target, match, match, fullmatch)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 635, in
> _make_link
>     fullmatch)
>   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 393,
> in _format_link
>     revranges = self._normalize_ranges(repos, path, revs)
>   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 436,
> in _normalize_ranges
>     return Ranges(ranges)
>   File "/path/to/bh//trac/trac/util/__init__.py", line 823, in __init__
>     self.appendrange(r)
>   File "/path/to/bh//trac/trac/util/__init__.py", line 841, in
> appendrange
>     a, b = int(x), int(x)
> ValueError: invalid literal for int() with base 10:
> '4d00cd2713712ca230080dbbda24d0d25540d0fe-
> 233a8bbebb2c77c607661767c03689512a16637f'
> }}}

New description:

 ==== How to Reproduce ====

 While doing a POST operation on `/ticket/300`, Trac issued an internal
 error.
 Changeset IDs belong in a mercurial repository .

 This happened while expanding the TracLinks expression in `edited_comment`
 below.

 Request parameters:
 {{{
 {'__FORM_TOKEN': u'aeaea20ec38330adabe8f4d5',
  'cnum_edit': u'4',
  'edited_comment': u'Options for format clause implemented in
 log:tracgviz@4d00cd2:233a8bb .',
  'id': u'300',
  'preview_comment': u'Preview'}
 }}}

 User agent: `Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16`

 ==== System Information ====
 || '''`Trac`''' || `1.0.1` [[br]] `` ||
 || '''`Babel`''' || `0.9.6` ||
 || '''`Bloodhound Trac`''' || `1.0.1` ||
 || '''`Genshi`''' || `0.7 (with speedups)` ||
 || '''`Mercurial`''' || `2.6.2` ||
 || '''`mod_wsgi`''' || `3.3 (WSGIProcessGroup bloodhound_net
 WSGIApplicationGroup %{GLOBAL})` ||
 || '''`psycopg2`''' || `2.5` ||
 || '''`Pygments`''' || `1.6` ||
 || '''`Python`''' || `2.7.3 (default, Aug  1 2012, 05:25:23) ` [[br]]
 `[GCC 4.6.3]` ||
 || '''`pytz`''' || `2013b` ||
 || '''`RPC`''' || `1.1.2` ||
 || '''`setuptools`''' || `0.6` ||
 || '''`jQuery`''' || `1.7.2` ||

 ==== Enabled Plugins ====
 || '''`BloodhoundDashboardPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundLabs`''' || `0.1.0` ||
 || '''`BloodhoundMultiProduct`''' || `0.8.0dev` ||
 || '''`BloodhoundRelationsPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundRPC`''' || `1.1.2` ||
 || '''`BloodhoundSearchPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundTheme`''' || `0.8.0dev` ||
 || '''`TracAccountManager`''' || `0.4.3` ||
 || '''`TracGViz`''' || `1.4.2` ||
 || '''`TracIncludeMacro`''' || `3.0.0dev` ||
 || '''`TracMercurial`''' || `1.0.0.3dev` ||
 || '''`TracPermRedirect`''' || `3.0` ||
 || '''`TracThemeEngine`''' || `2.2.2dev-r13718` ||
 || '''`TracTocMacro`''' || `11.0.0.3` ||

 ==== Python Traceback ====
 {{{
 Traceback (most recent call last):
   File "/path/to/bh//trac/trac/web/main.py", line 477, in
 _dispatch_request
     dispatcher.dispatch(req)
   File "/path/to/bh//trac/trac/web/main.py", line 233, in dispatch
     content_type)
   File "/path/to/bh//trac/trac/web/chrome.py", line 1019, in
 render_template
     encoding='utf-8')
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 184, in render
     return encode(generator, method=method, encoding=encoding, out=out)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 58, in encode
     for chunk in iterator:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 350, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 829, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 669, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 774, in __call__
     for kind, data, pos in chain(stream, [(None, None, None)]):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 594, in __call__
     for ev in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/trac/web/chrome.py", line 1156, in
 _strip_accesskeys
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/trac/web/chrome.py", line 1145, in _generate
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 702, in _mark
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 702, in _mark
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 378, in _match
     ctxt, start=idx + 1, **vars):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 378, in _match
     ctxt, start=idx + 1, **vars):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 362, in _match
     content = list(content)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 326, in _match
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 558, in _flatten
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/path.py", line 588, in _generate
     subevent = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 558, in _flatten
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/path.py", line 588, in _generate
     subevent = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 578, in _flatten
     result = _eval_expr(data, ctxt, vars)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 289, in _eval_expr
     retval = expr.evaluate(ctxt)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/eval.py", line 177, in evaluate
     return eval(self.code, _globals, {'__data__': data})
   File
 "/path/to/bh//bloodhound_theme/bhtheme/templates/bh_ticket_change.html",
 line 106, in <Expression u'wiki_to_html(context, text,
 escape_newlines=preserve_newlines)'>
     ${wiki_to_html(context, text, escape_newlines=preserve_newlines)}
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1546, in
 format_to_html
     return HtmlFormatter(env, context, wikidom).generate(escape_newlines)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1501, in generate
     escape_newlines)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1283, in format
     result = re.sub(self.wikiparser.rules, self.replace, line)
   File "/usr/lib/python2.7/re.py", line 151, in sub
     return _compile(pattern, flags).sub(repl, string, count)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1201, in replace
     replacement = self.handle_match(fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1197, in
 handle_match
     return internal_handler(match, fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 584, in
 _shref_formatter
     return self._make_link(ns, target, match, match, fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 635, in _make_link
     fullmatch)
   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 393, in
 _format_link
     revranges = self._normalize_ranges(repos, path, revs)
   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 436, in
 _normalize_ranges
     return Ranges(ranges)
   File "/path/to/bh//trac/trac/util/__init__.py", line 823, in __init__
     self.appendrange(r)
   File "/path/to/bh//trac/trac/util/__init__.py", line 841, in appendrange
     a, b = int(x), int(x)
 ValueError: invalid literal for int() with base 10:
 '4d00cd2713712ca230080dbbda24d0d25540d0fe-
 233a8bbebb2c77c607661767c03689512a16637f'
 }}}

--

Comment:

 I'm fairly sure that revision ranges are not supported for hashes, only
 linear revision ranges are supported. After trac:#11308 this shouldn't
 result in a traceback, but it still won't render a valid !TracLink. We
 could open an upstream ticket to discuss whether revision ranges can be
 supported for the DVCS repositories.

-- 
Ticket URL: <https://issues.apache.org/bloodhound/ticket/790#comment:3>
Apache Bloodhound <https://issues.apache.org/bloodhound/>
The Apache Bloodhound issue tracker

Re: [Apache Bloodhound] #790: Expansion of log TracLinks fails for changeset hash ID

Posted by Apache Bloodhound <de...@bloodhound.apache.org>.
#790: Expansion of log TracLinks fails for changeset hash ID
------------------------+--------------------------------------------------
  Reporter:  olemis     |      Owner:  nobody
      Type:  defect     |     Status:  new
  Priority:  major      |  Milestone:  Release 9
 Component:  trac core  |    Version:  0.8.0dev
Resolution:             |   Keywords:  hg, browser log TracLinks trac-1.0.2
------------------------+--------------------------------------------------
Changes (by rjollos):

 * keywords:  hg, browser log TracLinks => hg, browser log TracLinks
     trac-1.0.2
 * milestone:   => Release 9


-- 
Ticket URL: <https://issues.apache.org/bloodhound/ticket/790#comment:5>
Apache Bloodhound <https://issues.apache.org/bloodhound/>
The Apache Bloodhound issue tracker

Re: [Apache Bloodhound] #790: Expansion of log TracLinks fails for changeset hash ID

Posted by Apache Bloodhound <de...@bloodhound.apache.org>.
#790: Expansion of log TracLinks fails for changeset hash ID
------------------------+--------------------------------------------------
  Reporter:  olemis     |      Owner:  nobody
      Type:  defect     |     Status:  new
  Priority:  major      |  Milestone:  Release 9
 Component:  trac core  |    Version:  0.8.0dev
Resolution:             |   Keywords:  hg, browser log TracLinks trac-1.0.2
------------------------+--------------------------------------------------

Comment (by rjollos):

 Thanks, Jun. Assuming you are waiting for testing feedback on trac:#11050,
 I will try to find some time to test it out.

-- 
Ticket URL: <https://issues.apache.org/bloodhound/ticket/790#comment:7>
Apache Bloodhound <https://issues.apache.org/bloodhound/>
The Apache Bloodhound issue tracker

Re: [Apache Bloodhound] #790: Expansion of log TracLinks fails for changeset hash ID

Posted by Apache Bloodhound <de...@bloodhound.apache.org>.
#790: Expansion of log TracLinks fails for changeset hash ID
------------------------+---------------------------------------
  Reporter:  olemis     |      Owner:  nobody
      Type:  defect     |     Status:  new
  Priority:  major      |  Milestone:
 Component:  trac core  |    Version:  0.8.0dev
Resolution:             |   Keywords:  hg, browser log TracLinks
------------------------+---------------------------------------
Changes (by rjollos):

 * keywords:   => hg, browser log TracLinks
 * component:  dashboard => trac core


Old description:

> ==== How to Reproduce ====
>
> While doing a POST operation on `/ticket/300`, Trac issued an internal
> error.
> Changeset IDs belong in a mercurial repository .
>
> This happened while expanding the TracLinks expression in
> `edited_comment` below.
>
> Request parameters:
> {{{
> {'__FORM_TOKEN': u'aeaea20ec38330adabe8f4d5',
>  'cnum_edit': u'4',
>  'edited_comment': u'Options for format clause implemented in
> log:tracgviz@4d00cd2:233a8bb .',
>  'id': u'300',
>  'preview_comment': u'Preview'}
> }}}
>
> User agent: `Opera/9.80 (X11; Linux x86_64) Presto/2.12.388
> Version/12.16`
>
> ==== System Information ====
> || '''`Trac`''' || `1.0.1` [[br]] `` ||
> || '''`Babel`''' || `0.9.6` ||
> || '''`Bloodhound Trac`''' || `1.0.1` ||
> || '''`Genshi`''' || `0.7 (with speedups)` ||
> || '''`Mercurial`''' || `2.6.2` ||
> || '''`mod_wsgi`''' || `3.3 (WSGIProcessGroup bloodhound_net
> WSGIApplicationGroup %{GLOBAL})` ||
> || '''`psycopg2`''' || `2.5` ||
> || '''`Pygments`''' || `1.6` ||
> || '''`Python`''' || `2.7.3 (default, Aug  1 2012, 05:25:23) ` [[br]]
> `[GCC 4.6.3]` ||
> || '''`pytz`''' || `2013b` ||
> || '''`RPC`''' || `1.1.2` ||
> || '''`setuptools`''' || `0.6` ||
> || '''`jQuery`''' || `1.7.2` ||
>
> ==== Enabled Plugins ====
> || '''`BloodhoundDashboardPlugin`''' || `0.8.0dev` ||
> || '''`BloodhoundLabs`''' || `0.1.0` ||
> || '''`BloodhoundMultiProduct`''' || `0.8.0dev` ||
> || '''`BloodhoundRelationsPlugin`''' || `0.8.0dev` ||
> || '''`BloodhoundRPC`''' || `1.1.2` ||
> || '''`BloodhoundSearchPlugin`''' || `0.8.0dev` ||
> || '''`BloodhoundTheme`''' || `0.8.0dev` ||
> || '''`TracAccountManager`''' || `0.4.3` ||
> || '''`TracGViz`''' || `1.4.2` ||
> || '''`TracIncludeMacro`''' || `3.0.0dev` ||
> || '''`TracMercurial`''' || `1.0.0.3dev` ||
> || '''`TracPermRedirect`''' || `3.0` ||
> || '''`TracThemeEngine`''' || `2.2.2dev-r13718` ||
> || '''`TracTocMacro`''' || `11.0.0.3` ||
>
> ==== Python Traceback ====
> {{{
> Traceback (most recent call last):
>   File "/path/to/bh//trac/trac/web/main.py", line 477, in
> _dispatch_request
>     dispatcher.dispatch(req)
>   File "/path/to/bh//trac/trac/web/main.py", line 233, in dispatch
>     content_type)
>   File "/path/to/bh//trac/trac/web/chrome.py", line 1019, in
> render_template
>     encoding='utf-8')
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 184, in render
>     return encode(generator, method=method, encoding=encoding, out=out)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 58, in encode
>     for chunk in iterator:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 350, in __call__
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 829, in __call__
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 669, in __call__
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 774, in __call__
>     for kind, data, pos in chain(stream, [(None, None, None)]):
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/output.py", line 594, in __call__
>     for ev in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/trac/web/chrome.py", line 1156, in
> _strip_accesskeys
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/trac/web/chrome.py", line 1145, in _generate
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 702, in _mark
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 974, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
>     for mark, (kind, data, pos) in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 799, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 734, in __call__
>     for mark, event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/filters/transform.py", line 702, in _mark
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 378, in _match
>     ctxt, start=idx + 1, **vars):
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 378, in _match
>     ctxt, start=idx + 1, **vars):
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 362, in _match
>     content = list(content)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 326, in _match
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 315, in _strip
>     event = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 558, in _flatten
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/path.py", line 588, in _generate
>     subevent = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 315, in _strip
>     event = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 558, in _flatten
>     for kind, data, pos in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/core.py", line 289, in _ensure
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/path.py", line 588, in _generate
>     subevent = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 618, in _include
>     for event in stream:
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/markup.py", line 315, in _strip
>     event = next()
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 578, in _flatten
>     result = _eval_expr(data, ctxt, vars)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/base.py", line 289, in _eval_expr
>     retval = expr.evaluate(ctxt)
>   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
> x86_64.egg/genshi/template/eval.py", line 177, in evaluate
>     return eval(self.code, _globals, {'__data__': data})
>   File
> "/path/to/bh//bloodhound_theme/bhtheme/templates/bh_ticket_change.html",
> line 106, in <Expression u'wiki_to_html(context, text,
> escape_newlines=preserve_newlines)'>
>     ${wiki_to_html(context, text, escape_newlines=preserve_newlines)}
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1546, in
> format_to_html
>     return HtmlFormatter(env, context, wikidom).generate(escape_newlines)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1501, in generate
>     escape_newlines)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1283, in format
>     result = re.sub(self.wikiparser.rules, self.replace, line)
>   File "/usr/lib/python2.7/re.py", line 151, in sub
>     return _compile(pattern, flags).sub(repl, string, count)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1201, in replace
>     replacement = self.handle_match(fullmatch)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1197, in
> handle_match
>     return internal_handler(match, fullmatch)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 584, in
> _shref_formatter
>     return self._make_link(ns, target, match, match, fullmatch)
>   File "/path/to/bh//trac/trac/wiki/formatter.py", line 635, in
> _make_link
>     fullmatch)
>   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 393,
> in _format_link
>     revranges = self._normalize_ranges(repos, path, revs)
>   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 436,
> in _normalize_ranges
>     return Ranges(ranges)
>   File "/path/to/bh//trac/trac/util/__init__.py", line 823, in __init__
>     self.appendrange(r)
>   File "/path/to/bh//trac/trac/util/__init__.py", line 841, in
> appendrange
>     a, b = int(x), int(x)
> ValueError: invalid literal for int() with base 10:
> '4d00cd2713712ca230080dbbda24d0d25540d0fe-
> 233a8bbebb2c77c607661767c03689512a16637f'
> }}}

New description:

 ==== How to Reproduce ====

 While doing a POST operation on `/ticket/300`, Trac issued an internal
 error.
 Changeset IDs belong in a mercurial repository .

 Changeset IDs belong in a mercurial repository .

 This happened while expanding the TracLinks expression in `edited_comment`
 below.

 Request parameters:
 {{{#!py
 {'__FORM_TOKEN': u'aeaea20ec38330adabe8f4d5',
  'cnum_edit': u'4',
  'edited_comment': u'Options for format clause implemented in
 log:tracgviz@4d00cd2:233a8bb .',
  'id': u'300',
  'preview_comment': u'Preview'}
 }}}

 User agent: `Opera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16`

 ==== System Information ====
 || '''`Trac`''' || `1.0.1` [[br]] `` ||
 || '''`Babel`''' || `0.9.6` ||
 || '''`Bloodhound Trac`''' || `1.0.1` ||
 || '''`Genshi`''' || `0.7 (with speedups)` ||
 || '''`Mercurial`''' || `2.6.2` ||
 || '''`mod_wsgi`''' || `3.3 (WSGIProcessGroup bloodhound_net
 WSGIApplicationGroup %{GLOBAL})` ||
 || '''`psycopg2`''' || `2.5` ||
 || '''`Pygments`''' || `1.6` ||
 || '''`Python`''' || `2.7.3 (default, Aug  1 2012, 05:25:23) ` [[br]]
 `[GCC 4.6.3]` ||
 || '''`pytz`''' || `2013b` ||
 || '''`RPC`''' || `1.1.2` ||
 || '''`setuptools`''' || `0.6` ||
 || '''`jQuery`''' || `1.7.2` ||

 ==== Enabled Plugins ====
 || '''`BloodhoundDashboardPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundLabs`''' || `0.1.0` ||
 || '''`BloodhoundMultiProduct`''' || `0.8.0dev` ||
 || '''`BloodhoundRelationsPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundRPC`''' || `1.1.2` ||
 || '''`BloodhoundSearchPlugin`''' || `0.8.0dev` ||
 || '''`BloodhoundTheme`''' || `0.8.0dev` ||
 || '''`TracAccountManager`''' || `0.4.3` ||
 || '''`TracGViz`''' || `1.4.2` ||
 || '''`TracIncludeMacro`''' || `3.0.0dev` ||
 || '''`TracMercurial`''' || `1.0.0.3dev` ||
 || '''`TracPermRedirect`''' || `3.0` ||
 || '''`TracThemeEngine`''' || `2.2.2dev-r13718` ||
 || '''`TracTocMacro`''' || `11.0.0.3` ||

 ==== Python Traceback ====
 {{{#!pycon
 Traceback (most recent call last):
   File "/path/to/bh//trac/trac/web/main.py", line 477, in
 _dispatch_request
     dispatcher.dispatch(req)
   File "/path/to/bh//trac/trac/web/main.py", line 233, in dispatch
     content_type)
   File "/path/to/bh//trac/trac/web/chrome.py", line 1019, in
 render_template
     encoding='utf-8')
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 184, in render
     return encode(generator, method=method, encoding=encoding, out=out)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 58, in encode
     for chunk in iterator:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 350, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 829, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 669, in __call__
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 774, in __call__
     for kind, data, pos in chain(stream, [(None, None, None)]):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/output.py", line 594, in __call__
     for ev in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/trac/web/chrome.py", line 1156, in
 _strip_accesskeys
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/trac/web/chrome.py", line 1145, in _generate
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 702, in _mark
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 706, in _unmark
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 974, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 1195, in __call__
     for mark, (kind, data, pos) in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 799, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 734, in __call__
     for mark, event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/filters/transform.py", line 702, in _mark
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 378, in _match
     ctxt, start=idx + 1, **vars):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 378, in _match
     ctxt, start=idx + 1, **vars):
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 362, in _match
     content = list(content)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 326, in _match
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 558, in _flatten
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/path.py", line 588, in _generate
     subevent = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 558, in _flatten
     for kind, data, pos in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/core.py", line 289, in _ensure
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/path.py", line 588, in _generate
     subevent = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 618, in _include
     for event in stream:
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/markup.py", line 315, in _strip
     event = next()
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 578, in _flatten
     result = _eval_expr(data, ctxt, vars)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/base.py", line 289, in _eval_expr
     retval = expr.evaluate(ctxt)
   File "/path/to/bh//trac/Genshi-0.7-py2.7-linux-
 x86_64.egg/genshi/template/eval.py", line 177, in evaluate
     return eval(self.code, _globals, {'__data__': data})
   File
 "/path/to/bh//bloodhound_theme/bhtheme/templates/bh_ticket_change.html",
 line 106, in <Expression u'wiki_to_html(context, text,
 escape_newlines=preserve_newlines)'>
     ${wiki_to_html(context, text, escape_newlines=preserve_newlines)}
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1546, in
 format_to_html
     return HtmlFormatter(env, context, wikidom).generate(escape_newlines)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1501, in generate
     escape_newlines)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1283, in format
     result = re.sub(self.wikiparser.rules, self.replace, line)
   File "/usr/lib/python2.7/re.py", line 151, in sub
     return _compile(pattern, flags).sub(repl, string, count)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1201, in replace
     replacement = self.handle_match(fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 1197, in
 handle_match
     return internal_handler(match, fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 584, in
 _shref_formatter
     return self._make_link(ns, target, match, match, fullmatch)
   File "/path/to/bh//trac/trac/wiki/formatter.py", line 635, in _make_link
     fullmatch)
   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 393, in
 _format_link
     revranges = self._normalize_ranges(repos, path, revs)
   File "/path/to/bh//trac/trac/versioncontrol/web_ui/log.py", line 436, in
 _normalize_ranges
     return Ranges(ranges)
   File "/path/to/bh//trac/trac/util/__init__.py", line 823, in __init__
     self.appendrange(r)
   File "/path/to/bh//trac/trac/util/__init__.py", line 841, in appendrange
     a, b = int(x), int(x)
 ValueError: invalid literal for int() with base 10:
 '4d00cd2713712ca230080dbbda24d0d25540d0fe-
 233a8bbebb2c77c607661767c03689512a16637f'
 }}}

--

Comment:

 Collision - sorry about that.

-- 
Ticket URL: <https://issues.apache.org/bloodhound/ticket/790#comment:4>
Apache Bloodhound <https://issues.apache.org/bloodhound/>
The Apache Bloodhound issue tracker