Edgewall Software
Modify

Opened 12 years ago

#788 new defect

[PATCH] Code coverage chart fails with PostgreSQL backend

Reported by: eblot Owned by:
Priority: major Milestone: 0.6.2
Component: Build master Version: 0.6
Keywords: chart coverage Cc:
Operating System: BSD

Description

JSON generated data from http://server/<project>/build/<config>/chart/coverage cannot be parsed, as Bitten triggers an exception with PostgreSQL backend:

2012-10-19 23:27:12,949 Trac[main] ERROR: Exception caught while post-processing request: 
Traceback (most recent call last):
  File "/local/engine/trac/trac/web/main.py", line 229, in dispatch
    self._post_process_request(req)
  File "/local/engine/trac/trac/web/main.py", line 321, in _post_process_request
    f.post_process_request(req, *(None,)*extra_arg_count)
  File "build/bdist.linux-x86_64/egg/revtree/web_ui.py", line 225, in post_process_request
    if req.perm.has_permission('REVTREE_VIEW'):
  File "/local/engine/trac/trac/web/api.py", line 303, in __getattr__
    value = self.callbacks[name](self)
  File "/local/engine/trac/trac/web/main.py", line 247, in _get_perm
    if isinstance(req.session, FakeSession):
  File "/local/engine/trac/trac/web/api.py", line 303, in __getattr__
    value = self.callbacks[name](self)
  File "/local/engine/trac/trac/web/main.py", line 254, in _get_session
    return Session(self.env, req)
  File "/local/engine/trac/trac/web/session.py", line 198, in __init__
    self.get_session(req.authname, authenticated=True)
  File "/local/engine/trac/trac/web/session.py", line 214, in get_session
    super(Session, self).get_session(sid, authenticated)
  File "/local/engine/trac/trac/web/session.py", line 71, in get_session
    """, (sid, int(authenticated))):
  File "/local/engine/trac/trac/db/util.py", line 124, in execute
    cursor.execute(query, params)
  File "/local/engine/trac/trac/db/util.py", line 68, in execute
    return self.cursor.execute(sql_escape_percent(sql), args)
InternalError: current transaction is aborted, commands ignored until end of transaction block
InternalError: current transaction is aborted, commands ignored until end of transaction block

This traceback is the consequence of the root cause error, which produces the following traceback:

2012-10-19 23:27:12,950 Trac[main] ERROR: Internal Server Error: 
Traceback (most recent call last):
  File "/local/engine/trac/trac/web/main.py", line 478, in _dispatch_request
    dispatcher.dispatch(req)
  File "/local/engine/trac/trac/web/main.py", line 198, in dispatch
    resp = chosen_handler.process_request(req)
  File "/local/engine/bitten/bitten/web_ui.py", line 801, in process_request
    category)
  File "/local/engine/bitten/bitten/report/coverage.py", line 54, in generate_chart_data
    int(config.max_rev_time(self.env))))
  File "/local/engine/trac/trac/db/util.py", line 68, in execute
    return self.cursor.execute(sql_escape_percent(sql), args)
DataError: invalid input syntax for integer: "5.0"
DataError: invalid input syntax for integer: "5.0"

It seems the generated data contain float values, while cast expect integer. The following patch fixes the issue with PostgreSQL, I have not tested it with any other DB backend.

  • bitten/report/coverage.py

    diff --git a/bitten/report/coverage.py b/bitten/report/coverage.py
    index 006fb01..365ee42 100644
    a b WHERE build.config=%%s AND report.category='coverage' 
    4848GROUP BY build.rev_time, build.rev, build.platform
    4949ORDER BY build.rev_time""" % (db.cast('item_lines.value', 'int'),
    5050                              db.cast('item_lines.value', 'int'),
    51                               db.cast('item_percentage.value', 'int')),
     51                              db.cast('item_percentage.value', 'float')),
    5252                              (config.name,
    5353                               config.min_rev_time(self.env),
    5454                               config.max_rev_time(self.env)))

Attachments (0)

Change History (0)

Add Comment

Modify Ticket

Change Properties
Set your email in Preferences
Action
as new The ticket will remain with no owner.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.