[MERGE][Bug #129791] Error output is sometimes malformed

Daniel Watkins D.M.Watkins at warwick.ac.uk
Thu Aug 23 15:23:21 BST 2007


Attached is a bundle which adds quotes around filenames when at the end
of a sentence in an error (to avoid the current directory being referred
to as ..).

-- 
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.90)
# revision_id: d.m.watkins at warwick.ac.uk-20070823141048-\
#   hlyyibw24f34voen
# target_branch: file:///home/daniel/devel/bzr/bzr.dev/
# testament_sha1: 8ff2535c6459c95c3492466d6f457a7da0881704
# timestamp: 2007-08-23 16:21:00 +0200
# base_revision_id: pqm at pqm.ubuntu.com-20070823005013-ada9x55rc31yiwou
# 
# Begin patch
=== modified file 'bzrlib/errors.py'
--- bzrlib/errors.py	2007-08-22 22:31:12 +0000
+++ bzrlib/errors.py	2007-08-23 14:10:31 +0000
@@ -229,7 +229,7 @@
 
 class InvalidRevisionId(BzrError):
 
-    _fmt = "Invalid revision-id {%(revision_id)s} in %(branch)s"
+    _fmt = "Invalid revision-id \"{%(revision_id)s}\" in \"%(branch)s\""
 
     def __init__(self, revision_id, branch):
         # branch can be any string or object with __str__ defined
@@ -239,7 +239,7 @@
 
 class ReservedId(BzrError):
 
-    _fmt = "Reserved revision-id {%(revision_id)s}"
+    _fmt = "Reserved revision-id \"{%(revision_id)s}\""
 
     def __init__(self, revision_id):
         self.revision_id = revision_id
@@ -256,7 +256,7 @@
 
 class NoSuchId(BzrError):
 
-    _fmt = "The file id %(file_id)s is not present in the tree %(tree)s."
+    _fmt = "The file id \"%(file_id)s\" is not present in the tree \"%(tree)s\"."
     
     def __init__(self, tree, file_id):
         BzrError.__init__(self)
@@ -266,8 +266,8 @@
 
 class NoSuchIdInRepository(NoSuchId):
 
-    _fmt = ("The file id %(file_id)r is not present in the repository"
-            " %(repository)r")
+    _fmt = ("The file id \"%(file_id)r\" is not present in the repository"
+            " \"%(repository)r\"")
 
     def __init__(self, repository, file_id):
         BzrError.__init__(self, repository=repository, file_id=file_id)
@@ -286,7 +286,7 @@
 
 class NoWorkingTree(BzrError):
 
-    _fmt = "No WorkingTree exists for %(base)s."
+    _fmt = "No WorkingTree exists for \"%(base)s\"."
     
     def __init__(self, base):
         BzrError.__init__(self)
@@ -308,7 +308,7 @@
 
 class WorkingTreeAlreadyPopulated(BzrError):
 
-    _fmt = """Working tree already populated in %(base)s"""
+    _fmt = """Working tree already populated in \"%(base)s\""""
 
     internal_error = True
 
@@ -468,17 +468,17 @@
 
 class NotADirectory(PathError):
 
-    _fmt = "%(path)r is not a directory %(extra)s"
+    _fmt = "\"%(path)r\" is not a directory %(extra)s"
 
 
 class NotInWorkingDirectory(PathError):
 
-    _fmt = "%(path)r is not in the working directory %(extra)s"
+    _fmt = "\"%(path)r\" is not in the working directory %(extra)s"
 
 
 class DirectoryNotEmpty(PathError):
 
-    _fmt = "Directory not empty: %(path)r%(extra)s"
+    _fmt = "Directory not empty: \"%(path)r\"%(extra)s"
 
 
 class ReadingCompleted(BzrError):
@@ -495,22 +495,22 @@
 
 class ResourceBusy(PathError):
 
-    _fmt = "Device or resource busy: %(path)r%(extra)s"
+    _fmt = "Device or resource busy: \"%(path)r\"%(extra)s"
 
 
 class PermissionDenied(PathError):
 
