[MERGE][Bug #116143] commit raises UnicodeError (traceback) if LANG is incorrect
Daniel Watkins
D.M.Watkins at warwick.ac.uk
Tue Aug 21 13:34:49 BST 2007
On Thu, 2007-08-09 at 10:54 -0400, Aaron Bentley wrote:
> Is there any reason not to do this as a format string? '""" + message +
> """' is not as clear as '%s' to me.
Absolutely none.
--
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-20070821123242-\
# 2z9w63aqc3p0s089
# target_branch: file:///home/daniel/devel/bzr/bzr.dev/
# testament_sha1: 72b488ccdcd2045989c6d45268b54007d9e66d0b
# timestamp: 2007-08-21 14:33:02 +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:32:42 +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
@@ -222,6 +229,7 @@
* Windows standalone installer show link to registration survey
when installation finished. (Alexander Belchenko)
+>>>>>>> MERGE-SOURCE
LIBRARY API BREAKS:
* Deprecated dictionary ``bzrlib.option.SHORT_OPTIONS`` removed.
=== 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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
tn/i7kinChIFCcAnIA==
-------------- 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/180a5895/attachment-0001.pgp
More information about the bazaar
mailing list