[MERGE][Bug #116143] commit raises UnicodeError (traceback) if LANG is incorrect
Daniel Watkins
D.M.Watkins at warwick.ac.uk
Tue Aug 21 13:57:38 BST 2007
Gah, left a conflict marker in. This should be a clean bundle.
--
Daniel Watkins (Odd_Bloke) <D.M.Watkins at warwick.ac.uk>
University of Warwick Christian Focus President
University of Warwick Computing Society WUGLUG Liaison Officer
-------------- next part --------------
# Bazaar merge directive format 2 (Bazaar 0.19)
# revision_id: d.m.watkins at warwick.ac.uk-20070821125537-\
# kmoystprykftt5th
# target_branch: file:///home/daniel/devel/bzr/bzr.dev/
# testament_sha1: 7fca9766edfb6d2be26fc168b84ccd4d68f5149b
# timestamp: 2007-08-21 14:55:46 +0200
# base_revision_id: pqm at pqm.ubuntu.com-20070821044713-ttnupbvhlsbwh1he
#
# Begin patch
=== modified file 'NEWS'
--- NEWS 2007-08-21 03:40:50 +0000
+++ NEWS 2007-08-21 12:55:37 +0000
@@ -33,6 +33,10 @@
* get_transport treats an empty possible_transports list the same as a non-
empty one. (Aaron Bentley)
+ * ``bzr commit`` now exits cleanly if a character unsupported by the
+ current encoding is used in the commit message. (Daniel Watkins,
+ #116143)
+
IMPROVEMENTS:
* ``pull`` and ``merge`` are much faster at installing bundle format 4.
@@ -44,6 +48,9 @@
* ``send`` now sends the directive as an attachment by default.
(Aaron Bentley, Luk?? Lalinsk?, Alexander Belchenko)
+ * Parameters passed on the command line are checked to ensure they are
+ supported by the encoding in use. (Daniel Watkins)
+
API BREAKS:
* ``Branch.append_revision`` is removed altogether; please use
=== modified file 'bzrlib/commands.py'
--- bzrlib/commands.py 2007-08-15 04:33:34 +0000
+++ bzrlib/commands.py 2007-08-21 12:32:42 +0000
@@ -770,7 +770,11 @@
import bzrlib.ui
from bzrlib.ui.text import TextUIFactory
bzrlib.ui.ui_factory = TextUIFactory()
- argv = [a.decode(bzrlib.user_encoding) for a in argv[1:]]
+ try:
+ argv = [a.decode(bzrlib.user_encoding) for a in argv[1:]]
+ except UnicodeDecodeError:
+ raise errors.BzrError(("Parameter '%r' is unsupported by the current "
+ "encoding." % a))
ret = run_bzr_catch_errors(argv)
trace.mutter("return code %d", ret)
return ret
=== modified file 'bzrlib/errors.py'
--- bzrlib/errors.py 2007-08-21 02:46:21 +0000
+++ bzrlib/errors.py 2007-08-21 12:32:42 +0000
@@ -950,6 +950,12 @@
BzrError.__init__(self, files=files, files_str=files_str)
+class BadCommitMessageEncoding(BzrError):
+
+ _fmt = 'The specified commit message contains characters unsupported by '\
+ 'the current encoding.'
+
+
class UpgradeReadonly(BzrError):
_fmt = "Upgrade URL cannot work with readonly URLs."
=== modified file 'bzrlib/msgeditor.py'
--- bzrlib/msgeditor.py 2007-04-30 19:52:44 +0000
+++ bzrlib/msgeditor.py 2007-08-07 11:38:26 +0000
@@ -25,7 +25,7 @@
import bzrlib
import bzrlib.config as config
-from bzrlib.errors import BzrError
+from bzrlib.errors import BzrError, BadCommitMessageEncoding
from bzrlib.trace import warning, mutter
@@ -113,24 +113,28 @@
# codecs.open() ALWAYS opens file in binary mode but we need text mode
# 'rU' mode useful when bzr.exe used on Cygwin (bialix 20070430)
f = file(msgfilename, 'rU')
- for line in codecs.getreader(bzrlib.user_encoding)(f):
- stripped_line = line.strip()
- # strip empty line before the log message starts
- if not started:
+ try:
+ for line in codecs.getreader(bzrlib.user_encoding)(f):
+ stripped_line = line.strip()
+ # strip empty line before the log message starts
+ if not started:
+ if stripped_line != "":
+ started = True
+ else:
+ continue
+ # check for the ignore line only if there
+ # is additional information at the end
+ if hasinfo and stripped_line == ignoreline:
+ break
+ nlines += 1
+ # keep track of the last line that had some content
if stripped_line != "":
- started = True
- else:
- continue
- # check for the ignore line only if there
- # is additional information at the end
- if hasinfo and stripped_line == ignoreline:
- break
- nlines += 1
- # keep track of the last line that had some content
- if stripped_line != "":
- lastline = nlines
- msg.append(line)
- f.close()
+ lastline = nlines
+ msg.append(line)
+ except UnicodeDecodeError:
+ raise BadCommitMessageEncoding()
+ finally:
+ f.close()
if len(msg) == 0:
return ""
=== modified file 'bzrlib/tests/blackbox/test_commit.py'
--- bzrlib/tests/blackbox/test_commit.py 2007-08-07 14:57:35 +0000
+++ bzrlib/tests/blackbox/test_commit.py 2007-08-21 12:32:42 +0000
@@ -224,6 +224,15 @@
self.run_bzr('add foo.c')
self.run_bzr('commit -m ""', retcode=3)
+ def test_unsupported_encoding_commit_message(self):
+ tree = self.make_branch_and_tree('.')
+ self.build_tree_contents([('foo.c', 'int main() {}')])
+ tree.add('foo.c')
+ out,err = self.run_bzr_subprocess('commit -m "\xff"', retcode=1,
+ env_changes={'LANG': 'C'})
+ self.assertContainsRe(err, r'bzrlib.errors.BzrError: Parameter.*is '
+ 'unsupported by the current encoding.')
+
def test_other_branch_commit(self):
# this branch is to ensure consistent behaviour, whether we're run
# inside a branch, or not.
=== modified file 'bzrlib/tests/test_msgeditor.py'
--- bzrlib/tests/test_msgeditor.py 2007-05-01 09:09:18 +0000
+++ bzrlib/tests/test_msgeditor.py 2007-08-21 12:28:01 +0000
@@ -26,6 +26,11 @@
from bzrlib.tests import TestCaseWithTransport, TestSkipped
from bzrlib.trace import mutter
+from bzrlib import (
+ osutils,
+ errors
+ )
+
class MsgEditorTest(TestCaseWithTransport):
@@ -80,7 +85,7 @@
self.assertEqual(True, bzrlib.msgeditor._run_editor(''),
'Unable to run dummy fake editor')
- def make_fake_editor(self):
+ def make_fake_editor(self, message='test message from fed\\n'):
"""Set up environment so that an editor will be a known script.
Sets up BZR_EDITOR so that if an editor is spawned it will run a
@@ -89,6 +94,7 @@
f = file('fed.py', 'wb')
f.write('#!%s\n' % sys.executable)
f.write("""\
+# coding=utf-8
import sys
if len(sys.argv) == 2:
fn = sys.argv[1]
@@ -96,10 +102,10 @@
s = f.read()
f.close()
f = file(fn, 'wb')
- f.write('test message from fed\\n')
+ f.write('%s')
f.write(s)
f.close()
-""")
+""" % (message, ))
f.close()
if sys.platform == "win32":
# [win32] make batch file and set BZR_EDITOR
@@ -210,3 +216,14 @@
self.assertNotEqual(None, msgfilename)
self.assertFalse(hasinfo)
self.assertFileEqual('', msgfilename)
+
+ def test_unsupported_encoding_commit_message(self):
+ old_env = osutils.set_or_unset_env('LANG', 'C')
+ try:
+ self.make_fake_editor(message='\xff')
+
+ working_tree = self.make_uncommitted_tree()
+ self.assertRaises(errors.BadCommitMessageEncoding,
+ bzrlib.msgeditor.edit_commit_message, '')
+ finally:
+ osutils.set_or_unset_env('LANG', old_env)
# Begin bundle
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : https://lists.ubuntu.com/archives/bazaar/attachments/20070821/3a935cf0/attachment.pgp
More information about the bazaar
mailing list