-    _fmt = "Permission denied: %(path)r%(extra)s"
+    _fmt = "Permission denied: \"%(path)r\"%(extra)s"
 
 
 class InvalidURL(PathError):
 
-    _fmt = "Invalid url supplied to transport: %(path)r%(extra)s"
+    _fmt = "Invalid url supplied to transport: \"%(path)r\"%(extra)s"
 
 
 class InvalidURLJoin(PathError):
 
-    _fmt = "Invalid URL join request: %(args)s%(extra)s"
+    _fmt = "Invalid URL join request: \"%(args)s\"%(extra)s"
 
     def __init__(self, msg, base, args):
         PathError.__init__(self, base, msg)
@@ -529,7 +529,7 @@
 
 class UnsupportedProtocol(PathError):
 
-    _fmt = 'Unsupported protocol for url "%(path)s"%(extra)s'
+    _fmt = 'Unsupported protocol for url \"%(path)s\"%(extra)s'
 
     def __init__(self, url, extra):
         PathError.__init__(self, url, extra=extra)
@@ -543,7 +543,7 @@
 class ShortReadvError(PathError):
 
     _fmt = ("readv() read %(actual)s bytes rather than %(length)s bytes"
-            " at %(offset)s for %(path)s%(extra)s")
+            " at %(offset)s for \"%(path)s\"%(extra)s")
 
     internal_error = True
 
@@ -556,7 +556,7 @@
 
 class PathNotChild(PathError):
 
-    _fmt = "Path %(path)r is not a child of path %(base)r%(extra)s"
+    _fmt = "Path \"%(path)r\" is not a child of path \"%(base)r\"%(extra)s"
 
     internal_error = True
 
@@ -572,7 +572,7 @@
 
 class InvalidNormalization(PathError):
 
-    _fmt = "Path %(path)r is not unicode normalized"
+    _fmt = "Path \"%(path)r\" is not unicode normalized"
 
 
 # TODO: This is given a URL; we try to unescape it but doing that from inside
@@ -580,7 +580,7 @@
 # TODO: Probably this behavior of should be a common superclass 
 class NotBranchError(PathError):
 
-    _fmt = "Not a branch: %(path)s"
+    _fmt = "Not a branch: \"%(path)s\"."
 
     def __init__(self, path):
        import bzrlib.urlutils as urlutils
@@ -589,7 +589,7 @@
 
 class NoSubmitBranch(PathError):
 
-    _fmt = 'No submit branch available for branch "%(path)s"'
+    _fmt = 'No submit branch available for branch \"%(path)s\"'
 
     def __init__(self, branch):
        import bzrlib.urlutils as urlutils
@@ -598,19 +598,19 @@
 
 class AlreadyBranchError(PathError):
 
-    _fmt = "Already a branch: %(path)s."
+    _fmt = "Already a branch: \"%(path)s\"."
 
 
 class BranchExistsWithoutWorkingTree(PathError):
 
     _fmt = "Directory contains a branch, but no working tree \
-(use bzr checkout if you wish to build a working tree): %(path)s"
+(use bzr checkout if you wish to build a working tree): \"%(path)s\""
 
 
 class AtomicFileAlreadyClosed(PathError):
 
     _fmt = ("'%(function)s' called on an AtomicFile after it was closed:"
-            " %(path)s")
+            " \"%(path)s\"")
 
     def __init__(self, path, function):
         PathError.__init__(self, path=path, extra=None)
@@ -619,8 +619,8 @@
 
 class InaccessibleParent(PathError):
 
-    _fmt = ("Parent not accessible given base %(base)s and"
-            " relative path %(path)s")
+    _fmt = ("Parent not accessible given base \"%(base)s\" and"
+            " relative path \"%(path)s\"")
 
     def __init__(self, path, base):
         PathError.__init__(self, path)
@@ -629,7 +629,7 @@
 
 class NoRepositoryPresent(BzrError):
 
