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

Daniel Watkins D.M.Watkins at warwick.ac.uk
Thu Aug 23 19:07:11 BST 2007


On Thu, 2007-08-23 at 10:57 -0400, Aaron Bentley wrote:
> Etc, etc, etc.
The attached should fix these problems.

-- 
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-20070823180253-\
#   5kmviq3cvtw6ttxn
# target_branch: file:///home/daniel/devel/bzr/bzr.dev/
# testament_sha1: 3fb4e370a0304e6ef2782a53da4879730f8051dc
# timestamp: 2007-08-23 20:03:58 +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 18:02:53 +0000
@@ -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)s" 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)s" is not a directory %(extra)s'
 
 
 class NotInWorkingDirectory(PathError):
 
-    _fmt = "%(path)r is not in the working directory %(extra)s"
+    _fmt = '"%(path)s" is not in the working directory %(extra)s'
 
 
 class DirectoryNotEmpty(PathError):
 
-    _fmt = "Directory not empty: %(path)r%(extra)s"
+    _fmt = 'Directory not empty: "%(path)s"%(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)s"%(extra)s'
 
 
 class PermissionDenied(PathError):
 
-    _fmt = "Permission denied: %(path)r%(extra)s"
+    _fmt = 'Permission denied: "%(path)s"%(extra)s'
 
 
 class InvalidURL(PathError):
 
-    _fmt = "Invalid url supplied to transport: %(path)r%(extra)s"
+    _fmt = 'Invalid url supplied to transport: "%(path)s"%(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)
@@ -542,8 +542,8 @@
 
 class ShortReadvError(PathError):
 
-    _fmt = ("readv() read %(actual)s bytes rather than %(length)s bytes"
-            " at %(offset)s for %(path)s%(extra)s")
+    _fmt = ('readv() read %(actual)s bytes rather than %(length)s bytes'
+            ' 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)s" is not a child of path "%(base)s"%(extra)s'
 
     internal_error = True
 
@@ -572,7 +572,7 @@
 
 class InvalidNormalization(PathError):
 
-    _fmt = "Path %(path)r is not unicode normalized"
+    _fmt = 'Path "%(path)s" 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
@@ -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"
+    _fmt = 'Directory contains a branch, but no working tree \
+(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")
+    _fmt = ('"%(function)s" called on an AtomicFile after it was closed:'
+            ' "%(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)s"'
     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)
@@ -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)
@@ -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)
@@ -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)s"'
 
     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,7 @@
 
 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
@@ -2194,7 +2194,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
 
@@ -2301,7 +2302,7 @@
 
 class DuplicateRecordNameError(ContainerError):
 
-    _fmt = "Container has multiple records with the same name: \"%(name)s\""
+    _fmt = "Container has multiple records with the same name: %(name)s"
 
     def __init__(self, name):
         self.name = name

=== 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 18:02:53 +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,15 +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 "
+        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.",
-            str(error))
+        self.assertEqualDiff("The revision id {anid} is not present in the"
+                             " tree atree.", str(error))
         self.assertIsInstance(error, errors.NoSuchRevision)
 
     def test_not_write_locked(self):
@@ -353,7 +352,7 @@
         """Test the formatting of DuplicateRecordNameError."""
         e = errors.DuplicateRecordNameError(u"n\xe5me".encode('utf-8'))
         self.assertEqual(
-            "Container has multiple records with the same name: \"n\xc3\xa5me\"",
+            "Container has multiple records with the same name: n\xc3\xa5me",
             str(e))
 
 

