﻿id,summary,reporter,owner,description,type,status,priority,component,severity,resolution,keywords,cc,release
5357,UnicodeDecodeError on UTF-8 encoded filenames,spoke,anonymous,"I just try the plugin version 0.11 on trac 0.11.1, 0.11.5 and trunk, and I allways get this error: 

Please, note that trac works fine if using SVN as backend.

{{{
Trac detected an internal error:

ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.
}}}

{{{
Most recent call last:

    * File ""/usr/lib/python2.5/site-packages/Trac-0.12dev_r8263-py2.5.egg/trac/web/main.py"", line 464, in _dispatch_request
      Code fragment:
       459. try:
       460. if not env and env_error:
       461. raise HTTPInternalError(env_error)
       462. try:
       463. dispatcher = RequestDispatcher(env)
       464. dispatcher.dispatch(req)
       465. except RequestDone:
       466. pass
       467. resp = req._response or []
       468.  
       469. except HTTPException, e:
      Local variables:
      Name	Value
      after 	[u' except RequestDone:', u' pass', u' resp = ...
      before 	[u' try:', u' if not env and env_error:', u' raise ...
      dispatcher 	<trac.web.main.RequestDispatcher object at 0x8bb984c>
      e 	ProgrammingError('You must not use 8-bit bytestrings unless you use a ...
      env 	<trac.env.Environment object at 0x875060c>
      env_error 	None
      exc_info 	(<class 'pysqlite2.dbapi2.ProgrammingError'>, ProgrammingError('You must ...
      filename 	'/usr/lib/python2.5/site-packages/Trac-0.12dev_r8263-py2.5.egg/trac/web/mai ...
      frames 	[{'function': '_dispatch_request', 'lines_before': [u' try:', u' ...
      has_admin 	True
      line 	u' dispatcher.dispatch(req)'
      lineno 	463
      message 	u'ProgrammingError: You must not use 8-bit bytestrings unless you use a ...
      req 	<Request ""GET u'/login'"">
      resp 	[]
      tb 	<traceback object at 0x8e09694>
      tb_hide 	None
      traceback 	u'Traceback (most recent call last):\n File ...
    * File ""/usr/lib/python2.5/site-packages/Trac-0.12dev_r8263-py2.5.egg/trac/web/main.py"", line 181, in dispatch
      Code fragment:
       176. if not req.path_info or req.path_info == '/':
       177. chosen_handler = self.default_handler
       178. # pre-process any incoming request, whether a handler
       179. # was found or not
       180. chosen_handler = self._pre_process_request(req,
       181. chosen_handler)
       182. except TracError, e:
       183. raise HTTPInternalError(e)
       184. if not chosen_handler:
       185. if req.path_info.endswith('/'):
       186. # Strip trailing / and redirect
      Local variables:
      Name	Value
      chosen_handler 	<trac.web.auth.LoginModule object at 0x8bb9bac>
      chrome 	<trac.web.chrome.Chrome object at 0x8b6de4c>
      err 	(<class 'pysqlite2.dbapi2.ProgrammingError'>, ProgrammingError('You must ...
      handler 	<trac.web.auth.LoginModule object at 0x8bb9bac>
      req 	<Request ""GET u'/login'"">
      self 	<trac.web.main.RequestDispatcher object at 0x8bb984c>
    * File ""/usr/lib/python2.5/site-packages/Trac-0.12dev_r8263-py2.5.egg/trac/web/main.py"", line 317, in _pre_process_request
      Code fragment:
       312. req.outcookie['trac_form_token']['secure'] = True
       313. return req.outcookie['trac_form_token'].value
       314.  
       315. def _pre_process_request(self, req, chosen_handler):
       316. for filter_ in self.filters:
       317. chosen_handler = filter_.pre_process_request(req, chosen_handler)
       318. return chosen_handler
       319.  
       320. def _post_process_request(self, req, *args):
       321. nbargs = len(args)
       322. resp = args
      Local variables:
      Name	Value
      chosen_handler 	<trac.web.auth.LoginModule object at 0x8bb9bac>
      filter_ 	<trac.versioncontrol.api.RepositoryManager object at 0x8bb9dac>
      req 	<Request ""GET u'/login'"">
      self 	<trac.web.main.RequestDispatcher object at 0x8bb984c>
    * File ""/usr/lib/python2.5/site-packages/Trac-0.12dev_r8263-py2.5.egg/trac/versioncontrol/api.py"", line 86, in pre_process_request
      Code fragment:
        81.  
        82. def pre_process_request(self, req, handler):
        83. from trac.web.chrome import Chrome, add_warning
        84. if handler is not Chrome(self.env):
        85. try:
        86. self.get_repository(req.authname).sync()
        87. except TracError, e:
        88. add_warning(req, _(""Can't synchronize with the repository ""
        89. ""(%(error)s). Look in the Trac log for more ""
        90. ""information."", error=to_unicode(e.message)))
        91.
      Local variables:
      Name	Value
      Chrome 	<class 'trac.web.chrome.Chrome'>
      add_warning 	<function add_warning at 0x8803b54>
      handler 	<trac.web.auth.LoginModule object at 0x8bb9bac>
      req 	<Request ""GET u'/login'"">
      self 	<trac.versioncontrol.api.RepositoryManager object at 0x8bb9dac>
    * File ""/usr/lib/python2.5/site-packages/Trac-0.12dev_r8263-py2.5.egg/trac/versioncontrol/cache.py"", line 213, in sync
      Code fragment:
       208. cursor.execute(""INSERT INTO node_change ""
       209. "" (rev,path,node_type,change_type, ""
       210. "" base_path,base_rev) ""
       211. ""VALUES (%s,%s,%s,%s,%s,%s)"",
       212. (str(next_youngest),
       213. path, kind, action, bpath, brev))
       214.  
       215. # 1.3. iterate (1.1 should always succeed now)
       216. self.youngest = next_youngest
       217. next_youngest = self.repos.next_rev(next_youngest)
       218.  
      Local variables:
      Name	Value
      action 	'A'
      actionmap 	{'edit': 'E', 'add': 'A', 'move': 'M', 'copy': 'C', 'delete': 'D'}
      authz 	<trac.versioncontrol.api.Authorizer object at 0x8d89bac>
      bpath 	''
      brev 	None
      cset 	<tracext.git.git_fs.GitChangeset object at 0x8cf0aac>
      cursor 	<trac.db.util.IterableCursor object at 0x8e3f12c>
      db 	<trac.db.pool.PooledConnection object at 0x8e0984c>
      feedback 	None
      key 	'youngest_rev'
      kind 	'F'
      kindmap 	{'file': 'F', 'dir': 'D'}
      metadata 	{u'youngest_rev': u'', u'repository_dir': u'git:/home/www/git/test/.git'}
      name 	u'youngest_rev'
      next_youngest 	'b4c60abd772d7c8192b8cf3f46d44978eccdc7b0'
      path 	'doc/analysis/Metodolog\xc3\x83\xc2\xada de almacenamiento de datos en el ...
      repos_youngest 	'73f1a95e8d2a161987c16d56cb223e40666ee63b'
      repository_dir 	u'git:/home/www/git/test/.git'
      self 	<tracext.git.git_fs.CachedRepository2 object at 0x8d5a0ec>
      value 	u''
    * File ""/usr/lib/python2.5/site-packages/Trac-0.12dev_r8263-py2.5.egg/trac/db/util.py"", line 59, in execute
      Code fragment:
        54. return self.cursor.execute(sql)
        55. except Exception, e:
        56. self.log.debug('execute exception: %r', e)
        57. raise
        58. if args:
        59. return self.cursor.execute(sql_escape_percent(sql), args)
        60. return self.cursor.execute(sql)
        61.  
        62. def executemany(self, sql, args=None):
        63. if self.log:
        64. self.log.debug('SQL: %r', sql)
      Local variables:
      Name	Value
      args 	('b4c60abd772d7c8192b8cf3f46d44978eccdc7b0', ...
      self 	<trac.db.util.IterableCursor object at 0x8e3f12c>
      sql 	'INSERT INTO node_change (rev,path,node_type,change_type, ...
    * File ""/usr/lib/python2.5/site-packages/Trac-0.12dev_r8263-py2.5.egg/trac/db/sqlite_backend.py"", line 59, in execute
      Code fragment:
        54. raise
        55. def execute(self, sql, args=None):
        56. if args:
        57. sql = sql % (('?',) * len(args))
        58. return self._rollback_on_error(sqlite.Cursor.execute, sql,
        59. args or [])
        60. def executemany(self, sql, args=None):
        61. if args:
        62. sql = sql % (('?',) * len(args[0]))
        63. return self._rollback_on_error(sqlite.Cursor.executemany, sql,
        64. args or [])
      Local variables:
      Name	Value
      args 	('b4c60abd772d7c8192b8cf3f46d44978eccdc7b0', ...
      self 	<trac.db.sqlite_backend.PyFormatCursor object at 0x880a2fc>
      sql 	'INSERT INTO node_change (rev,path,node_type,change_type, ...
    * File ""/usr/lib/python2.5/site-packages/Trac-0.12dev_r8263-py2.5.egg/trac/db/sqlite_backend.py"", line 51, in _rollback_on_error 
}}}",defect,reopened,highest,GitPlugin,blocker,,,xelnor,0.12