-    _fmt = "No repository present: %(path)r"
+    _fmt = "No repository present: \"%(path)r\""
     def __init__(self, bzrdir):
         BzrError.__init__(self)
         self.path = bzrdir.transport.clone('..').base
@@ -637,7 +637,7 @@
 
 class FileInWrongBranch(BzrError):
 
-    _fmt = "File %(path)s in not in branch %(branch_base)s."
+    _fmt = "File \"%(path)s\" in not in branch \"%(branch_base)s\"."
 
     def __init__(self, branch, path):
         BzrError.__init__(self)
@@ -668,8 +668,8 @@
 
 class IncompatibleRepositories(BzrError):
 
-    _fmt = "Repository %(target)s is not compatible with repository"\
-        " %(source)s"
+    _fmt = "Repository \"%(target)s\" is not compatible with repository"\
+        " \"%(source)s\""
 
     def __init__(self, source, target):
         BzrError.__init__(self, target=target, source=source)
@@ -687,7 +687,7 @@
 class AlreadyVersionedError(BzrError):
     """Used when a path is expected not to be versioned, but it is."""
 
-    _fmt = "%(context_info)s%(path)s is already versioned"
+    _fmt = "%(context_info)s%(path)s is already versioned."
 
     def __init__(self, path, context_info=None):
         """Construct a new AlreadyVersionedError.
@@ -708,7 +708,7 @@
 class NotVersionedError(BzrError):
     """Used when a path is expected to be versioned, but it is not."""
 
-    _fmt = "%(context_info)s%(path)s is not versioned"
+    _fmt = "%(context_info)s%(path)s is not versioned."
 
     def __init__(self, path, context_info=None):
         """Construct a new NotVersionedError.
@@ -767,7 +767,7 @@
 
 class ForbiddenControlFileError(BzrError):
 
-    _fmt = "Cannot operate on %(filename)s because it is a control file"
+    _fmt = "Cannot operate on \"%(filename)s\" because it is a control file"
 
 
 class LockError(BzrError):
@@ -870,7 +870,7 @@
 
 class LockContention(LockError):
 
-    _fmt = "Could not acquire lock %(lock)s"
+    _fmt = "Could not acquire lock \"%(lock)s\""
     # TODO: show full url for lock, combining the transport and relative
     # bits?
 
@@ -1005,7 +1005,7 @@
 class NoSuchRevisionInTree(NoSuchRevision):
     """When using Tree.revision_tree, and the revision is not accessible."""
     
-    _fmt = "The revision id %(revision_id)s is not present in the tree %(tree)s."
+    _fmt = "The revision id %(revision_id)s is not present in the tree \"%(tree)s\"."
 
     def __init__(self, tree, revision_id):
         BzrError.__init__(self)
@@ -1016,7 +1016,7 @@
 class InvalidRevisionSpec(BzrError):
 
     _fmt = ("Requested revision: %(spec)r does not exist in branch:"
-            " %(branch)s%(extra)s")
+            " \"%(branch)s\"%(extra)s")
 
     def __init__(self, spec, branch, extra=None):
         BzrError.__init__(self, branch=branch, spec=spec)
@@ -1143,8 +1143,8 @@
 
 class BoundBranchOutOfDate(BzrError):
 
-    _fmt = ("Bound branch %(branch)s is out of date"
-            " with master branch %(master)s.")
+    _fmt = ("Bound branch \"%(branch)s\" is out of date"
+            " with master branch \"%(master)s\".")
 
     def __init__(self, branch, master):
         BzrError.__init__(self)
@@ -1154,8 +1154,8 @@
         
 class CommitToDoubleBoundBranch(BzrError):
 
-    _fmt = ("Cannot commit to branch %(branch)s."
-            " It is bound to %(master)s, which is bound to %(remote)s.")
+    _fmt = ("Cannot commit to branch \"%(branch)s\"."
+            " It is bound to \"%(master)s\", which is bound to \"%(remote)s\".")
 
     def __init__(self, branch, master, remote):
         BzrError.__init__(self)
@@ -1166,7 +1166,7 @@
 
 class OverwriteBoundBranch(BzrError):
 