=== 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
IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWR3rAsAAEP3/gETwAiBX////
fy/ej7////pgF649e2r6BrFVV5OiRyzaUAKAUAAKKC0FkqKNaWw0UMxlKYsUShRtttVUhpqFGUzI
mmaNTPUTQ09TI09EMCaZGgAAMmQ5hNGRoaGQwjQyGmjQAYjJkAwgGAqek8imgAAGgAAAAAAAAABJ
qIjSJqMTKMU9qENoT1NGjI0BoGmgZNNDQ0EUggRpPUnhNDUzSB6p6mPSCam1P1MkYgA0PSbKAqSI
BACAjIEZGQp5Sep6gek9NIAB6mh6j1NiGUiIESGqdpoptbuMrKsI8HQhDQdslS1rJBWwqSk/Q0il
uMlV1uDJkc4VVVRTGC7UbqUtg1bUoRaqy7wY+fX7PrOv5foP4p7p8167twPKrCCMkWEEh2lSUND1
xFRUyCEJTlkhAMIeFhjbn14bObPS+myuDgqgYOPKNTxmurOaSiufPq3xW4u+HG2tszO9lq3tsQkJ
zJQIKChKCJIGSDIlQUQsYBQcgQBwWSRlQMIsJXzMGLsC+4uKROUrcKYVgwkc6AqZhFeGv0Pqr+fl
/x5dhLmX562Nw+jV2eeqlMOIQKk4sxXHnmfqE+ulnyM9JaJYYW30tiI+TnBfEQJ5018peL/hDwgM
IpIsgjJFgshBYCIHZ9KQnTCZzySx6qevvr1wwYMVi73sr5UswWZERqqtD2TOSw1MrQW0mRLw1ygF
1e41plIo3RxVGGZZo4qhFm5e1g2UKZE3Td9mqiG3J2Lq3WnGdcGjKuBMicWUaE33vHBksShMCadC
a4KJRqjcxU3M5LOBDYROKNjXFktHFcMb4W+HZkxpYUYNFHDgTHBRw7lmxgznO+DmAQ9Jv0bgDlIX
oNLtKPPXwyt6p3TsmTZtY67qxTPMvS3V8cqwb5PDcvnWaKLPDlsyLKEyfbomdp9hs47PhWO98dsm
rJtqnLfjla1rsXVaiYG58dFmuTJhvaNZTliu+alv51XXJvcP/u9yrkqVHcqHIphOeDvtOcyZGrRu
XcqlLNqV301utSxIalBRX1eQtXAYSbNNJWMiegvHBy+Ux6cGzHQxdsXKawtWGK6xZwWYuKy5xWQZ
LO7cqyjBy4gethTkbKoCblHZnXvbmxn2a2mHJXFvWmZlDalUVdwYd7xdPZvtU5sWjfnzID1HQQN8
Ezsip1mDYrB2VWRORU8SppTZqwWZO2uKqkxbOT+j2N2M4SnDB1cnAib9o6qU0UIr32WBijAt0cX1
WeLbPofgEd0RN3YrETGcNKOB4TkKPxwLUocvQi1kW0UoEgkkkEwB+cKmzBUchQB/jdDgBVbfYYTP
RKBpPEuyHY1uOCVrj4ur2PGIkfKV4RlyqEEgxA9YijQMYz3qqSJQklQPiGSpMFIGwbUlTv6UVUKr
3pBL2Itco0vc5vtICCA5ItYRnCHQqlGvMWZPjk+kOq01JpkJSHpSSp1yaA5CIDBgsESeNKECKIjB
WQoQkpVX7IDSoMWTpKmZbHJD2rsiCNMvVlZZo8ulZOWY424FlECsJEJakSmEh3nqkH0zJ6kWmYki
FRhbIBQonvK5h9sdU+d2qmPudNj8cKh3B5PgnW22hXSvhLlVmi3pKr1AVLsMDDvcKM8ybTJiXPhM
SHTBhphTxtdsd2jSG15ELFS24HnOZ2z/M7aZTUz/y645U2rOPJyf5nU5yj5lI3rx/SdUh+x+9/aP
qu/QYX9F4t+s/V+/LIjRHqeM/vbtvF2H1yHoKpSiqXwRfVIhbHzG/b08Xft3/NP7TpzA5kE4Cdrk
dpYKHZmiHrxrZRiEgJkgoULMX7EEgUKppB5+vCUpDKUiW/D8VZru19R1eR5t8J71Qe1S6mCsFZ17
qWpajJRMBDQzLCTYSBYybKmRNxgbPi0T49csczzvMmKy9MJUGCkSbjNt8S5TbLGYJuU3tM0umAsu
8GSMUZ4VTJq0StmbcIVw6CGTQd9nPfawKiUbzU0VkQ1gxdkEwvwSvwYGRkwJGO5TTVNlyZmF2qmr
xXcGU0Xav47mDw/q03/fv7khM+lKmNVVbsCzNbFdszpitelYsn3uOW3I78BukaHYo4GCybk7JJ/w
xmC3hleaHNo5mKa6u9nvuamSizNY0k+UpaVTEo6KSfyl3LHhtzw2vhvvwmjajMwlym9/ku7ustaz
yJsknfnnjJyG1N5s6qNGBZLsZdeKW0XwMDs5uDllZiZVTmswPzrCq5De2ymD69GfVhSjm3dMcCmp
2d+3KbiUxObc4uDJk7ZurZq5vYj8uv07p27Qb+WtVetuGearNbLMMLVdxUxJQlVoxvq8zgevzyED
jgzLCjcNGgzOw4OrBkyM7DWk3YGtt1mbHopc4sZdvUWkhSXWdWjNiasdv5EWbjFQzWPLz3ubHZ1c
rtGBzeWLAqsDapxb3tYmhqy5vNaaNFg7OzZg5nNdYyasnNyeXfu54Y6cN6zgU7lOZZZgzq+oxYzD
VgXMJTtZyap0XbUXRWh/htdIZTZZTMsz2rA03MHU8VmGblpk6kYmWCye3ouvk7zvmzZzWcm6WdrV
oVk6YtFPZycXfP6je3MGCmrm7nNDB0PHx2BgSLJ2Vl3M3RWLvYwGcGpMmZEZPLuFee3Uro5Lb9Wr
+vji5cWrZ5smsjwaM3JzMo7OzQzFc1tCN3Zc8ujDNixObQnFwOL48y7Fo5FOzq4EZMnAuxI59Ky4
6xm682imOK+WfRenenC9MJoUmypmueRvm/ccDN50Tx3ZtTHZxaLLNy1xvMimbdL1We9YsbOC9YvJ
q34nxmUWcqOp2dekNzHmaaNuzE4snVxYWVZzLGWqsG5HjOrB1ZMnp8uy6mnmOnlyn1vw59Da/Sln
cwyrQzZUxWl7Mu2U0NBZ3WnfgWMDLLAxxla5TLZjNeTQvmrudrYR5NVpNtl+HiwbLPB1XaZ0dzrp
WDBT29HNo4ObJs2LU1UpviYnB36MkwmbZk3LKYPH3jPtW+1O1NFlq0VyxKuvfrhZwcCnbgwk7USO
rY3NsODb6cTwmOJ1X9OZxxqzcsZuJ5PBncwOHI5vJi7m448dDHiWrFubcGszThJKnJg4O5ZZks6O
TV2bOk2bm8t+OTPs5btNL8KtUtZhzrBliybimJ1nYma07WszRikR5nSa5p1QhmwoQOZoxwN18XNq
vGFJDJbRY23tuazPg478GbPCTuubKXcaNG9rLxbTu7uTezpWWzip2mGJydzB2WmTqsscmql+zZq8
vlbTpp1ceVpwXvfkgzcTGTadxvmsCbUDWLLMXrAd0zlaOSWcHjvXb20YuzaMG5v3OBmfZGDf2mqm
LhwqmGTdOLFoy3Hh4eDV3Oecm5xdHi3LMngyZuzcjX7aT1+zG3618B+D1/xLEqTBmztnnMc9N+fk
Wo9Eo7562US8ksqV3E6hjTgnyn701lCfaUnqEfjOWKlUrNLSWO6ci8qe+xIiJiWUUhURVVTc9ifI
E9eemXNmQ3PeUZtHOed3MiiCfbZmLTKIEhSIiIPnwBlnalOwfvlS38EorfITuIYwvVVRcFV4HrTl
jCqzJKchLtEX6gn1mAnQJgMqxEnvm5ZqpxLzZ8gNDOw/kn2hTz1TFtpimAlBSyiTIkhUA7gqxDaT
iB73mzIeT2xJ+QAhxlkYFkQKGpUjBANEhm4WbqREQgZxtfFiKUIJUFPGYncdpgE9iiYPzU0fkfQ1
fg+r9X7tzg6PyNz7Nm5k8Z2pk/fTBmbPo9IRdzNynXopveE/HUu/u66DQbGrcVbTYSU0kjGzpG0A
j3eo/M8L7lJjxK7bx5LzsRL3rr+YYoJgTIKeT8Pi2j9Ly8x3foeiSYno/gSODyJ7J8UdE6qk+5xU
2nqtv4IIIASsPJU+Y6BQ15oKnASZ8I8JuJSdZHB8Hc+JrPo8S86fVk72D8HzbNJi3cE9HVzWj1qV
g2fdHbq4tWHE3uDFk3vo4sl5/BO49fI5uRv8Xfqn9571kngitZUizIsVKmhFD6B61sfeqrtxVSNh
I0nY8fgVOcOYuOJqNZ7Gb3O3tjOcXKecx1b3q8Pz9eTVizWPV8Hg3PzWYz0xXaGMjIpJK3mu5rhL
KhFjcxuwcZ+Mwe5QpTJmqa1JbqM42Y7MbWlKj8CjeCjQFTtMUswDCiNbFV7kMEC4fre8r+MpaFJa
UsUvm+GGOo97e71OT2vRiciPUZlak28tOUTQ5AsLUzOY0hwvM5B1unTBo6tx7nZ8GzZkzzMPYrnK
wd5yWjezU0ZH+fmTbQ6tVv57Pc9zPLlQ5b8/j4vpeXverq9ZEnAqSOKUUszyWpImW3G8vJkrS5bC
pQyYh5DYwljVb745HZOdBjldOGhxNNF0ZurqsphRWFKZQ1d33vJ7fb7H04/P4HvPo+3xj4rsuGjX
09vtv5d3x3M1DyU+TxbzR+6HCWJqnVrSexVVLN8hgHpNnL1lQ7lT2ObWzJkxa/ctJ3Z8J61lT3uF
ruObq6slLvfaTo9GJub3CK7jpkfvvd5NqEFhGq4xZmKOpk+Q8ZrIV1EwWnS/RoTFSoZQqI/gpHgx
dFt1F++0uni9jb+1yfalKnzfq+yyxzkZo8E2JZdv9aeCbdUnZ4LPhJ5M581QXlRq3KeMVHie0vHM
EIJW0zkiQDqFMHZoTpcifk3ydwve+rHH5vm+b5vufeRo8Wz3LZKpi3LMmDZ8Prdk2fgue9Zvb3Zw
dVJ0YtjZkyJR2nFRO5zt5z/CFSfnD5+wXhSa/MI9UwJeof2P8V3Fv9Zwzec5b9x+Co+eD3Iuqtki
q+RvD4eRzPfo8Oo3PqnL0z2ligxiIJPGVKCMSAixiwYIklASvj4P/QsYkKO3YnYQvtCZ7ASfCPF1
KiyoJ6NnDp8HSZ8S87wTR5+49YX7G9BINTmIciQRKI8aKUxY9PJaTTkG07nlR9t56zUQZGbviIiF
EoQOA4K+Ugj7g4mTz6Rg+FIwxloRkff9ppLzkTcoiU8hzdTtMkh4sZCebvKeDFZXmygzCUcxuNzx
qhpb3iJ1DysEChCKebnAcYbyR9Bi/suw2faW9S6z0H1W1/bnJPBGUyYH6ObcwWSniipJiVHwei68
jnVqgOzkkBvwRyMRwMDUXNHEI8DJ5nA1/I/QtGPTNZo+hG05eyeCQ1sdHvOTkXk/JubaLPbaS1JP
2n0mvimerzb4vDkZKprLt5MHDzCGx6890DJ7Z0nCclQpcFFT2xhRIhZlix/pVUBsGAlmCUE4SQ52
SyRMwIdqigJoASigubEmZZ3wrJZMpCtr/KXXXVP6P3ItDOR9yiUpFKRU+9qBofwLkHOl1QmhEySJ
g/qNEJauA/Mgc0DIgYIIIM9DaQz93R5zcPiSp5j+9OIJ2nMnSbqn/iC4DwYSUtdSNGBE+LCnvKpb
YQEzfo7IvgqyjAMV/1n+xSnivJlE0jNDpkJtQsQHn5yJGkd157DFyHoPxOQkGseBqOPa5J5i0O2b
rJlonofQ+hWYahQ+Mrjo7ZA9htFxOg+vedRgbCT2iWJ8HRkc1wul0jDI0GSln6EnEc/9Pv5zpU/5
I6vm2bovVfRSxUrvqW/7LK833rsC3xWXZktMolJlCcmIesBJlDD2PSNjpMq/lvA3syq4IfuIEMiD
xtYyVwdgWS6m5JT0lSf3SoesxRaGEyTPT8XOHSPBaGL4T5TlzU15k85CmaRpEqRSgpSVQ3wilkT6
ncj2MdbVVlD5WWwJM/0a52XxkJ/NUS1eqsqF9pvhsT7KN4w1QSxEJ9i8xXE1hAmXzE4NRnhoizvf
h3MSeBO9m4ziyl1BO0jgjOGUk3Pfpyl3o83c+2EmKKb3dS0iXTRzCmDCWO1R9xTVlo8IatK7gi3S
D5O7guiaOQWMiNn5TPqch7m+4lkmitFkHgN2Eu7Gym2+US63meQZiVWqFxJCBCKE2S6vFwn56Jwj
RhxWWVNpzWZK2elHsn1aYTznzGKKKL46rBfWJA7JyA8QDA7UkmciysGspQYjQZaLiQqfEo3MMQIZ
rj7shDU3KzlLCyccHRI9/VuiWO8pRxNJnIHLYyVzND8AJuPuAzgd17wIfA/PQlju4/BZ1OKP6t0/
HZi976LMYRxYpTzj72xZgjNzn5QSf54Ey1LBknKdB33FSIfTDQTL6zQ6KHQTKeinmsvDhKqTB3NB
UhP95HoLcSNoHpQS52ihYkg4YoJJTeJCaGZ2Pl2JzK/b+M/kvP26nQedlqSR+jemCjCUsU+NlrQq
KQqX91VUtP0I906uvk/Mj7PdgTQ1ALF2kZw0Qn/xdyRThQkB3rAsAA==
-------------- 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/a906399b/attachment-0001.pgp 


More information about the bazaar mailing list