Opened 6 years ago

Last modified 6 years ago

#9743 closed defect

Exception when latest change on referenced ticket is not a comment — at Initial Version

Reported by: ejucovy Owned by: Ryan J Ollos
Priority: normal Component: TracBacksPlugin
Severity: normal Keywords:
Cc: Trac Release: 0.12

Description

If you reference a ticket whose latest modification is not a comment, the plugin will fail with an error. To reproduce:

  1. Create a ticket
  2. Comment on that ticket
  3. Change the ticket's priority from major to minor
  4. Create a second ticket
  5. Comment on the second ticket with a reference to the first ticket

The plugin will fail with a ValueError, because it assumes that the latest changelog entry in t.get_changelog() will always be a comment.

When running against trac trunk, the plugin raises an exception:

File "ve/src/trac/trac/ticket/model.py", line 360, in save_changes
  listener.ticket_changed(self, comment, author, old_values)
File "ve/src/tracbacksplugin/tracbacks/tracbacks.py", line 103, in ticket_changed
  cnum_lastcomment = int(cnum_lastchange[-1])
ValueError: invalid literal for int() with base 10: 'minor'

I haven't tested against earlier versions of Trac to see if it's a new issue. It does seem to be related to #9008 -- and a commenter (http://trac-hacks.org/ticket/9008#comment:1) posted a traceback there, against trac 0.12.2, which is functionally identical to the traceback I'm seeing.

The following patch fixes the problem by filtering the referenced-ticket's changelog to only include comments:

  • tracbacks/tracbacks.py

     
    9595                # by the TicketChangePlugin to identify the comment being
    9696                # edited, so we make sure to add it here.
    9797                cnum_thischange = 1               
    98                 change_log = t.get_changelog()
     98                change_log = [i for i in t.get_changelog() if i[2] == "comment"]
    9999                if change_log != []:
    100100                    lastchange = change_log[-1]
    101101                    cnum_lastchange = lastchange[3].rsplit('.', 1)

Change History (0)

Note: See TracTickets for help on using tickets.