-    _fmt = "Cannot pull --overwrite to a branch which is bound %(branch)s"
+    _fmt = "Cannot pull --overwrite to a branch which is bound \"%(branch)s\""
 
     def __init__(self, branch):
         BzrError.__init__(self)
@@ -1265,7 +1265,7 @@
 
 class RevisionNotPresent(VersionedFileError):
     
-    _fmt = "Revision {%(revision_id)s} not present in %(file_id)s."
+    _fmt = "Revision {%(revision_id)s} not present in \"%(file_id)s\"."
 
     def __init__(self, revision_id, file_id):
         VersionedFileError.__init__(self)
@@ -1275,7 +1275,7 @@
 
 class RevisionAlreadyPresent(VersionedFileError):
     
-    _fmt = "Revision {%(revision_id)s} already present in %(file_id)s."
+    _fmt = "Revision {%(revision_id)s} already present in \"%(file_id)s\"."
 
     def __init__(self, revision_id, file_id):
         VersionedFileError.__init__(self)
@@ -1297,7 +1297,7 @@
 
 class KnitHeaderError(KnitError):
 
-    _fmt = "Knit header error: %(badline)r unexpected for file %(filename)s"
+    _fmt = "Knit header error: %(badline)r unexpected for file \"%(filename)s\"."
 
     def __init__(self, badline, filename):
         KnitError.__init__(self)
@@ -1527,7 +1527,7 @@
 
 class SigningFailed(BzrError):
 
-    _fmt = "Failed to gpg sign data with command %(command_line)r"
+    _fmt = "Failed to gpg sign data with command \"%(command_line)r\""
 
     def __init__(self, command_line):
         BzrError.__init__(self, command_line=command_line)
@@ -1607,7 +1607,7 @@
 
 class NoBundleFound(BzrError):
 
-    _fmt = "No bundle was found in %(filename)s"
+    _fmt = "No bundle was found in \"%(filename)s\"."
 
     def __init__(self, filename):
         BzrError.__init__(self)
@@ -2176,7 +2176,8 @@
 
 class BadSubsumeSource(BzrError):
 
-    _fmt = """Can't subsume %(other_tree)s into %(tree)s.  %(reason)s"""
+    _fmt = "Can't subsume \"%(other_tree)s\" into \"%(tree)s\"." \
+           "%(reason)s"
 
     def __init__(self, tree, other_tree, reason):
         self.tree = tree
@@ -2186,7 +2187,7 @@
 
 class SubsumeTargetNeedsUpgrade(BzrError):
     
-    _fmt = """Subsume target %(other_tree)s needs to be upgraded."""
+    _fmt = """Subsume target \"%(other_tree)s\" needs to be upgraded."""
 
     def __init__(self, other_tree):
         self.other_tree = other_tree
@@ -2194,7 +2195,8 @@
 
 class BadReferenceTarget(BzrError):
 
-    _fmt = "Can't add reference to %(other_tree)s into %(tree)s.  %(reason)s"
+    _fmt = "Can't add reference to \"%(other_tree)s into %(tree)s\"." \
+           "%(reason)s"
 
     internal_error = True
 

=== modified file 'bzrlib/tests/blackbox/test_annotate.py'
--- bzrlib/tests/blackbox/test_annotate.py	2007-07-04 08:46:22 +0000
+++ bzrlib/tests/blackbox/test_annotate.py	2007-08-23 14:10:48 +0000
@@ -166,4 +166,4 @@
         os.chdir('tree')
         out, err = self.run_bzr("annotate doesnotexist", retcode=3)
         self.assertEqual('', out)
-        self.assertEqual("bzr: ERROR: doesnotexist is not versioned\n", err)
+        self.assertEqual("bzr: ERROR: doesnotexist is not versioned.\n", err)

