[MERGE] Container format basic implementation

Andrew Bennetts andrew at canonical.com
Fri Jun 15 06:15:53 BST 2007


Hi all,

This bundle implements the container format described in
doc/developers/container-format.txt.

It's not yet used by anything (although Aaron has a branch where he's
experimenting with it), but as described in container-format.txt I'm intending
to use it in the smart server protocol quite soon.

I'm not sure if we want to merge this before it's used by something else in the
codebase, but it is ready to be reviewed.  The implementation, and especially
the tests, are quite thoroughly documented so hopefully it is easy to
understand the code.

You can also get this branch from:

    http://bazaar.launchpad.net/~bzr/bzr/container-format/

-Andrew.

-------------- next part --------------
# Bazaar revision bundle v0.9
#
# message:
#   Change read/iter_records to return a callable, add more validation, and
#   improve docstrings.
#   
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Thu 2007-06-14 23:28:02.858000040 +1000

=== added file bzrlib/pack.py // file-id:container.py-20070607160755-tr8zc26q18
... rn0jnb-1
--- /dev/null
+++ bzrlib/pack.py
@@ -0,0 +1,282 @@
+# Copyright (C) 2007 Canonical Ltd
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+"""Container format for Bazaar data.
+
+"Containers" and "records" are described in doc/developers/container-format.txt.
+"""
+
+import re
+
+from bzrlib import errors
+
+
+FORMAT_ONE = "Bazaar pack format 1"
+
+
+_whitespace_re = re.compile('[\t\n\x0b\x0c\r ]')
+
+
+def _check_name(name):
+    """Do some basic checking of 'name'.
+    
+    At the moment, this just checks that there are no whitespace characters in a
+    name.
+
+    :raises InvalidRecordError: if name is not valid.
+    :seealso: _check_name_encoding
+    """
+    if _whitespace_re.search(name) is not None:
+        raise errors.InvalidRecordError("%r is not a valid name." % (name,))
+
+
+def _check_name_encoding(name):
+    """Check that 'name' is valid UTF-8.
+    
+    This is separate from _check_name because UTF-8 decoding is relatively
+    expensive, and we usually want to avoid it.
+
+    :raises InvalidRecordError: if name is not valid UTF-8.
+    """
+    try:
+        name.decode('utf-8')
+    except UnicodeDecodeError, e:
+        raise errors.InvalidRecordError(str(e))
+
+
+class ContainerWriter(object):
+    """A class for writing containers."""
+
+    def __init__(self, write_func):
+        """Constructor.
+
+        :param write_func: a callable that will be called when this
+            ContainerWriter needs to write some bytes.
+        """
+        self.write_func = write_func
+
+    def begin(self):
+        """Begin writing a container."""
+        self.write_func(FORMAT_ONE + "\n")
+
+    def end(self):
+        """Finish writing a container."""
+        self.write_func("E")
+
+    def add_bytes_record(self, bytes, names):
+        """Add a Bytes record with the given names."""
+        # Kind marker
+        self.write_func("B")
+        # Length
+        self.write_func(str(len(bytes)) + "\n")
+        # Names
+        for name in names:
+            # Make sure we're writing valid names.  Note that we will leave a
+            # half-written record if a name is bad!
+            _check_name(name)
+            self.write_func(name + "\n")
+        # End of headers
+        self.write_func("\n")
+        # Finally, the contents.
+        self.write_func(bytes)
+
+
+class BaseReader(object):
+
+    def __init__(self, reader_func):
+        """Constructor.
+
+        :param reader_func: a callable that takes one optional argument,
+            ``size``, and returns at most that many bytes.  When the callable
+            returns less than the requested number of bytes, then the end of the
+            file/stream has been reached.
+        """
+        self.reader_func = reader_func
+
+    def _read_line(self):
+        """Read a line from the input stream.
+
+        This is a simple but inefficient implementation that just reads one byte
+        at a time.  Lines should not be very long, so this is probably
+        tolerable.
+
+        :returns: a line, without the trailing newline
+        """
+        # XXX: Have a maximum line length, to prevent malicious input from
+        # consuming an unreasonable amount of resources?
+        #   -- Andrew Bennetts, 2007-05-07.
+        line = ''
+        while not line.endswith('\n'):
+            byte = self.reader_func(1)
+            if byte == '':
+                raise errors.UnexpectedEndOfContainerError()
+            line += byte
+        return line[:-1]
+
+
+class ContainerReader(BaseReader):
+    """A class for reading Bazaar's container format."""
+
+    def iter_records(self):
+        """Iterate over the container, yielding each record as it is read.
+
+        Each yielded record will be a 2-tuple of (names, callable), where names
+        is a ``list`` and bytes is a function that takes one argument,
+        ``max_length``.
+
+        You **must not** call the callable after advancing the interator to the
+        next record.  That is, this code is invalid::
+
+            record_iter = container.iter_records()
+            names1, callable1 = record_iter.next()
+            names2, callable2 = record_iter.next()
+            bytes1 = callable1(None)
+        
+        As it will give incorrect results and invalidate the state of the
+        ContainerReader.
+
+        :raises ContainerError: if any sort of containter corruption is
+            detected, e.g. UnknownContainerFormatError is the format of the
+            container is unrecognised.
+        :seealso: ContainerReader.read
+        """
+        self._read_format()
+        return self._iter_records()
+    
+    def iter_record_objects(self):
+        """Iterate over the container, yielding each record as it is read.
+
+        Each yielded record will be an object with ``read`` and ``validate``
+        methods.  Like with iter_records, it is not safe to use a record object
+        after advancing the iterator to yield next record.
+
+        :raises ContainerError: if any sort of containter corruption is
+            detected, e.g. UnknownContainerFormatError is the format of the
+            container is unrecognised.
+        :seealso: iter_records
+        """
+        self._read_format()
+        return self._iter_record_objects()
+    
+    def _iter_records(self):
+        for record in self._iter_record_objects():
+            yield record.read()
+
+    def _iter_record_objects(self):
+        while True:
+            record_kind = self.reader_func(1)
+            if record_kind == 'B':
+                # Bytes record.
+                reader = BytesRecordReader(self.reader_func)
+                yield reader
+            elif record_kind == 'E':
+                # End marker.  There are no more records.
+                return
+            elif record_kind == '':
+                # End of stream encountered, but no End Marker record seen, so
+                # this container is incomplete.
+                raise errors.UnexpectedEndOfContainerError()
+            else:
+                # Unknown record type.
+                raise errors.UnknownRecordTypeError(record_kind)
+
+    def _read_format(self):
+        format = self._read_line()
+        if format != FORMAT_ONE:
+            raise errors.UnknownContainerFormatError(format)
+
+    def validate(self):
+        """Validate this container and its records.
+
+        Validating consumes the data stream just like iter_records and
+        iter_record_objects, so you cannot call it after
+        iter_records/iter_record_objects.
+
+        :raises ContainerError: if something is invalid.
+        """
+        all_names = set()
+        for record_names, read_bytes in self.iter_records():
+            read_bytes(None)
+            for name in record_names:
+                _check_name_encoding(name)
+                # Check that the name is unique.  Note that Python will refuse
+                # to decode non-shortest forms of UTF-8 encoding, so there is no
+                # risk that the same unicode string has been encoded two
+                # different ways.
+                if name in all_names:
+                    raise errors.DuplicateRecordNameError(name)
+                all_names.add(name)
+        excess_bytes = self.reader_func(1)
+        if excess_bytes != '':
+            raise errors.ContainerHasExcessDataError(excess_bytes)
+
+
+class BytesRecordReader(BaseReader):
+
+    def read(self):
+        """Read this record.
+
+        You can either validate or read a record, you can't do both.
+
+        :returns: A tuple of (names, callable).  The callable can be called
+            repeatedly to obtain the bytes for the record, with a max_length
+            argument.  If max_length is None, returns all the bytes.  Because
+            records can be arbitrarily large, using None is not recommended
+            unless you have reason to believe the content will fit in memory.
+        """
+        # Read the content length.
+        length_line = self._read_line()
+        try:
+            length = int(length_line)
+        except ValueError:
+            raise errors.InvalidRecordError(
+                "%r is not a valid length." % (length_line,))
+        
+        # Read the list of names.
+        names = []
+        while True:
+            name = self._read_line()
+            if name == '':
+                break
+            _check_name(name)
+            names.append(name)
+
+        self._remaining_length = length
+        return names, self._content_reader
+
+    def _content_reader(self, max_length):
+        if max_length is None:
+            length_to_read = self._remaining_length
+        else:
+            length_to_read = min(max_length, self._remaining_length)
+        self._remaining_length -= length_to_read
+        bytes = self.reader_func(length_to_read)
+        if len(bytes) != length_to_read:
+            raise errors.UnexpectedEndOfContainerError()
+        return bytes
+
+    def validate(self):
+        """Validate this record.
+
+        You can either validate or read, you can't do both.
+
+        :raises ContainerError: if this record is invalid.
+        """
+        names, read_bytes = self.read()
+        for name in names:
+            _check_name_encoding(name)
+        read_bytes(None)
+

=== added file bzrlib/tests/test_pack.py // file-id:test_container.py-200706071
... 60755-tr8zc26q18rn0jnb-2 // last-changed:andrew.bennetts at canonical.com-2007
... 0614112338-6u3900u6nkag66u8
--- /dev/null
+++ bzrlib/tests/test_pack.py
@@ -0,0 +1,361 @@
+# Copyright (C) 2007 Canonical Ltd
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+"""Tests for bzrlib.pack."""
+
+
+from cStringIO import StringIO
+
+from bzrlib import pack, errors, tests
+
+
+class TestContainerWriter(tests.TestCase):
+
+    def test_construct(self):
+        """Test constructing a ContainerWriter.
+        
+        This uses None as the output stream to show that the constructor doesn't
+        try to use the output stream.
+        """
+        writer = pack.ContainerWriter(None)
+
+    def test_begin(self):
+        """The begin() method writes the container format marker line."""
+        output = StringIO()
+        writer = pack.ContainerWriter(output.write)
+        writer.begin()
+        self.assertEqual('Bazaar pack format 1\n', output.getvalue())
+
+    def test_end(self):
+        """The end() method writes an End Marker record."""
+        output = StringIO()
+        writer = pack.ContainerWriter(output.write)
+        writer.begin()
+        writer.end()
+        self.assertEqual('Bazaar pack format 1\nE', output.getvalue())
+
+    def test_add_bytes_record_no_name(self):
+        """Add a bytes record with no name."""
+        output = StringIO()
+        writer = pack.ContainerWriter(output.write)
+        writer.begin()
+        writer.add_bytes_record('abc', names=[])
+        self.assertEqual('Bazaar pack format 1\nB3\n\nabc', output.getvalue())
+
+    def test_add_bytes_record_one_name(self):
+        """Add a bytes record with one name."""
+        output = StringIO()
+        writer = pack.ContainerWriter(output.write)
+        writer.begin()
+        writer.add_bytes_record('abc', names=['name1'])
+        self.assertEqual('Bazaar pack format 1\nB3\nname1\n\nabc',
+                         output.getvalue())
+
+    def test_add_bytes_record_two_names(self):
+        """Add a bytes record with two names."""
+        output = StringIO()
+        writer = pack.ContainerWriter(output.write)
+        writer.begin()
+        writer.add_bytes_record('abc', names=['name1', 'name2'])
+        self.assertEqual('Bazaar pack format 1\nB3\nname1\nname2\n\nabc',
+                         output.getvalue())
+
+    def test_add_bytes_record_invalid_name(self):
+        """Adding a Bytes record with a name with whitespace in it raises
+        InvalidRecordError.
+        """
+        output = StringIO()
+        writer = pack.ContainerWriter(output.write)
+        writer.begin()
+        self.assertRaises(
+            errors.InvalidRecordError,
+            writer.add_bytes_record, 'abc', names=['bad name'])
+
+
+class TestContainerReader(tests.TestCase):
+
+    def get_reader_for(self, bytes):
+        stream = StringIO(bytes)
+        reader = pack.ContainerReader(stream.read)
+        return reader
+
+    def test_construct(self):
+        """Test constructing a ContainerReader.
+        
+        This uses None as the output stream to show that the constructor doesn't
+        try to use the input stream.
+        """
+        reader = pack.ContainerReader(None)
+
+    def test_empty_container(self):
+        """Read an empty container."""
+        reader = self.get_reader_for("Bazaar pack format 1\nE")
+        self.assertEqual([], list(reader.iter_records()))
+
+    def test_unknown_format(self):
+        """Unrecognised container formats raise UnknownContainerFormatError."""
+        reader = self.get_reader_for("unknown format\n")
+        self.assertRaises(
+            errors.UnknownContainerFormatError, reader.iter_records)
+
+    def test_unexpected_end_of_container(self):
+        """Containers that don't end with an End Marker record should cause
+        UnexpectedEndOfContainerError to be raised.
+        """
+        reader = self.get_reader_for("Bazaar pack format 1\n")
+        iterator = reader.iter_records()
+        self.assertRaises(
+            errors.UnexpectedEndOfContainerError, iterator.next)
+
+    def test_unknown_record_type(self):
+        """Unknown record types cause UnknownRecordTypeError to be raised."""
+        reader = self.get_reader_for("Bazaar pack format 1\nX")
+        iterator = reader.iter_records()
+        self.assertRaises(
+            errors.UnknownRecordTypeError, iterator.next)
+
+    def test_container_with_one_unnamed_record(self):
+        """Read a container with one Bytes record.
+        
+        Parsing Bytes records is more thoroughly exercised by
+        TestBytesRecordReader.  This test is here to ensure that
+        ContainerReader's integration with BytesRecordReader is working.
+        """
+        reader = self.get_reader_for("Bazaar pack format 1\nB5\n\naaaaaE")
+        expected_records = [([], 'aaaaa')]
+        self.assertEqual(
+            expected_records,
+            [(names, read_bytes(None))
+             for (names, read_bytes) in reader.iter_records()])
+
+    def test_validate_empty_container(self):
+        """validate does not raise an error for a container with no records."""
+        reader = self.get_reader_for("Bazaar pack format 1\nE")
+        # No exception raised
+        reader.validate()
+
+    def test_validate_non_empty_valid_container(self):
+        """validate does not raise an error for a container with a valid record.
+        """
+        reader = self.get_reader_for("Bazaar pack format 1\nB3\nname\n\nabcE")
+        # No exception raised
+        reader.validate()
+
+    def test_validate_bad_format(self):
+        """validate raises an error for unrecognised format strings.
+
+        It may raise either UnexpectedEndOfContainerError or
+        UnknownContainerFormatError, depending on exactly what the string is.
+        """
+        inputs = ["", "x", "Bazaar pack format 1", "bad\n"]
+        for input in inputs:
+            reader = self.get_reader_for(input)
+            self.assertRaises(
+                (errors.UnexpectedEndOfContainerError,
+                 errors.UnknownContainerFormatError),
+                reader.validate)
+
+    def test_validate_bad_record_marker(self):
+        """validate raises UnknownRecordTypeError for unrecognised record
+        types.
+        """
+        reader = self.get_reader_for("Bazaar pack format 1\nX")
+        self.assertRaises(errors.UnknownRecordTypeError, reader.validate)
+
+    def test_validate_data_after_end_marker(self):
+        """validate raises ContainerHasExcessDataError if there are any bytes
+        after the end of the container.
+        """
+        reader = self.get_reader_for("Bazaar pack format 1\nEcrud")
+        self.assertRaises(
+            errors.ContainerHasExcessDataError, reader.validate)
+
+    def test_validate_no_end_marker(self):
+        """validate raises UnexpectedEndOfContainerError if there's no end of
+        container marker, even if the container up to this point has been valid.
+        """
+        reader = self.get_reader_for("Bazaar pack format 1\n")
+        self.assertRaises(
+            errors.UnexpectedEndOfContainerError, reader.validate)
+
+    def test_validate_duplicate_name(self):
+        """validate raises DuplicateRecordNameError if the same name occurs
+        multiple times in the container.
+        """
+        reader = self.get_reader_for(
+            "Bazaar pack format 1\n"
+            "B0\nname\n\n"
+            "B0\nname\n\n"
+            "E")
+        self.assertRaises(errors.DuplicateRecordNameError, reader.validate)
+
+    def test_validate_undecodeable_name(self):
+        """Names that aren't valid UTF-8 cause validate to fail."""
+        reader = self.get_reader_for("Bazaar pack format 1\nB0\n\xcc\n\nE")
+        self.assertRaises(errors.InvalidRecordError, reader.validate)
+        
+
+class TestBytesRecordReader(tests.TestCase):
+    """Tests for reading and validating Bytes records with BytesRecordReader."""
+
+    def get_reader_for(self, bytes):
+        stream = StringIO(bytes)
+        reader = pack.BytesRecordReader(stream.read)
+        return reader
+
+    def test_record_with_no_name(self):
+        """Reading a Bytes record with no name returns an empty list of
+        names.
+        """
+        reader = self.get_reader_for("5\n\naaaaa")
+        names, get_bytes = reader.read()
+        self.assertEqual([], names)
+        self.assertEqual('aaaaa', get_bytes(None))
+
+    def test_record_with_one_name(self):
+        """Reading a Bytes record with one name returns a list of just that
+        name.
+        """
+        reader = self.get_reader_for("5\nname1\n\naaaaa")
+        names, get_bytes = reader.read()
+        self.assertEqual(['name1'], names)
+        self.assertEqual('aaaaa', get_bytes(None))
+
+    def test_record_with_two_names(self):
+        """Reading a Bytes record with two names returns a list of both names.
+        """
+        reader = self.get_reader_for("5\nname1\nname2\n\naaaaa")
+        names, get_bytes = reader.read()
+        self.assertEqual(['name1', 'name2'], names)
+        self.assertEqual('aaaaa', get_bytes(None))
+
+    def test_invalid_length(self):
+        """If the length-prefix is not a number, parsing raises
+        InvalidRecordError.
+        """
+        reader = self.get_reader_for("not a number\n")
+        self.assertRaises(errors.InvalidRecordError, reader.read)
+
+    def test_early_eof(self):
+        """Tests for premature EOF occuring during parsing Bytes records with
+        BytesRecordReader.
+        
+        A incomplete container might be interrupted at any point.  The
+        BytesRecordReader needs to cope with the input stream running out no
+        matter where it is in the parsing process.
+
+        In all cases, UnexpectedEndOfContainerError should be raised.
+        """
+        complete_record = "6\nname\n\nabcdef"
+        for count in range(0, len(complete_record)):
+            incomplete_record = complete_record[:count]
+            reader = self.get_reader_for(incomplete_record)
+            # We don't use assertRaises to make diagnosing failures easier
+            # (assertRaises doesn't allow a custom failure message).
+            try:
+                names, read_bytes = reader.read()
+                read_bytes(None)
+            except errors.UnexpectedEndOfContainerError:
+                pass
+            else:
+                self.fail(
+                    "UnexpectedEndOfContainerError not raised when parsing %r"
+                    % (incomplete_record,))
+
+    def test_initial_eof(self):
+        """EOF before any bytes read at all."""
+        reader = self.get_reader_for("")
+        self.assertRaises(errors.UnexpectedEndOfContainerError, reader.read)
+
+    def test_eof_after_length(self):
+        """EOF after reading the length and before reading name(s)."""
+        reader = self.get_reader_for("123\n")
+        self.assertRaises(errors.UnexpectedEndOfContainerError, reader.read)
+
+    def test_eof_during_name(self):
+        """EOF during reading a name."""
+        reader = self.get_reader_for("123\nname")
+        self.assertRaises(errors.UnexpectedEndOfContainerError, reader.read)
+
+    def test_read_invalid_name_whitespace(self):
+        """Names must have no whitespace."""
+        # A name with a space.
+        reader = self.get_reader_for("0\nbad name\n\n")
+        self.assertRaises(errors.InvalidRecordError, reader.read)
+
+        # A name with a tab.
+        reader = self.get_reader_for("0\nbad\tname\n\n")
+        self.assertRaises(errors.InvalidRecordError, reader.read)
+
+        # A name with a vertical tab.
+        reader = self.get_reader_for("0\nbad\vname\n\n")
+        self.assertRaises(errors.InvalidRecordError, reader.read)
+
+    def test_validate_whitespace_in_name(self):
+        """Names must have no whitespace."""
+        reader = self.get_reader_for("0\nbad name\n\n")
+        self.assertRaises(errors.InvalidRecordError, reader.validate)
+
+    def test_validate_interrupted_prelude(self):
+        """EOF during reading a record's prelude causes validate to fail."""
+        reader = self.get_reader_for("")
+        self.assertRaises(
+            errors.UnexpectedEndOfContainerError, reader.validate)
+
+    def test_validate_interrupted_body(self):
+        """EOF during reading a record's body causes validate to fail."""
+        reader = self.get_reader_for("1\n\n")
+        self.assertRaises(
+            errors.UnexpectedEndOfContainerError, reader.validate)
+
+    def test_validate_unparseable_length(self):
+        """An unparseable record length causes validate to fail."""
+        reader = self.get_reader_for("\n\n")
+        self.assertRaises(
+            errors.InvalidRecordError, reader.validate)
+
+    def test_validate_undecodeable_name(self):
+        """Names that aren't valid UTF-8 cause validate to fail."""
+        reader = self.get_reader_for("0\n\xcc\n\n")
+        self.assertRaises(errors.InvalidRecordError, reader.validate)
+
+    def test_read_max_length(self):
+        """If the max_length passed to the callable returned by read is not
+        None, then no more than that many bytes will be read.
+        """
+        reader = self.get_reader_for("6\n\nabcdef")
+        names, get_bytes = reader.read()
+        self.assertEqual('abc', get_bytes(3))
+
+    def test_read_no_max_length(self):
+        """If the max_length passed to the callable returned by read is None,
+        then all the bytes in the record will be read.
+        """
+        reader = self.get_reader_for("6\n\nabcdef")
+        names, get_bytes = reader.read()
+        self.assertEqual('abcdef', get_bytes(None))
+
+    def test_repeated_read_calls(self):
+        """Repeated calls to the callable returned from BytesRecordReader.read
+        will not read beyond the end of the record.
+        """
+        reader = self.get_reader_for("6\n\nabcdefB3\nnext-record\nXXX")
+        names, get_bytes = reader.read()
+        self.assertEqual('abcdef', get_bytes(None))
+        self.assertEqual('', get_bytes(None))
+        self.assertEqual('', get_bytes(99))
+
+

=== modified file bzrlib/errors.py // last-changed:andrew.bennetts at canonical.co
... m-20070614112338-6u3900u6nkag66u8
--- bzrlib/errors.py
+++ bzrlib/errors.py
@@ -2134,3 +2134,55 @@
 
     def __init__(self, response_tuple):
         self.response_tuple = response_tuple
+
+
+class ContainerError(BzrError):
+    """Base class of container errors."""
+
+
+class UnknownContainerFormatError(ContainerError):
+
+    _fmt = "Unrecognised container format: %(container_format)r"
+    
+    def __init__(self, container_format):
+        self.container_format = container_format
+
+
+class UnexpectedEndOfContainerError(ContainerError):
+
+    _fmt = "Unexpected end of container stream"
+
+    internal_error = False
+
+
+class UnknownRecordTypeError(ContainerError):
+
+    _fmt = "Unknown record type: %(record_type)r"
+
+    def __init__(self, record_type):
+        self.record_type = record_type
+
+
+class InvalidRecordError(ContainerError):
+
+    _fmt = "Invalid record: %(reason)s"
+
+    def __init__(self, reason):
+        self.reason = reason
+
+
+class ContainerHasExcessDataError(ContainerError):
+
+    _fmt = "Container has data after end marker: %(excess)r"
+
+    def __init__(self, excess):
+        self.excess = excess
+
+
+class DuplicateRecordNameError(ContainerError):
+
+    _fmt = "Container has multiple records with the same name: \"%(name)s\""
+
+    def __init__(self, name):
+        self.name = name
+

=== modified file bzrlib/tests/__init__.py // last-changed:andrew.bennetts at cano
... nical.com-20070613105602-1bagfibob1rh21mg
--- bzrlib/tests/__init__.py
+++ bzrlib/tests/__init__.py
@@ -2279,6 +2279,7 @@
                    'bzrlib.tests.test_commit_merge',
                    'bzrlib.tests.test_config',
                    'bzrlib.tests.test_conflicts',
+                   'bzrlib.tests.test_pack',
                    'bzrlib.tests.test_counted_lock',
                    'bzrlib.tests.test_decorators',
                    'bzrlib.tests.test_delta',

=== modified file bzrlib/tests/test_errors.py // last-changed:andrew.bennetts at c
... anonical.com-20070614112338-6u3900u6nkag66u8
--- bzrlib/tests/test_errors.py
+++ bzrlib/tests/test_errors.py
@@ -266,6 +266,47 @@
             "Could not understand response from smart server: ('not yes',)",
             str(e))
 
