3425: PySVN, UTF-8 file with svn:keywords set raises exception trying to upload diff.
- Fixed
- Review Board
| thom.******@gmai***** (Google Code) (Is this you? Claim this profile.) | |
|
|
|
| July 3, 2014 |
What version are you running?
2.0.1 and master (traceback is from master)
What's the URL of the page containing the problem?
/r/new/
and also posting from rbt post.
What steps will reproduce the problem?
1. Add a SVN repo to reviewboard.
2. In that repo, commit a file with UTF-8 data ("utf8_file.txt"), and a "$Id $" line
3. Also propset svn:keywords "Id" utf8_file.txt
4. Commit the file.
5. Make a change to the file.
6. Post for review.
What is the expected output?
The review is posted.
What do you see instead?
On /r/new/, user gets no indication there was a failure. From rbt, they get
ERROR: Error uploading diff
One or more fields had errors (HTTP 400, API Error 105)
path: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
Your review request still exists, but the diff is not attached.
What operating system are you using? What browser?
Please provide any additional information below.
Traceback (most recent call last):
File "reviewboard/reviewboard/webapi/resources/diff.py", line 292, in create
request.FILES.get('parent_diff_path'))
File "reviewboard/reviewboard/reviews/forms.py", line 116, in create
history)
File "reviewboard/reviewboard/diffviewer/forms.py", line 69, in create
request=self.request)
File "reviewboard/reviewboard/diffviewer/managers.py", line 156, in create_from_upload
save=save)
File "reviewboard/reviewboard/diffviewer/managers.py", line 182, in create_from_data
check_existence=(not parent_diff_file_contents)))
File "reviewboard/reviewboard/diffviewer/managers.py", line 300, in _process_files
request=request))):
File "reviewboard/reviewboard/scmtools/models.py", line 239, in get_file_exists
base_commit_id, request)
File "reviewboard/reviewboard/scmtools/models.py", line 434, in _get_file_exists_uncached
exists = self.get_scmtool().file_exists(path, revision)
File "reviewboard/reviewboard/scmtools/core.py", line 156, in file_exists
self.get_file(path, revision)
File "reviewboard/reviewboard/scmtools/svn/__init__.py", line 117, in get_file
return self.client.get_file(path, revision)
File "reviewboard/reviewboard/scmtools/svn/pysvn.py", line 106, in get_file
return self._do_on_path(self._get_file_data, path, revision)
File "reviewboard/reviewboard/scmtools/svn/pysvn.py", line 72, in _do_on_path
return cb(normpath, normrev)
File "reviewboard/reviewboard/scmtools/svn/pysvn.py", line 100, in _get_file_data
data = self.collapse_keywords(data, keywords[normpath])
File "reviewboard/reviewboard/scmtools/svn/base.py", line 118, in collapse_keywords
repl, data)
File "rb_2.0/lib/python2.7/re.py", line 151, in sub
return _compile(pattern, flags).sub(repl, string, count)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
I see that's fixed, but I got the same error with a non-ascii character in file name/path. I'm using ReviewBoard 2.0.6 on Ubuntu 14.04; Subversion 1.8.10, RBTools 0.6.2 and Python 2.7.9 on Windows Server 2012.
Hmm... Probably not, but now I can only get it on monday...
Hi!
This is the traceback. I just committed a file named "C:\testdir\test - cópy.log" and this appeared:
>>> Error data: {u'fields': {u'path': [u"'ascii' codec can't decode byte 0xef in position 30: ordinal not in range(128)"]}, u'stat': u'fail', u'err': {u'msg': u'One or more fields had errors', u'code': 105}}
Traceback (most recent call last):
File "C:\Python27\Scripts\rbt-script.py", line 9, in <module>
load_entry_point('RBTools==0.6.2', 'console_scripts', 'rbt')()
File "C:\Python27\lib\site-packages\rbtools-0.6.2-py2.7.egg\rbtools\commands\main.py", line 134, in main
command.run_from_argv([RB_MAIN, command_name] + args)
File "C:\Python27\lib\site-packages\rbtools-0.6.2-py2.7.egg\rbtools\commands\__init__.py", line 416, in run_from_argv
exit_code = self.main(*args) or 0
File "C:\Python27\lib\site-packages\rbtools-0.6.2-py2.7.egg\rbtools\commands\post.py", line 784, in main
submit_as=self.options.submit_as)
File "C:\Python27\lib\site-packages\rbtools-0.6.2-py2.7.egg\rbtools\commands\post.py", line 551, in post_request
raise CommandError(u'\n'.join(error_msg))
rbtools.commands.CommandError: Error uploading diff
One or more fields had errors (HTTP 400, API Error 105)
path: 'ascii' codec can't decode byte 0xef in position 30: ordinal not in range(128)
Your review request still exists, but the diff is not attached.
Thanks for your help!!
Sorry! There it is:
2014-09-15 12:25:21,187 - INFO - - Using reviewboard.scmtools.svn.pysvn backend for SVN
2014-09-15 12:25:21,295 - ERROR - None - svn - /api/review-requests/3267/diffs/ - Error uploading new diff: 'ascii' codec can't decode byte 0xef in position 30: ordinal not in range(128)
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.0.6-py2.7.egg/reviewboard/webapi/resources/diff.py", line 292, in create
request.FILES.get('parent_diff_path'))
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.0.6-py2.7.egg/reviewboard/reviews/forms.py", line 116, in create
history)
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.0.6-py2.7.egg/reviewboard/diffviewer/forms.py", line 69, in create
request=self.request)
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.0.6-py2.7.egg/reviewboard/diffviewer/managers.py", line 156, in create_from_upload
save=save)
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.0.6-py2.7.egg/reviewboard/diffviewer/managers.py", line 182, in create_from_data
check_existence=(not parent_diff_file_contents)))
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.0.6-py2.7.egg/reviewboard/diffviewer/managers.py", line 300, in _process_files
request=request))):
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.0.6-py2.7.egg/reviewboard/scmtools/models.py", line 272, in get_file_exists
base_commit_id, request)
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.0.6-py2.7.egg/reviewboard/scmtools/models.py", line 473, in _get_file_exists_uncached
exists = self.get_scmtool().file_exists(path, revision)
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.0.6-py2.7.egg/reviewboard/scmtools/core.py", line 156, in file_exists
self.get_file(path, revision)
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.0.6-py2.7.egg/reviewboard/scmtools/svn/__init__.py", line 117, in get_file
return self.client.get_file(path, revision)
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.0.6-py2.7.egg/reviewboard/scmtools/svn/pysvn.py", line 105, in get_file
return self._do_on_path(self._get_file_data, path, revision)
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.0.6-py2.7.egg/reviewboard/scmtools/svn/pysvn.py", line 77, in _do_on_path
raise FileNotFoundError(path, revision, detail=exc)
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-2.0.6-py2.7.egg/reviewboard/scmtools/errors.py", line 71, in __init__
'revision': revision,
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 30: ordinal not in range(128)
Can't wait! Thank you so much!