=== modified file 'bzrlib/tests/blackbox/test_info.py'
--- bzrlib/tests/blackbox/test_info.py	2007-08-14 11:17:54 +0000
+++ bzrlib/tests/blackbox/test_info.py	2007-08-23 14:10:48 +0000
@@ -41,7 +41,7 @@
             location = "/i/do/not/exist/"
         out, err = self.run_bzr('info '+location, retcode=3)
         self.assertEqual(out, '')
-        self.assertEqual(err, 'bzr: ERROR: Not a branch: %s\n' % location)
+        self.assertEqual(err, 'bzr: ERROR: Not a branch: "%s".\n' % location)
 
     def test_info_standalone(self):
         transport = self.get_transport()

=== modified file 'bzrlib/tests/blackbox/test_mv.py'
--- bzrlib/tests/blackbox/test_mv.py	2007-06-26 20:32:49 +0000
+++ bzrlib/tests/blackbox/test_mv.py	2007-08-23 14:10:48 +0000
@@ -65,13 +65,13 @@
         self.build_tree(['unversioned.txt'])
         self.run_bzr_error(
             ["^bzr: ERROR: Could not rename unversioned.txt => elsewhere."
-             " .*unversioned.txt is not versioned$"],
+             " .*unversioned.txt is not versioned\.$"],
             'mv unversioned.txt elsewhere')
 
     def test_mv_nonexisting(self):
         self.run_bzr_error(
             ["^bzr: ERROR: Could not rename doesnotexist => somewhereelse."
-             " .*doesnotexist is not versioned$"],
+             " .*doesnotexist is not versioned\.$"],
             'mv doesnotexist somewhereelse')
 
     def test_mv_unqualified(self):
@@ -83,12 +83,12 @@
         tree.add(['test.txt'])
 
         self.run_bzr_error(
-            ["^bzr: ERROR: Could not move to sub1: sub1 is not versioned$"],
+            ["^bzr: ERROR: Could not move to sub1: sub1 is not versioned\.$"],
             'mv test.txt sub1')
 
         self.run_bzr_error(
             ["^bzr: ERROR: Could not move test.txt => .*hello.txt: "
-             "sub1 is not versioned$"],
+             "sub1 is not versioned\.$"],
             'mv test.txt sub1/hello.txt')
         
     def test_mv_dirs(self):
@@ -177,7 +177,7 @@
         os.remove('b')
         osutils.rename('a', 'b')
         self.run_bzr_error(
-            ["^bzr: ERROR: Could not move a => b. b is already versioned$"],
+            ["^bzr: ERROR: Could not move a => b. b is already versioned\.$"],
             'mv a b')
         #check that nothing changed
         self.failIfExists('a')
@@ -213,7 +213,7 @@
 
         osutils.rename('a', 'sub/a')
         self.run_bzr_error(
-            ["^bzr: ERROR: Could not move a => a: sub is not versioned$"],
+            ["^bzr: ERROR: Could not move a => a: sub is not versioned\.$"],
             'mv a sub/a')
         self.failIfExists('a')
         self.failUnlessExists('sub/a')
@@ -249,7 +249,7 @@
 
         osutils.rename('a1', 'sub/a1')
         self.run_bzr_error(
-            ["^bzr: ERROR: Could not move to sub. sub is not versioned$"],
+            ["^bzr: ERROR: Could not move to sub. sub is not versioned\.$"],
             'mv a1 a2 sub')
         self.failIfExists('a1')
         self.failUnlessExists('sub/a1')

=== modified file 'bzrlib/tests/blackbox/test_outside_wt.py'
--- bzrlib/tests/blackbox/test_outside_wt.py	2007-06-27 19:13:50 +0000
+++ bzrlib/tests/blackbox/test_outside_wt.py	2007-08-23 14:10:48 +0000
@@ -32,14 +32,14 @@
     def test_cwd_log(self):
         os.chdir(tempfile.mkdtemp())
         out, err = self.run_bzr('log', retcode=3)