+    def test_unknown_container_format(self):
+        """Test the formatting of UnknownContainerFormatError."""
+        e = errors.UnknownContainerFormatError('bad format string')
+        self.assertEqual(
+            "Unrecognised container format: 'bad format string'",
+            str(e))
+
+    def test_unexpected_end_of_container(self):
+        """Test the formatting of UnexpectedEndOfContainerError."""
+        e = errors.UnexpectedEndOfContainerError()
+        self.assertEqual(
+            "Unexpected end of container stream", str(e))
+
+    def test_unknown_record_type(self):
+        """Test the formatting of UnknownRecordTypeError."""
+        e = errors.UnknownRecordTypeError("X")
+        self.assertEqual(
+            "Unknown record type: 'X'",
+            str(e))
+
+    def test_invalid_record(self):
+        """Test the formatting of InvalidRecordError."""
+        e = errors.InvalidRecordError("xxx")
+        self.assertEqual(
+            "Invalid record: xxx",
+            str(e))
+
+    def test_container_has_excess_data(self):
+        """Test the formatting of ContainerHasExcessDataError."""
+        e = errors.ContainerHasExcessDataError("excess bytes")
+        self.assertEqual(
+            "Container has data after end marker: 'excess bytes'",
+            str(e))
+
+    def test_duplicate_record_name_error(self):
+        """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\"",
+            str(e))
+
 
 class PassThroughError(errors.BzrError):
     

=== modified file doc/developers/container-format.txt // last-changed:andrew.be
... nnetts at canonical.com-20070614022816-ne4h4qk0j50x6n26
--- doc/developers/container-format.txt
+++ doc/developers/container-format.txt
@@ -176,7 +176,7 @@
 
 The format is:
 
-  * a **container lead-in**, "``bzr pack format 1\n``",
+  * a **container lead-in**, "``Bazaar pack format 1\n``",
   * followed by one or more **records**.
 
 A record is:

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706141
... 32802-bas89f67tqq4p3s6
# revision id: andrew.bennetts at canonical.com-20070614132802-bas89f67tqq4p3s6
# sha1: 163d2f4492ded1539dbc01e0c8c60ec9f467e394
# inventory sha1: 418b7f049bd24c45a0739faaca8ec4e1b087e24e
# parent ids:
#   andrew.bennetts at canonical.com-20070614055245-rtwk0vgz74fyyimo
#   andrew.bennetts at canonical.com-20070614125513-nua0p6bw9cw3jeaq
# base id: pqm at pqm.ubuntu.com-20070613061627-xx5xk6q0oxcy1etm
# properties:
#   branch-nick: container-format

# message:
#   Docstring improvements.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Thu 2007-06-14 22:55:13.819000006 +1000

=== modified file bzrlib/pack.py // encoding:base64
LS0tIGJ6cmxpYi9wYWNrLnB5CisrKyBienJsaWIvcGFjay5weQpAQCAtMTMzLDEyICsxMzMsMjUg
QEAKICAgICBkZWYgaXRlcl9yZWNvcmRzKHNlbGYpOgogICAgICAgICAiIiJJdGVyYXRlIG92ZXIg
dGhlIGNvbnRhaW5lciwgeWllbGRpbmcgZWFjaCByZWNvcmQgYXMgaXQgaXMgcmVhZC4KIAotICAg
ICAgICBFYWNoIHlpZWxkZWQgcmVjb3JkIHdpbGwgYmUgYSAyLXR1cGxlIG9mIChuYW1lcywgYnl0
ZXMpLCB3aGVyZSBuYW1lcyBpcwotICAgICAgICBhIGBgbGlzdGBgIGFuZCBieXRlcyBpcyBhIGBg
c3RyYGAuCisgICAgICAgIEVhY2ggeWllbGRlZCByZWNvcmQgd2lsbCBiZSBhIDItdHVwbGUgb2Yg
KG5hbWVzLCBjYWxsYWJsZSksIHdoZXJlIG5hbWVzCisgICAgICAgIGlzIGEgYGBsaXN0YGAgYW5k
IGJ5dGVzIGlzIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBvbmUgYXJndW1lbnQsCisgICAgICAgIGBg
bWF4X2xlbmd0aGBgLgorCisgICAgICAgIFlvdSAqKm11c3Qgbm90KiogY2FsbCB0aGUgY2FsbGFi
bGUgYWZ0ZXIgYWR2YW5jaW5nIHRoZSBpbnRlcmF0b3IgdG8gdGhlCisgICAgICAgIG5leHQgcmVj
b3JkLiAgVGhhdCBpcywgdGhpcyBjb2RlIGlzIGludmFsaWQ6OgorCisgICAgICAgICAgICByZWNv
cmRfaXRlciA9IGNvbnRhaW5lci5pdGVyX3JlY29yZHMoKQorICAgICAgICAgICAgbmFtZXMxLCBj
YWxsYWJsZTEgPSByZWNvcmRfaXRlci5uZXh0KCkKKyAgICAgICAgICAgIG5hbWVzMiwgY2FsbGFi
bGUyID0gcmVjb3JkX2l0ZXIubmV4dCgpCisgICAgICAgICAgICBieXRlczEgPSBjYWxsYWJsZTEo
Tm9uZSkKKyAgICAgICAgCisgICAgICAgIEFzIGl0IHdpbGwgZ2l2ZSBpbmNvcnJlY3QgcmVzdWx0
cyBhbmQgaW52YWxpZGF0ZSB0aGUgc3RhdGUgb2YgdGhlCisgICAgICAgIENvbnRhaW5lclJlYWRl
ci4KIAogICAgICAgICA6cmFpc2VzIENvbnRhaW5lckVycm9yOiBpZiBhbnkgc29ydCBvZiBjb250
YWludGVyIGNvcnJ1cHRpb24gaXMKICAgICAgICAgICAgIGRldGVjdGVkLCBlLmcuIFVua25vd25D
b250YWluZXJGb3JtYXRFcnJvciBpcyB0aGUgZm9ybWF0IG9mIHRoZQogICAgICAgICAgICAgY29u
dGFpbmVyIGlzIHVucmVjb2duaXNlZC4KKyAgICAgICAgOnNlZWFsc286IENvbnRhaW5lclJlYWRl
ci5yZWFkCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9yZWFkX2Zvcm1hdCgpCiAgICAgICAg
IHJldHVybiBzZWxmLl9pdGVyX3JlY29yZHMoKQpAQCAtMTQ3LDExICsxNjAsMTMgQEAKICAgICAg
ICAgIiIiSXRlcmF0ZSBvdmVyIHRoZSBjb250YWluZXIsIHlpZWxkaW5nIGVhY2ggcmVjb3JkIGFz
IGl0IGlzIHJlYWQuCiAKICAgICAgICAgRWFjaCB5aWVsZGVkIHJlY29yZCB3aWxsIGJlIGFuIG9i
amVjdCB3aXRoIGBgcmVhZGBgIGFuZCBgYHZhbGlkYXRlYGAKLSAgICAgICAgbWV0aG9kcy4KKyAg
ICAgICAgbWV0aG9kcy4gIExpa2Ugd2l0aCBpdGVyX3JlY29yZHMsIGl0IGlzIG5vdCBzYWZlIHRv
IHVzZSBhIHJlY29yZCBvYmplY3QKKyAgICAgICAgYWZ0ZXIgYWR2YW5jaW5nIHRoZSBpdGVyYXRv
ciB0byB5aWVsZCBuZXh0IHJlY29yZC4KIAogICAgICAgICA6cmFpc2VzIENvbnRhaW5lckVycm9y
OiBpZiBhbnkgc29ydCBvZiBjb250YWludGVyIGNvcnJ1cHRpb24gaXMKICAgICAgICAgICAgIGRl
dGVjdGVkLCBlLmcuIFVua25vd25Db250YWluZXJGb3JtYXRFcnJvciBpcyB0aGUgZm9ybWF0IG9m
IHRoZQogICAgICAgICAgICAgY29udGFpbmVyIGlzIHVucmVjb2duaXNlZC4KKyAgICAgICAgOnNl
ZWFsc286IGl0ZXJfcmVjb3JkcwogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fcmVhZF9mb3Jt
YXQoKQogICAgICAgICByZXR1cm4gc2VsZi5faXRlcl9yZWNvcmRfb2JqZWN0cygpCkBAIC0yMTIs
NyArMjI3LDcgQEAKICAgICBkZWYgcmVhZChzZWxmKToKICAgICAgICAgIiIiUmVhZCB0aGlzIHJl
Y29yZC4KIAotICAgICAgICBZb3UgY2FuIGVpdGhlciB2YWxpZGF0ZSBvciByZWFkLCB5b3UgY2Fu
J3QgZG8gYm90aC4KKyAgICAgICAgWW91IGNhbiBlaXRoZXIgdmFsaWRhdGUgb3IgcmVhZCBhIHJl
Y29yZCwgeW91IGNhbid0IGRvIGJvdGguCiAKICAgICAgICAgOnJldHVybnM6IEEgdHVwbGUgb2Yg
KG5hbWVzLCBjYWxsYWJsZSkuICBUaGUgY2FsbGFibGUgY2FuIGJlIGNhbGxlZAogICAgICAgICAg
ICAgcmVwZWF0ZWRseSB0byBvYnRhaW4gdGhlIGJ5dGVzIGZvciB0aGUgcmVjb3JkLCB3aXRoIGEg
bWF4X2xlbmd0aAoK

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706141
... 25513-nua0p6bw9cw3jeaq
# revision id: andrew.bennetts at canonical.com-20070614125513-nua0p6bw9cw3jeaq
# sha1: 6a5223ef2fd4ae7c6bb13927fa1eb1dacb09b706
# inventory sha1: 5174b3665406927ac0d44567f7db7afadb8e2770
# parent ids:
#   andrew.bennetts at canonical.com-20070614112338-6u3900u6nkag66u8
# properties:
#   branch-nick: container-format

# message:
#   Return a callable instead of a str from read, and add more validation.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Thu 2007-06-14 21:23:38.308000088 +1000

=== modified file bzrlib/errors.py // encoding:base64
LS0tIGJ6cmxpYi9lcnJvcnMucHkKKysrIGJ6cmxpYi9lcnJvcnMucHkKQEAgLTIxNzgsMyArMjE3
OCwxMSBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGNlc3MpOgogICAgICAgICBzZWxmLmV4
Y2VzcyA9IGV4Y2VzcwogCisKK2NsYXNzIER1cGxpY2F0ZVJlY29yZE5hbWVFcnJvcihDb250YWlu
ZXJFcnJvcik6CisKKyAgICBfZm10ID0gIkNvbnRhaW5lciBoYXMgbXVsdGlwbGUgcmVjb3JkcyB3
aXRoIHRoZSBzYW1lIG5hbWU6IFwiJShuYW1lKXNcIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBuYW1lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCgo=

=== modified file bzrlib/pack.py // encoding:base64
LS0tIGJ6cmxpYi9wYWNrLnB5CisrKyBienJsaWIvcGFjay5weQpAQCAtMzcsMTIgKzM3LDI2IEBA
CiAgICAgbmFtZS4KIAogICAgIDpyYWlzZXMgSW52YWxpZFJlY29yZEVycm9yOiBpZiBuYW1lIGlz
IG5vdCB2YWxpZC4KKyAgICA6c2VlYWxzbzogX2NoZWNrX25hbWVfZW5jb2RpbmcKICAgICAiIiIK
LSAgICAjIFhYWDogY29uc2lkZXIgY2hlY2tpbmcgdGhhdCBuYW1lIGlzIGEgc3RyIG9mIHZhbGlk
IFVURi04IHRvbz8KICAgICBpZiBfd2hpdGVzcGFjZV9yZS5zZWFyY2gobmFtZSkgaXMgbm90IE5v
bmU6CiAgICAgICAgIHJhaXNlIGVycm9ycy5JbnZhbGlkUmVjb3JkRXJyb3IoIiVyIGlzIG5vdCBh
IHZhbGlkIG5hbWUuIiAlIChuYW1lLCkpCiAKIAorZGVmIF9jaGVja19uYW1lX2VuY29kaW5nKG5h
bWUpOgorICAgICIiIkNoZWNrIHRoYXQgJ25hbWUnIGlzIHZhbGlkIFVURi04LgorICAgIAorICAg
IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSBfY2hlY2tfbmFtZSBiZWNhdXNlIFVURi04IGRlY29kaW5n
IGlzIHJlbGF0aXZlbHkKKyAgICBleHBlbnNpdmUsIGFuZCB3ZSB1c3VhbGx5IHdhbnQgdG8gYXZv
aWQgaXQuCisKKyAgICA6cmFpc2VzIEludmFsaWRSZWNvcmRFcnJvcjogaWYgbmFtZSBpcyBub3Qg
dmFsaWQgVVRGLTguCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBuYW1lLmRlY29kZSgndXRm
LTgnKQorICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IsIGU6CisgICAgICAgIHJhaXNlIGVy
cm9ycy5JbnZhbGlkUmVjb3JkRXJyb3Ioc3RyKGUpKQorCisKIGNsYXNzIENvbnRhaW5lcldyaXRl
cihvYmplY3QpOgogICAgICIiIkEgY2xhc3MgZm9yIHdyaXRpbmcgY29udGFpbmVycy4iIiIKIApA
QCAtMTIyLDIxICsxMzYsMzcgQEAKICAgICAgICAgRWFjaCB5aWVsZGVkIHJlY29yZCB3aWxsIGJl
IGEgMi10dXBsZSBvZiAobmFtZXMsIGJ5dGVzKSwgd2hlcmUgbmFtZXMgaXMKICAgICAgICAgYSBg
YGxpc3RgYCBhbmQgYnl0ZXMgaXMgYSBgYHN0cmBgLgogCi0gICAgICAgIDpyYWlzZXMgVW5rbm93
bkNvbnRhaW5lckZvcm1hdEVycm9yOiBpZiB0aGUgZm9ybWF0IG9mIHRoZSBjb250YWluZXIgaXMK
LSAgICAgICAgICAgIHVucmVjb2duaXNlZC4KKyAgICAgICAgOnJhaXNlcyBDb250YWluZXJFcnJv
cjogaWYgYW55IHNvcnQgb2YgY29udGFpbnRlciBjb3JydXB0aW9uIGlzCisgICAgICAgICAgICBk
ZXRlY3RlZCwgZS5nLiBVbmtub3duQ29udGFpbmVyRm9ybWF0RXJyb3IgaXMgdGhlIGZvcm1hdCBv
ZiB0aGUKKyAgICAgICAgICAgIGNvbnRhaW5lciBpcyB1bnJlY29nbmlzZWQuCiAgICAgICAgICIi
IgotICAgICAgICBmb3JtYXQgPSBzZWxmLl9yZWFkX2xpbmUoKQotICAgICAgICBpZiBmb3JtYXQg
IT0gRk9STUFUX09ORToKLSAgICAgICAgICAgIHJhaXNlIGVycm9ycy5Vbmtub3duQ29udGFpbmVy
Rm9ybWF0RXJyb3IoZm9ybWF0KQorICAgICAgICBzZWxmLl9yZWFkX2Zvcm1hdCgpCiAgICAgICAg
IHJldHVybiBzZWxmLl9pdGVyX3JlY29yZHMoKQogICAgIAorICAgIGRlZiBpdGVyX3JlY29yZF9v
YmplY3RzKHNlbGYpOgorICAgICAgICAiIiJJdGVyYXRlIG92ZXIgdGhlIGNvbnRhaW5lciwgeWll
bGRpbmcgZWFjaCByZWNvcmQgYXMgaXQgaXMgcmVhZC4KKworICAgICAgICBFYWNoIHlpZWxkZWQg
cmVjb3JkIHdpbGwgYmUgYW4gb2JqZWN0IHdpdGggYGByZWFkYGAgYW5kIGBgdmFsaWRhdGVgYAor
ICAgICAgICBtZXRob2RzLgorCisgICAgICAgIDpyYWlzZXMgQ29udGFpbmVyRXJyb3I6IGlmIGFu
eSBzb3J0IG9mIGNvbnRhaW50ZXIgY29ycnVwdGlvbiBpcworICAgICAgICAgICAgZGV0ZWN0ZWQs
IGUuZy4gVW5rbm93bkNvbnRhaW5lckZvcm1hdEVycm9yIGlzIHRoZSBmb3JtYXQgb2YgdGhlCisg
ICAgICAgICAgICBjb250YWluZXIgaXMgdW5yZWNvZ25pc2VkLgorICAgICAgICAiIiIKKyAgICAg
ICAgc2VsZi5fcmVhZF9mb3JtYXQoKQorICAgICAgICByZXR1cm4gc2VsZi5faXRlcl9yZWNvcmRf
b2JqZWN0cygpCisgICAgCiAgICAgZGVmIF9pdGVyX3JlY29yZHMoc2VsZik6CisgICAgICAgIGZv
ciByZWNvcmQgaW4gc2VsZi5faXRlcl9yZWNvcmRfb2JqZWN0cygpOgorICAgICAgICAgICAgeWll
bGQgcmVjb3JkLnJlYWQoKQorCisgICAgZGVmIF9pdGVyX3JlY29yZF9vYmplY3RzKHNlbGYpOgog
ICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgcmVjb3JkX2tpbmQgPSBzZWxmLnJlYWRl
cl9mdW5jKDEpCiAgICAgICAgICAgICBpZiByZWNvcmRfa2luZCA9PSAnQic6CiAgICAgICAgICAg
ICAgICAgIyBCeXRlcyByZWNvcmQuCiAgICAgICAgICAgICAgICAgcmVhZGVyID0gQnl0ZXNSZWNv
cmRSZWFkZXIoc2VsZi5yZWFkZXJfZnVuYykKLSAgICAgICAgICAgICAgICB5aWVsZCByZWFkZXIu
cmVhZCgpCisgICAgICAgICAgICAgICAgeWllbGQgcmVhZGVyCiAgICAgICAgICAgICBlbGlmIHJl
Y29yZF9raW5kID09ICdFJzoKICAgICAgICAgICAgICAgICAjIEVuZCBtYXJrZXIuICBUaGVyZSBh
cmUgbm8gbW9yZSByZWNvcmRzLgogICAgICAgICAgICAgICAgIHJldHVybgpAQCAtMTQ4LDYgKzE3
OCwxMSBAQAogICAgICAgICAgICAgICAgICMgVW5rbm93biByZWNvcmQgdHlwZS4KICAgICAgICAg
ICAgICAgICByYWlzZSBlcnJvcnMuVW5rbm93blJlY29yZFR5cGVFcnJvcihyZWNvcmRfa2luZCkK
IAorICAgIGRlZiBfcmVhZF9mb3JtYXQoc2VsZik6CisgICAgICAgIGZvcm1hdCA9IHNlbGYuX3Jl
YWRfbGluZSgpCisgICAgICAgIGlmIGZvcm1hdCAhPSBGT1JNQVRfT05FOgorICAgICAgICAgICAg
cmFpc2UgZXJyb3JzLlVua25vd25Db250YWluZXJGb3JtYXRFcnJvcihmb3JtYXQpCisKICAgICBk
ZWYgdmFsaWRhdGUoc2VsZik6CiAgICAgICAgICIiIlZhbGlkYXRlIHRoaXMgY29udGFpbmVyIGFu
ZCBpdHMgcmVjb3Jkcy4KIApAQCAtMTU1LDEwICsxOTAsMTggQEAKIAogICAgICAgICA6cmFpc2Vz
IENvbnRhaW5lckVycm9yOiBpZiBzb21ldGhpbmcgaXMgaW52YWxpZC4KICAgICAgICAgIiIiCi0g
ICAgICAgIGZvciBuYW1lcywgYnl0ZXMgaW4gc2VsZi5pdGVyX3JlY29yZHMoKToKLSAgICAgICAg
ICAgICMgWFhYOiBieXRlcyBpcyBzdHIsIHNob3VsZCBiZSBjYWxsYWJsZSB0byBnZXQgYnl0ZXMu
Ci0gICAgICAgICAgICAjIGNhbGxhYmxlKCkKLSAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYWxs
X25hbWVzID0gc2V0KCkKKyAgICAgICAgZm9yIHJlY29yZF9uYW1lcywgcmVhZF9ieXRlcyBpbiBz
ZWxmLml0ZXJfcmVjb3JkcygpOgorICAgICAgICAgICAgcmVhZF9ieXRlcyhOb25lKQorICAgICAg
ICAgICAgZm9yIG5hbWUgaW4gcmVjb3JkX25hbWVzOgorICAgICAgICAgICAgICAgIF9jaGVja19u
YW1lX2VuY29kaW5nKG5hbWUpCisgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBuYW1l
IGlzIHVuaXF1ZS4gIE5vdGUgdGhhdCBQeXRob24gd2lsbCByZWZ1c2UKKyAgICAgICAgICAgICAg
ICAjIHRvIGRlY29kZSBub24tc2hvcnRlc3QgZm9ybXMgb2YgVVRGLTggZW5jb2RpbmcsIHNvIHRo
ZXJlIGlzIG5vCisgICAgICAgICAgICAgICAgIyByaXNrIHRoYXQgdGhlIHNhbWUgdW5pY29kZSBz
dHJpbmcgaGFzIGJlZW4gZW5jb2RlZCB0d28KKyAgICAgICAgICAgICAgICAjIGRpZmZlcmVudCB3
YXlzLgorICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gYWxsX25hbWVzOgorICAgICAgICAgICAg
ICAgICAgICByYWlzZSBlcnJvcnMuRHVwbGljYXRlUmVjb3JkTmFtZUVycm9yKG5hbWUpCisgICAg
ICAgICAgICAgICAgYWxsX25hbWVzLmFkZChuYW1lKQogICAgICAgICBleGNlc3NfYnl0ZXMgPSBz
ZWxmLnJlYWRlcl9mdW5jKDEpCiAgICAgICAgIGlmIGV4Y2Vzc19ieXRlcyAhPSAnJzoKICAgICAg
ICAgICAgIHJhaXNlIGVycm9ycy5Db250YWluZXJIYXNFeGNlc3NEYXRhRXJyb3IoZXhjZXNzX2J5
dGVzKQpAQCAtMTcxLDcgKzIxNCwxMSBAQAogCiAgICAgICAgIFlvdSBjYW4gZWl0aGVyIHZhbGlk
YXRlIG9yIHJlYWQsIHlvdSBjYW4ndCBkbyBib3RoLgogCi0gICAgICAgIDpyZXR1cm5zOiAobmFt
ZXMsIGJ5dGVzKQorICAgICAgICA6cmV0dXJuczogQSB0dXBsZSBvZiAobmFtZXMsIGNhbGxhYmxl
KS4gIFRoZSBjYWxsYWJsZSBjYW4gYmUgY2FsbGVkCisgICAgICAgICAgICByZXBlYXRlZGx5IHRv
IG9idGFpbiB0aGUgYnl0ZXMgZm9yIHRoZSByZWNvcmQsIHdpdGggYSBtYXhfbGVuZ3RoCisgICAg
ICAgICAgICBhcmd1bWVudC4gIElmIG1heF9sZW5ndGggaXMgTm9uZSwgcmV0dXJucyBhbGwgdGhl
IGJ5dGVzLiAgQmVjYXVzZQorICAgICAgICAgICAgcmVjb3JkcyBjYW4gYmUgYXJiaXRyYXJpbHkg
bGFyZ2UsIHVzaW5nIE5vbmUgaXMgbm90IHJlY29tbWVuZGVkCisgICAgICAgICAgICB1bmxlc3Mg
eW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgdGhlIGNvbnRlbnQgd2lsbCBmaXQgaW4gbWVtb3J5
LgogICAgICAgICAiIiIKICAgICAgICAgIyBSZWFkIHRoZSBjb250ZW50IGxlbmd0aC4KICAgICAg
ICAgbGVuZ3RoX2xpbmUgPSBzZWxmLl9yZWFkX2xpbmUoKQpAQCAtMTg5LDEwICsyMzYsMjAgQEAK
ICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgX2NoZWNrX25hbWUobmFtZSkKICAg
ICAgICAgICAgIG5hbWVzLmFwcGVuZChuYW1lKQotICAgICAgICBieXRlcyA9IHNlbGYucmVhZGVy
X2Z1bmMobGVuZ3RoKQotICAgICAgICBpZiBsZW4oYnl0ZXMpICE9IGxlbmd0aDoKKworICAgICAg
ICBzZWxmLl9yZW1haW5pbmdfbGVuZ3RoID0gbGVuZ3RoCisgICAgICAgIHJldHVybiBuYW1lcywg
c2VsZi5fY29udGVudF9yZWFkZXIKKworICAgIGRlZiBfY29udGVudF9yZWFkZXIoc2VsZiwgbWF4
X2xlbmd0aCk6CisgICAgICAgIGlmIG1heF9sZW5ndGggaXMgTm9uZToKKyAgICAgICAgICAgIGxl
bmd0aF90b19yZWFkID0gc2VsZi5fcmVtYWluaW5nX2xlbmd0aAorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgbGVuZ3RoX3RvX3JlYWQgPSBtaW4obWF4X2xlbmd0aCwgc2VsZi5fcmVtYWluaW5n
X2xlbmd0aCkKKyAgICAgICAgc2VsZi5fcmVtYWluaW5nX2xlbmd0aCAtPSBsZW5ndGhfdG9fcmVh
ZAorICAgICAgICBieXRlcyA9IHNlbGYucmVhZGVyX2Z1bmMobGVuZ3RoX3RvX3JlYWQpCisgICAg
ICAgIGlmIGxlbihieXRlcykgIT0gbGVuZ3RoX3RvX3JlYWQ6CiAgICAgICAgICAgICByYWlzZSBl
cnJvcnMuVW5leHBlY3RlZEVuZE9mQ29udGFpbmVyRXJyb3IoKQotICAgICAgICByZXR1cm4gbmFt
ZXMsIGJ5dGVzCisgICAgICAgIHJldHVybiBieXRlcwogCiAgICAgZGVmIHZhbGlkYXRlKHNlbGYp
OgogICAgICAgICAiIiJWYWxpZGF0ZSB0aGlzIHJlY29yZC4KQEAgLTIwMSw0ICsyNTgsOCBAQAog
CiAgICAgICAgIDpyYWlzZXMgQ29udGFpbmVyRXJyb3I6IGlmIHRoaXMgcmVjb3JkIGlzIGludmFs
aWQuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLnJlYWQoKQorICAgICAgICBuYW1lcywgcmVh
ZF9ieXRlcyA9IHNlbGYucmVhZCgpCisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAg
ICAgICAgX2NoZWNrX25hbWVfZW5jb2RpbmcobmFtZSkKKyAgICAgICAgcmVhZF9ieXRlcyhOb25l
KQorCgo=

=== modified file bzrlib/tests/test_errors.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2Vycm9ycy5weQorKysgYnpybGliL3Rlc3RzL3Rlc3RfZXJy
b3JzLnB5CkBAIC0zMDAsNiArMzAwLDEzIEBACiAgICAgICAgICAgICAiQ29udGFpbmVyIGhhcyBk
YXRhIGFmdGVyIGVuZCBtYXJrZXI6ICdleGNlc3MgYnl0ZXMnIiwKICAgICAgICAgICAgIHN0cihl
KSkKIAorICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV9yZWNvcmRfbmFtZV9lcnJvcihzZWxmKToKKyAg
ICAgICAgIiIiVGVzdCB0aGUgZm9ybWF0dGluZyBvZiBEdXBsaWNhdGVSZWNvcmROYW1lRXJyb3Iu
IiIiCisgICAgICAgIGUgPSBlcnJvcnMuRHVwbGljYXRlUmVjb3JkTmFtZUVycm9yKHUiblx4ZTVt
ZSIuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAg
ICAgIkNvbnRhaW5lciBoYXMgbXVsdGlwbGUgcmVjb3JkcyB3aXRoIHRoZSBzYW1lIG5hbWU6IFwi
blx4YzNceGE1bWVcIiIsCisgICAgICAgICAgICBzdHIoZSkpCisKIAogY2xhc3MgUGFzc1Rocm91
Z2hFcnJvcihlcnJvcnMuQnpyRXJyb3IpOgogICAgIAoK

=== modified file bzrlib/tests/test_pack.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X3BhY2sucHkKKysrIGJ6cmxpYi90ZXN0cy90ZXN0X3BhY2su
cHkKQEAgLTEzNiwxOSArMTM2LDMwIEBACiAgICAgICAgICIiIgogICAgICAgICByZWFkZXIgPSBz
ZWxmLmdldF9yZWFkZXJfZm9yKCJCYXphYXIgcGFjayBmb3JtYXQgMVxuQjVcblxuYWFhYWFFIikK
ICAgICAgICAgZXhwZWN0ZWRfcmVjb3JkcyA9IFsoW10sICdhYWFhYScpXQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGV4cGVjdGVkX3JlY29yZHMsIGxpc3QocmVhZGVyLml0ZXJfcmVjb3Jkcygp
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGV4cGVjdGVkX3JlY29y
ZHMsCisgICAgICAgICAgICBbKG5hbWVzLCByZWFkX2J5dGVzKE5vbmUpKQorICAgICAgICAgICAg
IGZvciAobmFtZXMsIHJlYWRfYnl0ZXMpIGluIHJlYWRlci5pdGVyX3JlY29yZHMoKV0pCiAKICAg
ICBkZWYgdGVzdF92YWxpZGF0ZV9lbXB0eV9jb250YWluZXIoc2VsZik6CisgICAgICAgICIiInZh
bGlkYXRlIGRvZXMgbm90IHJhaXNlIGFuIGVycm9yIGZvciBhIGNvbnRhaW5lciB3aXRoIG5vIHJl
Y29yZHMuIiIiCiAgICAgICAgIHJlYWRlciA9IHNlbGYuZ2V0X3JlYWRlcl9mb3IoIkJhemFhciBw
YWNrIGZvcm1hdCAxXG5FIikKICAgICAgICAgIyBObyBleGNlcHRpb24gcmFpc2VkCiAgICAgICAg
IHJlYWRlci52YWxpZGF0ZSgpCiAKICAgICBkZWYgdGVzdF92YWxpZGF0ZV9ub25fZW1wdHlfdmFs
aWRfY29udGFpbmVyKHNlbGYpOgorICAgICAgICAiIiJ2YWxpZGF0ZSBkb2VzIG5vdCByYWlzZSBh
biBlcnJvciBmb3IgYSBjb250YWluZXIgd2l0aCBhIHZhbGlkIHJlY29yZC4KKyAgICAgICAgIiIi
CiAgICAgICAgIHJlYWRlciA9IHNlbGYuZ2V0X3JlYWRlcl9mb3IoIkJhemFhciBwYWNrIGZvcm1h
dCAxXG5CM1xubmFtZVxuXG5hYmNFIikKICAgICAgICAgIyBObyBleGNlcHRpb24gcmFpc2VkCiAg
ICAgICAgIHJlYWRlci52YWxpZGF0ZSgpCiAKICAgICBkZWYgdGVzdF92YWxpZGF0ZV9iYWRfZm9y
bWF0KHNlbGYpOgorICAgICAgICAiIiJ2YWxpZGF0ZSByYWlzZXMgYW4gZXJyb3IgZm9yIHVucmVj
b2duaXNlZCBmb3JtYXQgc3RyaW5ncy4KKworICAgICAgICBJdCBtYXkgcmFpc2UgZWl0aGVyIFVu
ZXhwZWN0ZWRFbmRPZkNvbnRhaW5lckVycm9yIG9yCisgICAgICAgIFVua25vd25Db250YWluZXJG
b3JtYXRFcnJvciwgZGVwZW5kaW5nIG9uIGV4YWN0bHkgd2hhdCB0aGUgc3RyaW5nIGlzLgorICAg
ICAgICAiIiIKICAgICAgICAgaW5wdXRzID0gWyIiLCAieCIsICJCYXphYXIgcGFjayBmb3JtYXQg
MSIsICJiYWRcbiJdCiAgICAgICAgIGZvciBpbnB1dCBpbiBpbnB1dHM6CiAgICAgICAgICAgICBy
ZWFkZXIgPSBzZWxmLmdldF9yZWFkZXJfZm9yKGlucHV0KQpAQCAtMTU4LDIyICsxNjksNDcgQEAK
ICAgICAgICAgICAgICAgICByZWFkZXIudmFsaWRhdGUpCiAKICAgICBkZWYgdGVzdF92YWxpZGF0
ZV9iYWRfcmVjb3JkX21hcmtlcihzZWxmKToKKyAgICAgICAgIiIidmFsaWRhdGUgcmFpc2VzIFVu
a25vd25SZWNvcmRUeXBlRXJyb3IgZm9yIHVucmVjb2duaXNlZCByZWNvcmQKKyAgICAgICAgdHlw
ZXMuCisgICAgICAgICIiIgogICAgICAgICByZWFkZXIgPSBzZWxmLmdldF9yZWFkZXJfZm9yKCJC
YXphYXIgcGFjayBmb3JtYXQgMVxuWCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9y
cy5Vbmtub3duUmVjb3JkVHlwZUVycm9yLCByZWFkZXIudmFsaWRhdGUpCiAKICAgICBkZWYgdGVz
dF92YWxpZGF0ZV9kYXRhX2FmdGVyX2VuZF9tYXJrZXIoc2VsZik6CisgICAgICAgICIiInZhbGlk
YXRlIHJhaXNlcyBDb250YWluZXJIYXNFeGNlc3NEYXRhRXJyb3IgaWYgdGhlcmUgYXJlIGFueSBi
eXRlcworICAgICAgICBhZnRlciB0aGUgZW5kIG9mIHRoZSBjb250YWluZXIuCisgICAgICAgICIi
IgogICAgICAgICByZWFkZXIgPSBzZWxmLmdldF9yZWFkZXJfZm9yKCJCYXphYXIgcGFjayBmb3Jt
YXQgMVxuRWNydWQiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKICAgICAgICAgICAgIGVy
cm9ycy5Db250YWluZXJIYXNFeGNlc3NEYXRhRXJyb3IsIHJlYWRlci52YWxpZGF0ZSkKIAogICAg
IGRlZiB0ZXN0X3ZhbGlkYXRlX25vX2VuZF9tYXJrZXIoc2VsZik6CisgICAgICAgICIiInZhbGlk
YXRlIHJhaXNlcyBVbmV4cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvciBpZiB0aGVyZSdzIG5vIGVu
ZCBvZgorICAgICAgICBjb250YWluZXIgbWFya2VyLCBldmVuIGlmIHRoZSBjb250YWluZXIgdXAg
dG8gdGhpcyBwb2ludCBoYXMgYmVlbiB2YWxpZC4KKyAgICAgICAgIiIiCiAgICAgICAgIHJlYWRl
ciA9IHNlbGYuZ2V0X3JlYWRlcl9mb3IoIkJhemFhciBwYWNrIGZvcm1hdCAxXG4iKQogICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcygKICAgICAgICAgICAgIGVycm9ycy5VbmV4cGVjdGVkRW5kT2ZD
b250YWluZXJFcnJvciwgcmVhZGVyLnZhbGlkYXRlKQogCisgICAgZGVmIHRlc3RfdmFsaWRhdGVf
ZHVwbGljYXRlX25hbWUoc2VsZik6CisgICAgICAgICIiInZhbGlkYXRlIHJhaXNlcyBEdXBsaWNh
dGVSZWNvcmROYW1lRXJyb3IgaWYgdGhlIHNhbWUgbmFtZSBvY2N1cnMKKyAgICAgICAgbXVsdGlw
bGUgdGltZXMgaW4gdGhlIGNvbnRhaW5lci4KKyAgICAgICAgIiIiCisgICAgICAgIHJlYWRlciA9
IHNlbGYuZ2V0X3JlYWRlcl9mb3IoCisgICAgICAgICAgICAiQmF6YWFyIHBhY2sgZm9ybWF0IDFc
biIKKyAgICAgICAgICAgICJCMFxubmFtZVxuXG4iCisgICAgICAgICAgICAiQjBcbm5hbWVcblxu
IgorICAgICAgICAgICAgIkUiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuRHVw
bGljYXRlUmVjb3JkTmFtZUVycm9yLCByZWFkZXIudmFsaWRhdGUpCisKKyAgICBkZWYgdGVzdF92
YWxpZGF0ZV91bmRlY29kZWFibGVfbmFtZShzZWxmKToKKyAgICAgICAgIiIiTmFtZXMgdGhhdCBh
cmVuJ3QgdmFsaWQgVVRGLTggY2F1c2UgdmFsaWRhdGUgdG8gZmFpbC4iIiIKKyAgICAgICAgcmVh
ZGVyID0gc2VsZi5nZXRfcmVhZGVyX2ZvcigiQmF6YWFyIHBhY2sgZm9ybWF0IDFcbkIwXG5ceGNj
XG5cbkUiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuSW52YWxpZFJlY29yZEVy
cm9yLCByZWFkZXIudmFsaWRhdGUpCisgICAgICAgIAogCiBjbGFzcyBUZXN0Qnl0ZXNSZWNvcmRS
ZWFkZXIodGVzdHMuVGVzdENhc2UpOgotICAgICIiIlRlc3RzIGZvciBwYXJzaW5nIEJ5dGVzIHJl
Y29yZHMgd2l0aCBCeXRlc1JlY29yZFJlYWRlci4iIiIKKyAgICAiIiJUZXN0cyBmb3IgcmVhZGlu
ZyBhbmQgdmFsaWRhdGluZyBCeXRlcyByZWNvcmRzIHdpdGggQnl0ZXNSZWNvcmRSZWFkZXIuIiIi
CiAKICAgICBkZWYgZ2V0X3JlYWRlcl9mb3Ioc2VsZiwgYnl0ZXMpOgogICAgICAgICBzdHJlYW0g
PSBTdHJpbmdJTyhieXRlcykKQEAgLTE4NSwyNiArMjIxLDI2IEBACiAgICAgICAgIG5hbWVzLgog
ICAgICAgICAiIiIKICAgICAgICAgcmVhZGVyID0gc2VsZi5nZXRfcmVhZGVyX2ZvcigiNVxuXG5h
YWFhYSIpCi0gICAgICAgIG5hbWVzLCBieXRlcyA9IHJlYWRlci5yZWFkKCkKKyAgICAgICAgbmFt
ZXMsIGdldF9ieXRlcyA9IHJlYWRlci5yZWFkKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChb
XSwgbmFtZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FhYWFhJywgYnl0ZXMpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FhYWFhJywgZ2V0X2J5dGVzKE5vbmUpKQogCiAgICAgZGVm
IHRlc3RfcmVjb3JkX3dpdGhfb25lX25hbWUoc2VsZik6CiAgICAgICAgICIiIlJlYWRpbmcgYSBC
eXRlcyByZWNvcmQgd2l0aCBvbmUgbmFtZSByZXR1cm5zIGEgbGlzdCBvZiBqdXN0IHRoYXQKICAg
ICAgICAgbmFtZS4KICAgICAgICAgIiIiCiAgICAgICAgIHJlYWRlciA9IHNlbGYuZ2V0X3JlYWRl
cl9mb3IoIjVcbm5hbWUxXG5cbmFhYWFhIikKLSAgICAgICAgbmFtZXMsIGJ5dGVzID0gcmVhZGVy
LnJlYWQoKQorICAgICAgICBuYW1lcywgZ2V0X2J5dGVzID0gcmVhZGVyLnJlYWQoKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKFsnbmFtZTEnXSwgbmFtZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ2FhYWFhJywgYnl0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FhYWFhJywg
Z2V0X2J5dGVzKE5vbmUpKQogCiAgICAgZGVmIHRlc3RfcmVjb3JkX3dpdGhfdHdvX25hbWVzKHNl
bGYpOgogICAgICAgICAiIiJSZWFkaW5nIGEgQnl0ZXMgcmVjb3JkIHdpdGggdHdvIG5hbWVzIHJl
dHVybnMgYSBsaXN0IG9mIGJvdGggbmFtZXMuCiAgICAgICAgICIiIgogICAgICAgICByZWFkZXIg
PSBzZWxmLmdldF9yZWFkZXJfZm9yKCI1XG5uYW1lMVxubmFtZTJcblxuYWFhYWEiKQotICAgICAg
ICBuYW1lcywgYnl0ZXMgPSByZWFkZXIucmVhZCgpCisgICAgICAgIG5hbWVzLCBnZXRfYnl0ZXMg
PSByZWFkZXIucmVhZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyduYW1lMScsICduYW1l
MiddLCBuYW1lcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWFhYWEnLCBieXRlcykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWFhYWEnLCBnZXRfYnl0ZXMoTm9uZSkpCiAKICAgICBk
ZWYgdGVzdF9pbnZhbGlkX2xlbmd0aChzZWxmKToKICAgICAgICAgIiIiSWYgdGhlIGxlbmd0aC1w
cmVmaXggaXMgbm90IGEgbnVtYmVyLCBwYXJzaW5nIHJhaXNlcwpAQCAtMjI1LDE2ICsyNjEsMTkg
QEAKICAgICAgICAgIiIiCiAgICAgICAgIGNvbXBsZXRlX3JlY29yZCA9ICI2XG5uYW1lXG5cbmFi
Y2RlZiIKICAgICAgICAgZm9yIGNvdW50IGluIHJhbmdlKDAsIGxlbihjb21wbGV0ZV9yZWNvcmQp
KToKLSAgICAgICAgICAgIHJlYWRlciA9IHNlbGYuZ2V0X3JlYWRlcl9mb3IoY29tcGxldGVfcmVj
b3JkWzpjb3VudF0pCi0gICAgICAgICAgICAjIFdlIGRvbid0IHVzZSBhc3NlcnRSYWlzZXMgdG8g
bWFrZSBkaWFnbm9zaW5nIGZhaWx1cmVzIGVhc2llci4KKyAgICAgICAgICAgIGluY29tcGxldGVf
cmVjb3JkID0gY29tcGxldGVfcmVjb3JkWzpjb3VudF0KKyAgICAgICAgICAgIHJlYWRlciA9IHNl
bGYuZ2V0X3JlYWRlcl9mb3IoaW5jb21wbGV0ZV9yZWNvcmQpCisgICAgICAgICAgICAjIFdlIGRv
bid0IHVzZSBhc3NlcnRSYWlzZXMgdG8gbWFrZSBkaWFnbm9zaW5nIGZhaWx1cmVzIGVhc2llcgor
ICAgICAgICAgICAgIyAoYXNzZXJ0UmFpc2VzIGRvZXNuJ3QgYWxsb3cgYSBjdXN0b20gZmFpbHVy
ZSBtZXNzYWdlKS4KICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZWFkZXIucmVh
ZCgpCisgICAgICAgICAgICAgICAgbmFtZXMsIHJlYWRfYnl0ZXMgPSByZWFkZXIucmVhZCgpCisg
ICAgICAgICAgICAgICAgcmVhZF9ieXRlcyhOb25lKQogICAgICAgICAgICAgZXhjZXB0IGVycm9y
cy5VbmV4cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAg
ICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgKICAgICAgICAgICAg
ICAgICAgICAgIlVuZXhwZWN0ZWRFbmRPZkNvbnRhaW5lckVycm9yIG5vdCByYWlzZWQgd2hlbiBw
YXJzaW5nICVyIgotICAgICAgICAgICAgICAgICAgICAlIChpbnB1dC5nZXR2YWx1ZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgJSAoaW5jb21wbGV0ZV9yZWNvcmQsKSkKIAogICAgIGRlZiB0ZXN0
X2luaXRpYWxfZW9mKHNlbGYpOgogICAgICAgICAiIiJFT0YgYmVmb3JlIGFueSBieXRlcyByZWFk
IGF0IGFsbC4iIiIKQEAgLTI1MSw3ICsyOTAsNyBAQAogICAgICAgICByZWFkZXIgPSBzZWxmLmdl
dF9yZWFkZXJfZm9yKCIxMjNcbm5hbWUiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJv
cnMuVW5leHBlY3RlZEVuZE9mQ29udGFpbmVyRXJyb3IsIHJlYWRlci5yZWFkKQogCi0gICAgZGVm
IHRlc3RfaW52YWxpZF9uYW1lX3doaXRlc3BhY2Uoc2VsZik6CisgICAgZGVmIHRlc3RfcmVhZF9p
bnZhbGlkX25hbWVfd2hpdGVzcGFjZShzZWxmKToKICAgICAgICAgIiIiTmFtZXMgbXVzdCBoYXZl
IG5vIHdoaXRlc3BhY2UuIiIiCiAgICAgICAgICMgQSBuYW1lIHdpdGggYSBzcGFjZS4KICAgICAg
ICAgcmVhZGVyID0gc2VsZi5nZXRfcmVhZGVyX2ZvcigiMFxuYmFkIG5hbWVcblxuIikKQEAgLTI2
NiwyMSArMzA1LDU3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5JbnZhbGlk
UmVjb3JkRXJyb3IsIHJlYWRlci5yZWFkKQogCiAgICAgZGVmIHRlc3RfdmFsaWRhdGVfd2hpdGVz
cGFjZV9pbl9uYW1lKHNlbGYpOgotICAgICAgICByZWFkZXIgPSBzZWxmLmdldF9yZWFkZXJfZm9y
KCIwXG5iYWQgbmFtZVxuXG5FIikKKyAgICAgICAgIiIiTmFtZXMgbXVzdCBoYXZlIG5vIHdoaXRl
c3BhY2UuIiIiCisgICAgICAgIHJlYWRlciA9IHNlbGYuZ2V0X3JlYWRlcl9mb3IoIjBcbmJhZCBu
YW1lXG5cbiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5JbnZhbGlkUmVjb3Jk
RXJyb3IsIHJlYWRlci52YWxpZGF0ZSkKIAogICAgIGRlZiB0ZXN0X3ZhbGlkYXRlX2ludGVycnVw
dGVkX3ByZWx1ZGUoc2VsZik6CisgICAgICAgICIiIkVPRiBkdXJpbmcgcmVhZGluZyBhIHJlY29y
ZCdzIHByZWx1ZGUgY2F1c2VzIHZhbGlkYXRlIHRvIGZhaWwuIiIiCiAgICAgICAgIHJlYWRlciA9
IHNlbGYuZ2V0X3JlYWRlcl9mb3IoIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAogICAg
ICAgICAgICAgZXJyb3JzLlVuZXhwZWN0ZWRFbmRPZkNvbnRhaW5lckVycm9yLCByZWFkZXIudmFs
aWRhdGUpCiAKICAgICBkZWYgdGVzdF92YWxpZGF0ZV9pbnRlcnJ1cHRlZF9ib2R5KHNlbGYpOgor
ICAgICAgICAiIiJFT0YgZHVyaW5nIHJlYWRpbmcgYSByZWNvcmQncyBib2R5IGNhdXNlcyB2YWxp
ZGF0ZSB0byBmYWlsLiIiIgogICAgICAgICByZWFkZXIgPSBzZWxmLmdldF9yZWFkZXJfZm9yKCIx
XG5cbiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAogICAgICAgICAgICAgZXJyb3JzLlVu
ZXhwZWN0ZWRFbmRPZkNvbnRhaW5lckVycm9yLCByZWFkZXIudmFsaWRhdGUpCiAKICAgICBkZWYg
dGVzdF92YWxpZGF0ZV91bnBhcnNlYWJsZV9sZW5ndGgoc2VsZik6CisgICAgICAgICIiIkFuIHVu
cGFyc2VhYmxlIHJlY29yZCBsZW5ndGggY2F1c2VzIHZhbGlkYXRlIHRvIGZhaWwuIiIiCiAgICAg
ICAgIHJlYWRlciA9IHNlbGYuZ2V0X3JlYWRlcl9mb3IoIlxuXG4iKQogICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcygKICAgICAgICAgICAgIGVycm9ycy5JbnZhbGlkUmVjb3JkRXJyb3IsIHJlYWRl
ci52YWxpZGF0ZSkKIAorICAgIGRlZiB0ZXN0X3ZhbGlkYXRlX3VuZGVjb2RlYWJsZV9uYW1lKHNl
bGYpOgorICAgICAgICAiIiJOYW1lcyB0aGF0IGFyZW4ndCB2YWxpZCBVVEYtOCBjYXVzZSB2YWxp
ZGF0ZSB0byBmYWlsLiIiIgorICAgICAgICByZWFkZXIgPSBzZWxmLmdldF9yZWFkZXJfZm9yKCIw
XG5ceGNjXG5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5JbnZhbGlkUmVj
b3JkRXJyb3IsIHJlYWRlci52YWxpZGF0ZSkKKworICAgIGRlZiB0ZXN0X3JlYWRfbWF4X2xlbmd0
aChzZWxmKToKKyAgICAgICAgIiIiSWYgdGhlIG1heF9sZW5ndGggcGFzc2VkIHRvIHRoZSBjYWxs
YWJsZSByZXR1cm5lZCBieSByZWFkIGlzIG5vdAorICAgICAgICBOb25lLCB0aGVuIG5vIG1vcmUg
dGhhbiB0aGF0IG1hbnkgYnl0ZXMgd2lsbCBiZSByZWFkLgorICAgICAgICAiIiIKKyAgICAgICAg
cmVhZGVyID0gc2VsZi5nZXRfcmVhZGVyX2ZvcigiNlxuXG5hYmNkZWYiKQorICAgICAgICBuYW1l
cywgZ2V0X2J5dGVzID0gcmVhZGVyLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdh
YmMnLCBnZXRfYnl0ZXMoMykpCisKKyAgICBkZWYgdGVzdF9yZWFkX25vX21heF9sZW5ndGgoc2Vs
Zik6CisgICAgICAgICIiIklmIHRoZSBtYXhfbGVuZ3RoIHBhc3NlZCB0byB0aGUgY2FsbGFibGUg
cmV0dXJuZWQgYnkgcmVhZCBpcyBOb25lLAorICAgICAgICB0aGVuIGFsbCB0aGUgYnl0ZXMgaW4g
dGhlIHJlY29yZCB3aWxsIGJlIHJlYWQuCisgICAgICAgICIiIgorICAgICAgICByZWFkZXIgPSBz
ZWxmLmdldF9yZWFkZXJfZm9yKCI2XG5cbmFiY2RlZiIpCisgICAgICAgIG5hbWVzLCBnZXRfYnl0
ZXMgPSByZWFkZXIucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiY2RlZicsIGdl
dF9ieXRlcyhOb25lKSkKKworICAgIGRlZiB0ZXN0X3JlcGVhdGVkX3JlYWRfY2FsbHMoc2VsZik6
CisgICAgICAgICIiIlJlcGVhdGVkIGNhbGxzIHRvIHRoZSBjYWxsYWJsZSByZXR1cm5lZCBmcm9t
IEJ5dGVzUmVjb3JkUmVhZGVyLnJlYWQKKyAgICAgICAgd2lsbCBub3QgcmVhZCBiZXlvbmQgdGhl
IGVuZCBvZiB0aGUgcmVjb3JkLgorICAgICAgICAiIiIKKyAgICAgICAgcmVhZGVyID0gc2VsZi5n
ZXRfcmVhZGVyX2ZvcigiNlxuXG5hYmNkZWZCM1xubmV4dC1yZWNvcmRcblhYWCIpCisgICAgICAg
IG5hbWVzLCBnZXRfYnl0ZXMgPSByZWFkZXIucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ2FiY2RlZicsIGdldF9ieXRlcyhOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
JywgZ2V0X2J5dGVzKE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBnZXRfYnl0
ZXMoOTkpKQorCisKCg==

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706141
... 12338-6u3900u6nkag66u8
# revision id: andrew.bennetts at canonical.com-20070614112338-6u3900u6nkag66u8
# sha1: 4b6b6a55b311d60cd183d95968eee13cf19834da
# inventory sha1: 081e0e32ad7202de78e01a41108696d39708b598
# parent ids:
#   andrew.bennetts at canonical.com-20070614055245-rtwk0vgz74fyyimo
# properties:
#   branch-nick: container-format

# message:
#   Add validate method to ContainerReader and BytesRecordReader.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Thu 2007-06-14 15:52:45.970999956 +1000

=== modified file bzrlib/errors.py // encoding:base64
LS0tIGJ6cmxpYi9lcnJvcnMucHkKKysrIGJ6cmxpYi9lcnJvcnMucHkKQEAgLTIxNzAsMyArMjE3
MCwxMSBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWFzb24pOgogICAgICAgICBzZWxmLnJl
YXNvbiA9IHJlYXNvbgogCisKK2NsYXNzIENvbnRhaW5lckhhc0V4Y2Vzc0RhdGFFcnJvcihDb250
YWluZXJFcnJvcik6CisKKyAgICBfZm10ID0gIkNvbnRhaW5lciBoYXMgZGF0YSBhZnRlciBlbmQg
bWFya2VyOiAlKGV4Y2VzcylyIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4Y2Vzcyk6Cisg
ICAgICAgIHNlbGYuZXhjZXNzID0gZXhjZXNzCisKCg==

=== modified file bzrlib/pack.py // encoding:base64
LS0tIGJ6cmxpYi9wYWNrLnB5CisrKyBienJsaWIvcGFjay5weQpAQCAtMTQ4LDEwICsxNDgsMzEg
QEAKICAgICAgICAgICAgICAgICAjIFVua25vd24gcmVjb3JkIHR5cGUuCiAgICAgICAgICAgICAg
ICAgcmFpc2UgZXJyb3JzLlVua25vd25SZWNvcmRUeXBlRXJyb3IocmVjb3JkX2tpbmQpCiAKKyAg
ICBkZWYgdmFsaWRhdGUoc2VsZik6CisgICAgICAgICIiIlZhbGlkYXRlIHRoaXMgY29udGFpbmVy
IGFuZCBpdHMgcmVjb3Jkcy4KKworICAgICAgICBZb3UgY2FuIGVpdGhlciB2YWxpZGF0ZSBvciBp
dGVyX3JlY29yZHMsIHlvdSBjYW4ndCBkbyBib3RoLgorCisgICAgICAgIDpyYWlzZXMgQ29udGFp
bmVyRXJyb3I6IGlmIHNvbWV0aGluZyBpcyBpbnZhbGlkLgorICAgICAgICAiIiIKKyAgICAgICAg
Zm9yIG5hbWVzLCBieXRlcyBpbiBzZWxmLml0ZXJfcmVjb3JkcygpOgorICAgICAgICAgICAgIyBY
WFg6IGJ5dGVzIGlzIHN0ciwgc2hvdWxkIGJlIGNhbGxhYmxlIHRvIGdldCBieXRlcy4KKyAgICAg
ICAgICAgICMgY2FsbGFibGUoKQorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlc3NfYnl0
ZXMgPSBzZWxmLnJlYWRlcl9mdW5jKDEpCisgICAgICAgIGlmIGV4Y2Vzc19ieXRlcyAhPSAnJzoK
KyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5Db250YWluZXJIYXNFeGNlc3NEYXRhRXJyb3IoZXhj
ZXNzX2J5dGVzKQorCiAKIGNsYXNzIEJ5dGVzUmVjb3JkUmVhZGVyKEJhc2VSZWFkZXIpOgogCiAg
ICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgICIiIlJlYWQgdGhpcyByZWNvcmQuCisKKyAgICAg
ICAgWW91IGNhbiBlaXRoZXIgdmFsaWRhdGUgb3IgcmVhZCwgeW91IGNhbid0IGRvIGJvdGguCisK
KyAgICAgICAgOnJldHVybnM6IChuYW1lcywgYnl0ZXMpCisgICAgICAgICIiIgogICAgICAgICAj
IFJlYWQgdGhlIGNvbnRlbnQgbGVuZ3RoLgogICAgICAgICBsZW5ndGhfbGluZSA9IHNlbGYuX3Jl
YWRfbGluZSgpCiAgICAgICAgIHRyeToKQEAgLTE3MywzICsxOTQsMTEgQEAKICAgICAgICAgICAg
IHJhaXNlIGVycm9ycy5VbmV4cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvcigpCiAgICAgICAgIHJl
dHVybiBuYW1lcywgYnl0ZXMKIAorICAgIGRlZiB2YWxpZGF0ZShzZWxmKToKKyAgICAgICAgIiIi
VmFsaWRhdGUgdGhpcyByZWNvcmQuCisKKyAgICAgICAgWW91IGNhbiBlaXRoZXIgdmFsaWRhdGUg
b3IgcmVhZCwgeW91IGNhbid0IGRvIGJvdGguCisKKyAgICAgICAgOnJhaXNlcyBDb250YWluZXJF
cnJvcjogaWYgdGhpcyByZWNvcmQgaXMgaW52YWxpZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNl
bGYucmVhZCgpCgo=

=== modified file bzrlib/tests/test_errors.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2Vycm9ycy5weQorKysgYnpybGliL3Rlc3RzL3Rlc3RfZXJy
b3JzLnB5CkBAIC0yOTMsNiArMjkzLDEzIEBACiAgICAgICAgICAgICAiSW52YWxpZCByZWNvcmQ6
IHh4eCIsCiAgICAgICAgICAgICBzdHIoZSkpCiAKKyAgICBkZWYgdGVzdF9jb250YWluZXJfaGFz
X2V4Y2Vzc19kYXRhKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHRoZSBmb3JtYXR0aW5nIG9mIENv
bnRhaW5lckhhc0V4Y2Vzc0RhdGFFcnJvci4iIiIKKyAgICAgICAgZSA9IGVycm9ycy5Db250YWlu
ZXJIYXNFeGNlc3NEYXRhRXJyb3IoImV4Y2VzcyBieXRlcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoCisgICAgICAgICAgICAiQ29udGFpbmVyIGhhcyBkYXRhIGFmdGVyIGVuZCBtYXJrZXI6
ICdleGNlc3MgYnl0ZXMnIiwKKyAgICAgICAgICAgIHN0cihlKSkKKwogCiBjbGFzcyBQYXNzVGhy
b3VnaEVycm9yKGVycm9ycy5CenJFcnJvcik6CiAgICAgCgo=

=== modified file bzrlib/tests/test_pack.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X3BhY2sucHkKKysrIGJ6cmxpYi90ZXN0cy90ZXN0X3BhY2su
cHkKQEAgLTg3LDYgKzg3LDExIEBACiAKIGNsYXNzIFRlc3RDb250YWluZXJSZWFkZXIodGVzdHMu
VGVzdENhc2UpOgogCisgICAgZGVmIGdldF9yZWFkZXJfZm9yKHNlbGYsIGJ5dGVzKToKKyAgICAg
ICAgc3RyZWFtID0gU3RyaW5nSU8oYnl0ZXMpCisgICAgICAgIHJlYWRlciA9IHBhY2suQ29udGFp
bmVyUmVhZGVyKHN0cmVhbS5yZWFkKQorICAgICAgICByZXR1cm4gcmVhZGVyCisKICAgICBkZWYg
dGVzdF9jb25zdHJ1Y3Qoc2VsZik6CiAgICAgICAgICIiIlRlc3QgY29uc3RydWN0aW5nIGEgQ29u
dGFpbmVyUmVhZGVyLgogICAgICAgICAKQEAgLTk3LDE0ICsxMDIsMTIgQEAKIAogICAgIGRlZiB0
ZXN0X2VtcHR5X2NvbnRhaW5lcihzZWxmKToKICAgICAgICAgIiIiUmVhZCBhbiBlbXB0eSBjb250
YWluZXIuIiIiCi0gICAgICAgIGlucHV0ID0gU3RyaW5nSU8oIkJhemFhciBwYWNrIGZvcm1hdCAx
XG5FIikKLSAgICAgICAgcmVhZGVyID0gcGFjay5Db250YWluZXJSZWFkZXIoaW5wdXQucmVhZCkK
KyAgICAgICAgcmVhZGVyID0gc2VsZi5nZXRfcmVhZGVyX2ZvcigiQmF6YWFyIHBhY2sgZm9ybWF0
IDFcbkUiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBsaXN0KHJlYWRlci5pdGVyX3Jl
Y29yZHMoKSkpCiAKICAgICBkZWYgdGVzdF91bmtub3duX2Zvcm1hdChzZWxmKToKICAgICAgICAg
IiIiVW5yZWNvZ25pc2VkIGNvbnRhaW5lciBmb3JtYXRzIHJhaXNlIFVua25vd25Db250YWluZXJG
b3JtYXRFcnJvci4iIiIKLSAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygidW5rbm93biBmb3JtYXRc
biIpCi0gICAgICAgIHJlYWRlciA9IHBhY2suQ29udGFpbmVyUmVhZGVyKGlucHV0LnJlYWQpCisg
ICAgICAgIHJlYWRlciA9IHNlbGYuZ2V0X3JlYWRlcl9mb3IoInVua25vd24gZm9ybWF0XG4iKQog
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKICAgICAgICAgICAgIGVycm9ycy5Vbmtub3duQ29u
dGFpbmVyRm9ybWF0RXJyb3IsIHJlYWRlci5pdGVyX3JlY29yZHMpCiAKQEAgLTExMiwxNiArMTE1
LDE0IEBACiAgICAgICAgICIiIkNvbnRhaW5lcnMgdGhhdCBkb24ndCBlbmQgd2l0aCBhbiBFbmQg
TWFya2VyIHJlY29yZCBzaG91bGQgY2F1c2UKICAgICAgICAgVW5leHBlY3RlZEVuZE9mQ29udGFp
bmVyRXJyb3IgdG8gYmUgcmFpc2VkLgogICAgICAgICAiIiIKLSAgICAgICAgaW5wdXQgPSBTdHJp
bmdJTygiQmF6YWFyIHBhY2sgZm9ybWF0IDFcbiIpCi0gICAgICAgIHJlYWRlciA9IHBhY2suQ29u
dGFpbmVyUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAgIHJlYWRlciA9IHNlbGYuZ2V0X3JlYWRl
cl9mb3IoIkJhemFhciBwYWNrIGZvcm1hdCAxXG4iKQogICAgICAgICBpdGVyYXRvciA9IHJlYWRl
ci5pdGVyX3JlY29yZHMoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKICAgICAgICAgICAg
IGVycm9ycy5VbmV4cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvciwgaXRlcmF0b3IubmV4dCkKIAog
ICAgIGRlZiB0ZXN0X3Vua25vd25fcmVjb3JkX3R5cGUoc2VsZik6CiAgICAgICAgICIiIlVua25v
d24gcmVjb3JkIHR5cGVzIGNhdXNlIFVua25vd25SZWNvcmRUeXBlRXJyb3IgdG8gYmUgcmFpc2Vk
LiIiIgotICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCJCYXphYXIgcGFjayBmb3JtYXQgMVxuWCIp
Ci0gICAgICAgIHJlYWRlciA9IHBhY2suQ29udGFpbmVyUmVhZGVyKGlucHV0LnJlYWQpCisgICAg
ICAgIHJlYWRlciA9IHNlbGYuZ2V0X3JlYWRlcl9mb3IoIkJhemFhciBwYWNrIGZvcm1hdCAxXG5Y
IikKICAgICAgICAgaXRlcmF0b3IgPSByZWFkZXIuaXRlcl9yZWNvcmRzKCkKICAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoCiAgICAgICAgICAgICBlcnJvcnMuVW5rbm93blJlY29yZFR5cGVFcnJv
ciwgaXRlcmF0b3IubmV4dCkKQEAgLTEzMywyMSArMTM0LDU3IEBACiAgICAgICAgIFRlc3RCeXRl
c1JlY29yZFJlYWRlci4gIFRoaXMgdGVzdCBpcyBoZXJlIHRvIGVuc3VyZSB0aGF0CiAgICAgICAg
IENvbnRhaW5lclJlYWRlcidzIGludGVncmF0aW9uIHdpdGggQnl0ZXNSZWNvcmRSZWFkZXIgaXMg
d29ya2luZy4KICAgICAgICAgIiIiCi0gICAgICAgIGlucHV0ID0gU3RyaW5nSU8oIkJhemFhciBw
YWNrIGZvcm1hdCAxXG5CNVxuXG5hYWFhYUUiKQotICAgICAgICByZWFkZXIgPSBwYWNrLkNvbnRh
aW5lclJlYWRlcihpbnB1dC5yZWFkKQorICAgICAgICByZWFkZXIgPSBzZWxmLmdldF9yZWFkZXJf
Zm9yKCJCYXphYXIgcGFjayBmb3JtYXQgMVxuQjVcblxuYWFhYWFFIikKICAgICAgICAgZXhwZWN0
ZWRfcmVjb3JkcyA9IFsoW10sICdhYWFhYScpXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4
cGVjdGVkX3JlY29yZHMsIGxpc3QocmVhZGVyLml0ZXJfcmVjb3JkcygpKSkKIAorICAgIGRlZiB0
ZXN0X3ZhbGlkYXRlX2VtcHR5X2NvbnRhaW5lcihzZWxmKToKKyAgICAgICAgcmVhZGVyID0gc2Vs
Zi5nZXRfcmVhZGVyX2ZvcigiQmF6YWFyIHBhY2sgZm9ybWF0IDFcbkUiKQorICAgICAgICAjIE5v
IGV4Y2VwdGlvbiByYWlzZWQKKyAgICAgICAgcmVhZGVyLnZhbGlkYXRlKCkKKworICAgIGRlZiB0
ZXN0X3ZhbGlkYXRlX25vbl9lbXB0eV92YWxpZF9jb250YWluZXIoc2VsZik6CisgICAgICAgIHJl
YWRlciA9IHNlbGYuZ2V0X3JlYWRlcl9mb3IoIkJhemFhciBwYWNrIGZvcm1hdCAxXG5CM1xubmFt
ZVxuXG5hYmNFIikKKyAgICAgICAgIyBObyBleGNlcHRpb24gcmFpc2VkCisgICAgICAgIHJlYWRl
ci52YWxpZGF0ZSgpCisKKyAgICBkZWYgdGVzdF92YWxpZGF0ZV9iYWRfZm9ybWF0KHNlbGYpOgor
ICAgICAgICBpbnB1dHMgPSBbIiIsICJ4IiwgIkJhemFhciBwYWNrIGZvcm1hdCAxIiwgImJhZFxu
Il0KKyAgICAgICAgZm9yIGlucHV0IGluIGlucHV0czoKKyAgICAgICAgICAgIHJlYWRlciA9IHNl
bGYuZ2V0X3JlYWRlcl9mb3IoaW5wdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygK
KyAgICAgICAgICAgICAgICAoZXJyb3JzLlVuZXhwZWN0ZWRFbmRPZkNvbnRhaW5lckVycm9yLAor
ICAgICAgICAgICAgICAgICBlcnJvcnMuVW5rbm93bkNvbnRhaW5lckZvcm1hdEVycm9yKSwKKyAg
ICAgICAgICAgICAgICByZWFkZXIudmFsaWRhdGUpCisKKyAgICBkZWYgdGVzdF92YWxpZGF0ZV9i
YWRfcmVjb3JkX21hcmtlcihzZWxmKToKKyAgICAgICAgcmVhZGVyID0gc2VsZi5nZXRfcmVhZGVy
X2ZvcigiQmF6YWFyIHBhY2sgZm9ybWF0IDFcblgiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhlcnJvcnMuVW5rbm93blJlY29yZFR5cGVFcnJvciwgcmVhZGVyLnZhbGlkYXRlKQorCisgICAg
ZGVmIHRlc3RfdmFsaWRhdGVfZGF0YV9hZnRlcl9lbmRfbWFya2VyKHNlbGYpOgorICAgICAgICBy
ZWFkZXIgPSBzZWxmLmdldF9yZWFkZXJfZm9yKCJCYXphYXIgcGFjayBmb3JtYXQgMVxuRWNydWQi
KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGVycm9ycy5Db250YWlu
ZXJIYXNFeGNlc3NEYXRhRXJyb3IsIHJlYWRlci52YWxpZGF0ZSkKKworICAgIGRlZiB0ZXN0X3Zh
bGlkYXRlX25vX2VuZF9tYXJrZXIoc2VsZik6CisgICAgICAgIHJlYWRlciA9IHNlbGYuZ2V0X3Jl
YWRlcl9mb3IoIkJhemFhciBwYWNrIGZvcm1hdCAxXG4iKQorICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcygKKyAgICAgICAgICAgIGVycm9ycy5VbmV4cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvciwg
cmVhZGVyLnZhbGlkYXRlKQorCiAKIGNsYXNzIFRlc3RCeXRlc1JlY29yZFJlYWRlcih0ZXN0cy5U
ZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgZm9yIHBhcnNpbmcgQnl0ZXMgcmVjb3JkcyB3aXRoIEJ5
dGVzUmVjb3JkUmVhZGVyLiIiIgogCisgICAgZGVmIGdldF9yZWFkZXJfZm9yKHNlbGYsIGJ5dGVz
KToKKyAgICAgICAgc3RyZWFtID0gU3RyaW5nSU8oYnl0ZXMpCisgICAgICAgIHJlYWRlciA9IHBh
Y2suQnl0ZXNSZWNvcmRSZWFkZXIoc3RyZWFtLnJlYWQpCisgICAgICAgIHJldHVybiByZWFkZXIK
KwogICAgIGRlZiB0ZXN0X3JlY29yZF93aXRoX25vX25hbWUoc2VsZik6CiAgICAgICAgICIiIlJl
YWRpbmcgYSBCeXRlcyByZWNvcmQgd2l0aCBubyBuYW1lIHJldHVybnMgYW4gZW1wdHkgbGlzdCBv
ZgogICAgICAgICBuYW1lcy4KICAgICAgICAgIiIiCi0gICAgICAgIGlucHV0ID0gU3RyaW5nSU8o
IjVcblxuYWFhYWEiKQotICAgICAgICByZWFkZXIgPSBwYWNrLkJ5dGVzUmVjb3JkUmVhZGVyKGlu
cHV0LnJlYWQpCisgICAgICAgIHJlYWRlciA9IHNlbGYuZ2V0X3JlYWRlcl9mb3IoIjVcblxuYWFh
YWEiKQogICAgICAgICBuYW1lcywgYnl0ZXMgPSByZWFkZXIucmVhZCgpCiAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoW10sIG5hbWVzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYWFhYScs
IGJ5dGVzKQpAQCAtMTU2LDggKzE5Myw3IEBACiAgICAgICAgICIiIlJlYWRpbmcgYSBCeXRlcyBy
ZWNvcmQgd2l0aCBvbmUgbmFtZSByZXR1cm5zIGEgbGlzdCBvZiBqdXN0IHRoYXQKICAgICAgICAg
bmFtZS4KICAgICAgICAgIiIiCi0gICAgICAgIGlucHV0ID0gU3RyaW5nSU8oIjVcbm5hbWUxXG5c
bmFhYWFhIikKLSAgICAgICAgcmVhZGVyID0gcGFjay5CeXRlc1JlY29yZFJlYWRlcihpbnB1dC5y
ZWFkKQorICAgICAgICByZWFkZXIgPSBzZWxmLmdldF9yZWFkZXJfZm9yKCI1XG5uYW1lMVxuXG5h
YWFhYSIpCiAgICAgICAgIG5hbWVzLCBieXRlcyA9IHJlYWRlci5yZWFkKCkKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChbJ25hbWUxJ10sIG5hbWVzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCdhYWFhYScsIGJ5dGVzKQpAQCAtMTY1LDggKzIwMSw3IEBACiAgICAgZGVmIHRlc3RfcmVjb3Jk
X3dpdGhfdHdvX25hbWVzKHNlbGYpOgogICAgICAgICAiIiJSZWFkaW5nIGEgQnl0ZXMgcmVjb3Jk
IHdpdGggdHdvIG5hbWVzIHJldHVybnMgYSBsaXN0IG9mIGJvdGggbmFtZXMuCiAgICAgICAgICIi
IgotICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCI1XG5uYW1lMVxubmFtZTJcblxuYWFhYWEiKQot
ICAgICAgICByZWFkZXIgPSBwYWNrLkJ5dGVzUmVjb3JkUmVhZGVyKGlucHV0LnJlYWQpCisgICAg
ICAgIHJlYWRlciA9IHNlbGYuZ2V0X3JlYWRlcl9mb3IoIjVcbm5hbWUxXG5uYW1lMlxuXG5hYWFh
YSIpCiAgICAgICAgIG5hbWVzLCBieXRlcyA9IHJlYWRlci5yZWFkKCkKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChbJ25hbWUxJywgJ25hbWUyJ10sIG5hbWVzKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdhYWFhYScsIGJ5dGVzKQpAQCAtMTc1LDggKzIxMCw3IEBACiAgICAgICAgICIiIklm
IHRoZSBsZW5ndGgtcHJlZml4IGlzIG5vdCBhIG51bWJlciwgcGFyc2luZyByYWlzZXMKICAgICAg
ICAgSW52YWxpZFJlY29yZEVycm9yLgogICAgICAgICAiIiIKLSAgICAgICAgaW5wdXQgPSBTdHJp
bmdJTygibm90IGEgbnVtYmVyXG4iKQotICAgICAgICByZWFkZXIgPSBwYWNrLkJ5dGVzUmVjb3Jk
UmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAgIHJlYWRlciA9IHNlbGYuZ2V0X3JlYWRlcl9mb3Io
Im5vdCBhIG51bWJlclxuIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLkludmFs
aWRSZWNvcmRFcnJvciwgcmVhZGVyLnJlYWQpCiAKICAgICBkZWYgdGVzdF9lYXJseV9lb2Yoc2Vs
Zik6CkBAIC0xOTEsOCArMjI1LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGNvbXBsZXRlX3Jl
Y29yZCA9ICI2XG5uYW1lXG5cbmFiY2RlZiIKICAgICAgICAgZm9yIGNvdW50IGluIHJhbmdlKDAs
IGxlbihjb21wbGV0ZV9yZWNvcmQpKToKLSAgICAgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oY29t
cGxldGVfcmVjb3JkWzpjb3VudF0pCi0gICAgICAgICAgICByZWFkZXIgPSBwYWNrLkJ5dGVzUmVj
b3JkUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAgICAgICByZWFkZXIgPSBzZWxmLmdldF9yZWFk
ZXJfZm9yKGNvbXBsZXRlX3JlY29yZFs6Y291bnRdKQogICAgICAgICAgICAgIyBXZSBkb24ndCB1
c2UgYXNzZXJ0UmFpc2VzIHRvIG1ha2UgZGlhZ25vc2luZyBmYWlsdXJlcyBlYXNpZXIuCiAgICAg
ICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWQoKQpAQCAtMjA1LDM3ICsy
MzgsNDkgQEAKIAogICAgIGRlZiB0ZXN0X2luaXRpYWxfZW9mKHNlbGYpOgogICAgICAgICAiIiJF
T0YgYmVmb3JlIGFueSBieXRlcyByZWFkIGF0IGFsbC4iIiIKLSAgICAgICAgaW5wdXQgPSBTdHJp
bmdJTygiIikKLSAgICAgICAgcmVhZGVyID0gcGFjay5CeXRlc1JlY29yZFJlYWRlcihpbnB1dC5y
ZWFkKQorICAgICAgICByZWFkZXIgPSBzZWxmLmdldF9yZWFkZXJfZm9yKCIiKQogICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuVW5leHBlY3RlZEVuZE9mQ29udGFpbmVyRXJyb3IsIHJl
YWRlci5yZWFkKQogCiAgICAgZGVmIHRlc3RfZW9mX2FmdGVyX2xlbmd0aChzZWxmKToKICAgICAg
ICAgIiIiRU9GIGFmdGVyIHJlYWRpbmcgdGhlIGxlbmd0aCBhbmQgYmVmb3JlIHJlYWRpbmcgbmFt
ZShzKS4iIiIKLSAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygiMTIzXG4iKQotICAgICAgICByZWFk
ZXIgPSBwYWNrLkJ5dGVzUmVjb3JkUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAgIHJlYWRlciA9
IHNlbGYuZ2V0X3JlYWRlcl9mb3IoIjEyM1xuIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
ZXJyb3JzLlVuZXhwZWN0ZWRFbmRPZkNvbnRhaW5lckVycm9yLCByZWFkZXIucmVhZCkKIAogICAg
IGRlZiB0ZXN0X2VvZl9kdXJpbmdfbmFtZShzZWxmKToKICAgICAgICAgIiIiRU9GIGR1cmluZyBy
ZWFkaW5nIGEgbmFtZS4iIiIKLSAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygiMTIzXG5uYW1lIikK
LSAgICAgICAgcmVhZGVyID0gcGFjay5CeXRlc1JlY29yZFJlYWRlcihpbnB1dC5yZWFkKQorICAg
ICAgICByZWFkZXIgPSBzZWxmLmdldF9yZWFkZXJfZm9yKCIxMjNcbm5hbWUiKQogICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuVW5leHBlY3RlZEVuZE9mQ29udGFpbmVyRXJyb3IsIHJl
YWRlci5yZWFkKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZF9uYW1lX3doaXRlc3BhY2Uoc2VsZik6
CiAgICAgICAgICIiIk5hbWVzIG11c3QgaGF2ZSBubyB3aGl0ZXNwYWNlLiIiIgogICAgICAgICAj
IEEgbmFtZSB3aXRoIGEgc3BhY2UuCi0gICAgICAgIGlucHV0ID0gU3RyaW5nSU8oIjBcbmJhZCBu
YW1lXG5cbiIpCi0gICAgICAgIHJlYWRlciA9IHBhY2suQnl0ZXNSZWNvcmRSZWFkZXIoaW5wdXQu
cmVhZCkKKyAgICAgICAgcmVhZGVyID0gc2VsZi5nZXRfcmVhZGVyX2ZvcigiMFxuYmFkIG5hbWVc
blxuIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLkludmFsaWRSZWNvcmRFcnJv
ciwgcmVhZGVyLnJlYWQpCiAKICAgICAgICAgIyBBIG5hbWUgd2l0aCBhIHRhYi4KLSAgICAgICAg
aW5wdXQgPSBTdHJpbmdJTygiMFxuYmFkXHRuYW1lXG5cbiIpCi0gICAgICAgIHJlYWRlciA9IHBh
Y2suQnl0ZXNSZWNvcmRSZWFkZXIoaW5wdXQucmVhZCkKKyAgICAgICAgcmVhZGVyID0gc2VsZi5n
ZXRfcmVhZGVyX2ZvcigiMFxuYmFkXHRuYW1lXG5cbiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKGVycm9ycy5JbnZhbGlkUmVjb3JkRXJyb3IsIHJlYWRlci5yZWFkKQogCiAgICAgICAgICMg
QSBuYW1lIHdpdGggYSB2ZXJ0aWNhbCB0YWIuCi0gICAgICAgIGlucHV0ID0gU3RyaW5nSU8oIjBc
bmJhZFx2bmFtZVxuXG4iKQotICAgICAgICByZWFkZXIgPSBwYWNrLkJ5dGVzUmVjb3JkUmVhZGVy
KGlucHV0LnJlYWQpCisgICAgICAgIHJlYWRlciA9IHNlbGYuZ2V0X3JlYWRlcl9mb3IoIjBcbmJh
ZFx2bmFtZVxuXG4iKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuSW52YWxpZFJl
Y29yZEVycm9yLCByZWFkZXIucmVhZCkKIAotICAgICAgICAgICAgICAgIAorICAgIGRlZiB0ZXN0
X3ZhbGlkYXRlX3doaXRlc3BhY2VfaW5fbmFtZShzZWxmKToKKyAgICAgICAgcmVhZGVyID0gc2Vs
Zi5nZXRfcmVhZGVyX2ZvcigiMFxuYmFkIG5hbWVcblxuRSIpCisgICAgICAgIHNlbGYuYXNzZXJ0
UmFpc2VzKGVycm9ycy5JbnZhbGlkUmVjb3JkRXJyb3IsIHJlYWRlci52YWxpZGF0ZSkKKworICAg
IGRlZiB0ZXN0X3ZhbGlkYXRlX2ludGVycnVwdGVkX3ByZWx1ZGUoc2VsZik6CisgICAgICAgIHJl
YWRlciA9IHNlbGYuZ2V0X3JlYWRlcl9mb3IoIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KAorICAgICAgICAgICAgZXJyb3JzLlVuZXhwZWN0ZWRFbmRPZkNvbnRhaW5lckVycm9yLCByZWFk
ZXIudmFsaWRhdGUpCisKKyAgICBkZWYgdGVzdF92YWxpZGF0ZV9pbnRlcnJ1cHRlZF9ib2R5KHNl
bGYpOgorICAgICAgICByZWFkZXIgPSBzZWxmLmdldF9yZWFkZXJfZm9yKCIxXG5cbiIpCisgICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZXJyb3JzLlVuZXhwZWN0ZWRFbmRP
ZkNvbnRhaW5lckVycm9yLCByZWFkZXIudmFsaWRhdGUpCisKKyAgICBkZWYgdGVzdF92YWxpZGF0
ZV91bnBhcnNlYWJsZV9sZW5ndGgoc2VsZik6CisgICAgICAgIHJlYWRlciA9IHNlbGYuZ2V0X3Jl
YWRlcl9mb3IoIlxuXG4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAg
IGVycm9ycy5JbnZhbGlkUmVjb3JkRXJyb3IsIHJlYWRlci52YWxpZGF0ZSkKKwoK

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706140
... 55245-rtwk0vgz74fyyimo
# revision id: andrew.bennetts at canonical.com-20070614055245-rtwk0vgz74fyyimo
# sha1: b477a91c8da8bbf3ba8e413513df22482e1c012a
# inventory sha1: d7ee73d4e204b6d1de006eb5e0048618ce6877ac
# parent ids:
#   andrew.bennetts at canonical.com-20070614022816-ne4h4qk0j50x6n26
# properties:
#   branch-nick: container-format

# message:
#   Update format marker in container-format.txt to be in sync with the code.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Thu 2007-06-14 12:28:16.483000040 +1000

=== modified file doc/developers/container-format.txt // encoding:base64
LS0tIGRvYy9kZXZlbG9wZXJzL2NvbnRhaW5lci1mb3JtYXQudHh0CisrKyBkb2MvZGV2ZWxvcGVy
cy9jb250YWluZXItZm9ybWF0LnR4dApAQCAtMTc2LDcgKzE3Niw3IEBACiAKIFRoZSBmb3JtYXQg
aXM6CiAKLSAgKiBhICoqY29udGFpbmVyIGxlYWQtaW4qKiwgImBgYnpyIHBhY2sgZm9ybWF0IDFc
bmBgIiwKKyAgKiBhICoqY29udGFpbmVyIGxlYWQtaW4qKiwgImBgQmF6YWFyIHBhY2sgZm9ybWF0
IDFcbmBgIiwKICAgKiBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSAqKnJlY29yZHMqKi4KIAogQSBy
ZWNvcmQgaXM6Cgo=

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706140
... 22816-ne4h4qk0j50x6n26
# revision id: andrew.bennetts at canonical.com-20070614022816-ne4h4qk0j50x6n26
# sha1: 2ceb88e8b033d468137479ba6ca487ef756d644e
# inventory sha1: 3a4f42e7e813ac92fef28ac3e6324f9bf7824854
# parent ids:
#   andrew.bennetts at canonical.com-20070614015707-hncvkzg0mn4w0w31
# properties:
#   branch-nick: container-format

# message:
#   Some small improvements to the pack format, and also merge in bzr.dev.
#   
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Thu 2007-06-14 11:57:07.026999950 +1000

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706140
... 15707-hncvkzg0mn4w0w31
# revision id: andrew.bennetts at canonical.com-20070614015707-hncvkzg0mn4w0w31
# sha1: 9eb9ef0f95ac191aa15bf4485d94a493136b50ad
# inventory sha1: eeea244e83d87c3bfd2ab15131bc2a7b03b71950
# parent ids:
#   andrew.bennetts at canonical.com-20070612015639-z378i21fmcnd5j4x
#   andrew.bennetts at canonical.com-20070613105602-1bagfibob1rh21mg
# properties:
#   branch-nick: container-format

# message:
#   Merge from bzr.dev.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Wed 2007-06-13 20:56:02.000000000 +1000

=== added file bzrlib/pack.py // file-id:container.py-20070607160755-tr8zc26q18
... rn0jnb-1 // last-changed:andrew.bennetts at canonical.com-20070613105446-ukb9k
... np9dmy57v74 // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3BhY2sucHkKQEAgLTAsMCArMSwxNzUgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDA3IENhbm9uaWNhbCBMdGQKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcg
IFVTQQorCisiIiJDb250YWluZXIgZm9ybWF0IGZvciBCYXphYXIgZGF0YS4KKworIkNvbnRhaW5l
cnMiIGFuZCAicmVjb3JkcyIgYXJlIGRlc2NyaWJlZCBpbiBkb2MvZGV2ZWxvcGVycy9jb250YWlu
ZXItZm9ybWF0LnR4dC4KKyIiIgorCitpbXBvcnQgcmUKKworZnJvbSBienJsaWIgaW1wb3J0IGVy
cm9ycworCisKK0ZPUk1BVF9PTkUgPSAiQmF6YWFyIHBhY2sgZm9ybWF0IDEiCisKKworX3doaXRl
c3BhY2VfcmUgPSByZS5jb21waWxlKCdbXHRcblx4MGJceDBjXHIgXScpCisKKworZGVmIF9jaGVj
a19uYW1lKG5hbWUpOgorICAgICIiIkRvIHNvbWUgYmFzaWMgY2hlY2tpbmcgb2YgJ25hbWUnLgor
ICAgIAorICAgIEF0IHRoZSBtb21lbnQsIHRoaXMganVzdCBjaGVja3MgdGhhdCB0aGVyZSBhcmUg
bm8gd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIGEKKyAgICBuYW1lLgorCisgICAgOnJhaXNlcyBJ
bnZhbGlkUmVjb3JkRXJyb3I6IGlmIG5hbWUgaXMgbm90IHZhbGlkLgorICAgICIiIgorICAgICMg
WFhYOiBjb25zaWRlciBjaGVja2luZyB0aGF0IG5hbWUgaXMgYSBzdHIgb2YgdmFsaWQgVVRGLTgg
dG9vPworICAgIGlmIF93aGl0ZXNwYWNlX3JlLnNlYXJjaChuYW1lKSBpcyBub3QgTm9uZToKKyAg
ICAgICAgcmFpc2UgZXJyb3JzLkludmFsaWRSZWNvcmRFcnJvcigiJXIgaXMgbm90IGEgdmFsaWQg
bmFtZS4iICUgKG5hbWUsKSkKKworCitjbGFzcyBDb250YWluZXJXcml0ZXIob2JqZWN0KToKKyAg
ICAiIiJBIGNsYXNzIGZvciB3cml0aW5nIGNvbnRhaW5lcnMuIiIiCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgd3JpdGVfZnVuYyk6CisgICAgICAgICIiIkNvbnN0cnVjdG9yLgorCisgICAgICAg
IDpwYXJhbSB3cml0ZV9mdW5jOiBhIGNhbGxhYmxlIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0
aGlzCisgICAgICAgICAgICBDb250YWluZXJXcml0ZXIgbmVlZHMgdG8gd3JpdGUgc29tZSBieXRl
cy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYud3JpdGVfZnVuYyA9IHdyaXRlX2Z1bmMKKwor
ICAgIGRlZiBiZWdpbihzZWxmKToKKyAgICAgICAgIiIiQmVnaW4gd3JpdGluZyBhIGNvbnRhaW5l
ci4iIiIKKyAgICAgICAgc2VsZi53cml0ZV9mdW5jKEZPUk1BVF9PTkUgKyAiXG4iKQorCisgICAg
ZGVmIGVuZChzZWxmKToKKyAgICAgICAgIiIiRmluaXNoIHdyaXRpbmcgYSBjb250YWluZXIuIiIi
CisgICAgICAgIHNlbGYud3JpdGVfZnVuYygiRSIpCisKKyAgICBkZWYgYWRkX2J5dGVzX3JlY29y
ZChzZWxmLCBieXRlcywgbmFtZXMpOgorICAgICAgICAiIiJBZGQgYSBCeXRlcyByZWNvcmQgd2l0
aCB0aGUgZ2l2ZW4gbmFtZXMuIiIiCisgICAgICAgICMgS2luZCBtYXJrZXIKKyAgICAgICAgc2Vs
Zi53cml0ZV9mdW5jKCJCIikKKyAgICAgICAgIyBMZW5ndGgKKyAgICAgICAgc2VsZi53cml0ZV9m
dW5jKHN0cihsZW4oYnl0ZXMpKSArICJcbiIpCisgICAgICAgICMgTmFtZXMKKyAgICAgICAgZm9y
IG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICAjIE1ha2Ugc3VyZSB3ZSdyZSB3cml0aW5nIHZh
bGlkIG5hbWVzLiAgTm90ZSB0aGF0IHdlIHdpbGwgbGVhdmUgYQorICAgICAgICAgICAgIyBoYWxm
LXdyaXR0ZW4gcmVjb3JkIGlmIGEgbmFtZSBpcyBiYWQhCisgICAgICAgICAgICBfY2hlY2tfbmFt
ZShuYW1lKQorICAgICAgICAgICAgc2VsZi53cml0ZV9mdW5jKG5hbWUgKyAiXG4iKQorICAgICAg
ICAjIEVuZCBvZiBoZWFkZXJzCisgICAgICAgIHNlbGYud3JpdGVfZnVuYygiXG4iKQorICAgICAg
ICAjIEZpbmFsbHksIHRoZSBjb250ZW50cy4KKyAgICAgICAgc2VsZi53cml0ZV9mdW5jKGJ5dGVz
KQorCisKK2NsYXNzIEJhc2VSZWFkZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCByZWFkZXJfZnVuYyk6CisgICAgICAgICIiIkNvbnN0cnVjdG9yLgorCisgICAgICAgIDpwYXJh
bSByZWFkZXJfZnVuYzogYSBjYWxsYWJsZSB0aGF0IHRha2VzIG9uZSBvcHRpb25hbCBhcmd1bWVu
dCwKKyAgICAgICAgICAgIGBgc2l6ZWBgLCBhbmQgcmV0dXJucyBhdCBtb3N0IHRoYXQgbWFueSBi
eXRlcy4gIFdoZW4gdGhlIGNhbGxhYmxlCisgICAgICAgICAgICByZXR1cm5zIGxlc3MgdGhhbiB0
aGUgcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcywgdGhlbiB0aGUgZW5kIG9mIHRoZQorICAgICAg
ICAgICAgZmlsZS9zdHJlYW0gaGFzIGJlZW4gcmVhY2hlZC4KKyAgICAgICAgIiIiCisgICAgICAg
IHNlbGYucmVhZGVyX2Z1bmMgPSByZWFkZXJfZnVuYworCisgICAgZGVmIF9yZWFkX2xpbmUoc2Vs
Zik6CisgICAgICAgICIiIlJlYWQgYSBsaW5lIGZyb20gdGhlIGlucHV0IHN0cmVhbS4KKworICAg
ICAgICBUaGlzIGlzIGEgc2ltcGxlIGJ1dCBpbmVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiB0aGF0
IGp1c3QgcmVhZHMgb25lIGJ5dGUKKyAgICAgICAgYXQgYSB0aW1lLiAgTGluZXMgc2hvdWxkIG5v
dCBiZSB2ZXJ5IGxvbmcsIHNvIHRoaXMgaXMgcHJvYmFibHkKKyAgICAgICAgdG9sZXJhYmxlLgor
CisgICAgICAgIDpyZXR1cm5zOiBhIGxpbmUsIHdpdGhvdXQgdGhlIHRyYWlsaW5nIG5ld2xpbmUK
KyAgICAgICAgIiIiCisgICAgICAgICMgWFhYOiBIYXZlIGEgbWF4aW11bSBsaW5lIGxlbmd0aCwg
dG8gcHJldmVudCBtYWxpY2lvdXMgaW5wdXQgZnJvbQorICAgICAgICAjIGNvbnN1bWluZyBhbiB1
bnJlYXNvbmFibGUgYW1vdW50IG9mIHJlc291cmNlcz8KKyAgICAgICAgIyAgIC0tIEFuZHJldyBC
ZW5uZXR0cywgMjAwNy0wNS0wNy4KKyAgICAgICAgbGluZSA9ICcnCisgICAgICAgIHdoaWxlIG5v
dCBsaW5lLmVuZHN3aXRoKCdcbicpOgorICAgICAgICAgICAgYnl0ZSA9IHNlbGYucmVhZGVyX2Z1
bmMoMSkKKyAgICAgICAgICAgIGlmIGJ5dGUgPT0gJyc6CisgICAgICAgICAgICAgICAgcmFpc2Ug
ZXJyb3JzLlVuZXhwZWN0ZWRFbmRPZkNvbnRhaW5lckVycm9yKCkKKyAgICAgICAgICAgIGxpbmUg
Kz0gYnl0ZQorICAgICAgICByZXR1cm4gbGluZVs6LTFdCisKKworY2xhc3MgQ29udGFpbmVyUmVh
ZGVyKEJhc2VSZWFkZXIpOgorICAgICIiIkEgY2xhc3MgZm9yIHJlYWRpbmcgQmF6YWFyJ3MgY29u
dGFpbmVyIGZvcm1hdC4iIiIKKworICAgIGRlZiBpdGVyX3JlY29yZHMoc2VsZik6CisgICAgICAg
ICIiIkl0ZXJhdGUgb3ZlciB0aGUgY29udGFpbmVyLCB5aWVsZGluZyBlYWNoIHJlY29yZCBhcyBp
dCBpcyByZWFkLgorCisgICAgICAgIEVhY2ggeWllbGRlZCByZWNvcmQgd2lsbCBiZSBhIDItdHVw
bGUgb2YgKG5hbWVzLCBieXRlcyksIHdoZXJlIG5hbWVzIGlzCisgICAgICAgIGEgYGBsaXN0YGAg
YW5kIGJ5dGVzIGlzIGEgYGBzdHJgYC4KKworICAgICAgICA6cmFpc2VzIFVua25vd25Db250YWlu
ZXJGb3JtYXRFcnJvcjogaWYgdGhlIGZvcm1hdCBvZiB0aGUgY29udGFpbmVyIGlzCisgICAgICAg
ICAgICB1bnJlY29nbmlzZWQuCisgICAgICAgICIiIgorICAgICAgICBmb3JtYXQgPSBzZWxmLl9y
ZWFkX2xpbmUoKQorICAgICAgICBpZiBmb3JtYXQgIT0gRk9STUFUX09ORToKKyAgICAgICAgICAg
IHJhaXNlIGVycm9ycy5Vbmtub3duQ29udGFpbmVyRm9ybWF0RXJyb3IoZm9ybWF0KQorICAgICAg
ICByZXR1cm4gc2VsZi5faXRlcl9yZWNvcmRzKCkKKyAgICAKKyAgICBkZWYgX2l0ZXJfcmVjb3Jk
cyhzZWxmKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHJlY29yZF9raW5kID0g
c2VsZi5yZWFkZXJfZnVuYygxKQorICAgICAgICAgICAgaWYgcmVjb3JkX2tpbmQgPT0gJ0InOgor
ICAgICAgICAgICAgICAgICMgQnl0ZXMgcmVjb3JkLgorICAgICAgICAgICAgICAgIHJlYWRlciA9
IEJ5dGVzUmVjb3JkUmVhZGVyKHNlbGYucmVhZGVyX2Z1bmMpCisgICAgICAgICAgICAgICAgeWll
bGQgcmVhZGVyLnJlYWQoKQorICAgICAgICAgICAgZWxpZiByZWNvcmRfa2luZCA9PSAnRSc6Cisg
ICAgICAgICAgICAgICAgIyBFbmQgbWFya2VyLiAgVGhlcmUgYXJlIG5vIG1vcmUgcmVjb3Jkcy4K
KyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsaWYgcmVjb3JkX2tpbmQgPT0g
Jyc6CisgICAgICAgICAgICAgICAgIyBFbmQgb2Ygc3RyZWFtIGVuY291bnRlcmVkLCBidXQgbm8g
RW5kIE1hcmtlciByZWNvcmQgc2Vlbiwgc28KKyAgICAgICAgICAgICAgICAjIHRoaXMgY29udGFp
bmVyIGlzIGluY29tcGxldGUuCisgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3JzLlVuZXhwZWN0
ZWRFbmRPZkNvbnRhaW5lckVycm9yKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgIyBVbmtub3duIHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgIHJhaXNlIGVycm9ycy5V
bmtub3duUmVjb3JkVHlwZUVycm9yKHJlY29yZF9raW5kKQorCisKK2NsYXNzIEJ5dGVzUmVjb3Jk
UmVhZGVyKEJhc2VSZWFkZXIpOgorCisgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgICMgUmVh
ZCB0aGUgY29udGVudCBsZW5ndGguCisgICAgICAgIGxlbmd0aF9saW5lID0gc2VsZi5fcmVhZF9s
aW5lKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGVuZ3RoID0gaW50KGxlbmd0aF9saW5l
KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGVycm9ycy5J
bnZhbGlkUmVjb3JkRXJyb3IoCisgICAgICAgICAgICAgICAgIiVyIGlzIG5vdCBhIHZhbGlkIGxl
bmd0aC4iICUgKGxlbmd0aF9saW5lLCkpCisgICAgICAgIAorICAgICAgICAjIFJlYWQgdGhlIGxp
c3Qgb2YgbmFtZXMuCisgICAgICAgIG5hbWVzID0gW10KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAg
ICAgICAgICAgIG5hbWUgPSBzZWxmLl9yZWFkX2xpbmUoKQorICAgICAgICAgICAgaWYgbmFtZSA9
PSAnJzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgX2NoZWNrX25hbWUobmFt
ZSkKKyAgICAgICAgICAgIG5hbWVzLmFwcGVuZChuYW1lKQorICAgICAgICBieXRlcyA9IHNlbGYu
cmVhZGVyX2Z1bmMobGVuZ3RoKQorICAgICAgICBpZiBsZW4oYnl0ZXMpICE9IGxlbmd0aDoKKyAg
ICAgICAgICAgIHJhaXNlIGVycm9ycy5VbmV4cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvcigpCisg
ICAgICAgIHJldHVybiBuYW1lcywgYnl0ZXMKKwoK

=== added file bzrlib/tests/test_pack.py // file-id:test_container.py-200706071
... 60755-tr8zc26q18rn0jnb-2 // last-changed:andrew.bennetts at canonical.com-2007
... 0613105446-ukb9knp9dmy57v74 // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3Rlc3RzL3Rlc3RfcGFjay5weQpAQCAtMCwwICsxLDI0
MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDcgQ2Fub25pY2FsIEx0ZAorIworIyBUaGlzIHByb2dy
YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm
eQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3
aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAg
MDIxMTEtMTMwNyAgVVNBCisKKyIiIlRlc3RzIGZvciBienJsaWIucGFjay4iIiIKKworCitmcm9t
IGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworZnJvbSBienJsaWIgaW1wb3J0IHBhY2ssIGVy
cm9ycywgdGVzdHMKKworCitjbGFzcyBUZXN0Q29udGFpbmVyV3JpdGVyKHRlc3RzLlRlc3RDYXNl
KToKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjb25z
dHJ1Y3RpbmcgYSBDb250YWluZXJXcml0ZXIuCisgICAgICAgIAorICAgICAgICBUaGlzIHVzZXMg
Tm9uZSBhcyB0aGUgb3V0cHV0IHN0cmVhbSB0byBzaG93IHRoYXQgdGhlIGNvbnN0cnVjdG9yIGRv
ZXNuJ3QKKyAgICAgICAgdHJ5IHRvIHVzZSB0aGUgb3V0cHV0IHN0cmVhbS4KKyAgICAgICAgIiIi
CisgICAgICAgIHdyaXRlciA9IHBhY2suQ29udGFpbmVyV3JpdGVyKE5vbmUpCisKKyAgICBkZWYg
dGVzdF9iZWdpbihzZWxmKToKKyAgICAgICAgIiIiVGhlIGJlZ2luKCkgbWV0aG9kIHdyaXRlcyB0
aGUgY29udGFpbmVyIGZvcm1hdCBtYXJrZXIgbGluZS4iIiIKKyAgICAgICAgb3V0cHV0ID0gU3Ry
aW5nSU8oKQorICAgICAgICB3cml0ZXIgPSBwYWNrLkNvbnRhaW5lcldyaXRlcihvdXRwdXQud3Jp
dGUpCisgICAgICAgIHdyaXRlci5iZWdpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0Jh
emFhciBwYWNrIGZvcm1hdCAxXG4nLCBvdXRwdXQuZ2V0dmFsdWUoKSkKKworICAgIGRlZiB0ZXN0
X2VuZChzZWxmKToKKyAgICAgICAgIiIiVGhlIGVuZCgpIG1ldGhvZCB3cml0ZXMgYW4gRW5kIE1h
cmtlciByZWNvcmQuIiIiCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgd3Jp
dGVyID0gcGFjay5Db250YWluZXJXcml0ZXIob3V0cHV0LndyaXRlKQorICAgICAgICB3cml0ZXIu
YmVnaW4oKQorICAgICAgICB3cml0ZXIuZW5kKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
QmF6YWFyIHBhY2sgZm9ybWF0IDFcbkUnLCBvdXRwdXQuZ2V0dmFsdWUoKSkKKworICAgIGRlZiB0
ZXN0X2FkZF9ieXRlc19yZWNvcmRfbm9fbmFtZShzZWxmKToKKyAgICAgICAgIiIiQWRkIGEgYnl0
ZXMgcmVjb3JkIHdpdGggbm8gbmFtZS4iIiIKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQor
ICAgICAgICB3cml0ZXIgPSBwYWNrLkNvbnRhaW5lcldyaXRlcihvdXRwdXQud3JpdGUpCisgICAg
ICAgIHdyaXRlci5iZWdpbigpCisgICAgICAgIHdyaXRlci5hZGRfYnl0ZXNfcmVjb3JkKCdhYmMn
LCBuYW1lcz1bXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQmF6YWFyIHBhY2sgZm9ybWF0
IDFcbkIzXG5cbmFiYycsIG91dHB1dC5nZXR2YWx1ZSgpKQorCisgICAgZGVmIHRlc3RfYWRkX2J5
dGVzX3JlY29yZF9vbmVfbmFtZShzZWxmKToKKyAgICAgICAgIiIiQWRkIGEgYnl0ZXMgcmVjb3Jk
IHdpdGggb25lIG5hbWUuIiIiCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAg
d3JpdGVyID0gcGFjay5Db250YWluZXJXcml0ZXIob3V0cHV0LndyaXRlKQorICAgICAgICB3cml0
ZXIuYmVnaW4oKQorICAgICAgICB3cml0ZXIuYWRkX2J5dGVzX3JlY29yZCgnYWJjJywgbmFtZXM9
WyduYW1lMSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdCYXphYXIgcGFjayBmb3JtYXQg
MVxuQjNcbm5hbWUxXG5cbmFiYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0Lmdl
dHZhbHVlKCkpCisKKyAgICBkZWYgdGVzdF9hZGRfYnl0ZXNfcmVjb3JkX3R3b19uYW1lcyhzZWxm
KToKKyAgICAgICAgIiIiQWRkIGEgYnl0ZXMgcmVjb3JkIHdpdGggdHdvIG5hbWVzLiIiIgorICAg
ICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHdyaXRlciA9IHBhY2suQ29udGFpbmVy
V3JpdGVyKG91dHB1dC53cml0ZSkKKyAgICAgICAgd3JpdGVyLmJlZ2luKCkKKyAgICAgICAgd3Jp
dGVyLmFkZF9ieXRlc19yZWNvcmQoJ2FiYycsIG5hbWVzPVsnbmFtZTEnLCAnbmFtZTInXSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQmF6YWFyIHBhY2sgZm9ybWF0IDFcbkIzXG5uYW1lMVxu
bmFtZTJcblxuYWJjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuZ2V0dmFsdWUo
KSkKKworICAgIGRlZiB0ZXN0X2FkZF9ieXRlc19yZWNvcmRfaW52YWxpZF9uYW1lKHNlbGYpOgor
ICAgICAgICAiIiJBZGRpbmcgYSBCeXRlcyByZWNvcmQgd2l0aCBhIG5hbWUgd2l0aCB3aGl0ZXNw
YWNlIGluIGl0IHJhaXNlcworICAgICAgICBJbnZhbGlkUmVjb3JkRXJyb3IuCisgICAgICAgICIi
IgorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHdyaXRlciA9IHBhY2suQ29u
dGFpbmVyV3JpdGVyKG91dHB1dC53cml0ZSkKKyAgICAgICAgd3JpdGVyLmJlZ2luKCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBlcnJvcnMuSW52YWxpZFJlY29yZEVy
cm9yLAorICAgICAgICAgICAgd3JpdGVyLmFkZF9ieXRlc19yZWNvcmQsICdhYmMnLCBuYW1lcz1b
J2JhZCBuYW1lJ10pCisKKworY2xhc3MgVGVzdENvbnRhaW5lclJlYWRlcih0ZXN0cy5UZXN0Q2Fz
ZSk6CisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Qoc2VsZik6CisgICAgICAgICIiIlRlc3QgY29u
c3RydWN0aW5nIGEgQ29udGFpbmVyUmVhZGVyLgorICAgICAgICAKKyAgICAgICAgVGhpcyB1c2Vz
IE5vbmUgYXMgdGhlIG91dHB1dCBzdHJlYW0gdG8gc2hvdyB0aGF0IHRoZSBjb25zdHJ1Y3RvciBk
b2Vzbid0CisgICAgICAgIHRyeSB0byB1c2UgdGhlIGlucHV0IHN0cmVhbS4KKyAgICAgICAgIiIi
CisgICAgICAgIHJlYWRlciA9IHBhY2suQ29udGFpbmVyUmVhZGVyKE5vbmUpCisKKyAgICBkZWYg
dGVzdF9lbXB0eV9jb250YWluZXIoc2VsZik6CisgICAgICAgICIiIlJlYWQgYW4gZW1wdHkgY29u
dGFpbmVyLiIiIgorICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCJCYXphYXIgcGFjayBmb3JtYXQg
MVxuRSIpCisgICAgICAgIHJlYWRlciA9IHBhY2suQ29udGFpbmVyUmVhZGVyKGlucHV0LnJlYWQp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIGxpc3QocmVhZGVyLml0ZXJfcmVjb3Jkcygp
KSkKKworICAgIGRlZiB0ZXN0X3Vua25vd25fZm9ybWF0KHNlbGYpOgorICAgICAgICAiIiJVbnJl
Y29nbmlzZWQgY29udGFpbmVyIGZvcm1hdHMgcmFpc2UgVW5rbm93bkNvbnRhaW5lckZvcm1hdEVy
cm9yLiIiIgorICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCJ1bmtub3duIGZvcm1hdFxuIikKKyAg
ICAgICAgcmVhZGVyID0gcGFjay5Db250YWluZXJSZWFkZXIoaW5wdXQucmVhZCkKKyAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBlcnJvcnMuVW5rbm93bkNvbnRhaW5lckZv
cm1hdEVycm9yLCByZWFkZXIuaXRlcl9yZWNvcmRzKQorCisgICAgZGVmIHRlc3RfdW5leHBlY3Rl
ZF9lbmRfb2ZfY29udGFpbmVyKHNlbGYpOgorICAgICAgICAiIiJDb250YWluZXJzIHRoYXQgZG9u
J3QgZW5kIHdpdGggYW4gRW5kIE1hcmtlciByZWNvcmQgc2hvdWxkIGNhdXNlCisgICAgICAgIFVu
ZXhwZWN0ZWRFbmRPZkNvbnRhaW5lckVycm9yIHRvIGJlIHJhaXNlZC4KKyAgICAgICAgIiIiCisg
ICAgICAgIGlucHV0ID0gU3RyaW5nSU8oIkJhemFhciBwYWNrIGZvcm1hdCAxXG4iKQorICAgICAg
ICByZWFkZXIgPSBwYWNrLkNvbnRhaW5lclJlYWRlcihpbnB1dC5yZWFkKQorICAgICAgICBpdGVy
YXRvciA9IHJlYWRlci5pdGVyX3JlY29yZHMoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygK
KyAgICAgICAgICAgIGVycm9ycy5VbmV4cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvciwgaXRlcmF0
b3IubmV4dCkKKworICAgIGRlZiB0ZXN0X3Vua25vd25fcmVjb3JkX3R5cGUoc2VsZik6CisgICAg
ICAgICIiIlVua25vd24gcmVjb3JkIHR5cGVzIGNhdXNlIFVua25vd25SZWNvcmRUeXBlRXJyb3Ig
dG8gYmUgcmFpc2VkLiIiIgorICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCJCYXphYXIgcGFjayBm
b3JtYXQgMVxuWCIpCisgICAgICAgIHJlYWRlciA9IHBhY2suQ29udGFpbmVyUmVhZGVyKGlucHV0
LnJlYWQpCisgICAgICAgIGl0ZXJhdG9yID0gcmVhZGVyLml0ZXJfcmVjb3JkcygpCisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZXJyb3JzLlVua25vd25SZWNvcmRUeXBl
RXJyb3IsIGl0ZXJhdG9yLm5leHQpCisKKyAgICBkZWYgdGVzdF9jb250YWluZXJfd2l0aF9vbmVf
dW5uYW1lZF9yZWNvcmQoc2VsZik6CisgICAgICAgICIiIlJlYWQgYSBjb250YWluZXIgd2l0aCBv
bmUgQnl0ZXMgcmVjb3JkLgorICAgICAgICAKKyAgICAgICAgUGFyc2luZyBCeXRlcyByZWNvcmRz
IGlzIG1vcmUgdGhvcm91Z2hseSBleGVyY2lzZWQgYnkKKyAgICAgICAgVGVzdEJ5dGVzUmVjb3Jk
UmVhZGVyLiAgVGhpcyB0ZXN0IGlzIGhlcmUgdG8gZW5zdXJlIHRoYXQKKyAgICAgICAgQ29udGFp
bmVyUmVhZGVyJ3MgaW50ZWdyYXRpb24gd2l0aCBCeXRlc1JlY29yZFJlYWRlciBpcyB3b3JraW5n
LgorICAgICAgICAiIiIKKyAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygiQmF6YWFyIHBhY2sgZm9y
bWF0IDFcbkI1XG5cbmFhYWFhRSIpCisgICAgICAgIHJlYWRlciA9IHBhY2suQ29udGFpbmVyUmVh
ZGVyKGlucHV0LnJlYWQpCisgICAgICAgIGV4cGVjdGVkX3JlY29yZHMgPSBbKFtdLCAnYWFhYWEn
KV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9yZWNvcmRzLCBsaXN0KHJlYWRl
ci5pdGVyX3JlY29yZHMoKSkpCisKKworY2xhc3MgVGVzdEJ5dGVzUmVjb3JkUmVhZGVyKHRlc3Rz
LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3IgcGFyc2luZyBCeXRlcyByZWNvcmRzIHdpdGgg
Qnl0ZXNSZWNvcmRSZWFkZXIuIiIiCisKKyAgICBkZWYgdGVzdF9yZWNvcmRfd2l0aF9ub19uYW1l
KHNlbGYpOgorICAgICAgICAiIiJSZWFkaW5nIGEgQnl0ZXMgcmVjb3JkIHdpdGggbm8gbmFtZSBy
ZXR1cm5zIGFuIGVtcHR5IGxpc3Qgb2YKKyAgICAgICAgbmFtZXMuCisgICAgICAgICIiIgorICAg
ICAgICBpbnB1dCA9IFN0cmluZ0lPKCI1XG5cbmFhYWFhIikKKyAgICAgICAgcmVhZGVyID0gcGFj
ay5CeXRlc1JlY29yZFJlYWRlcihpbnB1dC5yZWFkKQorICAgICAgICBuYW1lcywgYnl0ZXMgPSBy
ZWFkZXIucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIG5hbWVzKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdhYWFhYScsIGJ5dGVzKQorCisgICAgZGVmIHRlc3RfcmVjb3Jk
X3dpdGhfb25lX25hbWUoc2VsZik6CisgICAgICAgICIiIlJlYWRpbmcgYSBCeXRlcyByZWNvcmQg
d2l0aCBvbmUgbmFtZSByZXR1cm5zIGEgbGlzdCBvZiBqdXN0IHRoYXQKKyAgICAgICAgbmFtZS4K
KyAgICAgICAgIiIiCisgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oIjVcbm5hbWUxXG5cbmFhYWFh
IikKKyAgICAgICAgcmVhZGVyID0gcGFjay5CeXRlc1JlY29yZFJlYWRlcihpbnB1dC5yZWFkKQor
ICAgICAgICBuYW1lcywgYnl0ZXMgPSByZWFkZXIucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoWyduYW1lMSddLCBuYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWFhYWEn
LCBieXRlcykKKworICAgIGRlZiB0ZXN0X3JlY29yZF93aXRoX3R3b19uYW1lcyhzZWxmKToKKyAg
ICAgICAgIiIiUmVhZGluZyBhIEJ5dGVzIHJlY29yZCB3aXRoIHR3byBuYW1lcyByZXR1cm5zIGEg
bGlzdCBvZiBib3RoIG5hbWVzLgorICAgICAgICAiIiIKKyAgICAgICAgaW5wdXQgPSBTdHJpbmdJ
TygiNVxubmFtZTFcbm5hbWUyXG5cbmFhYWFhIikKKyAgICAgICAgcmVhZGVyID0gcGFjay5CeXRl
c1JlY29yZFJlYWRlcihpbnB1dC5yZWFkKQorICAgICAgICBuYW1lcywgYnl0ZXMgPSByZWFkZXIu
cmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyduYW1lMScsICduYW1lMiddLCBuYW1l
cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWFhYWEnLCBieXRlcykKKworICAgIGRlZiB0
ZXN0X2ludmFsaWRfbGVuZ3RoKHNlbGYpOgorICAgICAgICAiIiJJZiB0aGUgbGVuZ3RoLXByZWZp
eCBpcyBub3QgYSBudW1iZXIsIHBhcnNpbmcgcmFpc2VzCisgICAgICAgIEludmFsaWRSZWNvcmRF
cnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oIm5vdCBhIG51bWJl
clxuIikKKyAgICAgICAgcmVhZGVyID0gcGFjay5CeXRlc1JlY29yZFJlYWRlcihpbnB1dC5yZWFk
KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuSW52YWxpZFJlY29yZEVycm9yLCBy
ZWFkZXIucmVhZCkKKworICAgIGRlZiB0ZXN0X2Vhcmx5X2VvZihzZWxmKToKKyAgICAgICAgIiIi
VGVzdHMgZm9yIHByZW1hdHVyZSBFT0Ygb2NjdXJpbmcgZHVyaW5nIHBhcnNpbmcgQnl0ZXMgcmVj
b3JkcyB3aXRoCisgICAgICAgIEJ5dGVzUmVjb3JkUmVhZGVyLgorICAgICAgICAKKyAgICAgICAg
QSBpbmNvbXBsZXRlIGNvbnRhaW5lciBtaWdodCBiZSBpbnRlcnJ1cHRlZCBhdCBhbnkgcG9pbnQu
ICBUaGUKKyAgICAgICAgQnl0ZXNSZWNvcmRSZWFkZXIgbmVlZHMgdG8gY29wZSB3aXRoIHRoZSBp
bnB1dCBzdHJlYW0gcnVubmluZyBvdXQgbm8KKyAgICAgICAgbWF0dGVyIHdoZXJlIGl0IGlzIGlu
IHRoZSBwYXJzaW5nIHByb2Nlc3MuCisKKyAgICAgICAgSW4gYWxsIGNhc2VzLCBVbmV4cGVjdGVk
RW5kT2ZDb250YWluZXJFcnJvciBzaG91bGQgYmUgcmFpc2VkLgorICAgICAgICAiIiIKKyAgICAg
ICAgY29tcGxldGVfcmVjb3JkID0gIjZcbm5hbWVcblxuYWJjZGVmIgorICAgICAgICBmb3IgY291
bnQgaW4gcmFuZ2UoMCwgbGVuKGNvbXBsZXRlX3JlY29yZCkpOgorICAgICAgICAgICAgaW5wdXQg
PSBTdHJpbmdJTyhjb21wbGV0ZV9yZWNvcmRbOmNvdW50XSkKKyAgICAgICAgICAgIHJlYWRlciA9
IHBhY2suQnl0ZXNSZWNvcmRSZWFkZXIoaW5wdXQucmVhZCkKKyAgICAgICAgICAgICMgV2UgZG9u
J3QgdXNlIGFzc2VydFJhaXNlcyB0byBtYWtlIGRpYWdub3NpbmcgZmFpbHVyZXMgZWFzaWVyLgor
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkKCkKKyAgICAgICAg
ICAgIGV4Y2VwdCBlcnJvcnMuVW5leHBlY3RlZEVuZE9mQ29udGFpbmVyRXJyb3I6CisgICAgICAg
ICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZh
aWwoCisgICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvciBu
b3QgcmFpc2VkIHdoZW4gcGFyc2luZyAlciIKKyAgICAgICAgICAgICAgICAgICAgJSAoaW5wdXQu
Z2V0dmFsdWUoKSkpCisKKyAgICBkZWYgdGVzdF9pbml0aWFsX2VvZihzZWxmKToKKyAgICAgICAg
IiIiRU9GIGJlZm9yZSBhbnkgYnl0ZXMgcmVhZCBhdCBhbGwuIiIiCisgICAgICAgIGlucHV0ID0g
U3RyaW5nSU8oIiIpCisgICAgICAgIHJlYWRlciA9IHBhY2suQnl0ZXNSZWNvcmRSZWFkZXIoaW5w
dXQucmVhZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlVuZXhwZWN0ZWRFbmRP
ZkNvbnRhaW5lckVycm9yLCByZWFkZXIucmVhZCkKKworICAgIGRlZiB0ZXN0X2VvZl9hZnRlcl9s
ZW5ndGgoc2VsZik6CisgICAgICAgICIiIkVPRiBhZnRlciByZWFkaW5nIHRoZSBsZW5ndGggYW5k
IGJlZm9yZSByZWFkaW5nIG5hbWUocykuIiIiCisgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oIjEy
M1xuIikKKyAgICAgICAgcmVhZGVyID0gcGFjay5CeXRlc1JlY29yZFJlYWRlcihpbnB1dC5yZWFk
KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuVW5leHBlY3RlZEVuZE9mQ29udGFp
bmVyRXJyb3IsIHJlYWRlci5yZWFkKQorCisgICAgZGVmIHRlc3RfZW9mX2R1cmluZ19uYW1lKHNl
bGYpOgorICAgICAgICAiIiJFT0YgZHVyaW5nIHJlYWRpbmcgYSBuYW1lLiIiIgorICAgICAgICBp
bnB1dCA9IFN0cmluZ0lPKCIxMjNcbm5hbWUiKQorICAgICAgICByZWFkZXIgPSBwYWNrLkJ5dGVz
UmVjb3JkUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9y
cy5VbmV4cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvciwgcmVhZGVyLnJlYWQpCisKKyAgICBkZWYg
dGVzdF9pbnZhbGlkX25hbWVfd2hpdGVzcGFjZShzZWxmKToKKyAgICAgICAgIiIiTmFtZXMgbXVz
dCBoYXZlIG5vIHdoaXRlc3BhY2UuIiIiCisgICAgICAgICMgQSBuYW1lIHdpdGggYSBzcGFjZS4K
KyAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygiMFxuYmFkIG5hbWVcblxuIikKKyAgICAgICAgcmVh
ZGVyID0gcGFjay5CeXRlc1JlY29yZFJlYWRlcihpbnB1dC5yZWFkKQorICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhlcnJvcnMuSW52YWxpZFJlY29yZEVycm9yLCByZWFkZXIucmVhZCkKKworICAg
ICAgICAjIEEgbmFtZSB3aXRoIGEgdGFiLgorICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCIwXG5i
YWRcdG5hbWVcblxuIikKKyAgICAgICAgcmVhZGVyID0gcGFjay5CeXRlc1JlY29yZFJlYWRlcihp
bnB1dC5yZWFkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuSW52YWxpZFJlY29y
ZEVycm9yLCByZWFkZXIucmVhZCkKKworICAgICAgICAjIEEgbmFtZSB3aXRoIGEgdmVydGljYWwg
dGFiLgorICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCIwXG5iYWRcdm5hbWVcblxuIikKKyAgICAg
ICAgcmVhZGVyID0gcGFjay5CeXRlc1JlY29yZFJlYWRlcihpbnB1dC5yZWFkKQorICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuSW52YWxpZFJlY29yZEVycm9yLCByZWFkZXIucmVhZCkK
KworICAgICAgICAgICAgICAgIAoK

=== modified file bzrlib/errors.py // last-changed:andrew.bennetts at canonical.co
... m-20070608063359-s5ps81a8i85w7by0 // encoding:base64
LS0tIGJ6cmxpYi9lcnJvcnMucHkKKysrIGJ6cmxpYi9lcnJvcnMucHkKQEAgLTIxMzQsMyArMjEz
NCwzOSBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc3BvbnNlX3R1cGxlKToKICAgICAg
ICAgc2VsZi5yZXNwb25zZV90dXBsZSA9IHJlc3BvbnNlX3R1cGxlCisKKworY2xhc3MgQ29udGFp
bmVyRXJyb3IoQnpyRXJyb3IpOgorICAgICIiIkJhc2UgY2xhc3Mgb2YgY29udGFpbmVyIGVycm9y
cy4iIiIKKworCitjbGFzcyBVbmtub3duQ29udGFpbmVyRm9ybWF0RXJyb3IoQ29udGFpbmVyRXJy
b3IpOgorCisgICAgX2ZtdCA9ICJVbnJlY29nbmlzZWQgY29udGFpbmVyIGZvcm1hdDogJShjb250
YWluZXJfZm9ybWF0KXIiCisgICAgCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5lcl9m
b3JtYXQpOgorICAgICAgICBzZWxmLmNvbnRhaW5lcl9mb3JtYXQgPSBjb250YWluZXJfZm9ybWF0
CisKKworY2xhc3MgVW5leHBlY3RlZEVuZE9mQ29udGFpbmVyRXJyb3IoQ29udGFpbmVyRXJyb3Ip
OgorCisgICAgX2ZtdCA9ICJVbmV4cGVjdGVkIGVuZCBvZiBjb250YWluZXIgc3RyZWFtIgorCisg
ICAgaW50ZXJuYWxfZXJyb3IgPSBGYWxzZQorCisKK2NsYXNzIFVua25vd25SZWNvcmRUeXBlRXJy
b3IoQ29udGFpbmVyRXJyb3IpOgorCisgICAgX2ZtdCA9ICJVbmtub3duIHJlY29yZCB0eXBlOiAl
KHJlY29yZF90eXBlKXIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjb3JkX3R5cGUpOgor
ICAgICAgICBzZWxmLnJlY29yZF90eXBlID0gcmVjb3JkX3R5cGUKKworCitjbGFzcyBJbnZhbGlk
UmVjb3JkRXJyb3IoQ29udGFpbmVyRXJyb3IpOgorCisgICAgX2ZtdCA9ICJJbnZhbGlkIHJlY29y
ZDogJShyZWFzb24pcyIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWFzb24pOgorICAgICAg
ICBzZWxmLnJlYXNvbiA9IHJlYXNvbgorCgo=

=== modified file bzrlib/tests/__init__.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy9fX2luaXRfXy5weQorKysgYnpybGliL3Rlc3RzL19faW5pdF9fLnB5
CkBAIC0yMjc5LDYgKzIyNzksNyBAQAogICAgICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMu
dGVzdF9jb21taXRfbWVyZ2UnLAogICAgICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMudGVz
dF9jb25maWcnLAogICAgICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMudGVzdF9jb25mbGlj
dHMnLAorICAgICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMudGVzdF9wYWNrJywKICAgICAg
ICAgICAgICAgICAgICAnYnpybGliLnRlc3RzLnRlc3RfY291bnRlZF9sb2NrJywKICAgICAgICAg
ICAgICAgICAgICAnYnpybGliLnRlc3RzLnRlc3RfZGVjb3JhdG9ycycsCiAgICAgICAgICAgICAg
ICAgICAgJ2J6cmxpYi50ZXN0cy50ZXN0X2RlbHRhJywKCg==

=== modified file bzrlib/tests/test_errors.py // last-changed:andrew.bennetts at c
... anonical.com-20070608063359-s5ps81a8i85w7by0 // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2Vycm9ycy5weQorKysgYnpybGliL3Rlc3RzL3Rlc3RfZXJy
b3JzLnB5CkBAIC0yNjYsNiArMjY2LDMzIEBACiAgICAgICAgICAgICAiQ291bGQgbm90IHVuZGVy
c3RhbmQgcmVzcG9uc2UgZnJvbSBzbWFydCBzZXJ2ZXI6ICgnbm90IHllcycsKSIsCiAgICAgICAg
ICAgICBzdHIoZSkpCiAKKyAgICBkZWYgdGVzdF91bmtub3duX2NvbnRhaW5lcl9mb3JtYXQoc2Vs
Zik6CisgICAgICAgICIiIlRlc3QgdGhlIGZvcm1hdHRpbmcgb2YgVW5rbm93bkNvbnRhaW5lckZv
cm1hdEVycm9yLiIiIgorICAgICAgICBlID0gZXJyb3JzLlVua25vd25Db250YWluZXJGb3JtYXRF
cnJvcignYmFkIGZvcm1hdCBzdHJpbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAg
ICAgICAgICAgIlVucmVjb2duaXNlZCBjb250YWluZXIgZm9ybWF0OiAnYmFkIGZvcm1hdCBzdHJp
bmcnIiwKKyAgICAgICAgICAgIHN0cihlKSkKKworICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfZW5k
X29mX2NvbnRhaW5lcihzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGUgZm9ybWF0dGluZyBvZiBV
bmV4cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvci4iIiIKKyAgICAgICAgZSA9IGVycm9ycy5VbmV4
cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisg
ICAgICAgICAgICAiVW5leHBlY3RlZCBlbmQgb2YgY29udGFpbmVyIHN0cmVhbSIsIHN0cihlKSkK
KworICAgIGRlZiB0ZXN0X3Vua25vd25fcmVjb3JkX3R5cGUoc2VsZik6CisgICAgICAgICIiIlRl
c3QgdGhlIGZvcm1hdHRpbmcgb2YgVW5rbm93blJlY29yZFR5cGVFcnJvci4iIiIKKyAgICAgICAg
ZSA9IGVycm9ycy5Vbmtub3duUmVjb3JkVHlwZUVycm9yKCJYIikKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgKKyAgICAgICAgICAgICJVbmtub3duIHJlY29yZCB0eXBlOiAnWCciLAorICAgICAg
ICAgICAgc3RyKGUpKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9yZWNvcmQoc2VsZik6CisgICAg
ICAgICIiIlRlc3QgdGhlIGZvcm1hdHRpbmcgb2YgSW52YWxpZFJlY29yZEVycm9yLiIiIgorICAg
ICAgICBlID0gZXJyb3JzLkludmFsaWRSZWNvcmRFcnJvcigieHh4IikKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgKKyAgICAgICAgICAgICJJbnZhbGlkIHJlY29yZDogeHh4IiwKKyAgICAgICAg
ICAgIHN0cihlKSkKKwogCiBjbGFzcyBQYXNzVGhyb3VnaEVycm9yKGVycm9ycy5CenJFcnJvcik6
CiAgICAgCgo=

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706131
... 05602-1bagfibob1rh21mg
# revision id: andrew.bennetts at canonical.com-20070613105602-1bagfibob1rh21mg
# sha1: 41f57adee50f3dfb024aa7f562e984edbf6dd425
# inventory sha1: e30592390d5d3730a7a7dc987c285966f67ebcee
# parent ids:
#   andrew.bennetts at canonical.com-20070613105446-ukb9knp9dmy57v74
#   pqm at pqm.ubuntu.com-20070613061627-xx5xk6q0oxcy1etm
# properties:
#   branch-nick: container-format

# message:
#   Change format marker to use the word 'Bazaar' rather than 'bzr'.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Wed 2007-06-13 20:54:46.407000065 +1000

=== modified file bzrlib/pack.py // encoding:base64
LS0tIGJ6cmxpYi9wYWNrLnB5CisrKyBienJsaWIvcGFjay5weQpAQCAtMjQsNyArMjQsNyBAQAog
ZnJvbSBienJsaWIgaW1wb3J0IGVycm9ycwogCiAKLUZPUk1BVF9PTkUgPSAiYnpyIHBhY2sgZm9y
bWF0IDEiCitGT1JNQVRfT05FID0gIkJhemFhciBwYWNrIGZvcm1hdCAxIgogCiAKIF93aGl0ZXNw
YWNlX3JlID0gcmUuY29tcGlsZSgnW1x0XG5ceDBiXHgwY1xyIF0nKQoK

=== modified file bzrlib/tests/test_pack.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X3BhY2sucHkKKysrIGJ6cmxpYi90ZXN0cy90ZXN0X3BhY2su
cHkKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQogICAgICAg
ICB3cml0ZXIgPSBwYWNrLkNvbnRhaW5lcldyaXRlcihvdXRwdXQud3JpdGUpCiAgICAgICAgIHdy
aXRlci5iZWdpbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2J6ciBwYWNrIGZvcm1hdCAx
XG4nLCBvdXRwdXQuZ2V0dmFsdWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQmF6YWFy
IHBhY2sgZm9ybWF0IDFcbicsIG91dHB1dC5nZXR2YWx1ZSgpKQogCiAgICAgZGVmIHRlc3RfZW5k
KHNlbGYpOgogICAgICAgICAiIiJUaGUgZW5kKCkgbWV0aG9kIHdyaXRlcyBhbiBFbmQgTWFya2Vy
IHJlY29yZC4iIiIKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgd3JpdGVyID0gcGFjay5Db250
YWluZXJXcml0ZXIob3V0cHV0LndyaXRlKQogICAgICAgICB3cml0ZXIuYmVnaW4oKQogICAgICAg
ICB3cml0ZXIuZW5kKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYnpyIHBhY2sgZm9ybWF0
IDFcbkUnLCBvdXRwdXQuZ2V0dmFsdWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQmF6
YWFyIHBhY2sgZm9ybWF0IDFcbkUnLCBvdXRwdXQuZ2V0dmFsdWUoKSkKIAogICAgIGRlZiB0ZXN0
X2FkZF9ieXRlc19yZWNvcmRfbm9fbmFtZShzZWxmKToKICAgICAgICAgIiIiQWRkIGEgYnl0ZXMg
cmVjb3JkIHdpdGggbm8gbmFtZS4iIiIKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgd3JpdGVy
ID0gcGFjay5Db250YWluZXJXcml0ZXIob3V0cHV0LndyaXRlKQogICAgICAgICB3cml0ZXIuYmVn
aW4oKQogICAgICAgICB3cml0ZXIuYWRkX2J5dGVzX3JlY29yZCgnYWJjJywgbmFtZXM9W10pCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2J6ciBwYWNrIGZvcm1hdCAxXG5CM1xuXG5hYmMnLCBv
dXRwdXQuZ2V0dmFsdWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQmF6YWFyIHBhY2sg
Zm9ybWF0IDFcbkIzXG5cbmFiYycsIG91dHB1dC5nZXR2YWx1ZSgpKQogCiAgICAgZGVmIHRlc3Rf
YWRkX2J5dGVzX3JlY29yZF9vbmVfbmFtZShzZWxmKToKICAgICAgICAgIiIiQWRkIGEgYnl0ZXMg
cmVjb3JkIHdpdGggb25lIG5hbWUuIiIiCkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgIHdyaXRl
ciA9IHBhY2suQ29udGFpbmVyV3JpdGVyKG91dHB1dC53cml0ZSkKICAgICAgICAgd3JpdGVyLmJl
Z2luKCkKICAgICAgICAgd3JpdGVyLmFkZF9ieXRlc19yZWNvcmQoJ2FiYycsIG5hbWVzPVsnbmFt
ZTEnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYnpyIHBhY2sgZm9ybWF0IDFcbkIzXG5u
YW1lMVxuXG5hYmMnLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdCYXphYXIgcGFjayBmb3Jt
YXQgMVxuQjNcbm5hbWUxXG5cbmFiYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LmdldHZhbHVlKCkpCiAKICAgICBkZWYgdGVzdF9hZGRfYnl0ZXNfcmVjb3JkX3R3b19uYW1lcyhz
ZWxmKToKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgd3JpdGVyID0gcGFjay5Db250YWluZXJX
cml0ZXIob3V0cHV0LndyaXRlKQogICAgICAgICB3cml0ZXIuYmVnaW4oKQogICAgICAgICB3cml0
ZXIuYWRkX2J5dGVzX3JlY29yZCgnYWJjJywgbmFtZXM9WyduYW1lMScsICduYW1lMiddKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdienIgcGFjayBmb3JtYXQgMVxuQjNcbm5hbWUxXG5uYW1l
MlxuXG5hYmMnLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdCYXphYXIgcGFjayBmb3JtYXQg
MVxuQjNcbm5hbWUxXG5uYW1lMlxuXG5hYmMnLAogICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHB1dC5nZXR2YWx1ZSgpKQogCiAgICAgZGVmIHRlc3RfYWRkX2J5dGVzX3JlY29yZF9pbnZhbGlk
X25hbWUoc2VsZik6CkBAIC05Nyw3ICs5Nyw3IEBACiAKICAgICBkZWYgdGVzdF9lbXB0eV9jb250
YWluZXIoc2VsZik6CiAgICAgICAgICIiIlJlYWQgYW4gZW1wdHkgY29udGFpbmVyLiIiIgotICAg
ICAgICBpbnB1dCA9IFN0cmluZ0lPKCJienIgcGFjayBmb3JtYXQgMVxuRSIpCisgICAgICAgIGlu
cHV0ID0gU3RyaW5nSU8oIkJhemFhciBwYWNrIGZvcm1hdCAxXG5FIikKICAgICAgICAgcmVhZGVy
ID0gcGFjay5Db250YWluZXJSZWFkZXIoaW5wdXQucmVhZCkKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChbXSwgbGlzdChyZWFkZXIuaXRlcl9yZWNvcmRzKCkpKQogCkBAIC0xMTIsNyArMTEyLDcg
QEAKICAgICAgICAgIiIiQ29udGFpbmVycyB0aGF0IGRvbid0IGVuZCB3aXRoIGFuIEVuZCBNYXJr
ZXIgcmVjb3JkIHNob3VsZCBjYXVzZQogICAgICAgICBVbmV4cGVjdGVkRW5kT2ZDb250YWluZXJF
cnJvciB0byBiZSByYWlzZWQuCiAgICAgICAgICIiIgotICAgICAgICBpbnB1dCA9IFN0cmluZ0lP
KCJienIgcGFjayBmb3JtYXQgMVxuIikKKyAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygiQmF6YWFy
IHBhY2sgZm9ybWF0IDFcbiIpCiAgICAgICAgIHJlYWRlciA9IHBhY2suQ29udGFpbmVyUmVhZGVy
KGlucHV0LnJlYWQpCiAgICAgICAgIGl0ZXJhdG9yID0gcmVhZGVyLml0ZXJfcmVjb3JkcygpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKApAQCAtMTIwLDcgKzEyMCw3IEBACiAKICAgICBkZWYg
dGVzdF91bmtub3duX3JlY29yZF90eXBlKHNlbGYpOgogICAgICAgICAiIiJVbmtub3duIHJlY29y
ZCB0eXBlcyBjYXVzZSBVbmtub3duUmVjb3JkVHlwZUVycm9yIHRvIGJlIHJhaXNlZC4iIiIKLSAg
ICAgICAgaW5wdXQgPSBTdHJpbmdJTygiYnpyIHBhY2sgZm9ybWF0IDFcblgiKQorICAgICAgICBp
bnB1dCA9IFN0cmluZ0lPKCJCYXphYXIgcGFjayBmb3JtYXQgMVxuWCIpCiAgICAgICAgIHJlYWRl
ciA9IHBhY2suQ29udGFpbmVyUmVhZGVyKGlucHV0LnJlYWQpCiAgICAgICAgIGl0ZXJhdG9yID0g
cmVhZGVyLml0ZXJfcmVjb3JkcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKApAQCAtMTMz
LDcgKzEzMyw3IEBACiAgICAgICAgIFRlc3RCeXRlc1JlY29yZFJlYWRlci4gIFRoaXMgdGVzdCBp
cyBoZXJlIHRvIGVuc3VyZSB0aGF0CiAgICAgICAgIENvbnRhaW5lclJlYWRlcidzIGludGVncmF0
aW9uIHdpdGggQnl0ZXNSZWNvcmRSZWFkZXIgaXMgd29ya2luZy4KICAgICAgICAgIiIiCi0gICAg
ICAgIGlucHV0ID0gU3RyaW5nSU8oImJ6ciBwYWNrIGZvcm1hdCAxXG5CNVxuXG5hYWFhYUUiKQor
ICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCJCYXphYXIgcGFjayBmb3JtYXQgMVxuQjVcblxuYWFh
YWFFIikKICAgICAgICAgcmVhZGVyID0gcGFjay5Db250YWluZXJSZWFkZXIoaW5wdXQucmVhZCkK
ICAgICAgICAgZXhwZWN0ZWRfcmVjb3JkcyA9IFsoW10sICdhYWFhYScpXQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGV4cGVjdGVkX3JlY29yZHMsIGxpc3QocmVhZGVyLml0ZXJfcmVjb3Jkcygp
KSkKCg==

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706131
... 05446-ukb9knp9dmy57v74
# revision id: andrew.bennetts at canonical.com-20070613105446-ukb9knp9dmy57v74
# sha1: 3e77cf9e348b4e569c4d52b6b0d7e480cbaad6d1
# inventory sha1: c9b866c5edd1b1fa9e08d1a90cdffb35ffea7326
# parent ids:
#   andrew.bennetts at canonical.com-20070613105312-z94x8g4y5mlg4ukg
# properties:
#   branch-nick: container-format

# message:
#   Raise InvalidRecordError on invalid names.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Wed 2007-06-13 20:53:12.808000088 +1000

=== modified file bzrlib/pack.py // encoding:base64
LS0tIGJ6cmxpYi9wYWNrLnB5CisrKyBienJsaWIvcGFjay5weQpAQCAtMTksMTIgKzE5LDMwIEBA
CiAiQ29udGFpbmVycyIgYW5kICJyZWNvcmRzIiBhcmUgZGVzY3JpYmVkIGluIGRvYy9kZXZlbG9w
ZXJzL2NvbnRhaW5lci1mb3JtYXQudHh0LgogIiIiCiAKK2ltcG9ydCByZQorCiBmcm9tIGJ6cmxp
YiBpbXBvcnQgZXJyb3JzCiAKIAogRk9STUFUX09ORSA9ICJienIgcGFjayBmb3JtYXQgMSIKIAog
Citfd2hpdGVzcGFjZV9yZSA9IHJlLmNvbXBpbGUoJ1tcdFxuXHgwYlx4MGNcciBdJykKKworCitk
ZWYgX2NoZWNrX25hbWUobmFtZSk6CisgICAgIiIiRG8gc29tZSBiYXNpYyBjaGVja2luZyBvZiAn
bmFtZScuCisgICAgCisgICAgQXQgdGhlIG1vbWVudCwgdGhpcyBqdXN0IGNoZWNrcyB0aGF0IHRo
ZXJlIGFyZSBubyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gYQorICAgIG5hbWUuCisKKyAgICA6
cmFpc2VzIEludmFsaWRSZWNvcmRFcnJvcjogaWYgbmFtZSBpcyBub3QgdmFsaWQuCisgICAgIiIi
CisgICAgIyBYWFg6IGNvbnNpZGVyIGNoZWNraW5nIHRoYXQgbmFtZSBpcyBhIHN0ciBvZiB2YWxp
ZCBVVEYtOCB0b28/CisgICAgaWYgX3doaXRlc3BhY2VfcmUuc2VhcmNoKG5hbWUpIGlzIG5vdCBO
b25lOgorICAgICAgICByYWlzZSBlcnJvcnMuSW52YWxpZFJlY29yZEVycm9yKCIlciBpcyBub3Qg
YSB2YWxpZCBuYW1lLiIgJSAobmFtZSwpKQorCisKIGNsYXNzIENvbnRhaW5lcldyaXRlcihvYmpl
Y3QpOgogICAgICIiIkEgY2xhc3MgZm9yIHdyaXRpbmcgY29udGFpbmVycy4iIiIKIApAQCAtNTIs
NiArNzAsOSBAQAogICAgICAgICBzZWxmLndyaXRlX2Z1bmMoc3RyKGxlbihieXRlcykpICsgIlxu
IikKICAgICAgICAgIyBOYW1lcwogICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAg
ICAgICMgTWFrZSBzdXJlIHdlJ3JlIHdyaXRpbmcgdmFsaWQgbmFtZXMuICBOb3RlIHRoYXQgd2Ug
d2lsbCBsZWF2ZSBhCisgICAgICAgICAgICAjIGhhbGYtd3JpdHRlbiByZWNvcmQgaWYgYSBuYW1l
IGlzIGJhZCEKKyAgICAgICAgICAgIF9jaGVja19uYW1lKG5hbWUpCiAgICAgICAgICAgICBzZWxm
LndyaXRlX2Z1bmMobmFtZSArICJcbiIpCiAgICAgICAgICMgRW5kIG9mIGhlYWRlcnMKICAgICAg
ICAgc2VsZi53cml0ZV9mdW5jKCJcbiIpCkBAIC0xNDUsNiArMTY2LDcgQEAKICAgICAgICAgICAg
IG5hbWUgPSBzZWxmLl9yZWFkX2xpbmUoKQogICAgICAgICAgICAgaWYgbmFtZSA9PSAnJzoKICAg
ICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgX2NoZWNrX25hbWUobmFtZSkKICAgICAg
ICAgICAgIG5hbWVzLmFwcGVuZChuYW1lKQogICAgICAgICBieXRlcyA9IHNlbGYucmVhZGVyX2Z1
bmMobGVuZ3RoKQogICAgICAgICBpZiBsZW4oYnl0ZXMpICE9IGxlbmd0aDoKCg==

=== modified file bzrlib/tests/test_pack.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X3BhY2sucHkKKysrIGJ6cmxpYi90ZXN0cy90ZXN0X3BhY2su
cHkKQEAgLTczLDYgKzczLDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2J6ciBwYWNr
IGZvcm1hdCAxXG5CM1xubmFtZTFcbm5hbWUyXG5cbmFiYycsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0LmdldHZhbHVlKCkpCiAKKyAgICBkZWYgdGVzdF9hZGRfYnl0ZXNfcmVjb3Jk
X2ludmFsaWRfbmFtZShzZWxmKToKKyAgICAgICAgIiIiQWRkaW5nIGEgQnl0ZXMgcmVjb3JkIHdp
dGggYSBuYW1lIHdpdGggd2hpdGVzcGFjZSBpbiBpdCByYWlzZXMKKyAgICAgICAgSW52YWxpZFJl
Y29yZEVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAg
ICAgICB3cml0ZXIgPSBwYWNrLkNvbnRhaW5lcldyaXRlcihvdXRwdXQud3JpdGUpCisgICAgICAg
IHdyaXRlci5iZWdpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAg
ZXJyb3JzLkludmFsaWRSZWNvcmRFcnJvciwKKyAgICAgICAgICAgIHdyaXRlci5hZGRfYnl0ZXNf
cmVjb3JkLCAnYWJjJywgbmFtZXM9WydiYWQgbmFtZSddKQorCiAKIGNsYXNzIFRlc3RDb250YWlu
ZXJSZWFkZXIodGVzdHMuVGVzdENhc2UpOgogCkBAIC0xOTIsMjIgKzIwMywzOSBAQAogICAgICAg
ICAgICAgICAgICAgICAiVW5leHBlY3RlZEVuZE9mQ29udGFpbmVyRXJyb3Igbm90IHJhaXNlZCB3
aGVuIHBhcnNpbmcgJXIiCiAgICAgICAgICAgICAgICAgICAgICUgKGlucHV0LmdldHZhbHVlKCkp
KQogCi0gICAgZGVmIHRlc3RfaW5pdGlhbChzZWxmKToKKyAgICBkZWYgdGVzdF9pbml0aWFsX2Vv
ZihzZWxmKToKICAgICAgICAgIiIiRU9GIGJlZm9yZSBhbnkgYnl0ZXMgcmVhZCBhdCBhbGwuIiIi
CiAgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oIiIpCiAgICAgICAgIHJlYWRlciA9IHBhY2suQnl0
ZXNSZWNvcmRSZWFkZXIoaW5wdXQucmVhZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJy
b3JzLlVuZXhwZWN0ZWRFbmRPZkNvbnRhaW5lckVycm9yLCByZWFkZXIucmVhZCkKIAotICAgIGRl
ZiB0ZXN0X2FmdGVyX2xlbmd0aChzZWxmKToKKyAgICBkZWYgdGVzdF9lb2ZfYWZ0ZXJfbGVuZ3Ro
KHNlbGYpOgogICAgICAgICAiIiJFT0YgYWZ0ZXIgcmVhZGluZyB0aGUgbGVuZ3RoIGFuZCBiZWZv
cmUgcmVhZGluZyBuYW1lKHMpLiIiIgogICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCIxMjNcbiIp
CiAgICAgICAgIHJlYWRlciA9IHBhY2suQnl0ZXNSZWNvcmRSZWFkZXIoaW5wdXQucmVhZCkKICAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlVuZXhwZWN0ZWRFbmRPZkNvbnRhaW5lckVy
cm9yLCByZWFkZXIucmVhZCkKIAotICAgIGRlZiB0ZXN0X2R1cmluZ19uYW1lKHNlbGYpOgorICAg
IGRlZiB0ZXN0X2VvZl9kdXJpbmdfbmFtZShzZWxmKToKICAgICAgICAgIiIiRU9GIGR1cmluZyBy
ZWFkaW5nIGEgbmFtZS4iIiIKICAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygiMTIzXG5uYW1lIikK
ICAgICAgICAgcmVhZGVyID0gcGFjay5CeXRlc1JlY29yZFJlYWRlcihpbnB1dC5yZWFkKQogICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuVW5leHBlY3RlZEVuZE9mQ29udGFpbmVyRXJy
b3IsIHJlYWRlci5yZWFkKQogCi0gICAgICAgIAorICAgIGRlZiB0ZXN0X2ludmFsaWRfbmFtZV93
aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICAiIiJOYW1lcyBtdXN0IGhhdmUgbm8gd2hpdGVzcGFj
ZS4iIiIKKyAgICAgICAgIyBBIG5hbWUgd2l0aCBhIHNwYWNlLgorICAgICAgICBpbnB1dCA9IFN0
cmluZ0lPKCIwXG5iYWQgbmFtZVxuXG4iKQorICAgICAgICByZWFkZXIgPSBwYWNrLkJ5dGVzUmVj
b3JkUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5J
bnZhbGlkUmVjb3JkRXJyb3IsIHJlYWRlci5yZWFkKQorCisgICAgICAgICMgQSBuYW1lIHdpdGgg
YSB0YWIuCisgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oIjBcbmJhZFx0bmFtZVxuXG4iKQorICAg
ICAgICByZWFkZXIgPSBwYWNrLkJ5dGVzUmVjb3JkUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5JbnZhbGlkUmVjb3JkRXJyb3IsIHJlYWRlci5yZWFk
KQorCisgICAgICAgICMgQSBuYW1lIHdpdGggYSB2ZXJ0aWNhbCB0YWIuCisgICAgICAgIGlucHV0
ID0gU3RyaW5nSU8oIjBcbmJhZFx2bmFtZVxuXG4iKQorICAgICAgICByZWFkZXIgPSBwYWNrLkJ5
dGVzUmVjb3JkUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVy
cm9ycy5JbnZhbGlkUmVjb3JkRXJyb3IsIHJlYWRlci5yZWFkKQorCisgICAgICAgICAgICAgICAg
Cgo=

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706131
... 05312-z94x8g4y5mlg4ukg
# revision id: andrew.bennetts at canonical.com-20070613105312-z94x8g4y5mlg4ukg
# sha1: 39f8da138d38926dfe99be98af10ad30030192e0
# inventory sha1: 7e858e3f46d03a23bb4e6ae81b61fde7d3166d00
# parent ids:
#   andrew.bennetts at canonical.com-20070613075835-sb1o923hdtwnmlrv
# properties:
#   branch-nick: container-format

# message:
#   Remove duplicate definition of ContainerWriter.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Wed 2007-06-13 17:58:35.687999964 +1000

=== modified file bzrlib/pack.py // encoding:base64
LS0tIGJ6cmxpYi9wYWNrLnB5CisrKyBienJsaWIvcGFjay5weQpAQCAtMTI4LDQwICsxMjgsNiBA
QAogICAgICAgICAgICAgICAgIHJhaXNlIGVycm9ycy5Vbmtub3duUmVjb3JkVHlwZUVycm9yKHJl
Y29yZF9raW5kKQogCiAKLWNsYXNzIENvbnRhaW5lcldyaXRlcihvYmplY3QpOgotICAgICIiIkEg
Y2xhc3MgZm9yIHdyaXRpbmcgY29udGFpbmVycy4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB3cml0ZV9mdW5jKToKLSAgICAgICAgIiIiQ29uc3RydWN0b3IuCi0KLSAgICAgICAgOnBhcmFt
IHdyaXRlX2Z1bmM6IGEgY2FsbGFibGUgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoaXMKLSAg
ICAgICAgICAgIENvbnRhaW5lcldyaXRlciBuZWVkcyB0byB3cml0ZSBzb21lIGJ5dGVzLgotICAg
ICAgICAiIiIKLSAgICAgICAgc2VsZi53cml0ZV9mdW5jID0gd3JpdGVfZnVuYwotCi0gICAgZGVm
IGJlZ2luKHNlbGYpOgotICAgICAgICAiIiJCZWdpbiB3cml0aW5nIGEgY29udGFpbmVyLiIiIgot
ICAgICAgICBzZWxmLndyaXRlX2Z1bmMoRk9STUFUX09ORSArICJcbiIpCi0KLSAgICBkZWYgZW5k
KHNlbGYpOgotICAgICAgICAiIiJGaW5pc2ggd3JpdGluZyBhIGNvbnRhaW5lci4iIiIKLSAgICAg
ICAgc2VsZi53cml0ZV9mdW5jKCJFIikKLQotICAgIGRlZiBhZGRfYnl0ZXNfcmVjb3JkKHNlbGYs
IGJ5dGVzLCBuYW1lcyk6Ci0gICAgICAgICIiIkFkZCBhIEJ5dGVzIHJlY29yZCB3aXRoIHRoZSBn
aXZlbiBuYW1lcy4iIiIKLSAgICAgICAgIyBLaW5kIG1hcmtlcgotICAgICAgICBzZWxmLndyaXRl
X2Z1bmMoIkIiKQotICAgICAgICAjIExlbmd0aAotICAgICAgICBzZWxmLndyaXRlX2Z1bmMoc3Ry
KGxlbihieXRlcykpICsgIlxuIikKLSAgICAgICAgIyBOYW1lcwotICAgICAgICBmb3IgbmFtZSBp
biBuYW1lczoKLSAgICAgICAgICAgIHNlbGYud3JpdGVfZnVuYyhuYW1lICsgIlxuIikKLSAgICAg
ICAgIyBFbmQgb2YgaGVhZGVycwotICAgICAgICBzZWxmLndyaXRlX2Z1bmMoIlxuIikKLSAgICAg
ICAgIyBGaW5hbGx5LCB0aGUgY29udGVudHMuCi0gICAgICAgIHNlbGYud3JpdGVfZnVuYyhieXRl
cykKLQotCiBjbGFzcyBCeXRlc1JlY29yZFJlYWRlcihCYXNlUmVhZGVyKToKIAogICAgIGRlZiBy
ZWFkKHNlbGYpOgoK

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706130
... 75835-sb1o923hdtwnmlrv
# revision id: andrew.bennetts at canonical.com-20070613075835-sb1o923hdtwnmlrv
# sha1: 27f838c8ad4b02526c7c3092332abcc6a2602661
# inventory sha1: b4e76269770ff37907d618663d7a980a8b816fe3
# parent ids:
#   andrew.bennetts at canonical.com-20070612015639-z378i21fmcnd5j4x
# properties:
#   branch-nick: container-format

# message:
#   Fix docstring markup, remove obsolete comment.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Tue 2007-06-12 11:56:39.799999952 +1000

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706120
... 15639-z378i21fmcnd5j4x
# revision id: andrew.bennetts at canonical.com-20070612015639-z378i21fmcnd5j4x
# sha1: b7ca8978826b19eedc13e09f16bfa8797d40ca6e
# inventory sha1: d79640085fe2aef13b44bca4105c85ccb512af1d
# parent ids:
#   andrew.bennetts at canonical.com-20070609034820-t7u540w5pyhvtgn3
#   andrew.bennetts at canonical.com-20070611072208-9p73cf5vcu7zh0ys
# properties:
#   branch-nick: container-format

# message:
#   Fix docstring markup, remove obsolete comment.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Mon 2007-06-11 17:22:08.611000061 +1000

=== modified file bzrlib/pack.py // encoding:base64
LS0tIGJ6cmxpYi9wYWNrLnB5CisrKyBienJsaWIvcGFjay5weQpAQCAtOTksNyArOTksNyBAQAog
ICAgICAgICAiIiJJdGVyYXRlIG92ZXIgdGhlIGNvbnRhaW5lciwgeWllbGRpbmcgZWFjaCByZWNv
cmQgYXMgaXQgaXMgcmVhZC4KIAogICAgICAgICBFYWNoIHlpZWxkZWQgcmVjb3JkIHdpbGwgYmUg
YSAyLXR1cGxlIG9mIChuYW1lcywgYnl0ZXMpLCB3aGVyZSBuYW1lcyBpcwotICAgICAgICBhIGBg
bGlzdGBgIGFuZCBieXRlcyBpcyBhIGBgc3RyYC4KKyAgICAgICAgYSBgYGxpc3RgYCBhbmQgYnl0
ZXMgaXMgYSBgYHN0cmBgLgogCiAgICAgICAgIDpyYWlzZXMgVW5rbm93bkNvbnRhaW5lckZvcm1h
dEVycm9yOiBpZiB0aGUgZm9ybWF0IG9mIHRoZSBjb250YWluZXIgaXMKICAgICAgICAgICAgIHVu
cmVjb2duaXNlZC4KCg==

=== modified file bzrlib/tests/test_pack.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X3BhY2sucHkKKysrIGJ6cmxpYi90ZXN0cy90ZXN0X3BhY2su
cHkKQEAgLTIxMSwxMCArMjExLDMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3Jz
LlVuZXhwZWN0ZWRFbmRPZkNvbnRhaW5lckVycm9yLCByZWFkZXIucmVhZCkKIAogICAgICAgICAK
LSAgICAjIE90aGVyIEJ5dGVzIHJlY29yZCBwYXJzaW5nIGNhc2VzIHRvIHRlc3Q6Ci0gICAgIyAg
LSBpbmNvbXBsZXRlIGJ5dGVzIChpLmUuIHN0cmVhbSBlbmRzIGJlZm9yZSAkbGVuZ3RoIGJ5dGVz
IHJlYWQpCi0gICAgIyAgLSBfcmVhZF9saW5lIGVuY291bnRlcmluZyBlbmQgb2Ygc3RyZWFtIChh
dCBhbnkgdGltZTsgZHVyaW5nIGxlbmd0aCwKLSAgICAjICAgIG5hbWVzLCBlbmQgb2YgaGVhZGVy
cy4uLikKLQotCi0KCg==

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706110
... 72208-9p73cf5vcu7zh0ys
# revision id: andrew.bennetts at canonical.com-20070611072208-9p73cf5vcu7zh0ys
# sha1: 5a875a77113dd648b5958ed991b8219afe87d13c
# inventory sha1: f08fec5b8309b5fe20912814247a0c0abbb92afd
# parent ids:
#   andrew.bennetts at canonical.com-20070609034820-t7u540w5pyhvtgn3
# properties:
#   branch-nick: container-format

# message:
#   More improvements, especially in error handling.
#   
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Sat 2007-06-09 13:48:20.598999977 +1000

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706090
... 34820-t7u540w5pyhvtgn3
# revision id: andrew.bennetts at canonical.com-20070609034820-t7u540w5pyhvtgn3
# sha1: 081bb16e5c9b1fa20b61270eb9563ef6eb468b21
# inventory sha1: cdd79c29c3efd72706c03a74aea195f4340b976a
# parent ids:
#   andrew.bennetts at canonical.com-20070607160934-jfs1wrxxtulso9nw
#   andrew.bennetts at canonical.com-20070609034525-j9d7i5dlk6ou97eb
# properties:
#   branch-nick: container-format

# message:
#   Deal with EOF in the middle of a bytes record.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Sat 2007-06-09 13:45:25.451999903 +1000

=== modified file bzrlib/pack.py // encoding:base64
LS0tIGJ6cmxpYi9wYWNrLnB5CisrKyBienJsaWIvcGFjay5weQpAQCAtNjYsNyArNjYsOCBAQAog
CiAgICAgICAgIDpwYXJhbSByZWFkZXJfZnVuYzogYSBjYWxsYWJsZSB0aGF0IHRha2VzIG9uZSBv
cHRpb25hbCBhcmd1bWVudCwKICAgICAgICAgICAgIGBgc2l6ZWBgLCBhbmQgcmV0dXJucyBhdCBt
b3N0IHRoYXQgbWFueSBieXRlcy4gIFdoZW4gdGhlIGNhbGxhYmxlCi0gICAgICAgICAgICByZXR1
cm5zIGFuIGVtcHR5IHN0cmluZywgdGhlbiBhdCBtb3N0IHRoYXQgbWFueSBieXRlcyBhcmUgcmVh
ZC4KKyAgICAgICAgICAgIHJldHVybnMgbGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9m
IGJ5dGVzLCB0aGVuIHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgICBmaWxlL3N0cmVhbSBoYXMg
YmVlbiByZWFjaGVkLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5yZWFkZXJfZnVuYyA9IHJl
YWRlcl9mdW5jCiAKQEAgLTg0LDcgKzg1LDEwIEBACiAgICAgICAgICMgICAtLSBBbmRyZXcgQmVu
bmV0dHMsIDIwMDctMDUtMDcuCiAgICAgICAgIGxpbmUgPSAnJwogICAgICAgICB3aGlsZSBub3Qg
bGluZS5lbmRzd2l0aCgnXG4nKToKLSAgICAgICAgICAgIGxpbmUgKz0gc2VsZi5yZWFkZXJfZnVu
YygxKQorICAgICAgICAgICAgYnl0ZSA9IHNlbGYucmVhZGVyX2Z1bmMoMSkKKyAgICAgICAgICAg
IGlmIGJ5dGUgPT0gJyc6CisgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3JzLlVuZXhwZWN0ZWRF
bmRPZkNvbnRhaW5lckVycm9yKCkKKyAgICAgICAgICAgIGxpbmUgKz0gYnl0ZQogICAgICAgICBy
ZXR1cm4gbGluZVs6LTFdCiAKIApAQCAtMTc3LDYgKzE4MSw3IEBACiAgICAgICAgICAgICAgICAg
YnJlYWsKICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChuYW1lKQogICAgICAgICBieXRlcyA9IHNl
bGYucmVhZGVyX2Z1bmMobGVuZ3RoKQotICAgICAgICAjIFhYWDogZGVhbCB3aXRoIGNhc2Ugd2hl
cmUgbGVuKGJ5dGVzKSAhPSBsZW5ndGgKKyAgICAgICAgaWYgbGVuKGJ5dGVzKSAhPSBsZW5ndGg6
CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuVW5leHBlY3RlZEVuZE9mQ29udGFpbmVyRXJyb3Io
KQogICAgICAgICByZXR1cm4gbmFtZXMsIGJ5dGVzCiAKCg==

=== modified file bzrlib/tests/test_pack.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X3BhY2sucHkKKysrIGJ6cmxpYi90ZXN0cy90ZXN0X3BhY2su
cHkKQEAgLTE2OCw2ICsxNjgsNDkgQEAKICAgICAgICAgcmVhZGVyID0gcGFjay5CeXRlc1JlY29y
ZFJlYWRlcihpbnB1dC5yZWFkKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuSW52
YWxpZFJlY29yZEVycm9yLCByZWFkZXIucmVhZCkKIAorICAgIGRlZiB0ZXN0X2Vhcmx5X2VvZihz
ZWxmKToKKyAgICAgICAgIiIiVGVzdHMgZm9yIHByZW1hdHVyZSBFT0Ygb2NjdXJpbmcgZHVyaW5n
IHBhcnNpbmcgQnl0ZXMgcmVjb3JkcyB3aXRoCisgICAgICAgIEJ5dGVzUmVjb3JkUmVhZGVyLgor
ICAgICAgICAKKyAgICAgICAgQSBpbmNvbXBsZXRlIGNvbnRhaW5lciBtaWdodCBiZSBpbnRlcnJ1
cHRlZCBhdCBhbnkgcG9pbnQuICBUaGUKKyAgICAgICAgQnl0ZXNSZWNvcmRSZWFkZXIgbmVlZHMg
dG8gY29wZSB3aXRoIHRoZSBpbnB1dCBzdHJlYW0gcnVubmluZyBvdXQgbm8KKyAgICAgICAgbWF0
dGVyIHdoZXJlIGl0IGlzIGluIHRoZSBwYXJzaW5nIHByb2Nlc3MuCisKKyAgICAgICAgSW4gYWxs
IGNhc2VzLCBVbmV4cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvciBzaG91bGQgYmUgcmFpc2VkLgor
ICAgICAgICAiIiIKKyAgICAgICAgY29tcGxldGVfcmVjb3JkID0gIjZcbm5hbWVcblxuYWJjZGVm
IgorICAgICAgICBmb3IgY291bnQgaW4gcmFuZ2UoMCwgbGVuKGNvbXBsZXRlX3JlY29yZCkpOgor
ICAgICAgICAgICAgaW5wdXQgPSBTdHJpbmdJTyhjb21wbGV0ZV9yZWNvcmRbOmNvdW50XSkKKyAg
ICAgICAgICAgIHJlYWRlciA9IHBhY2suQnl0ZXNSZWNvcmRSZWFkZXIoaW5wdXQucmVhZCkKKyAg
ICAgICAgICAgICMgV2UgZG9uJ3QgdXNlIGFzc2VydFJhaXNlcyB0byBtYWtlIGRpYWdub3Npbmcg
ZmFpbHVyZXMgZWFzaWVyLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlYWRl
ci5yZWFkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBlcnJvcnMuVW5leHBlY3RlZEVuZE9mQ29udGFp
bmVyRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBzZWxmLmZhaWwoCisgICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkRW5k
T2ZDb250YWluZXJFcnJvciBub3QgcmFpc2VkIHdoZW4gcGFyc2luZyAlciIKKyAgICAgICAgICAg
ICAgICAgICAgJSAoaW5wdXQuZ2V0dmFsdWUoKSkpCisKKyAgICBkZWYgdGVzdF9pbml0aWFsKHNl
bGYpOgorICAgICAgICAiIiJFT0YgYmVmb3JlIGFueSBieXRlcyByZWFkIGF0IGFsbC4iIiIKKyAg
ICAgICAgaW5wdXQgPSBTdHJpbmdJTygiIikKKyAgICAgICAgcmVhZGVyID0gcGFjay5CeXRlc1Jl
Y29yZFJlYWRlcihpbnB1dC5yZWFkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMu
VW5leHBlY3RlZEVuZE9mQ29udGFpbmVyRXJyb3IsIHJlYWRlci5yZWFkKQorCisgICAgZGVmIHRl
c3RfYWZ0ZXJfbGVuZ3RoKHNlbGYpOgorICAgICAgICAiIiJFT0YgYWZ0ZXIgcmVhZGluZyB0aGUg
bGVuZ3RoIGFuZCBiZWZvcmUgcmVhZGluZyBuYW1lKHMpLiIiIgorICAgICAgICBpbnB1dCA9IFN0
cmluZ0lPKCIxMjNcbiIpCisgICAgICAgIHJlYWRlciA9IHBhY2suQnl0ZXNSZWNvcmRSZWFkZXIo
aW5wdXQucmVhZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlVuZXhwZWN0ZWRF
bmRPZkNvbnRhaW5lckVycm9yLCByZWFkZXIucmVhZCkKKworICAgIGRlZiB0ZXN0X2R1cmluZ19u
YW1lKHNlbGYpOgorICAgICAgICAiIiJFT0YgZHVyaW5nIHJlYWRpbmcgYSBuYW1lLiIiIgorICAg
ICAgICBpbnB1dCA9IFN0cmluZ0lPKCIxMjNcbm5hbWUiKQorICAgICAgICByZWFkZXIgPSBwYWNr
LkJ5dGVzUmVjb3JkUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KGVycm9ycy5VbmV4cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvciwgcmVhZGVyLnJlYWQpCisKKyAg
ICAgICAgCiAgICAgIyBPdGhlciBCeXRlcyByZWNvcmQgcGFyc2luZyBjYXNlcyB0byB0ZXN0Ogog
ICAgICMgIC0gaW5jb21wbGV0ZSBieXRlcyAoaS5lLiBzdHJlYW0gZW5kcyBiZWZvcmUgJGxlbmd0
aCBieXRlcyByZWFkKQogICAgICMgIC0gX3JlYWRfbGluZSBlbmNvdW50ZXJpbmcgZW5kIG9mIHN0
cmVhbSAoYXQgYW55IHRpbWU7IGR1cmluZyBsZW5ndGgsCgo=

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706090
... 34525-j9d7i5dlk6ou97eb
# revision id: andrew.bennetts at canonical.com-20070609034525-j9d7i5dlk6ou97eb
# sha1: 6a9fd5baa7b26506464e4b07a99a57a638e5b90b
# inventory sha1: db174a9c9a6bf325ebcc23125f159aaceb9ee6e5
# parent ids:
#   andrew.bennetts at canonical.com-20070608064547-vzhyegqx2vl6pni3
# properties:
#   branch-nick: container-format

# message:
#   Test docstring tweaks, inspired by looking over the output of jml's testdoc tool.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Fri 2007-06-08 16:45:47.119999886 +1000

=== modified file bzrlib/tests/test_pack.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X3BhY2sucHkKKysrIGJ6cmxpYi90ZXN0cy90ZXN0X3BhY2su
cHkKQEAgLTE5LDExICsxOSwxMCBAQAogCiBmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8K
IAotZnJvbSBienJsaWIgaW1wb3J0IHBhY2ssIGVycm9ycwotZnJvbSBienJsaWIudGVzdHMgaW1w
b3J0IFRlc3RDYXNlCi0KLQotY2xhc3MgVGVzdENvbnRhaW5lcldyaXRlcihUZXN0Q2FzZSk6Citm
cm9tIGJ6cmxpYiBpbXBvcnQgcGFjaywgZXJyb3JzLCB0ZXN0cworCisKK2NsYXNzIFRlc3RDb250
YWluZXJXcml0ZXIodGVzdHMuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfY29uc3RydWN0KHNl
bGYpOgogICAgICAgICAiIiJUZXN0IGNvbnN0cnVjdGluZyBhIENvbnRhaW5lcldyaXRlci4KQEAg
LTM0LDE0ICszMywxNCBAQAogICAgICAgICB3cml0ZXIgPSBwYWNrLkNvbnRhaW5lcldyaXRlcihO
b25lKQogCiAgICAgZGVmIHRlc3RfYmVnaW4oc2VsZik6Ci0gICAgICAgICIiIlRlc3QgdGhlIGJl
Z2luKCkgbWV0aG9kLiIiIgorICAgICAgICAiIiJUaGUgYmVnaW4oKSBtZXRob2Qgd3JpdGVzIHRo
ZSBjb250YWluZXIgZm9ybWF0IG1hcmtlciBsaW5lLiIiIgogICAgICAgICBvdXRwdXQgPSBTdHJp
bmdJTygpCiAgICAgICAgIHdyaXRlciA9IHBhY2suQ29udGFpbmVyV3JpdGVyKG91dHB1dC53cml0
ZSkKICAgICAgICAgd3JpdGVyLmJlZ2luKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYnpy
IHBhY2sgZm9ybWF0IDFcbicsIG91dHB1dC5nZXR2YWx1ZSgpKQogCiAgICAgZGVmIHRlc3RfZW5k
KHNlbGYpOgotICAgICAgICAiIiJUZXN0IHRoZSBlbmQoKSBtZXRob2QuIiIiCisgICAgICAgICIi
IlRoZSBlbmQoKSBtZXRob2Qgd3JpdGVzIGFuIEVuZCBNYXJrZXIgcmVjb3JkLiIiIgogICAgICAg
ICBvdXRwdXQgPSBTdHJpbmdJTygpCiAgICAgICAgIHdyaXRlciA9IHBhY2suQ29udGFpbmVyV3Jp
dGVyKG91dHB1dC53cml0ZSkKICAgICAgICAgd3JpdGVyLmJlZ2luKCkKQEAgLTc1LDcgKzc0LDcg
QEAKICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuZ2V0dmFsdWUoKSkKIAogCi1jbGFz
cyBUZXN0Q29udGFpbmVyUmVhZGVyKFRlc3RDYXNlKToKK2NsYXNzIFRlc3RDb250YWluZXJSZWFk
ZXIodGVzdHMuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfY29uc3RydWN0KHNlbGYpOgogICAg
ICAgICAiIiJUZXN0IGNvbnN0cnVjdGluZyBhIENvbnRhaW5lclJlYWRlci4KQEAgLTExOSw5ICsx
MTgsOSBAQAogICAgIGRlZiB0ZXN0X2NvbnRhaW5lcl93aXRoX29uZV91bm5hbWVkX3JlY29yZChz
ZWxmKToKICAgICAgICAgIiIiUmVhZCBhIGNvbnRhaW5lciB3aXRoIG9uZSBCeXRlcyByZWNvcmQu
CiAgICAgICAgIAotICAgICAgICBQYXJzaW5nIEJ5dGVzIHJlY29yZHMgaXMgbW9yZSB0aG9yb3Vn
aGx5IGV4ZXJjaXNlZCBieSBYWFguICBUaGlzIHRlc3QgaXMKLSAgICAgICAgaGVyZSB0byBlbnN1
cmUgdGhhdCBDb250YWluZXJSZWFkZXIncyBpbnRlZ3JhdGlvbiB3aXRoIEJ5dGVzUmVjb3JkUmVh
ZGVyCi0gICAgICAgIGlzIHdvcmtpbmcuCisgICAgICAgIFBhcnNpbmcgQnl0ZXMgcmVjb3JkcyBp
cyBtb3JlIHRob3JvdWdobHkgZXhlcmNpc2VkIGJ5CisgICAgICAgIFRlc3RCeXRlc1JlY29yZFJl
YWRlci4gIFRoaXMgdGVzdCBpcyBoZXJlIHRvIGVuc3VyZSB0aGF0CisgICAgICAgIENvbnRhaW5l
clJlYWRlcidzIGludGVncmF0aW9uIHdpdGggQnl0ZXNSZWNvcmRSZWFkZXIgaXMgd29ya2luZy4K
ICAgICAgICAgIiIiCiAgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oImJ6ciBwYWNrIGZvcm1hdCAx
XG5CNVxuXG5hYWFhYUUiKQogICAgICAgICByZWFkZXIgPSBwYWNrLkNvbnRhaW5lclJlYWRlcihp
bnB1dC5yZWFkKQpAQCAtMTI5LDcgKzEyOCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
ZXhwZWN0ZWRfcmVjb3JkcywgbGlzdChyZWFkZXIuaXRlcl9yZWNvcmRzKCkpKQogCiAKLWNsYXNz
IFRlc3RCeXRlc1JlY29yZFJlYWRlcihUZXN0Q2FzZSk6CitjbGFzcyBUZXN0Qnl0ZXNSZWNvcmRS
ZWFkZXIodGVzdHMuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIGZvciBwYXJzaW5nIEJ5dGVzIHJl
Y29yZHMgd2l0aCBCeXRlc1JlY29yZFJlYWRlci4iIiIKIAogICAgIGRlZiB0ZXN0X3JlY29yZF93
aXRoX25vX25hbWUoc2VsZik6Cgo=

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706080
... 64547-vzhyegqx2vl6pni3
# revision id: andrew.bennetts at canonical.com-20070608064547-vzhyegqx2vl6pni3
# sha1: 240840b5e9399da7e4d6cb1dbe1f53859d581c2d
# inventory sha1: 6a26e1f16bd0be3a49cf29e231b64c09e22b5a95
# parent ids:
#   andrew.bennetts at canonical.com-20070608063359-s5ps81a8i85w7by0
# properties:
#   branch-nick: container-format

# message:
#   More progress:
#   
#    * Rename container.py to pack.py
#    * Refactor bytes record reading into a separate class for ease of unit testing.
#    * Start handling error conditions such as invalid content lengths in byte
#      records.
#   
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Fri 2007-06-08 16:33:59.398999929 +1000

=== renamed file bzrlib/container.py // bzrlib/pack.py // encoding:base64
LS0tIGJ6cmxpYi9jb250YWluZXIucHkKKysrIGJ6cmxpYi9wYWNrLnB5CkBAIC0xOSwxNiArMTks
NDcgQEAKICJDb250YWluZXJzIiBhbmQgInJlY29yZHMiIGFyZSBkZXNjcmliZWQgaW4gZG9jL2Rl
dmVsb3BlcnMvY29udGFpbmVyLWZvcm1hdC50eHQuCiAiIiIKIAotIyBYWFg6IHByb2JhYmx5IHJl
bmFtZSB0aGlzIHRvIHBhY2sucHkKLQogZnJvbSBienJsaWIgaW1wb3J0IGVycm9ycwogCiAKIEZP
Uk1BVF9PTkUgPSAiYnpyIHBhY2sgZm9ybWF0IDEiCiAKIAotY2xhc3MgQ29udGFpbmVyUmVhZGVy
KG9iamVjdCk6Ci0gICAgIiIiQSBjbGFzcyBmb3IgcmVhZGluZyBCYXphYXIncyBjb250YWluZXIg
Zm9ybWF0LiIiIgorY2xhc3MgQ29udGFpbmVyV3JpdGVyKG9iamVjdCk6CisgICAgIiIiQSBjbGFz
cyBmb3Igd3JpdGluZyBjb250YWluZXJzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdy
aXRlX2Z1bmMpOgorICAgICAgICAiIiJDb25zdHJ1Y3Rvci4KKworICAgICAgICA6cGFyYW0gd3Jp
dGVfZnVuYzogYSBjYWxsYWJsZSB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhpcworICAgICAg
ICAgICAgQ29udGFpbmVyV3JpdGVyIG5lZWRzIHRvIHdyaXRlIHNvbWUgYnl0ZXMuCisgICAgICAg
ICIiIgorICAgICAgICBzZWxmLndyaXRlX2Z1bmMgPSB3cml0ZV9mdW5jCisKKyAgICBkZWYgYmVn
aW4oc2VsZik6CisgICAgICAgICIiIkJlZ2luIHdyaXRpbmcgYSBjb250YWluZXIuIiIiCisgICAg
ICAgIHNlbGYud3JpdGVfZnVuYyhGT1JNQVRfT05FICsgIlxuIikKKworICAgIGRlZiBlbmQoc2Vs
Zik6CisgICAgICAgICIiIkZpbmlzaCB3cml0aW5nIGEgY29udGFpbmVyLiIiIgorICAgICAgICBz
ZWxmLndyaXRlX2Z1bmMoIkUiKQorCisgICAgZGVmIGFkZF9ieXRlc19yZWNvcmQoc2VsZiwgYnl0
ZXMsIG5hbWVzKToKKyAgICAgICAgIiIiQWRkIGEgQnl0ZXMgcmVjb3JkIHdpdGggdGhlIGdpdmVu
IG5hbWVzLiIiIgorICAgICAgICAjIEtpbmQgbWFya2VyCisgICAgICAgIHNlbGYud3JpdGVfZnVu
YygiQiIpCisgICAgICAgICMgTGVuZ3RoCisgICAgICAgIHNlbGYud3JpdGVfZnVuYyhzdHIobGVu
KGJ5dGVzKSkgKyAiXG4iKQorICAgICAgICAjIE5hbWVzCisgICAgICAgIGZvciBuYW1lIGluIG5h
bWVzOgorICAgICAgICAgICAgc2VsZi53cml0ZV9mdW5jKG5hbWUgKyAiXG4iKQorICAgICAgICAj
IEVuZCBvZiBoZWFkZXJzCisgICAgICAgIHNlbGYud3JpdGVfZnVuYygiXG4iKQorICAgICAgICAj
IEZpbmFsbHksIHRoZSBjb250ZW50cy4KKyAgICAgICAgc2VsZi53cml0ZV9mdW5jKGJ5dGVzKQor
CisKK2NsYXNzIEJhc2VSZWFkZXIob2JqZWN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBy
ZWFkZXJfZnVuYyk6CiAgICAgICAgICIiIkNvbnN0cnVjdG9yLgpAQCAtMzksMTEgKzcwLDM1IEBA
CiAgICAgICAgICIiIgogICAgICAgICBzZWxmLnJlYWRlcl9mdW5jID0gcmVhZGVyX2Z1bmMKIAor
ICAgIGRlZiBfcmVhZF9saW5lKHNlbGYpOgorICAgICAgICAiIiJSZWFkIGEgbGluZSBmcm9tIHRo
ZSBpbnB1dCBzdHJlYW0uCisKKyAgICAgICAgVGhpcyBpcyBhIHNpbXBsZSBidXQgaW5lZmZpY2ll
bnQgaW1wbGVtZW50YXRpb24gdGhhdCBqdXN0IHJlYWRzIG9uZSBieXRlCisgICAgICAgIGF0IGEg
dGltZS4gIExpbmVzIHNob3VsZCBub3QgYmUgdmVyeSBsb25nLCBzbyB0aGlzIGlzIHByb2JhYmx5
CisgICAgICAgIHRvbGVyYWJsZS4KKworICAgICAgICA6cmV0dXJuczogYSBsaW5lLCB3aXRob3V0
IHRoZSB0cmFpbGluZyBuZXdsaW5lCisgICAgICAgICIiIgorICAgICAgICAjIFhYWDogSGF2ZSBh
IG1heGltdW0gbGluZSBsZW5ndGgsIHRvIHByZXZlbnQgbWFsaWNpb3VzIGlucHV0IGZyb20KKyAg
ICAgICAgIyBjb25zdW1pbmcgYW4gdW5yZWFzb25hYmxlIGFtb3VudCBvZiByZXNvdXJjZXM/Cisg
ICAgICAgICMgICAtLSBBbmRyZXcgQmVubmV0dHMsIDIwMDctMDUtMDcuCisgICAgICAgIGxpbmUg
PSAnJworICAgICAgICB3aGlsZSBub3QgbGluZS5lbmRzd2l0aCgnXG4nKToKKyAgICAgICAgICAg
IGxpbmUgKz0gc2VsZi5yZWFkZXJfZnVuYygxKQorICAgICAgICByZXR1cm4gbGluZVs6LTFdCisK
KworY2xhc3MgQ29udGFpbmVyUmVhZGVyKEJhc2VSZWFkZXIpOgorICAgICIiIkEgY2xhc3MgZm9y
IHJlYWRpbmcgQmF6YWFyJ3MgY29udGFpbmVyIGZvcm1hdC4iIiIKKwogICAgIGRlZiBpdGVyX3Jl
Y29yZHMoc2VsZik6CiAgICAgICAgICIiIkl0ZXJhdGUgb3ZlciB0aGUgY29udGFpbmVyLCB5aWVs
ZGluZyBlYWNoIHJlY29yZCBhcyBpdCBpcyByZWFkLgogCiAgICAgICAgIEVhY2ggeWllbGRlZCBy
ZWNvcmQgd2lsbCBiZSBhIDItdHVwbGUgb2YgKG5hbWVzLCBieXRlcyksIHdoZXJlIG5hbWVzIGlz
CiAgICAgICAgIGEgYGBsaXN0YGAgYW5kIGJ5dGVzIGlzIGEgYGBzdHJgLgorCisgICAgICAgIDpy
YWlzZXMgVW5rbm93bkNvbnRhaW5lckZvcm1hdEVycm9yOiBpZiB0aGUgZm9ybWF0IG9mIHRoZSBj
b250YWluZXIgaXMKKyAgICAgICAgICAgIHVucmVjb2duaXNlZC4KICAgICAgICAgIiIiCiAgICAg
ICAgIGZvcm1hdCA9IHNlbGYuX3JlYWRfbGluZSgpCiAgICAgICAgIGlmIGZvcm1hdCAhPSBGT1JN
QVRfT05FOgpAQCAtNTUsNyArMTEwLDggQEAKICAgICAgICAgICAgIHJlY29yZF9raW5kID0gc2Vs
Zi5yZWFkZXJfZnVuYygxKQogICAgICAgICAgICAgaWYgcmVjb3JkX2tpbmQgPT0gJ0InOgogICAg
ICAgICAgICAgICAgICMgQnl0ZXMgcmVjb3JkLgotICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYu
X3JlYWRfYnl0ZXNfcmVjb3JkKCkKKyAgICAgICAgICAgICAgICByZWFkZXIgPSBCeXRlc1JlY29y
ZFJlYWRlcihzZWxmLnJlYWRlcl9mdW5jKQorICAgICAgICAgICAgICAgIHlpZWxkIHJlYWRlci5y
ZWFkKCkKICAgICAgICAgICAgIGVsaWYgcmVjb3JkX2tpbmQgPT0gJ0UnOgogICAgICAgICAgICAg
ICAgICMgRW5kIG1hcmtlci4gIFRoZXJlIGFyZSBubyBtb3JlIHJlY29yZHMuCiAgICAgICAgICAg
ICAgICAgcmV0dXJuCkBAIC02Nyw4ICsxMjMsNTMgQEAKICAgICAgICAgICAgICAgICAjIFVua25v
d24gcmVjb3JkIHR5cGUuCiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3JzLlVua25vd25SZWNv
cmRUeXBlRXJyb3IocmVjb3JkX2tpbmQpCiAKLSAgICBkZWYgX3JlYWRfYnl0ZXNfcmVjb3JkKHNl
bGYpOgotICAgICAgICBsZW5ndGggPSBpbnQoc2VsZi5fcmVhZF9saW5lKCkpCisKK2NsYXNzIENv
bnRhaW5lcldyaXRlcihvYmplY3QpOgorICAgICIiIkEgY2xhc3MgZm9yIHdyaXRpbmcgY29udGFp
bmVycy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3cml0ZV9mdW5jKToKKyAgICAgICAg
IiIiQ29uc3RydWN0b3IuCisKKyAgICAgICAgOnBhcmFtIHdyaXRlX2Z1bmM6IGEgY2FsbGFibGUg
dGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoaXMKKyAgICAgICAgICAgIENvbnRhaW5lcldyaXRl
ciBuZWVkcyB0byB3cml0ZSBzb21lIGJ5dGVzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi53
cml0ZV9mdW5jID0gd3JpdGVfZnVuYworCisgICAgZGVmIGJlZ2luKHNlbGYpOgorICAgICAgICAi
IiJCZWdpbiB3cml0aW5nIGEgY29udGFpbmVyLiIiIgorICAgICAgICBzZWxmLndyaXRlX2Z1bmMo
Rk9STUFUX09ORSArICJcbiIpCisKKyAgICBkZWYgZW5kKHNlbGYpOgorICAgICAgICAiIiJGaW5p
c2ggd3JpdGluZyBhIGNvbnRhaW5lci4iIiIKKyAgICAgICAgc2VsZi53cml0ZV9mdW5jKCJFIikK
KworICAgIGRlZiBhZGRfYnl0ZXNfcmVjb3JkKHNlbGYsIGJ5dGVzLCBuYW1lcyk6CisgICAgICAg
ICIiIkFkZCBhIEJ5dGVzIHJlY29yZCB3aXRoIHRoZSBnaXZlbiBuYW1lcy4iIiIKKyAgICAgICAg
IyBLaW5kIG1hcmtlcgorICAgICAgICBzZWxmLndyaXRlX2Z1bmMoIkIiKQorICAgICAgICAjIExl
bmd0aAorICAgICAgICBzZWxmLndyaXRlX2Z1bmMoc3RyKGxlbihieXRlcykpICsgIlxuIikKKyAg
ICAgICAgIyBOYW1lcworICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIHNl
bGYud3JpdGVfZnVuYyhuYW1lICsgIlxuIikKKyAgICAgICAgIyBFbmQgb2YgaGVhZGVycworICAg
ICAgICBzZWxmLndyaXRlX2Z1bmMoIlxuIikKKyAgICAgICAgIyBGaW5hbGx5LCB0aGUgY29udGVu
dHMuCisgICAgICAgIHNlbGYud3JpdGVfZnVuYyhieXRlcykKKworCitjbGFzcyBCeXRlc1JlY29y
ZFJlYWRlcihCYXNlUmVhZGVyKToKKworICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICAjIFJl
YWQgdGhlIGNvbnRlbnQgbGVuZ3RoLgorICAgICAgICBsZW5ndGhfbGluZSA9IHNlbGYuX3JlYWRf
bGluZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxlbmd0aCA9IGludChsZW5ndGhfbGlu
ZSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBlcnJvcnMu
SW52YWxpZFJlY29yZEVycm9yKAorICAgICAgICAgICAgICAgICIlciBpcyBub3QgYSB2YWxpZCBs
ZW5ndGguIiAlIChsZW5ndGhfbGluZSwpKQorICAgICAgICAKKyAgICAgICAgIyBSZWFkIHRoZSBs
aXN0IG9mIG5hbWVzLgogICAgICAgICBuYW1lcyA9IFtdCiAgICAgICAgIHdoaWxlIFRydWU6CiAg
ICAgICAgICAgICBuYW1lID0gc2VsZi5fcmVhZF9saW5lKCkKQEAgLTc5LDU0ICsxODAsMyBAQAog
ICAgICAgICAjIFhYWDogZGVhbCB3aXRoIGNhc2Ugd2hlcmUgbGVuKGJ5dGVzKSAhPSBsZW5ndGgK
ICAgICAgICAgcmV0dXJuIG5hbWVzLCBieXRlcwogCi0gICAgZGVmIF9yZWFkX2xpbmUoc2VsZik6
Ci0gICAgICAgICIiIlJlYWQgYSBsaW5lIGZyb20gdGhlIGlucHV0IHN0cmVhbS4KLQotICAgICAg
ICBUaGlzIGlzIGEgc2ltcGxlIGJ1dCBpbmVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiB0aGF0IGp1
c3QgcmVhZHMgb25lIGJ5dGUKLSAgICAgICAgYXQgYSB0aW1lLiAgTGluZXMgc2hvdWxkIG5vdCBi
ZSB2ZXJ5IGxvbmcsIHNvIHRoaXMgaXMgcHJvYmFibHkKLSAgICAgICAgdG9sZXJhYmxlLgotCi0g
ICAgICAgIDpyZXR1cm5zOiBhIGxpbmUsIHdpdGhvdXQgdGhlIHRyYWlsaW5nIG5ld2xpbmUKLSAg
ICAgICAgIiIiCi0gICAgICAgICMgWFhYOiBIYXZlIGEgbWF4aW11bSBsaW5lIGxlbmd0aCwgdG8g
cHJldmVudCBtYWxpY2lvdXMgaW5wdXQgZnJvbQotICAgICAgICAjIGNvbnN1bWluZyBhbiB1bnJl
YXNvbmFibGUgYW1vdW50IG9mIHJlc291cmNlcz8KLSAgICAgICAgIyAgIC0tIEFuZHJldyBCZW5u
ZXR0cywgMjAwNy0wNS0wNy4KLSAgICAgICAgbGluZSA9ICcnCi0gICAgICAgIHdoaWxlIG5vdCBs
aW5lLmVuZHN3aXRoKCdcbicpOgotICAgICAgICAgICAgbGluZSArPSBzZWxmLnJlYWRlcl9mdW5j
KDEpCi0gICAgICAgIHJldHVybiBsaW5lWzotMV0KLQotCi1jbGFzcyBDb250YWluZXJXcml0ZXIo
b2JqZWN0KToKLSAgICAiIiJBIGNsYXNzIGZvciB3cml0aW5nIGNvbnRhaW5lcnMuIiIiCi0KLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVfZnVuYyk6Ci0gICAgICAgICIiIkNvbnN0cnVjdG9y
LgotCi0gICAgICAgIDpwYXJhbSB3cml0ZV9mdW5jOiBhIGNhbGxhYmxlIHRoYXQgd2lsbCBiZSBj
YWxsZWQgd2hlbiB0aGlzCi0gICAgICAgICAgICBDb250YWluZXJXcml0ZXIgbmVlZHMgdG8gd3Jp
dGUgc29tZSBieXRlcy4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYud3JpdGVfZnVuYyA9IHdy
aXRlX2Z1bmMKLQotICAgIGRlZiBiZWdpbihzZWxmKToKLSAgICAgICAgIiIiQmVnaW4gd3JpdGlu
ZyBhIGNvbnRhaW5lci4iIiIKLSAgICAgICAgc2VsZi53cml0ZV9mdW5jKEZPUk1BVF9PTkUgKyAi
XG4iKQotCi0gICAgZGVmIGVuZChzZWxmKToKLSAgICAgICAgIiIiRmluaXNoIHdyaXRpbmcgYSBj
b250YWluZXIuIiIiCi0gICAgICAgIHNlbGYud3JpdGVfZnVuYygiRSIpCi0KLSAgICBkZWYgYWRk
X2J5dGVzX3JlY29yZChzZWxmLCBieXRlcywgbmFtZXMpOgotICAgICAgICAiIiJBZGQgYSBCeXRl
cyByZWNvcmQgd2l0aCB0aGUgZ2l2ZW4gbmFtZXMuIiIiCi0gICAgICAgICMgS2luZCBtYXJrZXIK
LSAgICAgICAgc2VsZi53cml0ZV9mdW5jKCJCIikKLSAgICAgICAgIyBMZW5ndGgKLSAgICAgICAg
c2VsZi53cml0ZV9mdW5jKHN0cihsZW4oYnl0ZXMpKSArICJcbiIpCi0gICAgICAgICMgTmFtZXMK
LSAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6Ci0gICAgICAgICAgICBzZWxmLndyaXRlX2Z1bmMo
bmFtZSArICJcbiIpCi0gICAgICAgICMgRW5kIG9mIGhlYWRlcnMKLSAgICAgICAgc2VsZi53cml0
ZV9mdW5jKCJcbiIpCi0gICAgICAgICMgRmluYWxseSwgdGhlIGNvbnRlbnRzLgotICAgICAgICBz
ZWxmLndyaXRlX2Z1bmMoYnl0ZXMpCi0KCg==

=== renamed file bzrlib/tests/test_container.py // bzrlib/tests/test_pack.py //
...  encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2NvbnRhaW5lci5weQorKysgYnpybGliL3Rlc3RzL3Rlc3Rf
cGFjay5weQpAQCAtMTQsMTIgKzE0LDEyIEBACiAjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAjIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKIAot
IiIiVGVzdHMgZm9yIGJ6cmxpYi5jb250YWluZXIuIiIiCisiIiJUZXN0cyBmb3IgYnpybGliLnBh
Y2suIiIiCiAKIAogZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCiAKLWZyb20gYnpybGli
IGltcG9ydCBjb250YWluZXIsIGVycm9ycworZnJvbSBienJsaWIgaW1wb3J0IHBhY2ssIGVycm9y
cwogZnJvbSBienJsaWIudGVzdHMgaW1wb3J0IFRlc3RDYXNlCiAKIApAQCAtMzEsMTkgKzMxLDE5
IEBACiAgICAgICAgIFRoaXMgdXNlcyBOb25lIGFzIHRoZSBvdXRwdXQgc3RyZWFtIHRvIHNob3cg
dGhhdCB0aGUgY29uc3RydWN0b3IgZG9lc24ndAogICAgICAgICB0cnkgdG8gdXNlIHRoZSBvdXRw
dXQgc3RyZWFtLgogICAgICAgICAiIiIKLSAgICAgICAgd3JpdGVyID0gY29udGFpbmVyLkNvbnRh
aW5lcldyaXRlcihOb25lKQorICAgICAgICB3cml0ZXIgPSBwYWNrLkNvbnRhaW5lcldyaXRlcihO
b25lKQogCiAgICAgZGVmIHRlc3RfYmVnaW4oc2VsZik6CiAgICAgICAgICIiIlRlc3QgdGhlIGJl
Z2luKCkgbWV0aG9kLiIiIgogICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCi0gICAgICAgIHdy
aXRlciA9IGNvbnRhaW5lci5Db250YWluZXJXcml0ZXIob3V0cHV0LndyaXRlKQorICAgICAgICB3
cml0ZXIgPSBwYWNrLkNvbnRhaW5lcldyaXRlcihvdXRwdXQud3JpdGUpCiAgICAgICAgIHdyaXRl
ci5iZWdpbigpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2J6ciBwYWNrIGZvcm1hdCAxXG4n
LCBvdXRwdXQuZ2V0dmFsdWUoKSkKIAogICAgIGRlZiB0ZXN0X2VuZChzZWxmKToKICAgICAgICAg
IiIiVGVzdCB0aGUgZW5kKCkgbWV0aG9kLiIiIgogICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygp
Ci0gICAgICAgIHdyaXRlciA9IGNvbnRhaW5lci5Db250YWluZXJXcml0ZXIob3V0cHV0LndyaXRl
KQorICAgICAgICB3cml0ZXIgPSBwYWNrLkNvbnRhaW5lcldyaXRlcihvdXRwdXQud3JpdGUpCiAg
ICAgICAgIHdyaXRlci5iZWdpbigpCiAgICAgICAgIHdyaXRlci5lbmQoKQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdienIgcGFjayBmb3JtYXQgMVxuRScsIG91dHB1dC5nZXR2YWx1ZSgpKQpA
QCAtNTEsNyArNTEsNyBAQAogICAgIGRlZiB0ZXN0X2FkZF9ieXRlc19yZWNvcmRfbm9fbmFtZShz
ZWxmKToKICAgICAgICAgIiIiQWRkIGEgYnl0ZXMgcmVjb3JkIHdpdGggbm8gbmFtZS4iIiIKICAg
ICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQotICAgICAgICB3cml0ZXIgPSBjb250YWluZXIuQ29u
dGFpbmVyV3JpdGVyKG91dHB1dC53cml0ZSkKKyAgICAgICAgd3JpdGVyID0gcGFjay5Db250YWlu
ZXJXcml0ZXIob3V0cHV0LndyaXRlKQogICAgICAgICB3cml0ZXIuYmVnaW4oKQogICAgICAgICB3
cml0ZXIuYWRkX2J5dGVzX3JlY29yZCgnYWJjJywgbmFtZXM9W10pCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ2J6ciBwYWNrIGZvcm1hdCAxXG5CM1xuXG5hYmMnLCBvdXRwdXQuZ2V0dmFsdWUo
KSkKQEAgLTU5LDcgKzU5LDcgQEAKICAgICBkZWYgdGVzdF9hZGRfYnl0ZXNfcmVjb3JkX29uZV9u
YW1lKHNlbGYpOgogICAgICAgICAiIiJBZGQgYSBieXRlcyByZWNvcmQgd2l0aCBvbmUgbmFtZS4i
IiIKICAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQotICAgICAgICB3cml0ZXIgPSBjb250YWlu
ZXIuQ29udGFpbmVyV3JpdGVyKG91dHB1dC53cml0ZSkKKyAgICAgICAgd3JpdGVyID0gcGFjay5D
b250YWluZXJXcml0ZXIob3V0cHV0LndyaXRlKQogICAgICAgICB3cml0ZXIuYmVnaW4oKQogICAg
ICAgICB3cml0ZXIuYWRkX2J5dGVzX3JlY29yZCgnYWJjJywgbmFtZXM9WyduYW1lMSddKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdienIgcGFjayBmb3JtYXQgMVxuQjNcbm5hbWUxXG5cbmFi
YycsCkBAIC02OCw3ICs2OCw3IEBACiAgICAgZGVmIHRlc3RfYWRkX2J5dGVzX3JlY29yZF90d29f
bmFtZXMoc2VsZik6CiAgICAgICAgICIiIkFkZCBhIGJ5dGVzIHJlY29yZCB3aXRoIHR3byBuYW1l
cy4iIiIKICAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQotICAgICAgICB3cml0ZXIgPSBjb250
YWluZXIuQ29udGFpbmVyV3JpdGVyKG91dHB1dC53cml0ZSkKKyAgICAgICAgd3JpdGVyID0gcGFj
ay5Db250YWluZXJXcml0ZXIob3V0cHV0LndyaXRlKQogICAgICAgICB3cml0ZXIuYmVnaW4oKQog
ICAgICAgICB3cml0ZXIuYWRkX2J5dGVzX3JlY29yZCgnYWJjJywgbmFtZXM9WyduYW1lMScsICdu
YW1lMiddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdienIgcGFjayBmb3JtYXQgMVxuQjNc
bm5hbWUxXG5uYW1lMlxuXG5hYmMnLApAQCAtODMsMTggKzgzLDE4IEBACiAgICAgICAgIFRoaXMg
dXNlcyBOb25lIGFzIHRoZSBvdXRwdXQgc3RyZWFtIHRvIHNob3cgdGhhdCB0aGUgY29uc3RydWN0
b3IgZG9lc24ndAogICAgICAgICB0cnkgdG8gdXNlIHRoZSBpbnB1dCBzdHJlYW0uCiAgICAgICAg
ICIiIgotICAgICAgICByZWFkZXIgPSBjb250YWluZXIuQ29udGFpbmVyUmVhZGVyKE5vbmUpCisg
ICAgICAgIHJlYWRlciA9IHBhY2suQ29udGFpbmVyUmVhZGVyKE5vbmUpCiAKICAgICBkZWYgdGVz
dF9lbXB0eV9jb250YWluZXIoc2VsZik6CiAgICAgICAgICIiIlJlYWQgYW4gZW1wdHkgY29udGFp
bmVyLiIiIgogICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCJienIgcGFjayBmb3JtYXQgMVxuRSIp
Ci0gICAgICAgIHJlYWRlciA9IGNvbnRhaW5lci5Db250YWluZXJSZWFkZXIoaW5wdXQucmVhZCkK
KyAgICAgICAgcmVhZGVyID0gcGFjay5Db250YWluZXJSZWFkZXIoaW5wdXQucmVhZCkKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgbGlzdChyZWFkZXIuaXRlcl9yZWNvcmRzKCkpKQogCiAg
ICAgZGVmIHRlc3RfdW5rbm93bl9mb3JtYXQoc2VsZik6CiAgICAgICAgICIiIlVucmVjb2duaXNl
ZCBjb250YWluZXIgZm9ybWF0cyByYWlzZSBVbmtub3duQ29udGFpbmVyRm9ybWF0RXJyb3IuIiIi
CiAgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oInVua25vd24gZm9ybWF0XG4iKQotICAgICAgICBy
ZWFkZXIgPSBjb250YWluZXIuQ29udGFpbmVyUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAgIHJl
YWRlciA9IHBhY2suQ29udGFpbmVyUmVhZGVyKGlucHV0LnJlYWQpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKAogICAgICAgICAgICAgZXJyb3JzLlVua25vd25Db250YWluZXJGb3JtYXRFcnJv
ciwgcmVhZGVyLml0ZXJfcmVjb3JkcykKIApAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgIFVu
ZXhwZWN0ZWRFbmRPZkNvbnRhaW5lckVycm9yIHRvIGJlIHJhaXNlZC4KICAgICAgICAgIiIiCiAg
ICAgICAgIGlucHV0ID0gU3RyaW5nSU8oImJ6ciBwYWNrIGZvcm1hdCAxXG4iKQotICAgICAgICBy
ZWFkZXIgPSBjb250YWluZXIuQ29udGFpbmVyUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAgIHJl
YWRlciA9IHBhY2suQ29udGFpbmVyUmVhZGVyKGlucHV0LnJlYWQpCiAgICAgICAgIGl0ZXJhdG9y
ID0gcmVhZGVyLml0ZXJfcmVjb3JkcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAogICAg
ICAgICAgICAgZXJyb3JzLlVuZXhwZWN0ZWRFbmRPZkNvbnRhaW5lckVycm9yLCBpdGVyYXRvci5u
ZXh0KQpAQCAtMTExLDMwICsxMTEsNjUgQEAKICAgICBkZWYgdGVzdF91bmtub3duX3JlY29yZF90
eXBlKHNlbGYpOgogICAgICAgICAiIiJVbmtub3duIHJlY29yZCB0eXBlcyBjYXVzZSBVbmtub3du
UmVjb3JkVHlwZUVycm9yIHRvIGJlIHJhaXNlZC4iIiIKICAgICAgICAgaW5wdXQgPSBTdHJpbmdJ
TygiYnpyIHBhY2sgZm9ybWF0IDFcblgiKQotICAgICAgICByZWFkZXIgPSBjb250YWluZXIuQ29u
dGFpbmVyUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAgIHJlYWRlciA9IHBhY2suQ29udGFpbmVy
UmVhZGVyKGlucHV0LnJlYWQpCiAgICAgICAgIGl0ZXJhdG9yID0gcmVhZGVyLml0ZXJfcmVjb3Jk
cygpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAogICAgICAgICAgICAgZXJyb3JzLlVua25v
d25SZWNvcmRUeXBlRXJyb3IsIGl0ZXJhdG9yLm5leHQpCiAKLSAgICAjIFhYWDogcmVmYWN0b3Ig
Qnl0ZXMgcmVjb3JkIHBhcnNpbmcgaW50byBhIHNlcGVyYXRlIEJ5dGVzUmVjb3JkUmVhZGVyIGZv
cgotICAgICMgICAgICBiZXR0ZXIgdW5pdCB0ZXN0aW5nLgotICAgIGRlZiB0ZXN0X29uZV91bm5h
bWVkX3JlY29yZChzZWxmKToKLSAgICAgICAgIiIiUmVhZCBhIGNvbnRhaW5lciB3aXRoIG9uZSBC
eXRlcyByZWNvcmQuIiIiCisgICAgZGVmIHRlc3RfY29udGFpbmVyX3dpdGhfb25lX3VubmFtZWRf
cmVjb3JkKHNlbGYpOgorICAgICAgICAiIiJSZWFkIGEgY29udGFpbmVyIHdpdGggb25lIEJ5dGVz
IHJlY29yZC4KKyAgICAgICAgCisgICAgICAgIFBhcnNpbmcgQnl0ZXMgcmVjb3JkcyBpcyBtb3Jl
IHRob3JvdWdobHkgZXhlcmNpc2VkIGJ5IFhYWC4gIFRoaXMgdGVzdCBpcworICAgICAgICBoZXJl
IHRvIGVuc3VyZSB0aGF0IENvbnRhaW5lclJlYWRlcidzIGludGVncmF0aW9uIHdpdGggQnl0ZXNS
ZWNvcmRSZWFkZXIKKyAgICAgICAgaXMgd29ya2luZy4KKyAgICAgICAgIiIiCiAgICAgICAgIGlu
cHV0ID0gU3RyaW5nSU8oImJ6ciBwYWNrIGZvcm1hdCAxXG5CNVxuXG5hYWFhYUUiKQotICAgICAg
ICByZWFkZXIgPSBjb250YWluZXIuQ29udGFpbmVyUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAg
IHJlYWRlciA9IHBhY2suQ29udGFpbmVyUmVhZGVyKGlucHV0LnJlYWQpCiAgICAgICAgIGV4cGVj
dGVkX3JlY29yZHMgPSBbKFtdLCAnYWFhYWEnKV0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChl
eHBlY3RlZF9yZWNvcmRzLCBsaXN0KHJlYWRlci5pdGVyX3JlY29yZHMoKSkpCiAKLSAgICBkZWYg
dGVzdF9vbmVfbmFtZWRfcmVjb3JkKHNlbGYpOgotICAgICAgICAiIiJSZWFkIGEgY29udGFpbmVy
IHdpdGggb25lIEJ5dGVzIHJlY29yZCB3aXRoIGEgc2luZ2xlIG5hbWUuIiIiCi0gICAgICAgIGlu
cHV0ID0gU3RyaW5nSU8oImJ6ciBwYWNrIGZvcm1hdCAxXG5CNVxubmFtZTFcblxuYWFhYWFFIikK
LSAgICAgICAgcmVhZGVyID0gY29udGFpbmVyLkNvbnRhaW5lclJlYWRlcihpbnB1dC5yZWFkKQot
ICAgICAgICBleHBlY3RlZF9yZWNvcmRzID0gWyhbJ25hbWUxJ10sICdhYWFhYScpXQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3JlY29yZHMsIGxpc3QocmVhZGVyLml0ZXJfcmVj
b3JkcygpKSkKLQorCitjbGFzcyBUZXN0Qnl0ZXNSZWNvcmRSZWFkZXIoVGVzdENhc2UpOgorICAg
ICIiIlRlc3RzIGZvciBwYXJzaW5nIEJ5dGVzIHJlY29yZHMgd2l0aCBCeXRlc1JlY29yZFJlYWRl
ci4iIiIKKworICAgIGRlZiB0ZXN0X3JlY29yZF93aXRoX25vX25hbWUoc2VsZik6CisgICAgICAg
ICIiIlJlYWRpbmcgYSBCeXRlcyByZWNvcmQgd2l0aCBubyBuYW1lIHJldHVybnMgYW4gZW1wdHkg
bGlzdCBvZgorICAgICAgICBuYW1lcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlucHV0ID0gU3Ry
aW5nSU8oIjVcblxuYWFhYWEiKQorICAgICAgICByZWFkZXIgPSBwYWNrLkJ5dGVzUmVjb3JkUmVh
ZGVyKGlucHV0LnJlYWQpCisgICAgICAgIG5hbWVzLCBieXRlcyA9IHJlYWRlci5yZWFkKCkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgbmFtZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ2FhYWFhJywgYnl0ZXMpCisKKyAgICBkZWYgdGVzdF9yZWNvcmRfd2l0aF9vbmVfbmFtZShz
ZWxmKToKKyAgICAgICAgIiIiUmVhZGluZyBhIEJ5dGVzIHJlY29yZCB3aXRoIG9uZSBuYW1lIHJl
dHVybnMgYSBsaXN0IG9mIGp1c3QgdGhhdAorICAgICAgICBuYW1lLgorICAgICAgICAiIiIKKyAg
ICAgICAgaW5wdXQgPSBTdHJpbmdJTygiNVxubmFtZTFcblxuYWFhYWEiKQorICAgICAgICByZWFk
ZXIgPSBwYWNrLkJ5dGVzUmVjb3JkUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAgIG5hbWVzLCBi
eXRlcyA9IHJlYWRlci5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ25hbWUxJ10s
IG5hbWVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYWFhYScsIGJ5dGVzKQorCisgICAg
ZGVmIHRlc3RfcmVjb3JkX3dpdGhfdHdvX25hbWVzKHNlbGYpOgorICAgICAgICAiIiJSZWFkaW5n
IGEgQnl0ZXMgcmVjb3JkIHdpdGggdHdvIG5hbWVzIHJldHVybnMgYSBsaXN0IG9mIGJvdGggbmFt
ZXMuCisgICAgICAgICIiIgorICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCI1XG5uYW1lMVxubmFt
ZTJcblxuYWFhYWEiKQorICAgICAgICByZWFkZXIgPSBwYWNrLkJ5dGVzUmVjb3JkUmVhZGVyKGlu
cHV0LnJlYWQpCisgICAgICAgIG5hbWVzLCBieXRlcyA9IHJlYWRlci5yZWFkKCkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChbJ25hbWUxJywgJ25hbWUyJ10sIG5hbWVzKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdhYWFhYScsIGJ5dGVzKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9sZW5n
dGgoc2VsZik6CisgICAgICAgICIiIklmIHRoZSBsZW5ndGgtcHJlZml4IGlzIG5vdCBhIG51bWJl
ciwgcGFyc2luZyByYWlzZXMKKyAgICAgICAgSW52YWxpZFJlY29yZEVycm9yLgorICAgICAgICAi
IiIKKyAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygibm90IGEgbnVtYmVyXG4iKQorICAgICAgICBy
ZWFkZXIgPSBwYWNrLkJ5dGVzUmVjb3JkUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKGVycm9ycy5JbnZhbGlkUmVjb3JkRXJyb3IsIHJlYWRlci5yZWFkKQogCiAg
ICAgIyBPdGhlciBCeXRlcyByZWNvcmQgcGFyc2luZyBjYXNlcyB0byB0ZXN0OgotICAgICMgIC0g
aW52YWxpZCBsZW5ndGggdmFsdWUKICAgICAjICAtIGluY29tcGxldGUgYnl0ZXMgKGkuZS4gc3Ry
ZWFtIGVuZHMgYmVmb3JlICRsZW5ndGggYnl0ZXMgcmVhZCkKICAgICAjICAtIF9yZWFkX2xpbmUg
ZW5jb3VudGVyaW5nIGVuZCBvZiBzdHJlYW0gKGF0IGFueSB0aW1lOyBkdXJpbmcgbGVuZ3RoLAog
ICAgICMgICAgbmFtZXMsIGVuZCBvZiBoZWFkZXJzLi4uKQoK

=== modified file bzrlib/errors.py // encoding:base64
LS0tIGJ6cmxpYi9lcnJvcnMucHkKKysrIGJ6cmxpYi9lcnJvcnMucHkKQEAgLTIxNjMsMyArMjE2
MywxMCBAQAogICAgICAgICBzZWxmLnJlY29yZF90eXBlID0gcmVjb3JkX3R5cGUKIAogCitjbGFz
cyBJbnZhbGlkUmVjb3JkRXJyb3IoQ29udGFpbmVyRXJyb3IpOgorCisgICAgX2ZtdCA9ICJJbnZh
bGlkIHJlY29yZDogJShyZWFzb24pcyIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWFzb24p
OgorICAgICAgICBzZWxmLnJlYXNvbiA9IHJlYXNvbgorCgo=

=== modified file bzrlib/tests/__init__.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy9fX2luaXRfXy5weQorKysgYnpybGliL3Rlc3RzL19faW5pdF9fLnB5
CkBAIC0yMjc4LDcgKzIyNzgsNyBAQAogICAgICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMu
dGVzdF9jb21taXRfbWVyZ2UnLAogICAgICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMudGVz
dF9jb25maWcnLAogICAgICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMudGVzdF9jb25mbGlj
dHMnLAotICAgICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMudGVzdF9jb250YWluZXInLAor
ICAgICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMudGVzdF9wYWNrJywKICAgICAgICAgICAg
ICAgICAgICAnYnpybGliLnRlc3RzLnRlc3RfY291bnRlZF9sb2NrJywKICAgICAgICAgICAgICAg
ICAgICAnYnpybGliLnRlc3RzLnRlc3RfZGVjb3JhdG9ycycsCiAgICAgICAgICAgICAgICAgICAg
J2J6cmxpYi50ZXN0cy50ZXN0X2RlbHRhJywKCg==

=== modified file bzrlib/tests/test_errors.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2Vycm9ycy5weQorKysgYnpybGliL3Rlc3RzL3Rlc3RfZXJy
b3JzLnB5CkBAIC0yODYsNiArMjg2LDEzIEBACiAgICAgICAgICAgICAiVW5rbm93biByZWNvcmQg
dHlwZTogJ1gnIiwKICAgICAgICAgICAgIHN0cihlKSkKIAorICAgIGRlZiB0ZXN0X2ludmFsaWRf
cmVjb3JkKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHRoZSBmb3JtYXR0aW5nIG9mIEludmFsaWRS
ZWNvcmRFcnJvci4iIiIKKyAgICAgICAgZSA9IGVycm9ycy5JbnZhbGlkUmVjb3JkRXJyb3IoInh4
eCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAiSW52YWxpZCByZWNv
cmQ6IHh4eCIsCisgICAgICAgICAgICBzdHIoZSkpCisKIAogY2xhc3MgUGFzc1Rocm91Z2hFcnJv
cihlcnJvcnMuQnpyRXJyb3IpOgogICAgIAoK

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706080
... 63359-s5ps81a8i85w7by0
# revision id: andrew.bennetts at canonical.com-20070608063359-s5ps81a8i85w7by0
# sha1: a5673bf71acc45505378e180bd6282493298fd1d
# inventory sha1: b5cc534da8104ae8799b4b4cd2ed63cce49dff52
# parent ids:
#   andrew.bennetts at canonical.com-20070607160934-jfs1wrxxtulso9nw
# properties:
#   branch-nick: container-format

# message:
#   Start implementing container format reading and writing.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Fri 2007-06-08 02:09:34.492000103 +1000

=== added file bzrlib/container.py // file-id:container.py-20070607160755-tr8zc
... 26q18rn0jnb-1 // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL2NvbnRhaW5lci5weQpAQCAtMCwwICsxLDEzMiBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMDcgQ2Fub25pY2FsIEx0ZAorIworIyBUaGlzIHByb2dyYW0gaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEt
MTMwNyAgVVNBCisKKyIiIkNvbnRhaW5lciBmb3JtYXQgZm9yIEJhemFhciBkYXRhLgorCisiQ29u
dGFpbmVycyIgYW5kICJyZWNvcmRzIiBhcmUgZGVzY3JpYmVkIGluIGRvYy9kZXZlbG9wZXJzL2Nv
bnRhaW5lci1mb3JtYXQudHh0LgorIiIiCisKKyMgWFhYOiBwcm9iYWJseSByZW5hbWUgdGhpcyB0
byBwYWNrLnB5CisKK2Zyb20gYnpybGliIGltcG9ydCBlcnJvcnMKKworCitGT1JNQVRfT05FID0g
ImJ6ciBwYWNrIGZvcm1hdCAxIgorCisKK2NsYXNzIENvbnRhaW5lclJlYWRlcihvYmplY3QpOgor
ICAgICIiIkEgY2xhc3MgZm9yIHJlYWRpbmcgQmF6YWFyJ3MgY29udGFpbmVyIGZvcm1hdC4iIiIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWFkZXJfZnVuYyk6CisgICAgICAgICIiIkNvbnN0
cnVjdG9yLgorCisgICAgICAgIDpwYXJhbSByZWFkZXJfZnVuYzogYSBjYWxsYWJsZSB0aGF0IHRh
a2VzIG9uZSBvcHRpb25hbCBhcmd1bWVudCwKKyAgICAgICAgICAgIGBgc2l6ZWBgLCBhbmQgcmV0
dXJucyBhdCBtb3N0IHRoYXQgbWFueSBieXRlcy4gIFdoZW4gdGhlIGNhbGxhYmxlCisgICAgICAg
ICAgICByZXR1cm5zIGFuIGVtcHR5IHN0cmluZywgdGhlbiBhdCBtb3N0IHRoYXQgbWFueSBieXRl
cyBhcmUgcmVhZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucmVhZGVyX2Z1bmMgPSByZWFk
ZXJfZnVuYworCisgICAgZGVmIGl0ZXJfcmVjb3JkcyhzZWxmKToKKyAgICAgICAgIiIiSXRlcmF0
ZSBvdmVyIHRoZSBjb250YWluZXIsIHlpZWxkaW5nIGVhY2ggcmVjb3JkIGFzIGl0IGlzIHJlYWQu
CisKKyAgICAgICAgRWFjaCB5aWVsZGVkIHJlY29yZCB3aWxsIGJlIGEgMi10dXBsZSBvZiAobmFt
ZXMsIGJ5dGVzKSwgd2hlcmUgbmFtZXMgaXMKKyAgICAgICAgYSBgYGxpc3RgYCBhbmQgYnl0ZXMg
aXMgYSBgYHN0cmAuCisgICAgICAgICIiIgorICAgICAgICBmb3JtYXQgPSBzZWxmLl9yZWFkX2xp
bmUoKQorICAgICAgICBpZiBmb3JtYXQgIT0gRk9STUFUX09ORToKKyAgICAgICAgICAgIHJhaXNl
IGVycm9ycy5Vbmtub3duQ29udGFpbmVyRm9ybWF0RXJyb3IoZm9ybWF0KQorICAgICAgICByZXR1
cm4gc2VsZi5faXRlcl9yZWNvcmRzKCkKKyAgICAKKyAgICBkZWYgX2l0ZXJfcmVjb3JkcyhzZWxm
KToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHJlY29yZF9raW5kID0gc2VsZi5y
ZWFkZXJfZnVuYygxKQorICAgICAgICAgICAgaWYgcmVjb3JkX2tpbmQgPT0gJ0InOgorICAgICAg
ICAgICAgICAgICMgQnl0ZXMgcmVjb3JkLgorICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYuX3Jl
YWRfYnl0ZXNfcmVjb3JkKCkKKyAgICAgICAgICAgIGVsaWYgcmVjb3JkX2tpbmQgPT0gJ0UnOgor
ICAgICAgICAgICAgICAgICMgRW5kIG1hcmtlci4gIFRoZXJlIGFyZSBubyBtb3JlIHJlY29yZHMu
CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIHJlY29yZF9raW5kID09
ICcnOgorICAgICAgICAgICAgICAgICMgRW5kIG9mIHN0cmVhbSBlbmNvdW50ZXJlZCwgYnV0IG5v
IEVuZCBNYXJrZXIgcmVjb3JkIHNlZW4sIHNvCisgICAgICAgICAgICAgICAgIyB0aGlzIGNvbnRh
aW5lciBpcyBpbmNvbXBsZXRlLgorICAgICAgICAgICAgICAgIHJhaXNlIGVycm9ycy5VbmV4cGVj
dGVkRW5kT2ZDb250YWluZXJFcnJvcigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgICMgVW5rbm93biByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICByYWlzZSBlcnJvcnMu
VW5rbm93blJlY29yZFR5cGVFcnJvcihyZWNvcmRfa2luZCkKKworICAgIGRlZiBfcmVhZF9ieXRl
c19yZWNvcmQoc2VsZik6CisgICAgICAgIGxlbmd0aCA9IGludChzZWxmLl9yZWFkX2xpbmUoKSkK
KyAgICAgICAgbmFtZXMgPSBbXQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgbmFt
ZSA9IHNlbGYuX3JlYWRfbGluZSgpCisgICAgICAgICAgICBpZiBuYW1lID09ICcnOgorICAgICAg
ICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBuYW1lcy5hcHBlbmQobmFtZSkKKyAgICAgICAg
Ynl0ZXMgPSBzZWxmLnJlYWRlcl9mdW5jKGxlbmd0aCkKKyAgICAgICAgIyBYWFg6IGRlYWwgd2l0
aCBjYXNlIHdoZXJlIGxlbihieXRlcykgIT0gbGVuZ3RoCisgICAgICAgIHJldHVybiBuYW1lcywg
Ynl0ZXMKKworICAgIGRlZiBfcmVhZF9saW5lKHNlbGYpOgorICAgICAgICAiIiJSZWFkIGEgbGlu
ZSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0uCisKKyAgICAgICAgVGhpcyBpcyBhIHNpbXBsZSBidXQg
aW5lZmZpY2llbnQgaW1wbGVtZW50YXRpb24gdGhhdCBqdXN0IHJlYWRzIG9uZSBieXRlCisgICAg
ICAgIGF0IGEgdGltZS4gIExpbmVzIHNob3VsZCBub3QgYmUgdmVyeSBsb25nLCBzbyB0aGlzIGlz
IHByb2JhYmx5CisgICAgICAgIHRvbGVyYWJsZS4KKworICAgICAgICA6cmV0dXJuczogYSBsaW5l
LCB3aXRob3V0IHRoZSB0cmFpbGluZyBuZXdsaW5lCisgICAgICAgICIiIgorICAgICAgICAjIFhY
WDogSGF2ZSBhIG1heGltdW0gbGluZSBsZW5ndGgsIHRvIHByZXZlbnQgbWFsaWNpb3VzIGlucHV0
IGZyb20KKyAgICAgICAgIyBjb25zdW1pbmcgYW4gdW5yZWFzb25hYmxlIGFtb3VudCBvZiByZXNv
dXJjZXM/CisgICAgICAgICMgICAtLSBBbmRyZXcgQmVubmV0dHMsIDIwMDctMDUtMDcuCisgICAg
ICAgIGxpbmUgPSAnJworICAgICAgICB3aGlsZSBub3QgbGluZS5lbmRzd2l0aCgnXG4nKToKKyAg
ICAgICAgICAgIGxpbmUgKz0gc2VsZi5yZWFkZXJfZnVuYygxKQorICAgICAgICByZXR1cm4gbGlu
ZVs6LTFdCisKKworY2xhc3MgQ29udGFpbmVyV3JpdGVyKG9iamVjdCk6CisgICAgIiIiQSBjbGFz
cyBmb3Igd3JpdGluZyBjb250YWluZXJzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdy
aXRlX2Z1bmMpOgorICAgICAgICAiIiJDb25zdHJ1Y3Rvci4KKworICAgICAgICA6cGFyYW0gd3Jp
dGVfZnVuYzogYSBjYWxsYWJsZSB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhpcworICAgICAg
ICAgICAgQ29udGFpbmVyV3JpdGVyIG5lZWRzIHRvIHdyaXRlIHNvbWUgYnl0ZXMuCisgICAgICAg
ICIiIgorICAgICAgICBzZWxmLndyaXRlX2Z1bmMgPSB3cml0ZV9mdW5jCisKKyAgICBkZWYgYmVn
aW4oc2VsZik6CisgICAgICAgICIiIkJlZ2luIHdyaXRpbmcgYSBjb250YWluZXIuIiIiCisgICAg
ICAgIHNlbGYud3JpdGVfZnVuYyhGT1JNQVRfT05FICsgIlxuIikKKworICAgIGRlZiBlbmQoc2Vs
Zik6CisgICAgICAgICIiIkZpbmlzaCB3cml0aW5nIGEgY29udGFpbmVyLiIiIgorICAgICAgICBz
ZWxmLndyaXRlX2Z1bmMoIkUiKQorCisgICAgZGVmIGFkZF9ieXRlc19yZWNvcmQoc2VsZiwgYnl0
ZXMsIG5hbWVzKToKKyAgICAgICAgIiIiQWRkIGEgQnl0ZXMgcmVjb3JkIHdpdGggdGhlIGdpdmVu
IG5hbWVzLiIiIgorICAgICAgICAjIEtpbmQgbWFya2VyCisgICAgICAgIHNlbGYud3JpdGVfZnVu
YygiQiIpCisgICAgICAgICMgTGVuZ3RoCisgICAgICAgIHNlbGYud3JpdGVfZnVuYyhzdHIobGVu
KGJ5dGVzKSkgKyAiXG4iKQorICAgICAgICAjIE5hbWVzCisgICAgICAgIGZvciBuYW1lIGluIG5h
bWVzOgorICAgICAgICAgICAgc2VsZi53cml0ZV9mdW5jKG5hbWUgKyAiXG4iKQorICAgICAgICAj
IEVuZCBvZiBoZWFkZXJzCisgICAgICAgIHNlbGYud3JpdGVfZnVuYygiXG4iKQorICAgICAgICAj
IEZpbmFsbHksIHRoZSBjb250ZW50cy4KKyAgICAgICAgc2VsZi53cml0ZV9mdW5jKGJ5dGVzKQor
Cgo=

=== added file bzrlib/tests/test_container.py // file-id:test_container.py-2007
... 0607160755-tr8zc26q18rn0jnb-2 // encoding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3Rlc3RzL3Rlc3RfY29udGFpbmVyLnB5CkBAIC0wLDAg
KzEsMTQzIEBACisjIENvcHlyaWdodCAoQykgMjAwNyBDYW5vbmljYWwgTHRkCisjCisjIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24s
IE1BICAwMjExMS0xMzA3ICBVU0EKKworIiIiVGVzdHMgZm9yIGJ6cmxpYi5jb250YWluZXIuIiIi
CisKKworZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKK2Zyb20gYnpybGliIGltcG9y
dCBjb250YWluZXIsIGVycm9ycworZnJvbSBienJsaWIudGVzdHMgaW1wb3J0IFRlc3RDYXNlCisK
KworY2xhc3MgVGVzdENvbnRhaW5lcldyaXRlcihUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9j
b25zdHJ1Y3Qoc2VsZik6CisgICAgICAgICIiIlRlc3QgY29uc3RydWN0aW5nIGEgQ29udGFpbmVy
V3JpdGVyLgorICAgICAgICAKKyAgICAgICAgVGhpcyB1c2VzIE5vbmUgYXMgdGhlIG91dHB1dCBz
dHJlYW0gdG8gc2hvdyB0aGF0IHRoZSBjb25zdHJ1Y3RvciBkb2Vzbid0CisgICAgICAgIHRyeSB0
byB1c2UgdGhlIG91dHB1dCBzdHJlYW0uCisgICAgICAgICIiIgorICAgICAgICB3cml0ZXIgPSBj
b250YWluZXIuQ29udGFpbmVyV3JpdGVyKE5vbmUpCisKKyAgICBkZWYgdGVzdF9iZWdpbihzZWxm
KToKKyAgICAgICAgIiIiVGVzdCB0aGUgYmVnaW4oKSBtZXRob2QuIiIiCisgICAgICAgIG91dHB1
dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgd3JpdGVyID0gY29udGFpbmVyLkNvbnRhaW5lcldyaXRl
cihvdXRwdXQud3JpdGUpCisgICAgICAgIHdyaXRlci5iZWdpbigpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ2J6ciBwYWNrIGZvcm1hdCAxXG4nLCBvdXRwdXQuZ2V0dmFsdWUoKSkKKworICAg
IGRlZiB0ZXN0X2VuZChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGUgZW5kKCkgbWV0aG9kLiIi
IgorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHdyaXRlciA9IGNvbnRhaW5l
ci5Db250YWluZXJXcml0ZXIob3V0cHV0LndyaXRlKQorICAgICAgICB3cml0ZXIuYmVnaW4oKQor
ICAgICAgICB3cml0ZXIuZW5kKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYnpyIHBhY2sg
Zm9ybWF0IDFcbkUnLCBvdXRwdXQuZ2V0dmFsdWUoKSkKKworICAgIGRlZiB0ZXN0X2FkZF9ieXRl
c19yZWNvcmRfbm9fbmFtZShzZWxmKToKKyAgICAgICAgIiIiQWRkIGEgYnl0ZXMgcmVjb3JkIHdp
dGggbm8gbmFtZS4iIiIKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICB3cml0
ZXIgPSBjb250YWluZXIuQ29udGFpbmVyV3JpdGVyKG91dHB1dC53cml0ZSkKKyAgICAgICAgd3Jp
dGVyLmJlZ2luKCkKKyAgICAgICAgd3JpdGVyLmFkZF9ieXRlc19yZWNvcmQoJ2FiYycsIG5hbWVz
PVtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdienIgcGFjayBmb3JtYXQgMVxuQjNcblxu
YWJjJywgb3V0cHV0LmdldHZhbHVlKCkpCisKKyAgICBkZWYgdGVzdF9hZGRfYnl0ZXNfcmVjb3Jk
X29uZV9uYW1lKHNlbGYpOgorICAgICAgICAiIiJBZGQgYSBieXRlcyByZWNvcmQgd2l0aCBvbmUg
bmFtZS4iIiIKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICB3cml0ZXIgPSBj
b250YWluZXIuQ29udGFpbmVyV3JpdGVyKG91dHB1dC53cml0ZSkKKyAgICAgICAgd3JpdGVyLmJl
Z2luKCkKKyAgICAgICAgd3JpdGVyLmFkZF9ieXRlc19yZWNvcmQoJ2FiYycsIG5hbWVzPVsnbmFt
ZTEnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYnpyIHBhY2sgZm9ybWF0IDFcbkIzXG5u
YW1lMVxuXG5hYmMnLAorICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5nZXR2YWx1ZSgp
KQorCisgICAgZGVmIHRlc3RfYWRkX2J5dGVzX3JlY29yZF90d29fbmFtZXMoc2VsZik6CisgICAg
ICAgICIiIkFkZCBhIGJ5dGVzIHJlY29yZCB3aXRoIHR3byBuYW1lcy4iIiIKKyAgICAgICAgb3V0
cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICB3cml0ZXIgPSBjb250YWluZXIuQ29udGFpbmVyV3Jp
dGVyKG91dHB1dC53cml0ZSkKKyAgICAgICAgd3JpdGVyLmJlZ2luKCkKKyAgICAgICAgd3JpdGVy
LmFkZF9ieXRlc19yZWNvcmQoJ2FiYycsIG5hbWVzPVsnbmFtZTEnLCAnbmFtZTInXSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnYnpyIHBhY2sgZm9ybWF0IDFcbkIzXG5uYW1lMVxubmFtZTJc
blxuYWJjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuZ2V0dmFsdWUoKSkKKwor
CitjbGFzcyBUZXN0Q29udGFpbmVyUmVhZGVyKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Nv
bnN0cnVjdChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjb25zdHJ1Y3RpbmcgYSBDb250YWluZXJS
ZWFkZXIuCisgICAgICAgIAorICAgICAgICBUaGlzIHVzZXMgTm9uZSBhcyB0aGUgb3V0cHV0IHN0
cmVhbSB0byBzaG93IHRoYXQgdGhlIGNvbnN0cnVjdG9yIGRvZXNuJ3QKKyAgICAgICAgdHJ5IHRv
IHVzZSB0aGUgaW5wdXQgc3RyZWFtLgorICAgICAgICAiIiIKKyAgICAgICAgcmVhZGVyID0gY29u
dGFpbmVyLkNvbnRhaW5lclJlYWRlcihOb25lKQorCisgICAgZGVmIHRlc3RfZW1wdHlfY29udGFp
bmVyKHNlbGYpOgorICAgICAgICAiIiJSZWFkIGFuIGVtcHR5IGNvbnRhaW5lci4iIiIKKyAgICAg
ICAgaW5wdXQgPSBTdHJpbmdJTygiYnpyIHBhY2sgZm9ybWF0IDFcbkUiKQorICAgICAgICByZWFk
ZXIgPSBjb250YWluZXIuQ29udGFpbmVyUmVhZGVyKGlucHV0LnJlYWQpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoW10sIGxpc3QocmVhZGVyLml0ZXJfcmVjb3JkcygpKSkKKworICAgIGRlZiB0
ZXN0X3Vua25vd25fZm9ybWF0KHNlbGYpOgorICAgICAgICAiIiJVbnJlY29nbmlzZWQgY29udGFp
bmVyIGZvcm1hdHMgcmFpc2UgVW5rbm93bkNvbnRhaW5lckZvcm1hdEVycm9yLiIiIgorICAgICAg
ICBpbnB1dCA9IFN0cmluZ0lPKCJ1bmtub3duIGZvcm1hdFxuIikKKyAgICAgICAgcmVhZGVyID0g
Y29udGFpbmVyLkNvbnRhaW5lclJlYWRlcihpbnB1dC5yZWFkKQorICAgICAgICBzZWxmLmFzc2Vy
dFJhaXNlcygKKyAgICAgICAgICAgIGVycm9ycy5Vbmtub3duQ29udGFpbmVyRm9ybWF0RXJyb3Is
IHJlYWRlci5pdGVyX3JlY29yZHMpCisKKyAgICBkZWYgdGVzdF91bmV4cGVjdGVkX2VuZF9vZl9j
b250YWluZXIoc2VsZik6CisgICAgICAgICIiIkNvbnRhaW5lcnMgdGhhdCBkb24ndCBlbmQgd2l0
aCBhbiBFbmQgTWFya2VyIHJlY29yZCBzaG91bGQgY2F1c2UKKyAgICAgICAgVW5leHBlY3RlZEVu
ZE9mQ29udGFpbmVyRXJyb3IgdG8gYmUgcmFpc2VkLgorICAgICAgICAiIiIKKyAgICAgICAgaW5w
dXQgPSBTdHJpbmdJTygiYnpyIHBhY2sgZm9ybWF0IDFcbiIpCisgICAgICAgIHJlYWRlciA9IGNv
bnRhaW5lci5Db250YWluZXJSZWFkZXIoaW5wdXQucmVhZCkKKyAgICAgICAgaXRlcmF0b3IgPSBy
ZWFkZXIuaXRlcl9yZWNvcmRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAg
ICAgICBlcnJvcnMuVW5leHBlY3RlZEVuZE9mQ29udGFpbmVyRXJyb3IsIGl0ZXJhdG9yLm5leHQp
CisKKyAgICBkZWYgdGVzdF91bmtub3duX3JlY29yZF90eXBlKHNlbGYpOgorICAgICAgICAiIiJV
bmtub3duIHJlY29yZCB0eXBlcyBjYXVzZSBVbmtub3duUmVjb3JkVHlwZUVycm9yIHRvIGJlIHJh
aXNlZC4iIiIKKyAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygiYnpyIHBhY2sgZm9ybWF0IDFcblgi
KQorICAgICAgICByZWFkZXIgPSBjb250YWluZXIuQ29udGFpbmVyUmVhZGVyKGlucHV0LnJlYWQp
CisgICAgICAgIGl0ZXJhdG9yID0gcmVhZGVyLml0ZXJfcmVjb3JkcygpCisgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZXJyb3JzLlVua25vd25SZWNvcmRUeXBlRXJyb3Is
IGl0ZXJhdG9yLm5leHQpCisKKyAgICAjIFhYWDogcmVmYWN0b3IgQnl0ZXMgcmVjb3JkIHBhcnNp
bmcgaW50byBhIHNlcGVyYXRlIEJ5dGVzUmVjb3JkUmVhZGVyIGZvcgorICAgICMgICAgICBiZXR0
ZXIgdW5pdCB0ZXN0aW5nLgorICAgIGRlZiB0ZXN0X29uZV91bm5hbWVkX3JlY29yZChzZWxmKToK
KyAgICAgICAgIiIiUmVhZCBhIGNvbnRhaW5lciB3aXRoIG9uZSBCeXRlcyByZWNvcmQuIiIiCisg
ICAgICAgIGlucHV0ID0gU3RyaW5nSU8oImJ6ciBwYWNrIGZvcm1hdCAxXG5CNVxuXG5hYWFhYUUi
KQorICAgICAgICByZWFkZXIgPSBjb250YWluZXIuQ29udGFpbmVyUmVhZGVyKGlucHV0LnJlYWQp
CisgICAgICAgIGV4cGVjdGVkX3JlY29yZHMgPSBbKFtdLCAnYWFhYWEnKV0KKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChleHBlY3RlZF9yZWNvcmRzLCBsaXN0KHJlYWRlci5pdGVyX3JlY29yZHMo
KSkpCisKKyAgICBkZWYgdGVzdF9vbmVfbmFtZWRfcmVjb3JkKHNlbGYpOgorICAgICAgICAiIiJS
ZWFkIGEgY29udGFpbmVyIHdpdGggb25lIEJ5dGVzIHJlY29yZCB3aXRoIGEgc2luZ2xlIG5hbWUu
IiIiCisgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oImJ6ciBwYWNrIGZvcm1hdCAxXG5CNVxubmFt
ZTFcblxuYWFhYWFFIikKKyAgICAgICAgcmVhZGVyID0gY29udGFpbmVyLkNvbnRhaW5lclJlYWRl
cihpbnB1dC5yZWFkKQorICAgICAgICBleHBlY3RlZF9yZWNvcmRzID0gWyhbJ25hbWUxJ10sICdh
YWFhYScpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3JlY29yZHMsIGxpc3Qo
cmVhZGVyLml0ZXJfcmVjb3JkcygpKSkKKworCisgICAgIyBPdGhlciBCeXRlcyByZWNvcmQgcGFy
c2luZyBjYXNlcyB0byB0ZXN0OgorICAgICMgIC0gaW52YWxpZCBsZW5ndGggdmFsdWUKKyAgICAj
ICAtIGluY29tcGxldGUgYnl0ZXMgKGkuZS4gc3RyZWFtIGVuZHMgYmVmb3JlICRsZW5ndGggYnl0
ZXMgcmVhZCkKKyAgICAjICAtIF9yZWFkX2xpbmUgZW5jb3VudGVyaW5nIGVuZCBvZiBzdHJlYW0g
KGF0IGFueSB0aW1lOyBkdXJpbmcgbGVuZ3RoLAorICAgICMgICAgbmFtZXMsIGVuZCBvZiBoZWFk
ZXJzLi4uKQorCisKKwoK

=== modified file bzrlib/errors.py // encoding:base64
LS0tIGJ6cmxpYi9lcnJvcnMucHkKKysrIGJ6cmxpYi9lcnJvcnMucHkKQEAgLTIxMzQsMyArMjEz
NCwzMiBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc3BvbnNlX3R1cGxlKToKICAgICAg
ICAgc2VsZi5yZXNwb25zZV90dXBsZSA9IHJlc3BvbnNlX3R1cGxlCisKKworY2xhc3MgQ29udGFp
bmVyRXJyb3IoQnpyRXJyb3IpOgorICAgICIiIkJhc2UgY2xhc3Mgb2YgY29udGFpbmVyIGVycm9y
cy4iIiIKKworCitjbGFzcyBVbmtub3duQ29udGFpbmVyRm9ybWF0RXJyb3IoQ29udGFpbmVyRXJy
b3IpOgorCisgICAgX2ZtdCA9ICJVbnJlY29nbmlzZWQgY29udGFpbmVyIGZvcm1hdDogJShjb250
YWluZXJfZm9ybWF0KXIiCisgICAgCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5lcl9m
b3JtYXQpOgorICAgICAgICBzZWxmLmNvbnRhaW5lcl9mb3JtYXQgPSBjb250YWluZXJfZm9ybWF0
CisKKworY2xhc3MgVW5leHBlY3RlZEVuZE9mQ29udGFpbmVyRXJyb3IoQ29udGFpbmVyRXJyb3Ip
OgorCisgICAgX2ZtdCA9ICJVbmV4cGVjdGVkIGVuZCBvZiBjb250YWluZXIgc3RyZWFtIgorCisg
ICAgaW50ZXJuYWxfZXJyb3IgPSBGYWxzZQorCisKK2NsYXNzIFVua25vd25SZWNvcmRUeXBlRXJy
b3IoQ29udGFpbmVyRXJyb3IpOgorCisgICAgX2ZtdCA9ICJVbmtub3duIHJlY29yZCB0eXBlOiAl
KHJlY29yZF90eXBlKXIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjb3JkX3R5cGUpOgor
ICAgICAgICBzZWxmLnJlY29yZF90eXBlID0gcmVjb3JkX3R5cGUKKworCgo=

=== modified file bzrlib/tests/__init__.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy9fX2luaXRfXy5weQorKysgYnpybGliL3Rlc3RzL19faW5pdF9fLnB5
CkBAIC0yMjc4LDYgKzIyNzgsNyBAQAogICAgICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMu
dGVzdF9jb21taXRfbWVyZ2UnLAogICAgICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMudGVz
dF9jb25maWcnLAogICAgICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMudGVzdF9jb25mbGlj
dHMnLAorICAgICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMudGVzdF9jb250YWluZXInLAog
ICAgICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMudGVzdF9jb3VudGVkX2xvY2snLAogICAg
ICAgICAgICAgICAgICAgICdienJsaWIudGVzdHMudGVzdF9kZWNvcmF0b3JzJywKICAgICAgICAg
ICAgICAgICAgICAnYnpybGliLnRlc3RzLnRlc3RfZGVsdGEnLAoK

=== modified file bzrlib/tests/test_errors.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2Vycm9ycy5weQorKysgYnpybGliL3Rlc3RzL3Rlc3RfZXJy
b3JzLnB5CkBAIC0yNjYsNiArMjY2LDI2IEBACiAgICAgICAgICAgICAiQ291bGQgbm90IHVuZGVy
c3RhbmQgcmVzcG9uc2UgZnJvbSBzbWFydCBzZXJ2ZXI6ICgnbm90IHllcycsKSIsCiAgICAgICAg
ICAgICBzdHIoZSkpCiAKKyAgICBkZWYgdGVzdF91bmtub3duX2NvbnRhaW5lcl9mb3JtYXQoc2Vs
Zik6CisgICAgICAgICIiIlRlc3QgdGhlIGZvcm1hdHRpbmcgb2YgVW5rbm93bkNvbnRhaW5lckZv
cm1hdEVycm9yLiIiIgorICAgICAgICBlID0gZXJyb3JzLlVua25vd25Db250YWluZXJGb3JtYXRF
cnJvcignYmFkIGZvcm1hdCBzdHJpbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAg
ICAgICAgICAgIlVucmVjb2duaXNlZCBjb250YWluZXIgZm9ybWF0OiAnYmFkIGZvcm1hdCBzdHJp
bmcnIiwKKyAgICAgICAgICAgIHN0cihlKSkKKworICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfZW5k
X29mX2NvbnRhaW5lcihzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGUgZm9ybWF0dGluZyBvZiBV
bmV4cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvci4iIiIKKyAgICAgICAgZSA9IGVycm9ycy5VbmV4
cGVjdGVkRW5kT2ZDb250YWluZXJFcnJvcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisg
ICAgICAgICAgICAiVW5leHBlY3RlZCBlbmQgb2YgY29udGFpbmVyIHN0cmVhbSIsIHN0cihlKSkK
KworICAgIGRlZiB0ZXN0X3Vua25vd25fcmVjb3JkX3R5cGUoc2VsZik6CisgICAgICAgICIiIlRl
c3QgdGhlIGZvcm1hdHRpbmcgb2YgVW5rbm93blJlY29yZFR5cGVFcnJvci4iIiIKKyAgICAgICAg
ZSA9IGVycm9ycy5Vbmtub3duUmVjb3JkVHlwZUVycm9yKCJYIikKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgKKyAgICAgICAgICAgICJVbmtub3duIHJlY29yZCB0eXBlOiAnWCciLAorICAgICAg
ICAgICAgc3RyKGUpKQorCiAKIGNsYXNzIFBhc3NUaHJvdWdoRXJyb3IoZXJyb3JzLkJ6ckVycm9y
KToKICAgICAKCg==

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200706071
... 60934-jfs1wrxxtulso9nw
# revision id: andrew.bennetts at canonical.com-20070607160934-jfs1wrxxtulso9nw
# sha1: f6e46284b812cbb82734845b6cdd4d9b2fd3a241
# inventory sha1: 2d69b3ba133cb795615128ee16d84b55bccfe89d
# parent ids:
#   pqm at pqm.ubuntu.com-20070604194535-ihhpf84qp0icoj2t
# properties:
#   branch-nick: container-format



More information about the bazaar mailing list