Edgewall Software
Modify

Opened 13 years ago

Closed 13 years ago

#9840 closed defect (fixed)

Crash on navigating on a revision range reference

Reported by: fviktor@… Owned by: Remy Blank
Priority: normal Milestone: 0.12.2
Component: plugin/mercurial Version: 0.12
Severity: normal Keywords: review
Cc: Branch:
Release Notes:
API Changes:
Internal Changes:

Description

I added a revision range reference to a ticket comment: r155:157

Saved the comment, then navigated on the link it created. Got the following exception:

Oops…
Trac detected an internal error:

TypeError: unsupported operand type(s) for -: 'str' and 'int'

This is probably a local installation issue.
Found a bug in Trac?

If you think this should work and you can reproduce the problem, you should consider creating a bug report.

Before you do that, though, please first try searching for similar issues, as it is quite likely that this problem has been reported before. For questions about installation and configuration of Trac or its plugins, please try the mailing list instead of creating a ticket.

Otherwise, please ==== How to Reproduce ==== While doing a GET operation on `/log/`, Trac issued an internal error. ''(please provide additional details here)'' Request parameters: {{{ {'path': u'/', 'revs': u'155-157'} }}} User agent: `Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.12) Gecko/20101027 Ubuntu/10.04 (lucid) Firefox/3.6.12` ==== System Information ==== || '''`Trac`''' || `0.12.1` || || '''`Babel`''' || `0.9.5 (translations unavailable)` || || '''`Docutils`''' || `0.6` || || '''`Genshi`''' || `0.6` || || '''`Mercurial`''' || `1.7` || || '''`mod_wsgi`''' || `2.8 (WSGIProcessGroup wsgi_trac WSGIApplicationGroup %{GLOBAL})` || || '''`psycopg2`''' || `2.0.13` || || '''`Pygments`''' || `1.3.1` || || '''`Python`''' || `2.6.5 (r265:79063, Apr 16 2010, 13:28:26) ` [[br]] `[GCC 4.4.3]` || || '''`RPC`''' || `1.1.0-r9262` || || '''`setuptools`''' || `0.6` || || '''`Subversion`''' || `1.6.6 (r40053)` || || '''`jQuery`''' || `1.4.2` || ==== Enabled Plugins ==== || '''`timingandestimationplugin`''' || `1.0.6` || || '''`TracMercurial`''' || `0.12.0.23dev-r9953` || || '''`TracMercurialChangesetPlugin`''' || `0.4` || || '''`TracPaste`''' || `0.2.1` || || '''`TracPyDotOrgTheme`''' || `2.0` || || '''`TracThemeEngine`''' || `2.0.1` || || '''`TracXMLRPC`''' || `1.1.0-r9262` || ==== Python Traceback ==== {{{ Traceback (most recent call last): File "/usr/local/lib/python2.6/dist-packages/Trac-0.12.1-py2.6.egg/trac/web/main.py", line 511, in _dispatch_request dispatcher.dispatch(req) File "/usr/local/lib/python2.6/dist-packages/Trac-0.12.1-py2.6.egg/trac/web/main.py", line 237, in dispatch resp = chosen_handler.process_request(req) File "/usr/local/lib/python2.6/dist-packages/Trac-0.12.1-py2.6.egg/trac/versioncontrol/web_ui/log.py", line 163, in process_request for old_path, old_rev, old_chg in history(): File "/usr/local/lib/python2.6/dist-packages/Trac-0.12.1-py2.6.egg/trac/versioncontrol/web_ui/log.py", line 144, in history b = rev - 1 TypeError: unsupported operand type(s) for -: 'str' and 'int' }}} a new bug report describing the problem and explain how to reproduce it.
Python Traceback
Most recent call last:

    * File "/usr/local/lib/python2.6/dist-packages/Trac-0.12.1-py2.6.egg/trac/web/main.py", line 511, in _dispatch_request
      Code fragment:
      Line	
      506	try:
      507	if not env and env_error:
      508	raise HTTPInternalError(env_error)
      509	try:
      510	dispatcher = RequestDispatcher(env)
      511	dispatcher.dispatch(req)
      512	except RequestDone:
      513	pass
      514	resp = req._response or []
      515	 
      516	except HTTPException, e:
      Local variables:
      Name	Value
      dispatcher 	<trac.web.main.RequestDispatcher object at 0xb8b3522c>
      e 	TypeError("unsupported operand type(s) for -: 'str' and 'int'",)
      env 	<trac.env.Environment object at 0xb870958c>
      env_error 	None
      req 	<Request "GET '/log/'">
      resp 	[]

    * File "/usr/local/lib/python2.6/dist-packages/Trac-0.12.1-py2.6.egg/trac/web/main.py", line 237, in dispatch
      Code fragment:
      Line	
      232	msg = _('Do you have cookies enabled?')
      233	raise HTTPBadRequest(_('Missing or invalid form token.'
      234	' %(msg)s', msg=msg))
      235	 
      236	# Process the request and render the template
      237	resp = chosen_handler.process_request(req)
      238	if resp:
      239	if len(resp) == 2: # Clearsilver
      240	chrome.populate_hdf(req)
      241	template, content_type = \
      242	self._post_process_request(req, *resp)
      Local variables:
      Name	Value
      chosen_handler 	<trac.versioncontrol.web_ui.log.LogModule object at 0xb8b3534c>
      chrome 	<trac.web.chrome.Chrome object at 0xb8a8c0ac>
      err 	(<type 'exceptions.TypeError'>, TypeError("unsupported operand type(s) for ...
      handler 	<trac.versioncontrol.web_ui.log.LogModule object at 0xb8b3534c>
      req 	<Request "GET '/log/'">
      self 	<trac.web.main.RequestDispatcher object at 0xb8b3522c>

    * File "/usr/local/lib/python2.6/dist-packages/Trac-0.12.1-py2.6.egg/trac/versioncontrol/web_ui/log.py", line 163, in process_request
      Code fragment:
      Line	
      158	# -- retrieve history, asking for limit+1 results
      159	info = []
      160	depth = 1
      161	previous_path = normpath
      162	count = 0
      163	for old_path, old_rev, old_chg in history():
      164	if stop_rev and repos.rev_older_than(old_rev, stop_rev):
      165	break
      166	old_path = repos.normalize_path(old_path)
      167	 
      168	item = {
      Local variables:
      Name	Value
      count 	1
      cset_resource 	<Resource 'repository, changeset'>
      depth 	1
      display_rev 	<bound method MercurialRepository.display_rev of ...
      format 	None
      history 	<function history at 0xb8fc3994>
      info 	[{'path': '', 'depth': 1, 'rev': ...
      item 	{'path': '', 'depth': 1, 'rev': ...
      limit 	100
      mode 	'stop_on_copy'
      normpath 	''
      old_chg 	'edit'
      old_path 	''
      old_rev 	'b3b2aaab354846d3c39580fe7504da3c09e73409'
      path 	'/'
      previous_path 	''
      reponame 	u''
      repos 	<tracext.hg.backend.MercurialRepository object at 0xb8df1c4c>
      req 	<Request "GET '/log/'">
      rev 	u'b3b2aaab354846d3c39580fe7504da3c09e73409'
      revranges 	<trac.util.Ranges object at 0xb8d5e6ec>
      revs 	u'155-157'
      rm 	<trac.versioncontrol.api.RepositoryManager object at 0xb8b3566c>
      self 	<trac.versioncontrol.web_ui.log.LogModule object at 0xb8b3534c>
      stop_limit 	101
      stop_rev 	None
      verbose 	None

    * File "/usr/local/lib/python2.6/dist-packages/Trac-0.12.1-py2.6.egg/trac/versioncontrol/web_ui/log.py", line 144, in history
      Code fragment:
      Line	
      139	np, nrev, nchg = expected_next_item
      140	if rev != nrev: # no, we need a separator
      141	yield (np, nrev, None)
      142	yield node_history[0]
      143	prevpath = node_history[-1][0] # follow copy
      144	b = rev - 1
      145	if len(node_history) > 1:
      146	expected_next_item = node_history[-1]
      147	else:
      148	expected_next_item = None
      149	if expected_next_item:
      Local variables:
      Name	Value
      a 	155
      b 	157
      chg 	'edit'
      cset_resource 	<Resource 'repository, changeset'>
      expected_next_item 	None
      node 	<tracext.hg.backend.MercurialNode object at 0xb8dcf68c>
      node_history 	[(u'', 'b3b2aaab354846d3c39580fe7504da3c09e73409', 'edit'), (u'', ...
      p 	u''
      path 	'/'
      prevpath 	u''
      ranges 	[(155, 157)]
      repos 	<tracext.hg.backend.MercurialRepository object at 0xb8df1c4c>
      req 	<Request "GET '/log/'">
      rev 	'b3b2aaab354846d3c39580fe7504da3c09e73409'
      revranges 	<trac.util.Ranges object at 0xb8d5e6ec>

File "/usr/local/lib/python2.6/dist-packages/Trac-0.12.1-py2.6.egg/trac/web/main.py", line 511, in _dispatch_request
  dispatcher.dispatch(req)
File "/usr/local/lib/python2.6/dist-packages/Trac-0.12.1-py2.6.egg/trac/web/main.py", line 237, in dispatch
  resp = chosen_handler.process_request(req)
File "/usr/local/lib/python2.6/dist-packages/Trac-0.12.1-py2.6.egg/trac/versioncontrol/web_ui/log.py", line 163, in process_request
  for old_path, old_rev, old_chg in history():
File "/usr/local/lib/python2.6/dist-packages/Trac-0.12.1-py2.6.egg/trac/versioncontrol/web_ui/log.py", line 144, in history
  b = rev - 1

System Information:

User Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.12) Gecko/20101027 Ubuntu/10.04 (lucid) Firefox/3.6.12

Trac 	0.12.1
Babel 	0.9.5 (translations unavailable)
Docutils 	0.6
Genshi 	0.6
Mercurial 	1.7
mod_wsgi 	2.8 (WSGIProcessGroup wsgi_trac WSGIApplicationGroup %{GLOBAL})
psycopg2 	2.0.13
Pygments 	1.3.1
Python 	2.6.5 (r265:79063, Apr 16 2010, 13:28:26) [GCC 4.4.3]
RPC 	1.1.0-r9262
setuptools 	0.6
Subversion 	1.6.6 (r40053)
jQuery	1.4.2

Enabled Plugins:
timingandestimationplugin 	1.0.6 	/usr/local/lib/python2.6/dist-packages/timingandestimationplugin-1.0.6-py2.6.egg
TracMercurial 	0.12.0.23dev-r9953 	/usr/local/lib/python2.6/dist-packages/TracMercurial-0.12.0.23dev_r9953-py2.6.egg
TracMercurialChangesetPlugin 	0.4 	/usr/local/lib/python2.6/dist-packages/TracMercurialChangesetPlugin-0.4-py2.6.egg
TracPaste 	0.2.1 	/usr/local/lib/python2.6/dist-packages/TracPaste-0.2.1-py2.6.egg
TracPyDotOrgTheme 	2.0 	/usr/local/lib/python2.6/dist-packages/TracPyDotOrgTheme-2.0-py2.6.egg
TracThemeEngine 	2.0.1 	/usr/local/lib/python2.6/dist-packages/TracThemeEngine-2.0.1-py2.6.egg
TracXMLRPC 	1.1.0-r9262 	/usr/local/lib/python2.6/dist-packages/TracXMLRPC-1.1.0_r9262-py2.6.egg

TracGuide — The Trac User and Administration Guide

Attachments (2)

9840-rev-log-r10416.patch (1.6 KB ) - added by Remy Blank 13 years ago.
Fix history generation.
9840-hg-node-history-r9953.patch (1.6 KB ) - added by Remy Blank 13 years ago.
Fix node.get_history() in mercurial-plugin-0.12.

Download all attachments as: .zip

Change History (5)

comment:1 by Remy Blank, 13 years ago

Milestone: 0.12.2
Owner: set to Remy Blank

This seems to be related to using Mercurial. Let's see: r155:157/rblank

Right, same crash here. Scheduling for 0.12.2 if it's an easy fix, otherwise I'll push it back.

by Remy Blank, 13 years ago

Attachment: 9840-rev-log-r10416.patch added

Fix history generation.

by Remy Blank, 13 years ago

Fix node.get_history() in mercurial-plugin-0.12.

comment:2 by Remy Blank, 13 years ago

Keywords: review added

9840-rev-log-r10416.patch (hopefully) fixes the revision log history generation for VCs without linear history. This in turn has revealed a bug in the Mercurial plugin, where node.get_history() doesn't take the limit parameter into account, which breaks history generation. This is fixed by 9840-hg-node-history-r9953.patch.

I'm not so familiar with that part of the code, so a review would be welcome.

comment:3 by Remy Blank, 13 years ago

Resolution: fixed
Status: newclosed

9840-hg-node-history-r9953.patch was applied on mercurial-plugin-0.12 in [10427], and 9840-rev-log-r10416.patch in [10429].

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain Remy Blank.
The resolution will be deleted. Next status will be 'reopened'.
to The owner will be changed from Remy Blank to the specified user.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.