-        self.assertEqual(u'bzr: ERROR: Not a branch: %s/\n' % (getcwd(),),
+        self.assertEqual(u'bzr: ERROR: Not a branch: "%s/".\n' % (getcwd(),),
                          err)
 
     def test_url_log(self):
         url = self.get_readonly_url() + 'subdir/'
         out, err = self.run_bzr(['log', url], retcode=3)
         self.assertEqual(u'bzr: ERROR: Not a branch:'
-                         u' %s\n' % url, err)
+                         u' "%s".\n' % url, err)
 
     def test_diff_ouside_tree(self):
         os.chdir(tempfile.mkdtemp())
@@ -51,22 +51,22 @@
         # -r X..Y
         out, err = self.run_bzr('diff -r revno:2:branch2..revno:1', retcode=3)
         self.assertEquals('', out)
-        self.assertEqual(u'bzr: ERROR: Not a branch: %s/\n' % (getcwd(),),
+        self.assertEqual(u'bzr: ERROR: Not a branch: "%s/".\n' % (getcwd(),),
                          err)
         # -r X
         out, err = self.run_bzr('diff -r revno:2:branch2', retcode=3)
         self.assertEquals('', out)
-        self.assertEqual(u'bzr: ERROR: Not a branch: %s/\n' % (getcwd(),),
+        self.assertEqual(u'bzr: ERROR: Not a branch: "%s/".\n' % (getcwd(),),
                          err)
         # -r X..
         out, err = self.run_bzr('diff -r revno:2:branch2..', retcode=3)
         self.assertEquals('', out)
-        self.assertEqual(u'bzr: ERROR: Not a branch: %s/\n' % (getcwd(),),
+        self.assertEqual(u'bzr: ERROR: Not a branch: "%s/".\n' % (getcwd(),),
                          err)
         # no -r at all.
         out, err = self.run_bzr('diff', retcode=3)
         self.assertEquals('', out)
-        self.assertEqual(u'bzr: ERROR: Not a branch: %s/\n' % (getcwd(),),
+        self.assertEqual(u'bzr: ERROR: Not a branch: "%s/".\n' % (getcwd(),),
                          err)
 
 

=== modified file 'bzrlib/tests/test_errors.py'
--- bzrlib/tests/test_errors.py	2007-07-20 03:20:20 +0000
+++ bzrlib/tests/test_errors.py	2007-08-23 14:10:48 +0000
@@ -84,7 +84,7 @@
     def test_knit_header_error(self):
         error = errors.KnitHeaderError('line foo\n', 'path/to/file')
         self.assertEqual("Knit header error: 'line foo\\n' unexpected"
-                         " for file path/to/file", str(error))
+                         " for file \"path/to/file\".", str(error))
 
     def test_knit_index_unknown_method(self):
         error = errors.KnitIndexUnknownMethod('http://host/foo.kndx',
@@ -118,14 +118,14 @@
 
     def test_no_such_id(self):
         error = errors.NoSuchId("atree", "anid")
-        self.assertEqualDiff("The file id anid is not present in the tree "
-            "atree.",
+        self.assertEqualDiff("The file id \"anid\" is not present in the tree "
+            "\"atree\".",
             str(error))
 
     def test_no_such_revision_in_tree(self):
         error = errors.NoSuchRevisionInTree("atree", "anid")
         self.assertEqualDiff("The revision id anid is not present in the tree "
-            "atree.",
+            "\"atree\".",
             str(error))
         self.assertIsInstance(error, errors.NoSuchRevision)
 

=== modified file 'bzrlib/tests/test_trace.py'
--- bzrlib/tests/test_trace.py	2007-08-20 03:43:40 +0000
+++ bzrlib/tests/test_trace.py	2007-08-23 14:10:48 +0000
@@ -83,7 +83,7 @@
             pass
         msg = _format_exception()
         self.assertTrue(len(msg) > 0)
-        self.assertEqualDiff(msg, 'bzr: ERROR: Not a branch: wibble\n')
+        self.assertEqualDiff(msg, 'bzr: ERROR: Not a branch: \"wibble\".\n')
 
     def test_trace_unicode(self):
         """Write Unicode to trace log"""

# 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/20070823/21df9429/attachment-0001.pgp 


More information about the bazaar mailing list