[MERGE] Add an optional 'token' keyword argument to LockableFiles.lock_write

Andrew Bennetts andrew at canonical.com
Thu Apr 12 06:37:41 BST 2007


Andrew Bennetts wrote:
> This adds the low-level support the branch and repository lock sharing that is
> now being worked on to help the smart server deal correctly with lock operations
> on remote branches.

Here's an expanded version of this bundle that adds tokens to
Repository.lock_write and Branch.lock_write, and of course adds more tests.

Branch.lock_write currently takes a "tokens" keyword argument that is a
two-tuple of (branch token, repo token).  After chatting with Robert, I think
it's probably a good idea to make this just take and return the branch token
(even though it still locks the repository as well).  The relatively few callers
that care about the repository token can do:

    branch_token = branch.lock_write()
    repo_token = branch.repository.lock_write()
    branch.repository.unlock()    

to get it (and it will be fast, because the repository object will already be
locked and know what its token is).

I'm also a little bit uncertain about the "leave_lock_in_place" and
"dont_leave_lock_in_place" APIs; it would be possible to slice this problem
differently to allow more direct manipulation of whether or not an object thinks
its locked, but that perhaps would make it easier to get objects into invalid
states.

I also just realised that I accidentally lost some docstring additions made to
the last bundle in response to the last review; I'll work on resurrecting those
(although John had some good criticism of those that needed to be addressed)
shortly.

Anyway, it's time I stopped dithering and got feedback from other people, so
here it is.  Comments are most welcome!

-Andrew.

-------------- next part --------------
# Bazaar revision bundle v0.9
#
# message:
#   Update NEWS
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Thu 2007-04-12 13:34:50.532999992 +1000

=== modified file NEWS
--- NEWS
+++ NEWS
@@ -41,6 +41,15 @@
       bzrlib/transport/remote.py contains just the Transport classes that used
       to be in bzrlib/transport/smart.py.  (Andrew Bennetts)
  
+    * The ``lock_write`` method of ``LockableFiles`` and ``Repository`` now
+      accept a ``token`` keyword argument, so that a seperate instances of those
+      objects can share a lock if it has the right token.  (Andrew Bennetts,
+      Robert Collins)
+
+    * ``Branch.lock_write()`` now accepts a ``tokens`` keyword argument, which
+      is like the other ``lock_write`` methods, except that it also allows for
+      sharing a repository lock.  (Andrew Bennetts, Robert Collins)
+
   BUGFIXES:
 
     * Don't fail bundle selftest if email has 'two' embedded.  

=== modified file bzrlib/branch.py // last-changed:andrew.bennetts at canonical.co
... m-20070411133532-u6x6edf3dmzamnaq
--- bzrlib/branch.py
+++ bzrlib/branch.py
@@ -195,6 +195,22 @@
     def get_physical_lock_status(self):
         raise NotImplementedError(self.get_physical_lock_status)
 
+    def leave_lock_in_place(self):
+        """Tell this branch object not to release the physical lock when this
+        object is unlocked.
+        
+        If lock_write doesn't return a token, then this method is not supported.
+        """
+        self.control_files.leave_in_place()
+
+    def dont_leave_lock_in_place(self):
+        """Tell this branch object to release the physical lock when this
+        object is unlocked, even if it didn't originally acquire it.
+
+        If lock_write doesn't return a token, then this method is not supported.
+        """
+        self.control_files.dont_leave_in_place()
+
     def abspath(self, name):
         """Return absolute filename for something in the branch
         
@@ -1223,13 +1239,26 @@
     def is_locked(self):
         return self.control_files.is_locked()
 
-    def lock_write(self):
-        self.repository.lock_write()
+    def lock_write(self, tokens=None):
+        if tokens is not None:
+            branch_token, repo_token = tokens
+        else:
+            branch_token = repo_token = None
+        repo_token = self.repository.lock_write(token=repo_token)
         try:
-            self.control_files.lock_write()
+            branch_token = self.control_files.lock_write(token=branch_token)
         except:
             self.repository.unlock()
             raise
+        else:
+            tokens = (branch_token, repo_token)
+            assert tokens == (None, None) or None not in tokens, (
+                'Both branch and repository locks must return tokens, or else '
+                'neither must return tokens.  Got %r.' % (tokens,))
+            if tokens == (None, None):
+                return None
+            else:
+                return tokens
 
     def lock_read(self):
         self.repository.lock_read()

=== modified file bzrlib/errors.py // last-changed:andrew.bennetts at canonical.co
... m-20070411064005-zylli6el5cz7kwnb
--- bzrlib/errors.py
+++ bzrlib/errors.py
@@ -809,6 +809,27 @@
         self.lock = lock
 
 
+class TokenLockingNotSupported(LockError):
+
+    _fmt = "The object %(obj)s does not support token specifying a token when locking."
+
+    internal_error = True
+
+    def __init__(self, obj):
+        self.obj = obj
+
+
+class TokenMismatch(LockBroken):
+
+    _fmt = "The lock token %(given_token)r does not match lock token %(lock_token)r."
+
+    internal_error = True
+
+    def __init__(self, given_token, lock_token):
+        self.given_token = given_token
+        self.lock_token = lock_token
+
+
 class PointlessCommit(BzrError):
 
     _fmt = "No changes to commit"

=== modified file bzrlib/lockable_files.py // last-changed:andrew.bennetts at cano
... nical.com-20070411133532-u6x6edf3dmzamnaq
--- bzrlib/lockable_files.py
+++ bzrlib/lockable_files.py
@@ -222,21 +222,46 @@
             raise errors.BzrBadParameterNotString(a_string)
         self.put_bytes(path, a_string.encode('utf-8'))
 
-    def lock_write(self):
+    def leave_in_place(self):
+        """Set this LockableFiles to not clear the physical lock on unlock."""
+        self._lock.leave_in_place()
+
+    def dont_leave_in_place(self):
+        """Set this LockableFiles to clear the physical lock on unlock."""
+        # XXX: think about renaming this!
+        self._lock.dont_leave_in_place()
+
+    def lock_write(self, token=None):
+        """Lock this group of files for writing.
+        
+        :param token: if this is already locked, then lock_write will fail
+            unless the token matches the existing lock.
+        :returns: a token if this instance supports tokens, otherwise None.
+        :raises TokenLockingNotSupported: when a token is given but this
+            instance doesn't support using token locks.
+        :raises MismatchedToken: if the specified token doesn't match the token
+            of the existing lock.
+        """
         # mutter("lock write: %s (%s)", self, self._lock_count)
         # TODO: Upgrade locking to support using a Transport,
         # and potentially a remote locking protocol
         if self._lock_mode:
             if self._lock_mode != 'w' or not self.get_transaction().writeable():
                 raise errors.ReadOnlyError(self)
+            self._lock.validate_token(token)
             self._lock_count += 1
+            return self._token_from_lock
         else:
-            self._lock.lock_write()
+            token_from_lock = self._lock.lock_write(token=token)
             #note('write locking %s', self)
             #traceback.print_stack()
             self._lock_mode = 'w'
             self._lock_count = 1
             self._set_transaction(transactions.WriteTransaction())
+            # XXX: add test for the case that requires self._token_from_lock:
+            # token = x.lock_write(); assert(x.lock_write() == token)
+            self._token_from_lock = token_from_lock
+            return token_from_lock
 
     def lock_read(self):
         # mutter("lock read: %s (%s)", self, self._lock_count)
@@ -333,7 +358,15 @@
     def break_lock(self):
         raise NotImplementedError(self.break_lock)
 
-    def lock_write(self):
+    def leave_in_place(self):
+        raise NotImplementedError(self.leave_in_place)
+
+    def dont_leave_in_place(self):
+        raise NotImplementedError(self.dont_leave_in_place)
+
+    def lock_write(self, token=None):
+        if token is not None:
+            raise errors.TokenLockingNotSupported(self)
         self._lock = self._transport.lock_write(self._escaped_name)
 
     def lock_read(self):
@@ -351,3 +384,8 @@
         # for old-style locks, create the file now
         self._transport.put_bytes(self._escaped_name, '',
                             mode=self._file_modebits)
+
+    def validate_token(self, token):
+        if token is not None:
+            raise errors.TokenLockingNotSupported(self)
+        

=== modified file bzrlib/lockdir.py // last-changed:andrew.bennetts at canonical.c
... om-20070411133532-u6x6edf3dmzamnaq
--- bzrlib/lockdir.py
+++ bzrlib/lockdir.py
@@ -160,12 +160,12 @@
         self.transport = transport
         self.path = path
         self._lock_held = False
+        self._locked_via_token = False
         self._fake_read_lock = False
         self._held_dir = path + '/held'
         self._held_info_path = self._held_dir + self.__INFO_NAME
         self._file_modebits = file_modebits
         self._dir_modebits = dir_modebits
-        self.nonce = rand_chars(20)
 
         self._report_function = note
 
@@ -209,6 +209,7 @@
                 # After creating the lock directory, try again
                 self.transport.mkdir(tmpname)
 
+            self.nonce = rand_chars(20)
             info_bytes = self._prepare_info()
             # We use put_file_non_atomic because we just created a new unique
             # directory so we don't have to worry about files existing there.
@@ -234,15 +235,19 @@
             return
         if not self._lock_held:
             raise LockNotHeld(self)
-        # rename before deleting, because we can't atomically remove the whole
-        # tree
-        tmpname = '%s/releasing.%s.tmp' % (self.path, rand_chars(20))
-        # gotta own it to unlock
-        self.confirm()
-        self.transport.rename(self._held_dir, tmpname)
-        self._lock_held = False
-        self.transport.delete(tmpname + self.__INFO_NAME)
-        self.transport.rmdir(tmpname)
+        if self._locked_via_token:
+            self._locked_via_token = False
+            self._lock_held = False
+        else:
+            # rename before deleting, because we can't atomically remove the
+            # whole tree
+            tmpname = '%s/releasing.%s.tmp' % (self.path, rand_chars(20))
+            # gotta own it to unlock
+            self.confirm()
+            self.transport.rename(self._held_dir, tmpname)
+            self._lock_held = False
+            self.transport.delete(tmpname + self.__INFO_NAME)
+            self.transport.rmdir(tmpname)
 
     def break_lock(self):
         """Break a lock not held by this instance of LockDir.
@@ -414,10 +419,35 @@
                 time.sleep(poll)
             else:
                 raise LockContention(self)
-
-    def lock_write(self):
-        """Wait for and acquire the lock."""
-        self.wait_lock()
+    
+    def leave_in_place(self):
+        self._locked_via_token = True
+
+    def dont_leave_in_place(self):
+        self._locked_via_token = False
+
+    def lock_write(self, token=None):
+        """Wait for and acquire the lock.
+        
+        :param token: if this is already locked, then lock_write will fail
+            unless the token matches the existing lock.
+        :returns: a token if this instance supports tokens, otherwise None.
+        :raises TokenLockingNotSupported: when a token is given but this
+            instance doesn't support using token locks.
+        :raises MismatchedToken: if the specified token doesn't match the token
+            of the existing lock.
+         
+        XXX: docstring duplicated from LockableFiles.lock_write.
+        """
+        if token is not None:
+            self.validate_token(token)
+            self.nonce = token
+            self._lock_held = True
+            self._locked_via_token = True
+            return token
+        else:
+            self.wait_lock()
+            return self.peek().get('nonce')
 
     def lock_read(self):
         """Compatibility-mode shared lock.
@@ -457,3 +487,14 @@
             'locked %s' % (format_delta(delta),),
             ]
 
+    def validate_token(self, token):
+        if token is not None:
+            info = self.peek()
+            if info is None:
+                # Lock isn't held
+                lock_token = None
+            else:
+                lock_token = info.get('nonce')
+            if token != lock_token:
+                raise errors.TokenMismatch(token, lock_token)
+

=== modified file bzrlib/repository.py // last-changed:andrew.bennetts at canonica
... l.com-20070411133532-u6x6edf3dmzamnaq
--- bzrlib/repository.py
+++ bzrlib/repository.py
@@ -231,8 +231,20 @@
     def is_locked(self):
         return self.control_files.is_locked()
 
-    def lock_write(self):
-        self.control_files.lock_write()
+    def lock_write(self, token=None):
+        """Lock this repository for writing.
+        
+        :param token: if this is already locked, then lock_write will fail
+            unless the token matches the existing lock.
+        :returns: a token if this instance supports tokens, otherwise None.
+        :raises TokenLockingNotSupported: when a token is given but this
+            instance doesn't support using token locks.
+        :raises MismatchedToken: if the specified token doesn't match the token
+            of the existing lock.
+
+        XXX: this docstring is duplicated in many places, e.g. lockable_files.py
+        """
+        return self.control_files.lock_write(token=token)
 
     def lock_read(self):
         self.control_files.lock_read()
@@ -240,6 +252,22 @@
     def get_physical_lock_status(self):
         return self.control_files.get_physical_lock_status()
 
+    def leave_lock_in_place(self):
+        """Tell this repository not to release the physical lock when this
+        object is unlocked.
+        
+        If lock_write doesn't return a token, then this method is not supported.
+        """
+        self.control_files.leave_in_place()
+
+    def dont_leave_lock_in_place(self):
+        """Tell this repository to release the physical lock when this
+        object is unlocked, even if it didn't originally acquire it.
+
+        If lock_write doesn't return a token, then this method is not supported.
+        """
+        self.control_files.dont_leave_in_place()
+
     @needs_read_lock
     def gather_stats(self, revid=None, committers=None):
         """Gather statistics from a revision id.

=== modified file bzrlib/tests/branch_implementations/test_locking.py // last-c
... hanged:andrew.bennetts at canonical.com-20070411133532-u6x6edf3dmzamnaq
--- bzrlib/tests/branch_implementations/test_locking.py
+++ bzrlib/tests/branch_implementations/test_locking.py
@@ -227,6 +227,198 @@
                           ('rc', 'ul', True),
                          ], self.locks)
 
+    def test_lock_write_returns_None_refuses_tokens(self):
+        branch = self.make_branch('b')
+        tokens = branch.lock_write()
+        try:
+            if tokens is not None:
+                # This test does not apply, because this lockable supports
+                # tokens.
+                return
+            self.assertRaises(errors.TokenLockingNotSupported,
+                              branch.lock_write, tokens=('token','token'))
+        finally:
+            branch.unlock()
+
+    def test_reentering_lock_write_raises_on_token_mismatch(self):
+        branch = self.make_branch('b')
+        tokens = branch.lock_write()
+        try:
+            if tokens is None:
+                # This test does not apply, because this lockable refuses
+                # tokens.
+                return
+            branch_token, repo_token = tokens
+            different_branch_token = branch_token + 'xxx'
+            different_repo_token = repo_token + 'xxx'
+            # Re-using the same lockable instance with a different branch token
+            # will raise TokenMismatch.
+            self.assertRaises(errors.TokenMismatch,
+                              branch.lock_write,
+                              tokens=(different_branch_token, repo_token))
+            # Similarly for a different repository token.
+            self.assertRaises(errors.TokenMismatch,
+                              branch.lock_write,
+                              tokens=(branch_token, different_repo_token))
+        finally:
+            branch.unlock()
+
+    def test_lock_write_with_nonmatching_token(self):
+        branch = self.make_branch('b')
+        tokens = branch.lock_write()
+        try:
+            if tokens is None:
+                # This test does not apply, because this branch refuses
+                # tokens.
+                return
+            branch_token, repo_token = tokens
+            different_branch_token = branch_token + 'xxx'
+            different_repo_token = repo_token + 'xxx'
+
+            new_branch = branch.bzrdir.open_branch()
+            # We only want to test the relocking abilities of branch, so use the
+            # existing repository object which is already locked.
+            new_branch.repository = branch.repository
+            self.assertRaises(errors.TokenMismatch,
+                              new_branch.lock_write,
+                              tokens=(different_branch_token, repo_token))
+            self.assertRaises(errors.TokenMismatch,
+                              new_branch.lock_write,
+                              tokens=(branch_token, different_repo_token))
+        finally:
+            branch.unlock()
+
+
+    def test_lock_write_with_matching_token(self):
+        """Test that a branch can be locked with a token, if it is already
+        locked by that token."""
+        branch = self.make_branch('b')
+        tokens = branch.lock_write()
+        try:
+            if tokens is None:
+                # This test does not apply, because this branch refuses tokens.
+                return
+            # The same instance will accept a second lock_write if the specified
+            # token matches.
+            branch.lock_write(tokens=tokens)
+            branch.unlock()
+            # Calling lock_write on a new instance for the same lockable will
+            # also succeed.
+            new_branch = branch.bzrdir.open_branch()
+            # We only want to test the relocking abilities of branch, so use the
+            # existing repository object which is already locked.
+            new_branch.repository = branch.repository
+            new_branch.lock_write(tokens=tokens)
+            new_branch.unlock()
+        finally:
+            branch.unlock()
+
+    def test_unlock_after_lock_write_with_tokens(self):
+        # If lock_write did not physically acquire the lock (because it was
+        # passed some tokens), then unlock should not physically release it.
+        branch = self.make_branch('b')
+        tokens = branch.lock_write()
+        try:
+            if tokens is None:
+                # This test does not apply, because this lockable refuses
+                # tokens.
+                return
+            new_branch = branch.bzrdir.open_branch()
+            # We only want to test the relocking abilities of branch, so use the
+            # existing repository object which is already locked.
+            new_branch.repository = branch.repository
+            new_branch.lock_write(tokens=tokens)
+            new_branch.unlock()
+            self.assertTrue(branch.get_physical_lock_status()) #XXX
+        finally:
+            branch.unlock()
+
+    def test_lock_write_with_tokens_fails_when_unlocked(self):
+        # Lock and unlock to get superficially valid tokens.  This mimics a
+        # likely programming error, where a caller accidentally tries to lock
+        # with tokens that are no longer valid (because the original lock was
+        # released).
+        branch = self.make_branch('b')
+        tokens = branch.lock_write()
+        branch.unlock()
+        if tokens is None:
+            # This test does not apply, because this lockable refuses
+            # tokens.
+            return
+
+        self.assertRaises(errors.TokenMismatch,
+                          branch.lock_write, tokens=tokens)
+
+    def test_lock_write_reenter_with_tokens(self):
+        branch = self.make_branch('b')
+        tokens = branch.lock_write()
+        try:
+            if tokens is None:
+                # This test does not apply, because this lockable refuses
+                # tokens.
+                return
+            # Relock with a token.
+            branch.lock_write(tokens=tokens)
+            branch.unlock()
+        finally:
+            branch.unlock()
+        # The lock should be unlocked on disk.  Verify that with a new lock
+        # instance.
+        new_branch = branch.bzrdir.open_branch()
+        # Calling lock_write now should work, rather than raise LockContention.
+        new_branch.lock_write()
+        new_branch.unlock()
+
+    def test_leave_lock_in_place(self):
+        branch = self.make_branch('b')
+        # Lock the branch, then use leave_lock_in_place so that when we
+        # unlock the branch the lock is still held on disk.
+        tokens = branch.lock_write()
+        try:
+            if tokens is None:
+                # This test does not apply, because this repository refuses lock
+                # tokens.
+                self.assertRaises(NotImplementedError, branch.leave_lock_in_place)
+                return
+            branch.leave_lock_in_place()
+        finally:
+            branch.unlock()
+        # We should be unable to relock the repo.
+        self.assertRaises(errors.LockContention, branch.lock_write)
+
+    def test_dont_leave_lock_in_place(self):
+        branch = self.make_branch('b')
+        # Create a lock on disk.
+        tokens = branch.lock_write()
+        try:
+            if tokens is None:
+                # This test does not apply, because this branch refuses lock
+                # tokens.
+                self.assertRaises(NotImplementedError,
+                                  branch.dont_leave_lock_in_place)
+                return
+            try:
+                branch.leave_lock_in_place()
+            except NotImplementedError:
+                # This branch doesn't support this API.
+                return
+            branch.repository.leave_lock_in_place()
+        finally:
+            branch.unlock()
+        # Reacquire the lock (with a different branch object) by using the
+        # tokens.
+        new_branch = branch.bzrdir.open_branch()
+        new_branch.lock_write(tokens=tokens)
+        # Call dont_leave_lock_in_place, so that the lock will be released by
+        # this instance, even though the lock wasn't originally acquired by it.
+        new_branch.dont_leave_lock_in_place()
+        new_branch.repository.dont_leave_lock_in_place()
+        new_branch.unlock()
+        # Now the branch (and repository) is unlocked.  Test this by locking it
+        # without tokens.
+        branch.lock_write()
+        branch.unlock()
+
     def test_lock_read_then_unlock(self):
         # Calling lock_read then unlocking should work without errors.
         branch = self.make_branch('b')

=== modified file bzrlib/tests/lock_helpers.py // last-changed:andrew.bennetts@
... canonical.com-20070411133532-u6x6edf3dmzamnaq
--- bzrlib/tests/lock_helpers.py
+++ bzrlib/tests/lock_helpers.py
@@ -56,7 +56,7 @@
             return self._other.lock_read()
         raise TestPreventLocking('lock_read disabled')
 
-    def lock_write(self):
+    def lock_write(self, token=None):
         self._sequence.append((self._other_id, 'lw', self._allow_write))
         if self._allow_write:
             return self._other.lock_write()

=== modified file bzrlib/tests/repository_implementations/test_repository.py //
...  last-changed:andrew.bennetts at canonical.com-20070411133532-u6x6edf3dmzamnaq
--- bzrlib/tests/repository_implementations/test_repository.py
+++ bzrlib/tests/repository_implementations/test_repository.py
@@ -434,6 +434,58 @@
 
 class TestRepositoryLocking(TestCaseWithRepository):
 
+    def setUp(self):
+        TestCaseWithRepository.setUp(self)
+        self.reduceLockdirTimeout()
+
+    def test_leave_lock_in_place(self):
+        repo = self.make_repository('r')
+        # Lock the repository, then use leave_lock_in_place so that when we
+        # unlock the repository the lock is still held on disk.
+        token = repo.lock_write()
+        try:
+            if token is None:
+                # This test does not apply, because this repository refuses lock
+                # tokens.
+                self.assertRaises(NotImplementedError, repo.leave_lock_in_place)
+                return
+            repo.leave_lock_in_place()
+        finally:
+            repo.unlock()
+        # We should be unable to relock the repo.
+        self.assertRaises(errors.LockContention, repo.lock_write)
+
+    def test_dont_leave_lock_in_place(self):
+        repo = self.make_repository('r')
+        # Create a lock on disk.
+        token = repo.lock_write()
+        try:
+            if token is None:
+                # This test does not apply, because this repository refuses lock
+                # tokens.
+                self.assertRaises(NotImplementedError,
+                                  repo.dont_leave_lock_in_place)
+                return
+            try:
+                repo.leave_lock_in_place()
+            except NotImplementedError:
+                # This repository doesn't support this API.
+                return
+        finally:
+            repo.unlock()
+        # Reacquire the lock (with a different repository object) by using the
+        # token.
+        new_repo = repo.bzrdir.open_repository()
+        new_repo.lock_write(token=token)
+        # Call dont_leave_lock_in_place, so that the lock will be released by
+        # this instance, even though the lock wasn't originally acquired by it.
+        new_repo.dont_leave_lock_in_place()
+        new_repo.unlock()
+        # Now the repository is unlocked.  Test this by locking it (without a
+        # token).
+        repo.lock_write()
+        repo.unlock()
+
     def test_lock_read_then_unlock(self):
         # Calling lock_read then unlocking should work without errors.
         repo = self.make_repository('r')

=== modified file bzrlib/tests/test_lockable_files.py // last-changed:andrew.be
... nnetts at canonical.com-20070411133532-u6x6edf3dmzamnaq
--- bzrlib/tests/test_lockable_files.py
+++ bzrlib/tests/test_lockable_files.py
@@ -21,6 +21,7 @@
 import bzrlib.errors as errors
 from bzrlib.errors import BzrBadParameterNotString, NoSuchFile, ReadOnlyError
 from bzrlib.lockable_files import LockableFiles, TransportLock
+from bzrlib import lockdir
 from bzrlib.lockdir import LockDir
 from bzrlib.tests import TestCaseInTempDir
 from bzrlib.tests.test_transactions import DummyWeave
@@ -34,6 +35,9 @@
 # these tests are applied in each parameterized suite for LockableFiles
 class _TestLockableFiles_mixin(object):
 
+    def setUp(self):
+        self.reduceLockdirTimeout()
+
     def test_read_write(self):
         self.assertRaises(NoSuchFile, self.lockable.get, 'foo')
         self.assertRaises(NoSuchFile, self.lockable.get_utf8, 'foo')
@@ -125,6 +129,174 @@
             self.assertRaises(errors.LockBroken, self.lockable.unlock)
             self.assertFalse(self.lockable.is_locked())
 
+    def test_lock_write_returns_None_refuses_token(self):
+        token = self.lockable.lock_write()
+        try:
+            if token is not None:
+                # This test does not apply, because this lockable supports
+                # tokens.
+                return
+            self.assertRaises(errors.TokenLockingNotSupported,
+                              self.lockable.lock_write, token='token')
+        finally:
+            self.lockable.unlock()
+
+    def test_lock_write_returns_token_when_given_token(self):
+        token = self.lockable.lock_write()
+        try:
+            if token is None:
+                # This test does not apply, because this lockable refuses
+                # tokens.
+                return
+            new_lockable = self.get_lockable()
+            token_from_new_lockable = new_lockable.lock_write(token=token)
+            try:
+                self.assertEqual(token, token_from_new_lockable)
+            finally:
+                new_lockable.unlock()
+        finally:
+            self.lockable.unlock()
+
+    def test_lock_write_raises_on_token_mismatch(self):
+        token = self.lockable.lock_write()
+        try:
+            if token is None:
+                # This test does not apply, because this lockable refuses
+                # tokens.
+                return
+            different_token = token + 'xxx'
+            # Re-using the same lockable instance with a different token will
+            # raise TokenMismatch.
+            self.assertRaises(errors.TokenMismatch,
+                              self.lockable.lock_write, token=different_token)
+            # A seperate instance for the same lockable will also raise
+            # TokenMismatch.
+            # This detects the case where a caller claims to have a lock (via
+            # the token) for an external resource, but doesn't (the token is
+            # different).  Clients need a seperate lock object to make sure the
+            # external resource is probed, whereas the existing lock object
+            # might cache.
+            new_lockable = self.get_lockable()
+            self.assertRaises(errors.TokenMismatch,
+                              new_lockable.lock_write, token=different_token)
+        finally:
+            self.lockable.unlock()
+
+    def test_lock_write_with_matching_token(self):
+        # If the token matches, so no exception is raised by lock_write.
+        token = self.lockable.lock_write()
+        try:
+            if token is None:
+                # This test does not apply, because this lockable refuses
+                # tokens.
+                return
+            # The same instance will accept a second lock_write if the specified
+            # token matches.
+            self.lockable.lock_write(token=token)
+            self.lockable.unlock()
+            # Calling lock_write on a new instance for the same lockable will
+            # also succeed.
+            new_lockable = self.get_lockable()
+            new_lockable.lock_write(token=token)
+            new_lockable.unlock()
+        finally:
+            self.lockable.unlock()
+
+    def test_unlock_after_lock_write_with_token(self):
+        # If lock_write did not physically acquire the lock (because it was
+        # passed a token), then unlock should not physically release it.
+        token = self.lockable.lock_write()
+        try:
+            if token is None:
+                # This test does not apply, because this lockable refuses
+                # tokens.
+                return
+            new_lockable = self.get_lockable()
+            new_lockable.lock_write(token=token)
+            new_lockable.unlock()
+            self.assertTrue(self.lockable.get_physical_lock_status())
+        finally:
+            self.lockable.unlock()
+
+    def test_lock_write_with_token_fails_when_unlocked(self):
+        # Lock and unlock to get a superficially valid token.  This mimics a
+        # likely programming error, where a caller accidentally tries to lock
+        # with a token that is no longer valid (because the original lock was
+        # released).
+        token = self.lockable.lock_write()
+        self.lockable.unlock()
+        if token is None:
+            # This test does not apply, because this lockable refuses
+            # tokens.
+            return
+
+        self.assertRaises(errors.TokenMismatch,
+                          self.lockable.lock_write, token=token)
+
+    def test_lock_write_reenter_with_token(self):
+        token = self.lockable.lock_write()
+        try:
+            if token is None:
+                # This test does not apply, because this lockable refuses
+                # tokens.
+                return
+            # Relock with a token.
+            token_from_reentry = self.lockable.lock_write(token=token)
+            try:
+                self.assertEqual(token, token_from_reentry)
+            finally:
+                self.lockable.unlock()
+        finally:
+            self.lockable.unlock()
+        # The lock should be unlocked on disk.  Verify that with a new lock
+        # instance.
+        new_lockable = self.get_lockable()
+        # Calling lock_write now should work, rather than raise LockContention.
+        new_lockable.lock_write()
+        new_lockable.unlock()
+
+    def test_leave_in_place(self):
+        token = self.lockable.lock_write()
+        try:
+            if token is None:
+                # This test does not apply, because this lockable refuses
+                # tokens.
+                return
+            self.lockable.leave_in_place()
+        finally:
+            self.lockable.unlock()
+        # At this point, the lock is still in place on disk
+        self.assertRaises(errors.LockContention, self.lockable.lock_write)
+        # But should be relockable with a token.
+        self.lockable.lock_write(token=token)
+        self.lockable.unlock()
+
+    def test_dont_leave_in_place(self):
+        token = self.lockable.lock_write()
+        try:
+            if token is None:
+                # This test does not apply, because this lockable refuses
+                # tokens.
+                return
+            self.lockable.leave_in_place()
+        finally:
+            self.lockable.unlock()
+        # At this point, the lock is still in place on disk.
+        # Acquire the existing lock with the token, and ask that it is removed
+        # when this object unlocks, and unlock to trigger that removal.
+        new_lockable = self.get_lockable()
+        new_lockable.lock_write(token=token)
+        new_lockable.dont_leave_in_place()
+        new_lockable.unlock()
+        # At this point, the lock is no longer on disk, so we can lock it.
+        third_lockable = self.get_lockable()
+        third_lockable.lock_write()
+        third_lockable.unlock()
+
+
+
+
+
 
 # This method of adapting tests to parameters is different to 
 # the TestProviderAdapters used elsewhere, but seems simpler for this 
@@ -133,7 +305,8 @@
                                       _TestLockableFiles_mixin):
 
     def setUp(self):
-        super(TestLockableFiles_TransportLock, self).setUp()
+        TestCaseInTempDir.setUp(self)
+        _TestLockableFiles_mixin.setUp(self)
         transport = get_transport('.')
         transport.mkdir('.bzr')
         self.sub_transport = transport.clone('.bzr')
@@ -155,7 +328,8 @@
     """LockableFile tests run with LockDir underneath"""
 
     def setUp(self):
-        super(TestLockableFiles_LockDir, self).setUp()
+        TestCaseInTempDir.setUp(self)
+        _TestLockableFiles_mixin.setUp(self)
         self.transport = get_transport('.')
         self.lockable = self.get_lockable()
         # the lock creation here sets mode - test_permissions on branch 

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200704120
... 33450-zbjs6vgxmsw6s7ts
# revision id: andrew.bennetts at canonical.com-20070412033450-zbjs6vgxmsw6s7ts
# sha1: 822b8e051d278a17cb1c0a80f13a4656dfcf4b47
# inventory sha1: c9cf120e60618d72afcd86b5438cdf63df396812
# parent ids:
#   andrew.bennetts at canonical.com-20070411133532-u6x6edf3dmzamnaq
# base id: pqm at pqm.ubuntu.com-20070411022359-403a2155afb207cf
# properties:
#   branch-nick: bzr.dev.hpss.api.changes

# message:
#   LockDir, Repository and Branch lock token changes from the hpss branch.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Wed 2007-04-11 23:35:32.003999949 +1000

=== modified file bzrlib/branch.py // encoding:base64
LS0tIGJ6cmxpYi9icmFuY2gucHkKKysrIGJ6cmxpYi9icmFuY2gucHkKQEAgLTE5NSw2ICsxOTUs
MjIgQEAKICAgICBkZWYgZ2V0X3BoeXNpY2FsX2xvY2tfc3RhdHVzKHNlbGYpOgogICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuZ2V0X3BoeXNpY2FsX2xvY2tfc3RhdHVzKQog
CisgICAgZGVmIGxlYXZlX2xvY2tfaW5fcGxhY2Uoc2VsZik6CisgICAgICAgICIiIlRlbGwgdGhp
cyBicmFuY2ggb2JqZWN0IG5vdCB0byByZWxlYXNlIHRoZSBwaHlzaWNhbCBsb2NrIHdoZW4gdGhp
cworICAgICAgICBvYmplY3QgaXMgdW5sb2NrZWQuCisgICAgICAgIAorICAgICAgICBJZiBsb2Nr
X3dyaXRlIGRvZXNuJ3QgcmV0dXJuIGEgdG9rZW4sIHRoZW4gdGhpcyBtZXRob2QgaXMgbm90IHN1
cHBvcnRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuY29udHJvbF9maWxlcy5sZWF2ZV9p
bl9wbGFjZSgpCisKKyAgICBkZWYgZG9udF9sZWF2ZV9sb2NrX2luX3BsYWNlKHNlbGYpOgorICAg
ICAgICAiIiJUZWxsIHRoaXMgYnJhbmNoIG9iamVjdCB0byByZWxlYXNlIHRoZSBwaHlzaWNhbCBs
b2NrIHdoZW4gdGhpcworICAgICAgICBvYmplY3QgaXMgdW5sb2NrZWQsIGV2ZW4gaWYgaXQgZGlk
bid0IG9yaWdpbmFsbHkgYWNxdWlyZSBpdC4KKworICAgICAgICBJZiBsb2NrX3dyaXRlIGRvZXNu
J3QgcmV0dXJuIGEgdG9rZW4sIHRoZW4gdGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZC4KKyAg
ICAgICAgIiIiCisgICAgICAgIHNlbGYuY29udHJvbF9maWxlcy5kb250X2xlYXZlX2luX3BsYWNl
KCkKKwogICAgIGRlZiBhYnNwYXRoKHNlbGYsIG5hbWUpOgogICAgICAgICAiIiJSZXR1cm4gYWJz
b2x1dGUgZmlsZW5hbWUgZm9yIHNvbWV0aGluZyBpbiB0aGUgYnJhbmNoCiAgICAgICAgIApAQCAt
MTIyMywxMyArMTIzOSwyNiBAQAogICAgIGRlZiBpc19sb2NrZWQoc2VsZik6CiAgICAgICAgIHJl
dHVybiBzZWxmLmNvbnRyb2xfZmlsZXMuaXNfbG9ja2VkKCkKIAotICAgIGRlZiBsb2NrX3dyaXRl
KHNlbGYpOgotICAgICAgICBzZWxmLnJlcG9zaXRvcnkubG9ja193cml0ZSgpCisgICAgZGVmIGxv
Y2tfd3JpdGUoc2VsZiwgdG9rZW5zPU5vbmUpOgorICAgICAgICBpZiB0b2tlbnMgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICBicmFuY2hfdG9rZW4sIHJlcG9fdG9rZW4gPSB0b2tlbnMKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGJyYW5jaF90b2tlbiA9IHJlcG9fdG9rZW4gPSBOb25lCisg
ICAgICAgIHJlcG9fdG9rZW4gPSBzZWxmLnJlcG9zaXRvcnkubG9ja193cml0ZSh0b2tlbj1yZXBv
X3Rva2VuKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmNvbnRyb2xfZmlsZXMubG9j
a193cml0ZSgpCisgICAgICAgICAgICBicmFuY2hfdG9rZW4gPSBzZWxmLmNvbnRyb2xfZmlsZXMu
bG9ja193cml0ZSh0b2tlbj1icmFuY2hfdG9rZW4pCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAg
ICAgIHNlbGYucmVwb3NpdG9yeS51bmxvY2soKQogICAgICAgICAgICAgcmFpc2UKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHRva2VucyA9IChicmFuY2hfdG9rZW4sIHJlcG9fdG9rZW4pCisg
ICAgICAgICAgICBhc3NlcnQgdG9rZW5zID09IChOb25lLCBOb25lKSBvciBOb25lIG5vdCBpbiB0
b2tlbnMsICgKKyAgICAgICAgICAgICAgICAnQm90aCBicmFuY2ggYW5kIHJlcG9zaXRvcnkgbG9j
a3MgbXVzdCByZXR1cm4gdG9rZW5zLCBvciBlbHNlICcKKyAgICAgICAgICAgICAgICAnbmVpdGhl
ciBtdXN0IHJldHVybiB0b2tlbnMuICBHb3QgJXIuJyAlICh0b2tlbnMsKSkKKyAgICAgICAgICAg
IGlmIHRva2VucyA9PSAoTm9uZSwgTm9uZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VucwogCiAgICAg
ZGVmIGxvY2tfcmVhZChzZWxmKToKICAgICAgICAgc2VsZi5yZXBvc2l0b3J5LmxvY2tfcmVhZCgp
Cgo=

=== modified file bzrlib/lockable_files.py // encoding:base64
LS0tIGJ6cmxpYi9sb2NrYWJsZV9maWxlcy5weQorKysgYnpybGliL2xvY2thYmxlX2ZpbGVzLnB5
CkBAIC0yMjIsNiArMjIyLDE1IEBACiAgICAgICAgICAgICByYWlzZSBlcnJvcnMuQnpyQmFkUGFy
YW1ldGVyTm90U3RyaW5nKGFfc3RyaW5nKQogICAgICAgICBzZWxmLnB1dF9ieXRlcyhwYXRoLCBh
X3N0cmluZy5lbmNvZGUoJ3V0Zi04JykpCiAKKyAgICBkZWYgbGVhdmVfaW5fcGxhY2Uoc2VsZik6
CisgICAgICAgICIiIlNldCB0aGlzIExvY2thYmxlRmlsZXMgdG8gbm90IGNsZWFyIHRoZSBwaHlz
aWNhbCBsb2NrIG9uIHVubG9jay4iIiIKKyAgICAgICAgc2VsZi5fbG9jay5sZWF2ZV9pbl9wbGFj
ZSgpCisKKyAgICBkZWYgZG9udF9sZWF2ZV9pbl9wbGFjZShzZWxmKToKKyAgICAgICAgIiIiU2V0
IHRoaXMgTG9ja2FibGVGaWxlcyB0byBjbGVhciB0aGUgcGh5c2ljYWwgbG9jayBvbiB1bmxvY2su
IiIiCisgICAgICAgICMgWFhYOiB0aGluayBhYm91dCByZW5hbWluZyB0aGlzIQorICAgICAgICBz
ZWxmLl9sb2NrLmRvbnRfbGVhdmVfaW5fcGxhY2UoKQorCiAgICAgZGVmIGxvY2tfd3JpdGUoc2Vs
ZiwgdG9rZW49Tm9uZSk6CiAgICAgICAgICIiIkxvY2sgdGhpcyBncm91cCBvZiBmaWxlcyBmb3Ig
d3JpdGluZy4KICAgICAgICAgCkBAIC0yMzIsMTIgKzI0MSw2IEBACiAgICAgICAgICAgICBpbnN0
YW5jZSBkb2Vzbid0IHN1cHBvcnQgdXNpbmcgdG9rZW4gbG9ja3MuCiAgICAgICAgIDpyYWlzZXMg
TWlzbWF0Y2hlZFRva2VuOiBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGRvZXNuJ3QgbWF0Y2ggdGhl
IHRva2VuCiAgICAgICAgICAgICBvZiB0aGUgZXhpc3RpbmcgbG9jay4KLQotICAgICAgICBBIHRv
a2VuIHNob3VsZCBiZSBwYXNzZWQgaW4gaWYgeW91IGtub3cgdGhhdCB5b3UgaGF2ZSBsb2NrZWQg
dGhlIG9iamVjdAotICAgICAgICBzb21lIG90aGVyIHdheSwgYW5kIG5lZWQgdG8gc3luY2hyb25p
c2UgdGhpcyBvYmplY3QncyBzdGF0ZSB3aXRoIHRoYXQKLSAgICAgICAgZmFjdC4gIEZvciBpbnN0
YW5jZSwgdGhpcyBjb3VsZCBoYXBwZW4gd2hlbiBhY2Nlc3NpbmcgdGhlIHNhbWUgYnJhbmNoCi0g
ICAgICAgIG92ZXIgYnpyK3NzaDovLyBhbmQgdGhlbiBmYWxsaW5nIGJhY2sgdG8gZG8gc29tZSBv
cGVyYXRpb25zIG9uIHRoZSBzYW1lCi0gICAgICAgIGJyYW5jaCB2aWEgc2Z0cDovLy4KICAgICAg
ICAgIiIiCiAgICAgICAgICMgbXV0dGVyKCJsb2NrIHdyaXRlOiAlcyAoJXMpIiwgc2VsZiwgc2Vs
Zi5fbG9ja19jb3VudCkKICAgICAgICAgIyBUT0RPOiBVcGdyYWRlIGxvY2tpbmcgdG8gc3VwcG9y
dCB1c2luZyBhIFRyYW5zcG9ydCwKQEAgLTI0Nyw2ICsyNTAsNyBAQAogICAgICAgICAgICAgICAg
IHJhaXNlIGVycm9ycy5SZWFkT25seUVycm9yKHNlbGYpCiAgICAgICAgICAgICBzZWxmLl9sb2Nr
LnZhbGlkYXRlX3Rva2VuKHRva2VuKQogICAgICAgICAgICAgc2VsZi5fbG9ja19jb3VudCArPSAx
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fdG9rZW5fZnJvbV9sb2NrCiAgICAgICAgIGVsc2U6
CiAgICAgICAgICAgICB0b2tlbl9mcm9tX2xvY2sgPSBzZWxmLl9sb2NrLmxvY2tfd3JpdGUodG9r
ZW49dG9rZW4pCiAgICAgICAgICAgICAjbm90ZSgnd3JpdGUgbG9ja2luZyAlcycsIHNlbGYpCkBA
IC0yNTQsNiArMjU4LDkgQEAKICAgICAgICAgICAgIHNlbGYuX2xvY2tfbW9kZSA9ICd3JwogICAg
ICAgICAgICAgc2VsZi5fbG9ja19jb3VudCA9IDEKICAgICAgICAgICAgIHNlbGYuX3NldF90cmFu
c2FjdGlvbih0cmFuc2FjdGlvbnMuV3JpdGVUcmFuc2FjdGlvbigpKQorICAgICAgICAgICAgIyBY
WFg6IGFkZCB0ZXN0IGZvciB0aGUgY2FzZSB0aGF0IHJlcXVpcmVzIHNlbGYuX3Rva2VuX2Zyb21f
bG9jazoKKyAgICAgICAgICAgICMgdG9rZW4gPSB4LmxvY2tfd3JpdGUoKTsgYXNzZXJ0KHgubG9j
a193cml0ZSgpID09IHRva2VuKQorICAgICAgICAgICAgc2VsZi5fdG9rZW5fZnJvbV9sb2NrID0g
dG9rZW5fZnJvbV9sb2NrCiAgICAgICAgICAgICByZXR1cm4gdG9rZW5fZnJvbV9sb2NrCiAKICAg
ICBkZWYgbG9ja19yZWFkKHNlbGYpOgpAQCAtMzUxLDYgKzM1OCwxMiBAQAogICAgIGRlZiBicmVh
a19sb2NrKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuYnJl
YWtfbG9jaykKIAorICAgIGRlZiBsZWF2ZV9pbl9wbGFjZShzZWxmKToKKyAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLmxlYXZlX2luX3BsYWNlKQorCisgICAgZGVmIGRvbnRf
bGVhdmVfaW5fcGxhY2Uoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3Io
c2VsZi5kb250X2xlYXZlX2luX3BsYWNlKQorCiAgICAgZGVmIGxvY2tfd3JpdGUoc2VsZiwgdG9r
ZW49Tm9uZSk6CiAgICAgICAgIGlmIHRva2VuIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcmFp
c2UgZXJyb3JzLlRva2VuTG9ja2luZ05vdFN1cHBvcnRlZChzZWxmKQoK

=== modified file bzrlib/lockdir.py // encoding:base64
LS0tIGJ6cmxpYi9sb2NrZGlyLnB5CisrKyBienJsaWIvbG9ja2Rpci5weQpAQCAtMTY2LDcgKzE2
Niw2IEBACiAgICAgICAgIHNlbGYuX2hlbGRfaW5mb19wYXRoID0gc2VsZi5faGVsZF9kaXIgKyBz
ZWxmLl9fSU5GT19OQU1FCiAgICAgICAgIHNlbGYuX2ZpbGVfbW9kZWJpdHMgPSBmaWxlX21vZGVi
aXRzCiAgICAgICAgIHNlbGYuX2Rpcl9tb2RlYml0cyA9IGRpcl9tb2RlYml0cwotICAgICAgICBz
ZWxmLm5vbmNlID0gcmFuZF9jaGFycygyMCkKIAogICAgICAgICBzZWxmLl9yZXBvcnRfZnVuY3Rp
b24gPSBub3RlCiAKQEAgLTIxMCw2ICsyMDksNyBAQAogICAgICAgICAgICAgICAgICMgQWZ0ZXIg
Y3JlYXRpbmcgdGhlIGxvY2sgZGlyZWN0b3J5LCB0cnkgYWdhaW4KICAgICAgICAgICAgICAgICBz
ZWxmLnRyYW5zcG9ydC5ta2Rpcih0bXBuYW1lKQogCisgICAgICAgICAgICBzZWxmLm5vbmNlID0g
cmFuZF9jaGFycygyMCkKICAgICAgICAgICAgIGluZm9fYnl0ZXMgPSBzZWxmLl9wcmVwYXJlX2lu
Zm8oKQogICAgICAgICAgICAgIyBXZSB1c2UgcHV0X2ZpbGVfbm9uX2F0b21pYyBiZWNhdXNlIHdl
IGp1c3QgY3JlYXRlZCBhIG5ldyB1bmlxdWUKICAgICAgICAgICAgICMgZGlyZWN0b3J5IHNvIHdl
IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgZmlsZXMgZXhpc3RpbmcgdGhlcmUuCkBAIC00MTks
NiArNDE5LDEyIEBACiAgICAgICAgICAgICAgICAgdGltZS5zbGVlcChwb2xsKQogICAgICAgICAg
ICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZSBMb2NrQ29udGVudGlvbihzZWxmKQorICAg
IAorICAgIGRlZiBsZWF2ZV9pbl9wbGFjZShzZWxmKToKKyAgICAgICAgc2VsZi5fbG9ja2VkX3Zp
YV90b2tlbiA9IFRydWUKKworICAgIGRlZiBkb250X2xlYXZlX2luX3BsYWNlKHNlbGYpOgorICAg
ICAgICBzZWxmLl9sb2NrZWRfdmlhX3Rva2VuID0gRmFsc2UKIAogICAgIGRlZiBsb2NrX3dyaXRl
KHNlbGYsIHRva2VuPU5vbmUpOgogICAgICAgICAiIiJXYWl0IGZvciBhbmQgYWNxdWlyZSB0aGUg
bG9jay4KQEAgLTQyOCwyMSArNDM0LDE3IEBACiAgICAgICAgIDpyZXR1cm5zOiBhIHRva2VuIGlm
IHRoaXMgaW5zdGFuY2Ugc3VwcG9ydHMgdG9rZW5zLCBvdGhlcndpc2UgTm9uZS4KICAgICAgICAg
OnJhaXNlcyBUb2tlbkxvY2tpbmdOb3RTdXBwb3J0ZWQ6IHdoZW4gYSB0b2tlbiBpcyBnaXZlbiBi
dXQgdGhpcwogICAgICAgICAgICAgaW5zdGFuY2UgZG9lc24ndCBzdXBwb3J0IHVzaW5nIHRva2Vu
IGxvY2tzLgotICAgICAgICA6cmFpc2VzIFRva2VuTWlzbWF0Y2g6IGlmIHRoZSBzcGVjaWZpZWQg
dG9rZW4gZG9lc24ndCBtYXRjaCB0aGUgdG9rZW4KKyAgICAgICAgOnJhaXNlcyBNaXNtYXRjaGVk
VG9rZW46IGlmIHRoZSBzcGVjaWZpZWQgdG9rZW4gZG9lc24ndCBtYXRjaCB0aGUgdG9rZW4KICAg
ICAgICAgICAgIG9mIHRoZSBleGlzdGluZyBsb2NrLgotCi0gICAgICAgIEEgdG9rZW4gc2hvdWxk
IGJlIHBhc3NlZCBpbiBpZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIGxvY2tlZCB0aGUgb2JqZWN0
Ci0gICAgICAgIHNvbWUgb3RoZXIgd2F5LCBhbmQgbmVlZCB0byBzeW5jaHJvbmlzZSB0aGlzIG9i
amVjdCdzIHN0YXRlIHdpdGggdGhhdAotICAgICAgICBmYWN0LiAgRm9yIGluc3RhbmNlLCB0aGlz
IGNvdWxkIGhhcHBlbiB3aGVuIGFjY2Vzc2luZyB0aGUgc2FtZSBicmFuY2gKLSAgICAgICAgb3Zl
ciBienIrc3NoOi8vIGFuZCB0aGVuIGZhbGxpbmcgYmFjayB0byBkbyBzb21lIG9wZXJhdGlvbnMg
b24gdGhlIHNhbWUKLSAgICAgICAgYnJhbmNoIHZpYSBzZnRwOi8vLgogICAgICAgICAgCiAgICAg
ICAgIFhYWDogZG9jc3RyaW5nIGR1cGxpY2F0ZWQgZnJvbSBMb2NrYWJsZUZpbGVzLmxvY2tfd3Jp
dGUuCiAgICAgICAgICIiIgogICAgICAgICBpZiB0b2tlbiBpcyBub3QgTm9uZToKICAgICAgICAg
ICAgIHNlbGYudmFsaWRhdGVfdG9rZW4odG9rZW4pCisgICAgICAgICAgICBzZWxmLm5vbmNlID0g
dG9rZW4KICAgICAgICAgICAgIHNlbGYuX2xvY2tfaGVsZCA9IFRydWUKICAgICAgICAgICAgIHNl
bGYuX2xvY2tlZF92aWFfdG9rZW4gPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gdG9rZW4KICAg
ICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYud2FpdF9sb2NrKCkKICAgICAgICAgICAgIHJl
dHVybiBzZWxmLnBlZWsoKS5nZXQoJ25vbmNlJykKCg==

=== modified file bzrlib/repository.py // encoding:base64
LS0tIGJ6cmxpYi9yZXBvc2l0b3J5LnB5CisrKyBienJsaWIvcmVwb3NpdG9yeS5weQpAQCAtMjMx
LDggKzIzMSwyMCBAQAogICAgIGRlZiBpc19sb2NrZWQoc2VsZik6CiAgICAgICAgIHJldHVybiBz
ZWxmLmNvbnRyb2xfZmlsZXMuaXNfbG9ja2VkKCkKIAotICAgIGRlZiBsb2NrX3dyaXRlKHNlbGYp
OgotICAgICAgICBzZWxmLmNvbnRyb2xfZmlsZXMubG9ja193cml0ZSgpCisgICAgZGVmIGxvY2tf
d3JpdGUoc2VsZiwgdG9rZW49Tm9uZSk6CisgICAgICAgICIiIkxvY2sgdGhpcyByZXBvc2l0b3J5
IGZvciB3cml0aW5nLgorICAgICAgICAKKyAgICAgICAgOnBhcmFtIHRva2VuOiBpZiB0aGlzIGlz
IGFscmVhZHkgbG9ja2VkLCB0aGVuIGxvY2tfd3JpdGUgd2lsbCBmYWlsCisgICAgICAgICAgICB1
bmxlc3MgdGhlIHRva2VuIG1hdGNoZXMgdGhlIGV4aXN0aW5nIGxvY2suCisgICAgICAgIDpyZXR1
cm5zOiBhIHRva2VuIGlmIHRoaXMgaW5zdGFuY2Ugc3VwcG9ydHMgdG9rZW5zLCBvdGhlcndpc2Ug
Tm9uZS4KKyAgICAgICAgOnJhaXNlcyBUb2tlbkxvY2tpbmdOb3RTdXBwb3J0ZWQ6IHdoZW4gYSB0
b2tlbiBpcyBnaXZlbiBidXQgdGhpcworICAgICAgICAgICAgaW5zdGFuY2UgZG9lc24ndCBzdXBw
b3J0IHVzaW5nIHRva2VuIGxvY2tzLgorICAgICAgICA6cmFpc2VzIE1pc21hdGNoZWRUb2tlbjog
aWYgdGhlIHNwZWNpZmllZCB0b2tlbiBkb2Vzbid0IG1hdGNoIHRoZSB0b2tlbgorICAgICAgICAg
ICAgb2YgdGhlIGV4aXN0aW5nIGxvY2suCisKKyAgICAgICAgWFhYOiB0aGlzIGRvY3N0cmluZyBp
cyBkdXBsaWNhdGVkIGluIG1hbnkgcGxhY2VzLCBlLmcuIGxvY2thYmxlX2ZpbGVzLnB5CisgICAg
ICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5jb250cm9sX2ZpbGVzLmxvY2tfd3JpdGUodG9r
ZW49dG9rZW4pCiAKICAgICBkZWYgbG9ja19yZWFkKHNlbGYpOgogICAgICAgICBzZWxmLmNvbnRy
b2xfZmlsZXMubG9ja19yZWFkKCkKQEAgLTI0MCw2ICsyNTIsMjIgQEAKICAgICBkZWYgZ2V0X3Bo
eXNpY2FsX2xvY2tfc3RhdHVzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5jb250cm9sX2Zp
bGVzLmdldF9waHlzaWNhbF9sb2NrX3N0YXR1cygpCiAKKyAgICBkZWYgbGVhdmVfbG9ja19pbl9w
bGFjZShzZWxmKToKKyAgICAgICAgIiIiVGVsbCB0aGlzIHJlcG9zaXRvcnkgbm90IHRvIHJlbGVh
c2UgdGhlIHBoeXNpY2FsIGxvY2sgd2hlbiB0aGlzCisgICAgICAgIG9iamVjdCBpcyB1bmxvY2tl
ZC4KKyAgICAgICAgCisgICAgICAgIElmIGxvY2tfd3JpdGUgZG9lc24ndCByZXR1cm4gYSB0b2tl
biwgdGhlbiB0aGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAgICAiIiIKKyAgICAg
ICAgc2VsZi5jb250cm9sX2ZpbGVzLmxlYXZlX2luX3BsYWNlKCkKKworICAgIGRlZiBkb250X2xl
YXZlX2xvY2tfaW5fcGxhY2Uoc2VsZik6CisgICAgICAgICIiIlRlbGwgdGhpcyByZXBvc2l0b3J5
IHRvIHJlbGVhc2UgdGhlIHBoeXNpY2FsIGxvY2sgd2hlbiB0aGlzCisgICAgICAgIG9iamVjdCBp
cyB1bmxvY2tlZCwgZXZlbiBpZiBpdCBkaWRuJ3Qgb3JpZ2luYWxseSBhY3F1aXJlIGl0LgorCisg
ICAgICAgIElmIGxvY2tfd3JpdGUgZG9lc24ndCByZXR1cm4gYSB0b2tlbiwgdGhlbiB0aGlzIG1l
dGhvZCBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5jb250cm9s
X2ZpbGVzLmRvbnRfbGVhdmVfaW5fcGxhY2UoKQorCiAgICAgQG5lZWRzX3JlYWRfbG9jawogICAg
IGRlZiBnYXRoZXJfc3RhdHMoc2VsZiwgcmV2aWQ9Tm9uZSwgY29tbWl0dGVycz1Ob25lKToKICAg
ICAgICAgIiIiR2F0aGVyIHN0YXRpc3RpY3MgZnJvbSBhIHJldmlzaW9uIGlkLgoK

=== modified file bzrlib/tests/branch_implementations/test_locking.py // encodi
... ng:base64
LS0tIGJ6cmxpYi90ZXN0cy9icmFuY2hfaW1wbGVtZW50YXRpb25zL3Rlc3RfbG9ja2luZy5weQor
KysgYnpybGliL3Rlc3RzL2JyYW5jaF9pbXBsZW1lbnRhdGlvbnMvdGVzdF9sb2NraW5nLnB5CkBA
IC0yMjcsNiArMjI3LDE5OCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JjJywgJ3Vs
JywgVHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSwgc2VsZi5sb2NrcykKIAorICAg
IGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmV0dXJuc19Ob25lX3JlZnVzZXNfdG9rZW5zKHNlbGYpOgor
ICAgICAgICBicmFuY2ggPSBzZWxmLm1ha2VfYnJhbmNoKCdiJykKKyAgICAgICAgdG9rZW5zID0g
YnJhbmNoLmxvY2tfd3JpdGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB0b2tlbnMg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHks
IGJlY2F1c2UgdGhpcyBsb2NrYWJsZSBzdXBwb3J0cworICAgICAgICAgICAgICAgICMgdG9rZW5z
LgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
ZXJyb3JzLlRva2VuTG9ja2luZ05vdFN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyYW5jaC5sb2NrX3dyaXRlLCB0b2tlbnM9KCd0b2tlbicsJ3Rva2VuJykpCisgICAg
ICAgIGZpbmFsbHk6CisgICAgICAgICAgICBicmFuY2gudW5sb2NrKCkKKworICAgIGRlZiB0ZXN0
X3JlZW50ZXJpbmdfbG9ja193cml0ZV9yYWlzZXNfb25fdG9rZW5fbWlzbWF0Y2goc2VsZik6Cisg
ICAgICAgIGJyYW5jaCA9IHNlbGYubWFrZV9icmFuY2goJ2InKQorICAgICAgICB0b2tlbnMgPSBi
cmFuY2gubG9ja193cml0ZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRva2VucyBp
cyBOb25lOgorICAgICAgICAgICAgICAgICMgVGhpcyB0ZXN0IGRvZXMgbm90IGFwcGx5LCBiZWNh
dXNlIHRoaXMgbG9ja2FibGUgcmVmdXNlcworICAgICAgICAgICAgICAgICMgdG9rZW5zLgorICAg
ICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgYnJhbmNoX3Rva2VuLCByZXBvX3Rva2Vu
ID0gdG9rZW5zCisgICAgICAgICAgICBkaWZmZXJlbnRfYnJhbmNoX3Rva2VuID0gYnJhbmNoX3Rv
a2VuICsgJ3h4eCcKKyAgICAgICAgICAgIGRpZmZlcmVudF9yZXBvX3Rva2VuID0gcmVwb190b2tl
biArICd4eHgnCisgICAgICAgICAgICAjIFJlLXVzaW5nIHRoZSBzYW1lIGxvY2thYmxlIGluc3Rh
bmNlIHdpdGggYSBkaWZmZXJlbnQgYnJhbmNoIHRva2VuCisgICAgICAgICAgICAjIHdpbGwgcmFp
c2UgVG9rZW5NaXNtYXRjaC4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5U
b2tlbk1pc21hdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLmxvY2tf
d3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnM9KGRpZmZlcmVudF9i
cmFuY2hfdG9rZW4sIHJlcG9fdG9rZW4pKQorICAgICAgICAgICAgIyBTaW1pbGFybHkgZm9yIGEg
ZGlmZmVyZW50IHJlcG9zaXRvcnkgdG9rZW4uCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhlcnJvcnMuVG9rZW5NaXNtYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
YW5jaC5sb2NrX3dyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zPShi
cmFuY2hfdG9rZW4sIGRpZmZlcmVudF9yZXBvX3Rva2VuKSkKKyAgICAgICAgZmluYWxseToKKyAg
ICAgICAgICAgIGJyYW5jaC51bmxvY2soKQorCisgICAgZGVmIHRlc3RfbG9ja193cml0ZV93aXRo
X25vbm1hdGNoaW5nX3Rva2VuKHNlbGYpOgorICAgICAgICBicmFuY2ggPSBzZWxmLm1ha2VfYnJh
bmNoKCdiJykKKyAgICAgICAgdG9rZW5zID0gYnJhbmNoLmxvY2tfd3JpdGUoKQorICAgICAgICB0
cnk6CisgICAgICAgICAgICBpZiB0b2tlbnMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIFRo
aXMgdGVzdCBkb2VzIG5vdCBhcHBseSwgYmVjYXVzZSB0aGlzIGJyYW5jaCByZWZ1c2VzCisgICAg
ICAgICAgICAgICAgIyB0b2tlbnMuCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAg
ICBicmFuY2hfdG9rZW4sIHJlcG9fdG9rZW4gPSB0b2tlbnMKKyAgICAgICAgICAgIGRpZmZlcmVu
dF9icmFuY2hfdG9rZW4gPSBicmFuY2hfdG9rZW4gKyAneHh4JworICAgICAgICAgICAgZGlmZmVy
ZW50X3JlcG9fdG9rZW4gPSByZXBvX3Rva2VuICsgJ3h4eCcKKworICAgICAgICAgICAgbmV3X2Jy
YW5jaCA9IGJyYW5jaC5ienJkaXIub3Blbl9icmFuY2goKQorICAgICAgICAgICAgIyBXZSBvbmx5
IHdhbnQgdG8gdGVzdCB0aGUgcmVsb2NraW5nIGFiaWxpdGllcyBvZiBicmFuY2gsIHNvIHVzZSB0
aGUKKyAgICAgICAgICAgICMgZXhpc3RpbmcgcmVwb3NpdG9yeSBvYmplY3Qgd2hpY2ggaXMgYWxy
ZWFkeSBsb2NrZWQuCisgICAgICAgICAgICBuZXdfYnJhbmNoLnJlcG9zaXRvcnkgPSBicmFuY2gu
cmVwb3NpdG9yeQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTWlz
bWF0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYnJhbmNoLmxvY2tfd3Jp
dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnM9KGRpZmZlcmVudF9icmFu
Y2hfdG9rZW4sIHJlcG9fdG9rZW4pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJy
b3JzLlRva2VuTWlzbWF0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYnJh
bmNoLmxvY2tfd3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnM9KGJy
YW5jaF90b2tlbiwgZGlmZmVyZW50X3JlcG9fdG9rZW4pKQorICAgICAgICBmaW5hbGx5OgorICAg
ICAgICAgICAgYnJhbmNoLnVubG9jaygpCisKKworICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfd2l0
aF9tYXRjaGluZ190b2tlbihzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGF0IGEgYnJhbmNoIGNh
biBiZSBsb2NrZWQgd2l0aCBhIHRva2VuLCBpZiBpdCBpcyBhbHJlYWR5CisgICAgICAgIGxvY2tl
ZCBieSB0aGF0IHRva2VuLiIiIgorICAgICAgICBicmFuY2ggPSBzZWxmLm1ha2VfYnJhbmNoKCdi
JykKKyAgICAgICAgdG9rZW5zID0gYnJhbmNoLmxvY2tfd3JpdGUoKQorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBpZiB0b2tlbnMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgdGVz
dCBkb2VzIG5vdCBhcHBseSwgYmVjYXVzZSB0aGlzIGJyYW5jaCByZWZ1c2VzIHRva2Vucy4KKyAg
ICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICMgVGhlIHNhbWUgaW5zdGFuY2Ugd2ls
bCBhY2NlcHQgYSBzZWNvbmQgbG9ja193cml0ZSBpZiB0aGUgc3BlY2lmaWVkCisgICAgICAgICAg
ICAjIHRva2VuIG1hdGNoZXMuCisgICAgICAgICAgICBicmFuY2gubG9ja193cml0ZSh0b2tlbnM9
dG9rZW5zKQorICAgICAgICAgICAgYnJhbmNoLnVubG9jaygpCisgICAgICAgICAgICAjIENhbGxp
bmcgbG9ja193cml0ZSBvbiBhIG5ldyBpbnN0YW5jZSBmb3IgdGhlIHNhbWUgbG9ja2FibGUgd2ls
bAorICAgICAgICAgICAgIyBhbHNvIHN1Y2NlZWQuCisgICAgICAgICAgICBuZXdfYnJhbmNoID0g
YnJhbmNoLmJ6cmRpci5vcGVuX2JyYW5jaCgpCisgICAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0
byB0ZXN0IHRoZSByZWxvY2tpbmcgYWJpbGl0aWVzIG9mIGJyYW5jaCwgc28gdXNlIHRoZQorICAg
ICAgICAgICAgIyBleGlzdGluZyByZXBvc2l0b3J5IG9iamVjdCB3aGljaCBpcyBhbHJlYWR5IGxv
Y2tlZC4KKyAgICAgICAgICAgIG5ld19icmFuY2gucmVwb3NpdG9yeSA9IGJyYW5jaC5yZXBvc2l0
b3J5CisgICAgICAgICAgICBuZXdfYnJhbmNoLmxvY2tfd3JpdGUodG9rZW5zPXRva2VucykKKyAg
ICAgICAgICAgIG5ld19icmFuY2gudW5sb2NrKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAg
ICAgIGJyYW5jaC51bmxvY2soKQorCisgICAgZGVmIHRlc3RfdW5sb2NrX2FmdGVyX2xvY2tfd3Jp
dGVfd2l0aF90b2tlbnMoc2VsZik6CisgICAgICAgICMgSWYgbG9ja193cml0ZSBkaWQgbm90IHBo
eXNpY2FsbHkgYWNxdWlyZSB0aGUgbG9jayAoYmVjYXVzZSBpdCB3YXMKKyAgICAgICAgIyBwYXNz
ZWQgc29tZSB0b2tlbnMpLCB0aGVuIHVubG9jayBzaG91bGQgbm90IHBoeXNpY2FsbHkgcmVsZWFz
ZSBpdC4KKyAgICAgICAgYnJhbmNoID0gc2VsZi5tYWtlX2JyYW5jaCgnYicpCisgICAgICAgIHRv
a2VucyA9IGJyYW5jaC5sb2NrX3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYg
dG9rZW5zIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBUaGlzIHRlc3QgZG9lcyBub3QgYXBw
bHksIGJlY2F1c2UgdGhpcyBsb2NrYWJsZSByZWZ1c2VzCisgICAgICAgICAgICAgICAgIyB0b2tl
bnMuCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBuZXdfYnJhbmNoID0gYnJh
bmNoLmJ6cmRpci5vcGVuX2JyYW5jaCgpCisgICAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byB0
ZXN0IHRoZSByZWxvY2tpbmcgYWJpbGl0aWVzIG9mIGJyYW5jaCwgc28gdXNlIHRoZQorICAgICAg
ICAgICAgIyBleGlzdGluZyByZXBvc2l0b3J5IG9iamVjdCB3aGljaCBpcyBhbHJlYWR5IGxvY2tl
ZC4KKyAgICAgICAgICAgIG5ld19icmFuY2gucmVwb3NpdG9yeSA9IGJyYW5jaC5yZXBvc2l0b3J5
CisgICAgICAgICAgICBuZXdfYnJhbmNoLmxvY2tfd3JpdGUodG9rZW5zPXRva2VucykKKyAgICAg
ICAgICAgIG5ld19icmFuY2gudW5sb2NrKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShi
cmFuY2guZ2V0X3BoeXNpY2FsX2xvY2tfc3RhdHVzKCkpICNYWFgKKyAgICAgICAgZmluYWxseToK
KyAgICAgICAgICAgIGJyYW5jaC51bmxvY2soKQorCisgICAgZGVmIHRlc3RfbG9ja193cml0ZV93
aXRoX3Rva2Vuc19mYWlsc193aGVuX3VubG9ja2VkKHNlbGYpOgorICAgICAgICAjIExvY2sgYW5k
IHVubG9jayB0byBnZXQgc3VwZXJmaWNpYWxseSB2YWxpZCB0b2tlbnMuICBUaGlzIG1pbWljcyBh
CisgICAgICAgICMgbGlrZWx5IHByb2dyYW1taW5nIGVycm9yLCB3aGVyZSBhIGNhbGxlciBhY2Np
ZGVudGFsbHkgdHJpZXMgdG8gbG9jaworICAgICAgICAjIHdpdGggdG9rZW5zIHRoYXQgYXJlIG5v
IGxvbmdlciB2YWxpZCAoYmVjYXVzZSB0aGUgb3JpZ2luYWwgbG9jayB3YXMKKyAgICAgICAgIyBy
ZWxlYXNlZCkuCisgICAgICAgIGJyYW5jaCA9IHNlbGYubWFrZV9icmFuY2goJ2InKQorICAgICAg
ICB0b2tlbnMgPSBicmFuY2gubG9ja193cml0ZSgpCisgICAgICAgIGJyYW5jaC51bmxvY2soKQor
ICAgICAgICBpZiB0b2tlbnMgaXMgTm9uZToKKyAgICAgICAgICAgICMgVGhpcyB0ZXN0IGRvZXMg
bm90IGFwcGx5LCBiZWNhdXNlIHRoaXMgbG9ja2FibGUgcmVmdXNlcworICAgICAgICAgICAgIyB0
b2tlbnMuCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhl
cnJvcnMuVG9rZW5NaXNtYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLmxv
Y2tfd3JpdGUsIHRva2Vucz10b2tlbnMpCisKKyAgICBkZWYgdGVzdF9sb2NrX3dyaXRlX3JlZW50
ZXJfd2l0aF90b2tlbnMoc2VsZik6CisgICAgICAgIGJyYW5jaCA9IHNlbGYubWFrZV9icmFuY2go
J2InKQorICAgICAgICB0b2tlbnMgPSBicmFuY2gubG9ja193cml0ZSgpCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIGlmIHRva2VucyBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgVGhpcyB0
ZXN0IGRvZXMgbm90IGFwcGx5LCBiZWNhdXNlIHRoaXMgbG9ja2FibGUgcmVmdXNlcworICAgICAg
ICAgICAgICAgICMgdG9rZW5zLgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAg
IyBSZWxvY2sgd2l0aCBhIHRva2VuLgorICAgICAgICAgICAgYnJhbmNoLmxvY2tfd3JpdGUodG9r
ZW5zPXRva2VucykKKyAgICAgICAgICAgIGJyYW5jaC51bmxvY2soKQorICAgICAgICBmaW5hbGx5
OgorICAgICAgICAgICAgYnJhbmNoLnVubG9jaygpCisgICAgICAgICMgVGhlIGxvY2sgc2hvdWxk
IGJlIHVubG9ja2VkIG9uIGRpc2suICBWZXJpZnkgdGhhdCB3aXRoIGEgbmV3IGxvY2sKKyAgICAg
ICAgIyBpbnN0YW5jZS4KKyAgICAgICAgbmV3X2JyYW5jaCA9IGJyYW5jaC5ienJkaXIub3Blbl9i
cmFuY2goKQorICAgICAgICAjIENhbGxpbmcgbG9ja193cml0ZSBub3cgc2hvdWxkIHdvcmssIHJh
dGhlciB0aGFuIHJhaXNlIExvY2tDb250ZW50aW9uLgorICAgICAgICBuZXdfYnJhbmNoLmxvY2tf
d3JpdGUoKQorICAgICAgICBuZXdfYnJhbmNoLnVubG9jaygpCisKKyAgICBkZWYgdGVzdF9sZWF2
ZV9sb2NrX2luX3BsYWNlKHNlbGYpOgorICAgICAgICBicmFuY2ggPSBzZWxmLm1ha2VfYnJhbmNo
KCdiJykKKyAgICAgICAgIyBMb2NrIHRoZSBicmFuY2gsIHRoZW4gdXNlIGxlYXZlX2xvY2tfaW5f
cGxhY2Ugc28gdGhhdCB3aGVuIHdlCisgICAgICAgICMgdW5sb2NrIHRoZSBicmFuY2ggdGhlIGxv
Y2sgaXMgc3RpbGwgaGVsZCBvbiBkaXNrLgorICAgICAgICB0b2tlbnMgPSBicmFuY2gubG9ja193
cml0ZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRva2VucyBpcyBOb25lOgorICAg
ICAgICAgICAgICAgICMgVGhpcyB0ZXN0IGRvZXMgbm90IGFwcGx5LCBiZWNhdXNlIHRoaXMgcmVw
b3NpdG9yeSByZWZ1c2VzIGxvY2sKKyAgICAgICAgICAgICAgICAjIHRva2Vucy4KKyAgICAgICAg
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBicmFuY2gubGVh
dmVfbG9ja19pbl9wbGFjZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGJy
YW5jaC5sZWF2ZV9sb2NrX2luX3BsYWNlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
IGJyYW5jaC51bmxvY2soKQorICAgICAgICAjIFdlIHNob3VsZCBiZSB1bmFibGUgdG8gcmVsb2Nr
IHRoZSByZXBvLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuTG9ja0NvbnRlbnRp
b24sIGJyYW5jaC5sb2NrX3dyaXRlKQorCisgICAgZGVmIHRlc3RfZG9udF9sZWF2ZV9sb2NrX2lu
X3BsYWNlKHNlbGYpOgorICAgICAgICBicmFuY2ggPSBzZWxmLm1ha2VfYnJhbmNoKCdiJykKKyAg
ICAgICAgIyBDcmVhdGUgYSBsb2NrIG9uIGRpc2suCisgICAgICAgIHRva2VucyA9IGJyYW5jaC5s
b2NrX3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdG9rZW5zIGlzIE5vbmU6
CisgICAgICAgICAgICAgICAgIyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhp
cyBicmFuY2ggcmVmdXNlcyBsb2NrCisgICAgICAgICAgICAgICAgIyB0b2tlbnMuCisgICAgICAg
ICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2guZG9udF9sZWF2ZV9sb2NrX2luX3BsYWNl
KQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIGJyYW5jaC5sZWF2ZV9sb2NrX2luX3BsYWNlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBOb3RJ
bXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgICAgICMgVGhpcyBicmFuY2ggZG9lc24ndCBz
dXBwb3J0IHRoaXMgQVBJLgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgYnJh
bmNoLnJlcG9zaXRvcnkubGVhdmVfbG9ja19pbl9wbGFjZSgpCisgICAgICAgIGZpbmFsbHk6Cisg
ICAgICAgICAgICBicmFuY2gudW5sb2NrKCkKKyAgICAgICAgIyBSZWFjcXVpcmUgdGhlIGxvY2sg
KHdpdGggYSBkaWZmZXJlbnQgYnJhbmNoIG9iamVjdCkgYnkgdXNpbmcgdGhlCisgICAgICAgICMg
dG9rZW5zLgorICAgICAgICBuZXdfYnJhbmNoID0gYnJhbmNoLmJ6cmRpci5vcGVuX2JyYW5jaCgp
CisgICAgICAgIG5ld19icmFuY2gubG9ja193cml0ZSh0b2tlbnM9dG9rZW5zKQorICAgICAgICAj
IENhbGwgZG9udF9sZWF2ZV9sb2NrX2luX3BsYWNlLCBzbyB0aGF0IHRoZSBsb2NrIHdpbGwgYmUg
cmVsZWFzZWQgYnkKKyAgICAgICAgIyB0aGlzIGluc3RhbmNlLCBldmVuIHRob3VnaCB0aGUgbG9j
ayB3YXNuJ3Qgb3JpZ2luYWxseSBhY3F1aXJlZCBieSBpdC4KKyAgICAgICAgbmV3X2JyYW5jaC5k
b250X2xlYXZlX2xvY2tfaW5fcGxhY2UoKQorICAgICAgICBuZXdfYnJhbmNoLnJlcG9zaXRvcnku
ZG9udF9sZWF2ZV9sb2NrX2luX3BsYWNlKCkKKyAgICAgICAgbmV3X2JyYW5jaC51bmxvY2soKQor
ICAgICAgICAjIE5vdyB0aGUgYnJhbmNoIChhbmQgcmVwb3NpdG9yeSkgaXMgdW5sb2NrZWQuICBU
ZXN0IHRoaXMgYnkgbG9ja2luZyBpdAorICAgICAgICAjIHdpdGhvdXQgdG9rZW5zLgorICAgICAg
ICBicmFuY2gubG9ja193cml0ZSgpCisgICAgICAgIGJyYW5jaC51bmxvY2soKQorCiAgICAgZGVm
IHRlc3RfbG9ja19yZWFkX3RoZW5fdW5sb2NrKHNlbGYpOgogICAgICAgICAjIENhbGxpbmcgbG9j
a19yZWFkIHRoZW4gdW5sb2NraW5nIHNob3VsZCB3b3JrIHdpdGhvdXQgZXJyb3JzLgogICAgICAg
ICBicmFuY2ggPSBzZWxmLm1ha2VfYnJhbmNoKCdiJykKCg==

=== modified file bzrlib/tests/lock_helpers.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy9sb2NrX2hlbHBlcnMucHkKKysrIGJ6cmxpYi90ZXN0cy9sb2NrX2hl
bHBlcnMucHkKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9vdGhl
ci5sb2NrX3JlYWQoKQogICAgICAgICByYWlzZSBUZXN0UHJldmVudExvY2tpbmcoJ2xvY2tfcmVh
ZCBkaXNhYmxlZCcpCiAKLSAgICBkZWYgbG9ja193cml0ZShzZWxmKToKKyAgICBkZWYgbG9ja193
cml0ZShzZWxmLCB0b2tlbj1Ob25lKToKICAgICAgICAgc2VsZi5fc2VxdWVuY2UuYXBwZW5kKChz
ZWxmLl9vdGhlcl9pZCwgJ2x3Jywgc2VsZi5fYWxsb3dfd3JpdGUpKQogICAgICAgICBpZiBzZWxm
Ll9hbGxvd193cml0ZToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9vdGhlci5sb2NrX3dyaXRl
KCkKCg==

=== modified file bzrlib/tests/repository_implementations/test_repository.py //
...  encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy9yZXBvc2l0b3J5X2ltcGxlbWVudGF0aW9ucy90ZXN0X3JlcG9zaXRv
cnkucHkKKysrIGJ6cmxpYi90ZXN0cy9yZXBvc2l0b3J5X2ltcGxlbWVudGF0aW9ucy90ZXN0X3Jl
cG9zaXRvcnkucHkKQEAgLTQzNCw2ICs0MzQsNTggQEAKIAogY2xhc3MgVGVzdFJlcG9zaXRvcnlM
b2NraW5nKFRlc3RDYXNlV2l0aFJlcG9zaXRvcnkpOgogCisgICAgZGVmIHNldFVwKHNlbGYpOgor
ICAgICAgICBUZXN0Q2FzZVdpdGhSZXBvc2l0b3J5LnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYu
cmVkdWNlTG9ja2RpclRpbWVvdXQoKQorCisgICAgZGVmIHRlc3RfbGVhdmVfbG9ja19pbl9wbGFj
ZShzZWxmKToKKyAgICAgICAgcmVwbyA9IHNlbGYubWFrZV9yZXBvc2l0b3J5KCdyJykKKyAgICAg
ICAgIyBMb2NrIHRoZSByZXBvc2l0b3J5LCB0aGVuIHVzZSBsZWF2ZV9sb2NrX2luX3BsYWNlIHNv
IHRoYXQgd2hlbiB3ZQorICAgICAgICAjIHVubG9jayB0aGUgcmVwb3NpdG9yeSB0aGUgbG9jayBp
cyBzdGlsbCBoZWxkIG9uIGRpc2suCisgICAgICAgIHRva2VuID0gcmVwby5sb2NrX3dyaXRlKCkK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAg
ICAgICAjIFRoaXMgdGVzdCBkb2VzIG5vdCBhcHBseSwgYmVjYXVzZSB0aGlzIHJlcG9zaXRvcnkg
cmVmdXNlcyBsb2NrCisgICAgICAgICAgICAgICAgIyB0b2tlbnMuCisgICAgICAgICAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcmVwby5sZWF2ZV9sb2NrX2lu
X3BsYWNlKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgcmVwby5sZWF2ZV9s
b2NrX2luX3BsYWNlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJlcG8udW5sb2Nr
KCkKKyAgICAgICAgIyBXZSBzaG91bGQgYmUgdW5hYmxlIHRvIHJlbG9jayB0aGUgcmVwby4KKyAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLkxvY2tDb250ZW50aW9uLCByZXBvLmxvY2tf
d3JpdGUpCisKKyAgICBkZWYgdGVzdF9kb250X2xlYXZlX2xvY2tfaW5fcGxhY2Uoc2VsZik6Cisg
ICAgICAgIHJlcG8gPSBzZWxmLm1ha2VfcmVwb3NpdG9yeSgncicpCisgICAgICAgICMgQ3JlYXRl
IGEgbG9jayBvbiBkaXNrLgorICAgICAgICB0b2tlbiA9IHJlcG8ubG9ja193cml0ZSgpCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAgICAgICAgICAg
IyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyByZXBvc2l0b3J5IHJlZnVz
ZXMgbG9jaworICAgICAgICAgICAgICAgICMgdG9rZW5zLgorICAgICAgICAgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwby5kb250X2xlYXZlX2xvY2tfaW5fcGxhY2UpCisgICAgICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVwby5sZWF2ZV9s
b2NrX2luX3BsYWNlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgor
ICAgICAgICAgICAgICAgICMgVGhpcyByZXBvc2l0b3J5IGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIEFQ
SS4KKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
IHJlcG8udW5sb2NrKCkKKyAgICAgICAgIyBSZWFjcXVpcmUgdGhlIGxvY2sgKHdpdGggYSBkaWZm
ZXJlbnQgcmVwb3NpdG9yeSBvYmplY3QpIGJ5IHVzaW5nIHRoZQorICAgICAgICAjIHRva2VuLgor
ICAgICAgICBuZXdfcmVwbyA9IHJlcG8uYnpyZGlyLm9wZW5fcmVwb3NpdG9yeSgpCisgICAgICAg
IG5ld19yZXBvLmxvY2tfd3JpdGUodG9rZW49dG9rZW4pCisgICAgICAgICMgQ2FsbCBkb250X2xl
YXZlX2xvY2tfaW5fcGxhY2UsIHNvIHRoYXQgdGhlIGxvY2sgd2lsbCBiZSByZWxlYXNlZCBieQor
ICAgICAgICAjIHRoaXMgaW5zdGFuY2UsIGV2ZW4gdGhvdWdoIHRoZSBsb2NrIHdhc24ndCBvcmln
aW5hbGx5IGFjcXVpcmVkIGJ5IGl0LgorICAgICAgICBuZXdfcmVwby5kb250X2xlYXZlX2xvY2tf
aW5fcGxhY2UoKQorICAgICAgICBuZXdfcmVwby51bmxvY2soKQorICAgICAgICAjIE5vdyB0aGUg
cmVwb3NpdG9yeSBpcyB1bmxvY2tlZC4gIFRlc3QgdGhpcyBieSBsb2NraW5nIGl0ICh3aXRob3V0
IGEKKyAgICAgICAgIyB0b2tlbikuCisgICAgICAgIHJlcG8ubG9ja193cml0ZSgpCisgICAgICAg
IHJlcG8udW5sb2NrKCkKKwogICAgIGRlZiB0ZXN0X2xvY2tfcmVhZF90aGVuX3VubG9jayhzZWxm
KToKICAgICAgICAgIyBDYWxsaW5nIGxvY2tfcmVhZCB0aGVuIHVubG9ja2luZyBzaG91bGQgd29y
ayB3aXRob3V0IGVycm9ycy4KICAgICAgICAgcmVwbyA9IHNlbGYubWFrZV9yZXBvc2l0b3J5KCdy
JykKCg==

=== modified file bzrlib/tests/test_lockable_files.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2xvY2thYmxlX2ZpbGVzLnB5CisrKyBienJsaWIvdGVzdHMv
dGVzdF9sb2NrYWJsZV9maWxlcy5weQpAQCAtMzYsMTMgKzM2LDcgQEAKIGNsYXNzIF9UZXN0TG9j
a2FibGVGaWxlc19taXhpbihvYmplY3QpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAg
ICAjIFJlZHVjZSB0aGUgZGVmYXVsdCB0aW1lb3V0LCBzbyB0aGF0IGlmIHRlc3RzIGZhaWwsIHRo
ZXkgd2lsbCBkbyBzbwotICAgICAgICAjIHJlYXNvbmFibHkgcXVpY2tseS4KLSAgICAgICAgb3Jp
Z190aW1lb3V0ID0gbG9ja2Rpci5fREVGQVVMVF9USU1FT1VUX1NFQ09ORFMKLSAgICAgICAgZGVm
IHJlc2V0VGltZW91dCgpOgotICAgICAgICAgICAgbG9ja2Rpci5fREVGQVVMVF9USU1FT1VUX1NF
Q09ORFMgPSBvcmlnX3RpbWVvdXQKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc2V0VGltZW91
dCkKLSAgICAgICAgbG9ja2Rpci5fREVGQVVMVF9USU1FT1VUX1NFQ09ORFMgPSAzCisgICAgICAg
IHNlbGYucmVkdWNlTG9ja2RpclRpbWVvdXQoKQogCiAgICAgZGVmIHRlc3RfcmVhZF93cml0ZShz
ZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm9TdWNoRmlsZSwgc2VsZi5sb2NrYWJs
ZS5nZXQsICdmb28nKQpAQCAtMTQ3LDYgKzE0MSwyMiBAQAogICAgICAgICBmaW5hbGx5OgogICAg
ICAgICAgICAgc2VsZi5sb2NrYWJsZS51bmxvY2soKQogCisgICAgZGVmIHRlc3RfbG9ja193cml0
ZV9yZXR1cm5zX3Rva2VuX3doZW5fZ2l2ZW5fdG9rZW4oc2VsZik6CisgICAgICAgIHRva2VuID0g
c2VsZi5sb2NrYWJsZS5sb2NrX3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYg
dG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgdGVzdCBkb2VzIG5vdCBhcHBs
eSwgYmVjYXVzZSB0aGlzIGxvY2thYmxlIHJlZnVzZXMKKyAgICAgICAgICAgICAgICAjIHRva2Vu
cy4KKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIG5ld19sb2NrYWJsZSA9IHNl
bGYuZ2V0X2xvY2thYmxlKCkKKyAgICAgICAgICAgIHRva2VuX2Zyb21fbmV3X2xvY2thYmxlID0g
bmV3X2xvY2thYmxlLmxvY2tfd3JpdGUodG9rZW49dG9rZW4pCisgICAgICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0b2tlbiwgdG9rZW5fZnJvbV9uZXdfbG9j
a2FibGUpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG5ld19sb2NrYWJs
ZS51bmxvY2soKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS51
bmxvY2soKQorCiAgICAgZGVmIHRlc3RfbG9ja193cml0ZV9yYWlzZXNfb25fdG9rZW5fbWlzbWF0
Y2goc2VsZik6CiAgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJsZS5sb2NrX3dyaXRlKCkKICAg
ICAgICAgdHJ5OgpAQCAtMjMxLDggKzI0MSwxMSBAQAogICAgICAgICAgICAgICAgICMgdG9rZW5z
LgogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgIyBSZWxvY2sgd2l0aCBhIHRv
a2VuLgotICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS5sb2NrX3dyaXRlKHRva2VuPXRva2VuKQot
ICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS51bmxvY2soKQorICAgICAgICAgICAgdG9rZW5fZnJv
bV9yZWVudHJ5ID0gc2VsZi5sb2NrYWJsZS5sb2NrX3dyaXRlKHRva2VuPXRva2VuKQorICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9rZW4sIHRva2Vu
X2Zyb21fcmVlbnRyeSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2Vs
Zi5sb2NrYWJsZS51bmxvY2soKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5s
b2NrYWJsZS51bmxvY2soKQogICAgICAgICAjIFRoZSBsb2NrIHNob3VsZCBiZSB1bmxvY2tlZCBv
biBkaXNrLiAgVmVyaWZ5IHRoYXQgd2l0aCBhIG5ldyBsb2NrCkBAIC0yNDIsNiArMjU1LDQ1IEBA
CiAgICAgICAgIG5ld19sb2NrYWJsZS5sb2NrX3dyaXRlKCkKICAgICAgICAgbmV3X2xvY2thYmxl
LnVubG9jaygpCiAKKyAgICBkZWYgdGVzdF9sZWF2ZV9pbl9wbGFjZShzZWxmKToKKyAgICAgICAg
dG9rZW4gPSBzZWxmLmxvY2thYmxlLmxvY2tfd3JpdGUoKQorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBpZiB0b2tlbiBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgVGhpcyB0ZXN0IGRvZXMg
bm90IGFwcGx5LCBiZWNhdXNlIHRoaXMgbG9ja2FibGUgcmVmdXNlcworICAgICAgICAgICAgICAg
ICMgdG9rZW5zLgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5sb2Nr
YWJsZS5sZWF2ZV9pbl9wbGFjZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxm
LmxvY2thYmxlLnVubG9jaygpCisgICAgICAgICMgQXQgdGhpcyBwb2ludCwgdGhlIGxvY2sgaXMg
c3RpbGwgaW4gcGxhY2Ugb24gZGlzaworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMu
TG9ja0NvbnRlbnRpb24sIHNlbGYubG9ja2FibGUubG9ja193cml0ZSkKKyAgICAgICAgIyBCdXQg
c2hvdWxkIGJlIHJlbG9ja2FibGUgd2l0aCBhIHRva2VuLgorICAgICAgICBzZWxmLmxvY2thYmxl
LmxvY2tfd3JpdGUodG9rZW49dG9rZW4pCisgICAgICAgIHNlbGYubG9ja2FibGUudW5sb2NrKCkK
KworICAgIGRlZiB0ZXN0X2RvbnRfbGVhdmVfaW5fcGxhY2Uoc2VsZik6CisgICAgICAgIHRva2Vu
ID0gc2VsZi5sb2NrYWJsZS5sb2NrX3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
aWYgdG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgdGVzdCBkb2VzIG5vdCBh
cHBseSwgYmVjYXVzZSB0aGlzIGxvY2thYmxlIHJlZnVzZXMKKyAgICAgICAgICAgICAgICAjIHRv
a2Vucy4KKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYubG9ja2FibGUu
bGVhdmVfaW5fcGxhY2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5sb2Nr
YWJsZS51bmxvY2soKQorICAgICAgICAjIEF0IHRoaXMgcG9pbnQsIHRoZSBsb2NrIGlzIHN0aWxs
IGluIHBsYWNlIG9uIGRpc2suCisgICAgICAgICMgQWNxdWlyZSB0aGUgZXhpc3RpbmcgbG9jayB3
aXRoIHRoZSB0b2tlbiwgYW5kIGFzayB0aGF0IGl0IGlzIHJlbW92ZWQKKyAgICAgICAgIyB3aGVu
IHRoaXMgb2JqZWN0IHVubG9ja3MsIGFuZCB1bmxvY2sgdG8gdHJpZ2dlciB0aGF0IHJlbW92YWwu
CisgICAgICAgIG5ld19sb2NrYWJsZSA9IHNlbGYuZ2V0X2xvY2thYmxlKCkKKyAgICAgICAgbmV3
X2xvY2thYmxlLmxvY2tfd3JpdGUodG9rZW49dG9rZW4pCisgICAgICAgIG5ld19sb2NrYWJsZS5k
b250X2xlYXZlX2luX3BsYWNlKCkKKyAgICAgICAgbmV3X2xvY2thYmxlLnVubG9jaygpCisgICAg
ICAgICMgQXQgdGhpcyBwb2ludCwgdGhlIGxvY2sgaXMgbm8gbG9uZ2VyIG9uIGRpc2ssIHNvIHdl
IGNhbiBsb2NrIGl0LgorICAgICAgICB0aGlyZF9sb2NrYWJsZSA9IHNlbGYuZ2V0X2xvY2thYmxl
KCkKKyAgICAgICAgdGhpcmRfbG9ja2FibGUubG9ja193cml0ZSgpCisgICAgICAgIHRoaXJkX2xv
Y2thYmxlLnVubG9jaygpCisKKwogCiAKIAoK

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200704111
... 33532-u6x6edf3dmzamnaq
# revision id: andrew.bennetts at canonical.com-20070411133532-u6x6edf3dmzamnaq
# sha1: 9a9f6ade85bea3c85103b42235de335446c5538b
# inventory sha1: dc69d8af19ea36cb9dea9f780878e48c1ead5a59
# parent ids:
#   andrew.bennetts at canonical.com-20070411064005-zylli6el5cz7kwnb
# properties:
#   branch-nick: bzr.dev.hpss.api.changes

# message:
#   Merge from bzr.dev.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Wed 2007-04-11 16:40:05.997999907 +1000

=== modified file NEWS // encoding:base64
LS0tIE5FV1MKKysrIE5FV1MKQEAgLTQxLDYgKzQxLDEwIEBACiAgICAgICBienJsaWIvdHJhbnNw
b3J0L3JlbW90ZS5weSBjb250YWlucyBqdXN0IHRoZSBUcmFuc3BvcnQgY2xhc3NlcyB0aGF0IHVz
ZWQKICAgICAgIHRvIGJlIGluIGJ6cmxpYi90cmFuc3BvcnQvc21hcnQucHkuICAoQW5kcmV3IEJl
bm5ldHRzKQogIAorICAgICogYGBMb2NrYWJsZUZpbGVzLmxvY2tfd3JpdGUoKWBgIG5vdyBhY2Nl
cHRzIGEgYGB0b2tlbmBgIGtleXdvcmQgYXJndW1lbnQsCisgICAgICBzbyB0aGF0IGEgc2VwZXJh
dGUgTG9ja2FibGVGaWxlcyBpbnN0YW5jZSBjYW4gc2hhcmUgYSBsb2NrIGlmIGl0IGhhcyB0aGUK
KyAgICAgIHJpZ2h0IHRva2VuLiAgKEFuZHJldyBCZW5uZXR0cywgUm9iZXJ0IENvbGxpbnMpCisK
ICAgQlVHRklYRVM6CiAKICAgICAqIERvbid0IGZhaWwgYnVuZGxlIHNlbGZ0ZXN0IGlmIGVtYWls
IGhhcyAndHdvJyBlbWJlZGRlZC4gIAoK

=== modified file bzrlib/errors.py // encoding:base64
LS0tIGJ6cmxpYi9lcnJvcnMucHkKKysrIGJ6cmxpYi9lcnJvcnMucHkKQEAgLTgwOSw2ICs4MDks
MjcgQEAKICAgICAgICAgc2VsZi5sb2NrID0gbG9jawogCiAKK2NsYXNzIFRva2VuTG9ja2luZ05v
dFN1cHBvcnRlZChMb2NrRXJyb3IpOgorCisgICAgX2ZtdCA9ICJUaGUgb2JqZWN0ICUob2JqKXMg
ZG9lcyBub3Qgc3VwcG9ydCB0b2tlbiBzcGVjaWZ5aW5nIGEgdG9rZW4gd2hlbiBsb2NraW5nLiIK
KworICAgIGludGVybmFsX2Vycm9yID0gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9i
aik6CisgICAgICAgIHNlbGYub2JqID0gb2JqCisKKworY2xhc3MgVG9rZW5NaXNtYXRjaChMb2Nr
QnJva2VuKToKKworICAgIF9mbXQgPSAiVGhlIGxvY2sgdG9rZW4gJShnaXZlbl90b2tlbilyIGRv
ZXMgbm90IG1hdGNoIGxvY2sgdG9rZW4gJShsb2NrX3Rva2VuKXIuIgorCisgICAgaW50ZXJuYWxf
ZXJyb3IgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2l2ZW5fdG9rZW4sIGxvY2tf
dG9rZW4pOgorICAgICAgICBzZWxmLmdpdmVuX3Rva2VuID0gZ2l2ZW5fdG9rZW4KKyAgICAgICAg
c2VsZi5sb2NrX3Rva2VuID0gbG9ja190b2tlbgorCisKIGNsYXNzIFBvaW50bGVzc0NvbW1pdChC
enJFcnJvcik6CiAKICAgICBfZm10ID0gIk5vIGNoYW5nZXMgdG8gY29tbWl0IgoK

=== modified file bzrlib/lockable_files.py // last-changed:andrew.bennetts at cano
... nical.com-20070328073853-yje2ikoflt6a4jos // encoding:base64
LS0tIGJ6cmxpYi9sb2NrYWJsZV9maWxlcy5weQorKysgYnpybGliL2xvY2thYmxlX2ZpbGVzLnB5
CkBAIC0yMjIsMjEgKzIyMiwzOSBAQAogICAgICAgICAgICAgcmFpc2UgZXJyb3JzLkJ6ckJhZFBh
cmFtZXRlck5vdFN0cmluZyhhX3N0cmluZykKICAgICAgICAgc2VsZi5wdXRfYnl0ZXMocGF0aCwg
YV9zdHJpbmcuZW5jb2RlKCd1dGYtOCcpKQogCi0gICAgZGVmIGxvY2tfd3JpdGUoc2VsZik6Cisg
ICAgZGVmIGxvY2tfd3JpdGUoc2VsZiwgdG9rZW49Tm9uZSk6CisgICAgICAgICIiIkxvY2sgdGhp
cyBncm91cCBvZiBmaWxlcyBmb3Igd3JpdGluZy4KKyAgICAgICAgCisgICAgICAgIDpwYXJhbSB0
b2tlbjogaWYgdGhpcyBpcyBhbHJlYWR5IGxvY2tlZCwgdGhlbiBsb2NrX3dyaXRlIHdpbGwgZmFp
bAorICAgICAgICAgICAgdW5sZXNzIHRoZSB0b2tlbiBtYXRjaGVzIHRoZSBleGlzdGluZyBsb2Nr
LgorICAgICAgICA6cmV0dXJuczogYSB0b2tlbiBpZiB0aGlzIGluc3RhbmNlIHN1cHBvcnRzIHRv
a2Vucywgb3RoZXJ3aXNlIE5vbmUuCisgICAgICAgIDpyYWlzZXMgVG9rZW5Mb2NraW5nTm90U3Vw
cG9ydGVkOiB3aGVuIGEgdG9rZW4gaXMgZ2l2ZW4gYnV0IHRoaXMKKyAgICAgICAgICAgIGluc3Rh
bmNlIGRvZXNuJ3Qgc3VwcG9ydCB1c2luZyB0b2tlbiBsb2Nrcy4KKyAgICAgICAgOnJhaXNlcyBN
aXNtYXRjaGVkVG9rZW46IGlmIHRoZSBzcGVjaWZpZWQgdG9rZW4gZG9lc24ndCBtYXRjaCB0aGUg
dG9rZW4KKyAgICAgICAgICAgIG9mIHRoZSBleGlzdGluZyBsb2NrLgorCisgICAgICAgIEEgdG9r
ZW4gc2hvdWxkIGJlIHBhc3NlZCBpbiBpZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIGxvY2tlZCB0
aGUgb2JqZWN0CisgICAgICAgIHNvbWUgb3RoZXIgd2F5LCBhbmQgbmVlZCB0byBzeW5jaHJvbmlz
ZSB0aGlzIG9iamVjdCdzIHN0YXRlIHdpdGggdGhhdAorICAgICAgICBmYWN0LiAgRm9yIGluc3Rh
bmNlLCB0aGlzIGNvdWxkIGhhcHBlbiB3aGVuIGFjY2Vzc2luZyB0aGUgc2FtZSBicmFuY2gKKyAg
ICAgICAgb3ZlciBienIrc3NoOi8vIGFuZCB0aGVuIGZhbGxpbmcgYmFjayB0byBkbyBzb21lIG9w
ZXJhdGlvbnMgb24gdGhlIHNhbWUKKyAgICAgICAgYnJhbmNoIHZpYSBzZnRwOi8vLgorICAgICAg
ICAiIiIKICAgICAgICAgIyBtdXR0ZXIoImxvY2sgd3JpdGU6ICVzICglcykiLCBzZWxmLCBzZWxm
Ll9sb2NrX2NvdW50KQogICAgICAgICAjIFRPRE86IFVwZ3JhZGUgbG9ja2luZyB0byBzdXBwb3J0
IHVzaW5nIGEgVHJhbnNwb3J0LAogICAgICAgICAjIGFuZCBwb3RlbnRpYWxseSBhIHJlbW90ZSBs
b2NraW5nIHByb3RvY29sCiAgICAgICAgIGlmIHNlbGYuX2xvY2tfbW9kZToKICAgICAgICAgICAg
IGlmIHNlbGYuX2xvY2tfbW9kZSAhPSAndycgb3Igbm90IHNlbGYuZ2V0X3RyYW5zYWN0aW9uKCku
d3JpdGVhYmxlKCk6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3JzLlJlYWRPbmx5RXJyb3Io
c2VsZikKKyAgICAgICAgICAgIHNlbGYuX2xvY2sudmFsaWRhdGVfdG9rZW4odG9rZW4pCiAgICAg
ICAgICAgICBzZWxmLl9sb2NrX2NvdW50ICs9IDEKICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHNlbGYuX2xvY2subG9ja193cml0ZSgpCisgICAgICAgICAgICB0b2tlbl9mcm9tX2xvY2sgPSBz
ZWxmLl9sb2NrLmxvY2tfd3JpdGUodG9rZW49dG9rZW4pCiAgICAgICAgICAgICAjbm90ZSgnd3Jp
dGUgbG9ja2luZyAlcycsIHNlbGYpCiAgICAgICAgICAgICAjdHJhY2ViYWNrLnByaW50X3N0YWNr
KCkKICAgICAgICAgICAgIHNlbGYuX2xvY2tfbW9kZSA9ICd3JwogICAgICAgICAgICAgc2VsZi5f
bG9ja19jb3VudCA9IDEKICAgICAgICAgICAgIHNlbGYuX3NldF90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbnMuV3JpdGVUcmFuc2FjdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHRva2VuX2Zyb21f
bG9jawogCiAgICAgZGVmIGxvY2tfcmVhZChzZWxmKToKICAgICAgICAgIyBtdXR0ZXIoImxvY2sg
cmVhZDogJXMgKCVzKSIsIHNlbGYsIHNlbGYuX2xvY2tfY291bnQpCkBAIC0zMzMsNyArMzUxLDkg
QEAKICAgICBkZWYgYnJlYWtfbG9jayhzZWxmKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcihzZWxmLmJyZWFrX2xvY2spCiAKLSAgICBkZWYgbG9ja193cml0ZShzZWxmKToKKyAg
ICBkZWYgbG9ja193cml0ZShzZWxmLCB0b2tlbj1Ob25lKToKKyAgICAgICAgaWYgdG9rZW4gaXMg
bm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuVG9rZW5Mb2NraW5nTm90U3VwcG9y
dGVkKHNlbGYpCiAgICAgICAgIHNlbGYuX2xvY2sgPSBzZWxmLl90cmFuc3BvcnQubG9ja193cml0
ZShzZWxmLl9lc2NhcGVkX25hbWUpCiAKICAgICBkZWYgbG9ja19yZWFkKHNlbGYpOgpAQCAtMzUx
LDMgKzM3MSw4IEBACiAgICAgICAgICMgZm9yIG9sZC1zdHlsZSBsb2NrcywgY3JlYXRlIHRoZSBm
aWxlIG5vdwogICAgICAgICBzZWxmLl90cmFuc3BvcnQucHV0X2J5dGVzKHNlbGYuX2VzY2FwZWRf
bmFtZSwgJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT1zZWxmLl9maWxlX21v
ZGViaXRzKQorCisgICAgZGVmIHZhbGlkYXRlX3Rva2VuKHNlbGYsIHRva2VuKToKKyAgICAgICAg
aWYgdG9rZW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuVG9rZW5Mb2Nr
aW5nTm90U3VwcG9ydGVkKHNlbGYpCisgICAgICAgIAoK

=== modified file bzrlib/lockdir.py // last-changed:andrew.bennetts at canonical.c
... om-20070328073853-yje2ikoflt6a4jos // encoding:base64
LS0tIGJ6cmxpYi9sb2NrZGlyLnB5CisrKyBienJsaWIvbG9ja2Rpci5weQpAQCAtMTYwLDYgKzE2
MCw3IEBACiAgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CiAgICAgICAgIHNlbGYu
cGF0aCA9IHBhdGgKICAgICAgICAgc2VsZi5fbG9ja19oZWxkID0gRmFsc2UKKyAgICAgICAgc2Vs
Zi5fbG9ja2VkX3ZpYV90b2tlbiA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Zha2VfcmVhZF9sb2Nr
ID0gRmFsc2UKICAgICAgICAgc2VsZi5faGVsZF9kaXIgPSBwYXRoICsgJy9oZWxkJwogICAgICAg
ICBzZWxmLl9oZWxkX2luZm9fcGF0aCA9IHNlbGYuX2hlbGRfZGlyICsgc2VsZi5fX0lORk9fTkFN
RQpAQCAtMjM0LDE1ICsyMzUsMTkgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBu
b3Qgc2VsZi5fbG9ja19oZWxkOgogICAgICAgICAgICAgcmFpc2UgTG9ja05vdEhlbGQoc2VsZikK
LSAgICAgICAgIyByZW5hbWUgYmVmb3JlIGRlbGV0aW5nLCBiZWNhdXNlIHdlIGNhbid0IGF0b21p
Y2FsbHkgcmVtb3ZlIHRoZSB3aG9sZQotICAgICAgICAjIHRyZWUKLSAgICAgICAgdG1wbmFtZSA9
ICclcy9yZWxlYXNpbmcuJXMudG1wJyAlIChzZWxmLnBhdGgsIHJhbmRfY2hhcnMoMjApKQotICAg
ICAgICAjIGdvdHRhIG93biBpdCB0byB1bmxvY2sKLSAgICAgICAgc2VsZi5jb25maXJtKCkKLSAg
ICAgICAgc2VsZi50cmFuc3BvcnQucmVuYW1lKHNlbGYuX2hlbGRfZGlyLCB0bXBuYW1lKQotICAg
ICAgICBzZWxmLl9sb2NrX2hlbGQgPSBGYWxzZQotICAgICAgICBzZWxmLnRyYW5zcG9ydC5kZWxl
dGUodG1wbmFtZSArIHNlbGYuX19JTkZPX05BTUUpCi0gICAgICAgIHNlbGYudHJhbnNwb3J0LnJt
ZGlyKHRtcG5hbWUpCisgICAgICAgIGlmIHNlbGYuX2xvY2tlZF92aWFfdG9rZW46CisgICAgICAg
ICAgICBzZWxmLl9sb2NrZWRfdmlhX3Rva2VuID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX2xv
Y2tfaGVsZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHJlbmFtZSBiZWZv
cmUgZGVsZXRpbmcsIGJlY2F1c2Ugd2UgY2FuJ3QgYXRvbWljYWxseSByZW1vdmUgdGhlCisgICAg
ICAgICAgICAjIHdob2xlIHRyZWUKKyAgICAgICAgICAgIHRtcG5hbWUgPSAnJXMvcmVsZWFzaW5n
LiVzLnRtcCcgJSAoc2VsZi5wYXRoLCByYW5kX2NoYXJzKDIwKSkKKyAgICAgICAgICAgICMgZ290
dGEgb3duIGl0IHRvIHVubG9jaworICAgICAgICAgICAgc2VsZi5jb25maXJtKCkKKyAgICAgICAg
ICAgIHNlbGYudHJhbnNwb3J0LnJlbmFtZShzZWxmLl9oZWxkX2RpciwgdG1wbmFtZSkKKyAgICAg
ICAgICAgIHNlbGYuX2xvY2tfaGVsZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnRyYW5zcG9y
dC5kZWxldGUodG1wbmFtZSArIHNlbGYuX19JTkZPX05BTUUpCisgICAgICAgICAgICBzZWxmLnRy
YW5zcG9ydC5ybWRpcih0bXBuYW1lKQogCiAgICAgZGVmIGJyZWFrX2xvY2soc2VsZik6CiAgICAg
ICAgICIiIkJyZWFrIGEgbG9jayBub3QgaGVsZCBieSB0aGlzIGluc3RhbmNlIG9mIExvY2tEaXIu
CkBAIC00MTUsOSArNDIwLDMyIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAg
IHJhaXNlIExvY2tDb250ZW50aW9uKHNlbGYpCiAKLSAgICBkZWYgbG9ja193cml0ZShzZWxmKToK
LSAgICAgICAgIiIiV2FpdCBmb3IgYW5kIGFjcXVpcmUgdGhlIGxvY2suIiIiCi0gICAgICAgIHNl
bGYud2FpdF9sb2NrKCkKKyAgICBkZWYgbG9ja193cml0ZShzZWxmLCB0b2tlbj1Ob25lKToKKyAg
ICAgICAgIiIiV2FpdCBmb3IgYW5kIGFjcXVpcmUgdGhlIGxvY2suCisgICAgICAgIAorICAgICAg
ICA6cGFyYW0gdG9rZW46IGlmIHRoaXMgaXMgYWxyZWFkeSBsb2NrZWQsIHRoZW4gbG9ja193cml0
ZSB3aWxsIGZhaWwKKyAgICAgICAgICAgIHVubGVzcyB0aGUgdG9rZW4gbWF0Y2hlcyB0aGUgZXhp
c3RpbmcgbG9jay4KKyAgICAgICAgOnJldHVybnM6IGEgdG9rZW4gaWYgdGhpcyBpbnN0YW5jZSBz
dXBwb3J0cyB0b2tlbnMsIG90aGVyd2lzZSBOb25lLgorICAgICAgICA6cmFpc2VzIFRva2VuTG9j
a2luZ05vdFN1cHBvcnRlZDogd2hlbiBhIHRva2VuIGlzIGdpdmVuIGJ1dCB0aGlzCisgICAgICAg
ICAgICBpbnN0YW5jZSBkb2Vzbid0IHN1cHBvcnQgdXNpbmcgdG9rZW4gbG9ja3MuCisgICAgICAg
IDpyYWlzZXMgVG9rZW5NaXNtYXRjaDogaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBkb2Vzbid0IG1h
dGNoIHRoZSB0b2tlbgorICAgICAgICAgICAgb2YgdGhlIGV4aXN0aW5nIGxvY2suCisKKyAgICAg
ICAgQSB0b2tlbiBzaG91bGQgYmUgcGFzc2VkIGluIGlmIHlvdSBrbm93IHRoYXQgeW91IGhhdmUg
bG9ja2VkIHRoZSBvYmplY3QKKyAgICAgICAgc29tZSBvdGhlciB3YXksIGFuZCBuZWVkIHRvIHN5
bmNocm9uaXNlIHRoaXMgb2JqZWN0J3Mgc3RhdGUgd2l0aCB0aGF0CisgICAgICAgIGZhY3QuICBG
b3IgaW5zdGFuY2UsIHRoaXMgY291bGQgaGFwcGVuIHdoZW4gYWNjZXNzaW5nIHRoZSBzYW1lIGJy
YW5jaAorICAgICAgICBvdmVyIGJ6citzc2g6Ly8gYW5kIHRoZW4gZmFsbGluZyBiYWNrIHRvIGRv
IHNvbWUgb3BlcmF0aW9ucyBvbiB0aGUgc2FtZQorICAgICAgICBicmFuY2ggdmlhIHNmdHA6Ly8u
CisgICAgICAgICAKKyAgICAgICAgWFhYOiBkb2NzdHJpbmcgZHVwbGljYXRlZCBmcm9tIExvY2th
YmxlRmlsZXMubG9ja193cml0ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHRva2VuIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgc2VsZi52YWxpZGF0ZV90b2tlbih0b2tlbikKKyAgICAgICAg
ICAgIHNlbGYuX2xvY2tfaGVsZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2xvY2tlZF92aWFf
dG9rZW4gPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLndhaXRfbG9jaygp
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wZWVrKCkuZ2V0KCdub25jZScpCiAKICAgICBkZWYg
bG9ja19yZWFkKHNlbGYpOgogICAgICAgICAiIiJDb21wYXRpYmlsaXR5LW1vZGUgc2hhcmVkIGxv
Y2suCkBAIC00NTcsMyArNDg1LDE0IEBACiAgICAgICAgICAgICAnbG9ja2VkICVzJyAlIChmb3Jt
YXRfZGVsdGEoZGVsdGEpLCksCiAgICAgICAgICAgICBdCiAKKyAgICBkZWYgdmFsaWRhdGVfdG9r
ZW4oc2VsZiwgdG9rZW4pOgorICAgICAgICBpZiB0b2tlbiBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIGluZm8gPSBzZWxmLnBlZWsoKQorICAgICAgICAgICAgaWYgaW5mbyBpcyBOb25lOgorICAg
ICAgICAgICAgICAgICMgTG9jayBpc24ndCBoZWxkCisgICAgICAgICAgICAgICAgbG9ja190b2tl
biA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9ja190b2tlbiA9
IGluZm8uZ2V0KCdub25jZScpCisgICAgICAgICAgICBpZiB0b2tlbiAhPSBsb2NrX3Rva2VuOgor
ICAgICAgICAgICAgICAgIHJhaXNlIGVycm9ycy5Ub2tlbk1pc21hdGNoKHRva2VuLCBsb2NrX3Rv
a2VuKQorCgo=

=== modified file bzrlib/tests/test_lockable_files.py // last-changed:andrew.be
... nnetts at canonical.com-20070328070842-r843houy668oxb9o // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2xvY2thYmxlX2ZpbGVzLnB5CisrKyBienJsaWIvdGVzdHMv
dGVzdF9sb2NrYWJsZV9maWxlcy5weQpAQCAtMjEsNiArMjEsNyBAQAogaW1wb3J0IGJ6cmxpYi5l
cnJvcnMgYXMgZXJyb3JzCiBmcm9tIGJ6cmxpYi5lcnJvcnMgaW1wb3J0IEJ6ckJhZFBhcmFtZXRl
ck5vdFN0cmluZywgTm9TdWNoRmlsZSwgUmVhZE9ubHlFcnJvcgogZnJvbSBienJsaWIubG9ja2Fi
bGVfZmlsZXMgaW1wb3J0IExvY2thYmxlRmlsZXMsIFRyYW5zcG9ydExvY2sKK2Zyb20gYnpybGli
IGltcG9ydCBsb2NrZGlyCiBmcm9tIGJ6cmxpYi5sb2NrZGlyIGltcG9ydCBMb2NrRGlyCiBmcm9t
IGJ6cmxpYi50ZXN0cyBpbXBvcnQgVGVzdENhc2VJblRlbXBEaXIKIGZyb20gYnpybGliLnRlc3Rz
LnRlc3RfdHJhbnNhY3Rpb25zIGltcG9ydCBEdW1teVdlYXZlCkBAIC0zNCw2ICszNSwxNSBAQAog
IyB0aGVzZSB0ZXN0cyBhcmUgYXBwbGllZCBpbiBlYWNoIHBhcmFtZXRlcml6ZWQgc3VpdGUgZm9y
IExvY2thYmxlRmlsZXMKIGNsYXNzIF9UZXN0TG9ja2FibGVGaWxlc19taXhpbihvYmplY3QpOgog
CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIFJlZHVjZSB0aGUgZGVmYXVsdCB0aW1l
b3V0LCBzbyB0aGF0IGlmIHRlc3RzIGZhaWwsIHRoZXkgd2lsbCBkbyBzbworICAgICAgICAjIHJl
YXNvbmFibHkgcXVpY2tseS4KKyAgICAgICAgb3JpZ190aW1lb3V0ID0gbG9ja2Rpci5fREVGQVVM
VF9USU1FT1VUX1NFQ09ORFMKKyAgICAgICAgZGVmIHJlc2V0VGltZW91dCgpOgorICAgICAgICAg
ICAgbG9ja2Rpci5fREVGQVVMVF9USU1FT1VUX1NFQ09ORFMgPSBvcmlnX3RpbWVvdXQKKyAgICAg
ICAgc2VsZi5hZGRDbGVhbnVwKHJlc2V0VGltZW91dCkKKyAgICAgICAgbG9ja2Rpci5fREVGQVVM
VF9USU1FT1VUX1NFQ09ORFMgPSAzCisKICAgICBkZWYgdGVzdF9yZWFkX3dyaXRlKHNlbGYpOgog
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb1N1Y2hGaWxlLCBzZWxmLmxvY2thYmxlLmdldCwg
J2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vU3VjaEZpbGUsIHNlbGYubG9ja2Fi
bGUuZ2V0X3V0ZjgsICdmb28nKQpAQCAtMTI1LDYgKzEzNSwxMTYgQEAKICAgICAgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5Mb2NrQnJva2VuLCBzZWxmLmxvY2thYmxlLnVubG9jaykK
ICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2NrYWJsZS5pc19sb2NrZWQoKSkK
IAorICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmV0dXJuc19Ob25lX3JlZnVzZXNfdG9rZW4oc2Vs
Zik6CisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJsZS5sb2NrX3dyaXRlKCkKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
IyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJsZSBzdXBwb3J0
cworICAgICAgICAgICAgICAgICMgdG9rZW5zLgorICAgICAgICAgICAgICAgIHJldHVybgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTG9ja2luZ05vdFN1cHBvcnRl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9ja2FibGUubG9ja193cml0
ZSwgdG9rZW49J3Rva2VuJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9j
a2FibGUudW5sb2NrKCkKKworICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmFpc2VzX29uX3Rva2Vu
X21pc21hdGNoKHNlbGYpOgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUubG9ja193cml0
ZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAg
ICAgICAgICAgIyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJs
ZSByZWZ1c2VzCisgICAgICAgICAgICAgICAgIyB0b2tlbnMuCisgICAgICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgICAgICBkaWZmZXJlbnRfdG9rZW4gPSB0b2tlbiArICd4eHgnCisgICAgICAg
ICAgICAjIFJlLXVzaW5nIHRoZSBzYW1lIGxvY2thYmxlIGluc3RhbmNlIHdpdGggYSBkaWZmZXJl
bnQgdG9rZW4gd2lsbAorICAgICAgICAgICAgIyByYWlzZSBUb2tlbk1pc21hdGNoLgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTWlzbWF0Y2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2thYmxlLmxvY2tfd3JpdGUsIHRva2VuPWRpZmZl
cmVudF90b2tlbikKKyAgICAgICAgICAgICMgQSBzZXBlcmF0ZSBpbnN0YW5jZSBmb3IgdGhlIHNh
bWUgbG9ja2FibGUgd2lsbCBhbHNvIHJhaXNlCisgICAgICAgICAgICAjIFRva2VuTWlzbWF0Y2gu
CisgICAgICAgICAgICAjIFRoaXMgZGV0ZWN0cyB0aGUgY2FzZSB3aGVyZSBhIGNhbGxlciBjbGFp
bXMgdG8gaGF2ZSBhIGxvY2sgKHZpYQorICAgICAgICAgICAgIyB0aGUgdG9rZW4pIGZvciBhbiBl
eHRlcm5hbCByZXNvdXJjZSwgYnV0IGRvZXNuJ3QgKHRoZSB0b2tlbiBpcworICAgICAgICAgICAg
IyBkaWZmZXJlbnQpLiAgQ2xpZW50cyBuZWVkIGEgc2VwZXJhdGUgbG9jayBvYmplY3QgdG8gbWFr
ZSBzdXJlIHRoZQorICAgICAgICAgICAgIyBleHRlcm5hbCByZXNvdXJjZSBpcyBwcm9iZWQsIHdo
ZXJlYXMgdGhlIGV4aXN0aW5nIGxvY2sgb2JqZWN0CisgICAgICAgICAgICAjIG1pZ2h0IGNhY2hl
LgorICAgICAgICAgICAgbmV3X2xvY2thYmxlID0gc2VsZi5nZXRfbG9ja2FibGUoKQorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTWlzbWF0Y2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0ZSwgdG9rZW49ZGlmZmVy
ZW50X3Rva2VuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS51
bmxvY2soKQorCisgICAgZGVmIHRlc3RfbG9ja193cml0ZV93aXRoX21hdGNoaW5nX3Rva2VuKHNl
bGYpOgorICAgICAgICAjIElmIHRoZSB0b2tlbiBtYXRjaGVzLCBzbyBubyBleGNlcHRpb24gaXMg
cmFpc2VkIGJ5IGxvY2tfd3JpdGUuCisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJsZS5sb2Nr
X3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgTm9uZToKKyAg
ICAgICAgICAgICAgICAjIFRoaXMgdGVzdCBkb2VzIG5vdCBhcHBseSwgYmVjYXVzZSB0aGlzIGxv
Y2thYmxlIHJlZnVzZXMKKyAgICAgICAgICAgICAgICAjIHRva2Vucy4KKyAgICAgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgICAgICMgVGhlIHNhbWUgaW5zdGFuY2Ugd2lsbCBhY2NlcHQgYSBz
ZWNvbmQgbG9ja193cml0ZSBpZiB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAjIHRva2VuIG1h
dGNoZXMuCisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLmxvY2tfd3JpdGUodG9rZW49dG9rZW4p
CisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLnVubG9jaygpCisgICAgICAgICAgICAjIENhbGxp
bmcgbG9ja193cml0ZSBvbiBhIG5ldyBpbnN0YW5jZSBmb3IgdGhlIHNhbWUgbG9ja2FibGUgd2ls
bAorICAgICAgICAgICAgIyBhbHNvIHN1Y2NlZWQuCisgICAgICAgICAgICBuZXdfbG9ja2FibGUg
PSBzZWxmLmdldF9sb2NrYWJsZSgpCisgICAgICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0
ZSh0b2tlbj10b2tlbikKKyAgICAgICAgICAgIG5ld19sb2NrYWJsZS51bmxvY2soKQorICAgICAg
ICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS51bmxvY2soKQorCisgICAgZGVm
IHRlc3RfdW5sb2NrX2FmdGVyX2xvY2tfd3JpdGVfd2l0aF90b2tlbihzZWxmKToKKyAgICAgICAg
IyBJZiBsb2NrX3dyaXRlIGRpZCBub3QgcGh5c2ljYWxseSBhY3F1aXJlIHRoZSBsb2NrIChiZWNh
dXNlIGl0IHdhcworICAgICAgICAjIHBhc3NlZCBhIHRva2VuKSwgdGhlbiB1bmxvY2sgc2hvdWxk
IG5vdCBwaHlzaWNhbGx5IHJlbGVhc2UgaXQuCisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJs
ZS5sb2NrX3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgTm9u
ZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgdGVzdCBkb2VzIG5vdCBhcHBseSwgYmVjYXVzZSB0
aGlzIGxvY2thYmxlIHJlZnVzZXMKKyAgICAgICAgICAgICAgICAjIHRva2Vucy4KKyAgICAgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIG5ld19sb2NrYWJsZSA9IHNlbGYuZ2V0X2xvY2th
YmxlKCkKKyAgICAgICAgICAgIG5ld19sb2NrYWJsZS5sb2NrX3dyaXRlKHRva2VuPXRva2VuKQor
ICAgICAgICAgICAgbmV3X2xvY2thYmxlLnVubG9jaygpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoc2VsZi5sb2NrYWJsZS5nZXRfcGh5c2ljYWxfbG9ja19zdGF0dXMoKSkKKyAgICAgICAg
ZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9ja2FibGUudW5sb2NrKCkKKworICAgIGRlZiB0
ZXN0X2xvY2tfd3JpdGVfd2l0aF90b2tlbl9mYWlsc193aGVuX3VubG9ja2VkKHNlbGYpOgorICAg
ICAgICAjIExvY2sgYW5kIHVubG9jayB0byBnZXQgYSBzdXBlcmZpY2lhbGx5IHZhbGlkIHRva2Vu
LiAgVGhpcyBtaW1pY3MgYQorICAgICAgICAjIGxpa2VseSBwcm9ncmFtbWluZyBlcnJvciwgd2hl
cmUgYSBjYWxsZXIgYWNjaWRlbnRhbGx5IHRyaWVzIHRvIGxvY2sKKyAgICAgICAgIyB3aXRoIGEg
dG9rZW4gdGhhdCBpcyBubyBsb25nZXIgdmFsaWQgKGJlY2F1c2UgdGhlIG9yaWdpbmFsIGxvY2sg
d2FzCisgICAgICAgICMgcmVsZWFzZWQpLgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUu
bG9ja193cml0ZSgpCisgICAgICAgIHNlbGYubG9ja2FibGUudW5sb2NrKCkKKyAgICAgICAgaWYg
dG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgICMgVGhpcyB0ZXN0IGRvZXMgbm90IGFwcGx5LCBi
ZWNhdXNlIHRoaXMgbG9ja2FibGUgcmVmdXNlcworICAgICAgICAgICAgIyB0b2tlbnMuCisgICAg
ICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuVG9rZW5N
aXNtYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS5sb2NrX3dy
aXRlLCB0b2tlbj10b2tlbikKKworICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmVlbnRlcl93aXRo
X3Rva2VuKHNlbGYpOgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUubG9ja193cml0ZSgp
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAgICAg
ICAgICAgIyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJsZSBy
ZWZ1c2VzCisgICAgICAgICAgICAgICAgIyB0b2tlbnMuCisgICAgICAgICAgICAgICAgcmV0dXJu
CisgICAgICAgICAgICAjIFJlbG9jayB3aXRoIGEgdG9rZW4uCisgICAgICAgICAgICBzZWxmLmxv
Y2thYmxlLmxvY2tfd3JpdGUodG9rZW49dG9rZW4pCisgICAgICAgICAgICBzZWxmLmxvY2thYmxl
LnVubG9jaygpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLnVu
bG9jaygpCisgICAgICAgICMgVGhlIGxvY2sgc2hvdWxkIGJlIHVubG9ja2VkIG9uIGRpc2suICBW
ZXJpZnkgdGhhdCB3aXRoIGEgbmV3IGxvY2sKKyAgICAgICAgIyBpbnN0YW5jZS4KKyAgICAgICAg
bmV3X2xvY2thYmxlID0gc2VsZi5nZXRfbG9ja2FibGUoKQorICAgICAgICAjIENhbGxpbmcgbG9j
a193cml0ZSBub3cgc2hvdWxkIHdvcmssIHJhdGhlciB0aGFuIHJhaXNlIExvY2tDb250ZW50aW9u
LgorICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0ZSgpCisgICAgICAgIG5ld19sb2NrYWJs
ZS51bmxvY2soKQorCisKKworCiAKICMgVGhpcyBtZXRob2Qgb2YgYWRhcHRpbmcgdGVzdHMgdG8g
cGFyYW1ldGVycyBpcyBkaWZmZXJlbnQgdG8gCiAjIHRoZSBUZXN0UHJvdmlkZXJBZGFwdGVycyB1
c2VkIGVsc2V3aGVyZSwgYnV0IHNlZW1zIHNpbXBsZXIgZm9yIHRoaXMgCkBAIC0xMzMsNyArMjUz
LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Rlc3RMb2NrYWJs
ZUZpbGVzX21peGluKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwZXIoVGVz
dExvY2thYmxlRmlsZXNfVHJhbnNwb3J0TG9jaywgc2VsZikuc2V0VXAoKQorICAgICAgICBUZXN0
Q2FzZUluVGVtcERpci5zZXRVcChzZWxmKQorICAgICAgICBfVGVzdExvY2thYmxlRmlsZXNfbWl4
aW4uc2V0VXAoc2VsZikKICAgICAgICAgdHJhbnNwb3J0ID0gZ2V0X3RyYW5zcG9ydCgnLicpCiAg
ICAgICAgIHRyYW5zcG9ydC5ta2RpcignLmJ6cicpCiAgICAgICAgIHNlbGYuc3ViX3RyYW5zcG9y
dCA9IHRyYW5zcG9ydC5jbG9uZSgnLmJ6cicpCkBAIC0xNTUsNyArMjc2LDggQEAKICAgICAiIiJM
b2NrYWJsZUZpbGUgdGVzdHMgcnVuIHdpdGggTG9ja0RpciB1bmRlcm5lYXRoIiIiCiAKICAgICBk
ZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cGVyKFRlc3RMb2NrYWJsZUZpbGVzX0xvY2tEaXIs
IHNlbGYpLnNldFVwKCkKKyAgICAgICAgVGVzdENhc2VJblRlbXBEaXIuc2V0VXAoc2VsZikKKyAg
ICAgICAgX1Rlc3RMb2NrYWJsZUZpbGVzX21peGluLnNldFVwKHNlbGYpCiAgICAgICAgIHNlbGYu
dHJhbnNwb3J0ID0gZ2V0X3RyYW5zcG9ydCgnLicpCiAgICAgICAgIHNlbGYubG9ja2FibGUgPSBz
ZWxmLmdldF9sb2NrYWJsZSgpCiAgICAgICAgICMgdGhlIGxvY2sgY3JlYXRpb24gaGVyZSBzZXRz
IG1vZGUgLSB0ZXN0X3Blcm1pc3Npb25zIG9uIGJyYW5jaCAKCg==

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200704110
... 64005-zylli6el5cz7kwnb
# revision id: andrew.bennetts at canonical.com-20070411064005-zylli6el5cz7kwnb
# sha1: b6e9e4aa5056e7d81399a9ff6585ad018e543dd5
# inventory sha1: 142ec1875dc5be4380d4784ba095f8f0ae202084
# parent ids:
#   andrew.bennetts at canonical.com-20070329051401-kqbu8ootnk9dlbgn
#   pqm at pqm.ubuntu.com-20070411022359-403a2155afb207cf
# properties:
#   branch-nick: bzr.dev.hpss.api.changes

# message:
#   Merge from bzr.dev
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Thu 2007-03-29 15:14:01.072999954 +1000

=== modified file NEWS // encoding:base64
LS0tIE5FV1MKKysrIE5FV1MKQEAgLTE0LDYgKzE0LDEwIEBACiAgICAgKiBEZXByZWNhdGUgQnJh
bmNoLmdldF9yb290X2lkKCkgYmVjYXVzZSBicmFuY2hlcyBkb24ndCBoYXZlIHJvb3QgaWRzLAog
ICAgICAgcmF0aGVyIHRoYW4gZml4aW5nIGJ1ZyAjOTY4NDcuICAoQWFyb24gQmVudGxleSkKIAor
ICAgICogYGBMb2NrYWJsZUZpbGVzLmxvY2tfd3JpdGUoKWBgIG5vdyBhY2NlcHRzIGEgYGB0b2tl
bmBgIGtleXdvcmQgYXJndW1lbnQsCisgICAgICBzbyB0aGF0IGEgc2VwZXJhdGUgTG9ja2FibGVG
aWxlcyBpbnN0YW5jZSBjYW4gc2hhcmUgYSBsb2NrIGlmIGl0IGhhcyB0aGUKKyAgICAgIHJpZ2h0
IHRva2VuLiAgKEFuZHJldyBCZW5uZXR0cywgUm9iZXJ0IENvbGxpbnMpCisKICAgVEVTVElORzoK
IAogICAgICogQWRkZWQgYGBienJsaWIuc3RyYWNlLnN0cmFjZWBgIHdoaWNoIHdpbGwgc3RyYWNl
IGEgc2luZ2xlIGNhbGxhYmxlIGFuZAoK

=== modified file bzrlib/errors.py // last-changed:andrew.bennetts at canonical.co
... m-20070328073853-yje2ikoflt6a4jos // encoding:base64
LS0tIGJ6cmxpYi9lcnJvcnMucHkKKysrIGJ6cmxpYi9lcnJvcnMucHkKQEAgLTc4OSw2ICs3ODks
MjcgQEAKICAgICAgICAgc2VsZi5sb2NrID0gbG9jawogCiAKK2NsYXNzIFRva2VuTG9ja2luZ05v
dFN1cHBvcnRlZChMb2NrRXJyb3IpOgorCisgICAgX2ZtdCA9ICJUaGUgb2JqZWN0ICUob2JqKXMg
ZG9lcyBub3Qgc3VwcG9ydCB0b2tlbiBzcGVjaWZ5aW5nIGEgdG9rZW4gd2hlbiBsb2NraW5nLiIK
KworICAgIGludGVybmFsX2Vycm9yID0gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9i
aik6CisgICAgICAgIHNlbGYub2JqID0gb2JqCisKKworY2xhc3MgVG9rZW5NaXNtYXRjaChMb2Nr
QnJva2VuKToKKworICAgIF9mbXQgPSAiVGhlIGxvY2sgdG9rZW4gJShnaXZlbl90b2tlbilyIGRv
ZXMgbm90IG1hdGNoIGxvY2sgdG9rZW4gJShsb2NrX3Rva2VuKXIuIgorCisgICAgaW50ZXJuYWxf
ZXJyb3IgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2l2ZW5fdG9rZW4sIGxvY2tf
dG9rZW4pOgorICAgICAgICBzZWxmLmdpdmVuX3Rva2VuID0gZ2l2ZW5fdG9rZW4KKyAgICAgICAg
c2VsZi5sb2NrX3Rva2VuID0gbG9ja190b2tlbgorCisKIGNsYXNzIFBvaW50bGVzc0NvbW1pdChC
enJFcnJvcik6CiAKICAgICBfZm10ID0gIk5vIGNoYW5nZXMgdG8gY29tbWl0IgoK

=== modified file bzrlib/lockable_files.py // last-changed:andrew.bennetts at cano
... nical.com-20070328073853-yje2ikoflt6a4jos // encoding:base64
LS0tIGJ6cmxpYi9sb2NrYWJsZV9maWxlcy5weQorKysgYnpybGliL2xvY2thYmxlX2ZpbGVzLnB5
CkBAIC0yMjIsMjEgKzIyMiwzOSBAQAogICAgICAgICAgICAgcmFpc2UgZXJyb3JzLkJ6ckJhZFBh
cmFtZXRlck5vdFN0cmluZyhhX3N0cmluZykKICAgICAgICAgc2VsZi5wdXRfYnl0ZXMocGF0aCwg
YV9zdHJpbmcuZW5jb2RlKCd1dGYtOCcpKQogCi0gICAgZGVmIGxvY2tfd3JpdGUoc2VsZik6Cisg
ICAgZGVmIGxvY2tfd3JpdGUoc2VsZiwgdG9rZW49Tm9uZSk6CisgICAgICAgICIiIkxvY2sgdGhp
cyBncm91cCBvZiBmaWxlcyBmb3Igd3JpdGluZy4KKyAgICAgICAgCisgICAgICAgIDpwYXJhbSB0
b2tlbjogaWYgdGhpcyBpcyBhbHJlYWR5IGxvY2tlZCwgdGhlbiBsb2NrX3dyaXRlIHdpbGwgZmFp
bAorICAgICAgICAgICAgdW5sZXNzIHRoZSB0b2tlbiBtYXRjaGVzIHRoZSBleGlzdGluZyBsb2Nr
LgorICAgICAgICA6cmV0dXJuczogYSB0b2tlbiBpZiB0aGlzIGluc3RhbmNlIHN1cHBvcnRzIHRv
a2Vucywgb3RoZXJ3aXNlIE5vbmUuCisgICAgICAgIDpyYWlzZXMgVG9rZW5Mb2NraW5nTm90U3Vw
cG9ydGVkOiB3aGVuIGEgdG9rZW4gaXMgZ2l2ZW4gYnV0IHRoaXMKKyAgICAgICAgICAgIGluc3Rh
bmNlIGRvZXNuJ3Qgc3VwcG9ydCB1c2luZyB0b2tlbiBsb2Nrcy4KKyAgICAgICAgOnJhaXNlcyBN
aXNtYXRjaGVkVG9rZW46IGlmIHRoZSBzcGVjaWZpZWQgdG9rZW4gZG9lc24ndCBtYXRjaCB0aGUg
dG9rZW4KKyAgICAgICAgICAgIG9mIHRoZSBleGlzdGluZyBsb2NrLgorCisgICAgICAgIEEgdG9r
ZW4gc2hvdWxkIGJlIHBhc3NlZCBpbiBpZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIGxvY2tlZCB0
aGUgb2JqZWN0CisgICAgICAgIHNvbWUgb3RoZXIgd2F5LCBhbmQgbmVlZCB0byBzeW5jaHJvbmlz
ZSB0aGlzIG9iamVjdCdzIHN0YXRlIHdpdGggdGhhdAorICAgICAgICBmYWN0LiAgRm9yIGluc3Rh
bmNlLCB0aGlzIGNvdWxkIGhhcHBlbiB3aGVuIGFjY2Vzc2luZyB0aGUgc2FtZSBicmFuY2gKKyAg
ICAgICAgb3ZlciBienIrc3NoOi8vIGFuZCB0aGVuIGZhbGxpbmcgYmFjayB0byBkbyBzb21lIG9w
ZXJhdGlvbnMgb24gdGhlIHNhbWUKKyAgICAgICAgYnJhbmNoIHZpYSBzZnRwOi8vLgorICAgICAg
ICAiIiIKICAgICAgICAgIyBtdXR0ZXIoImxvY2sgd3JpdGU6ICVzICglcykiLCBzZWxmLCBzZWxm
Ll9sb2NrX2NvdW50KQogICAgICAgICAjIFRPRE86IFVwZ3JhZGUgbG9ja2luZyB0byBzdXBwb3J0
IHVzaW5nIGEgVHJhbnNwb3J0LAogICAgICAgICAjIGFuZCBwb3RlbnRpYWxseSBhIHJlbW90ZSBs
b2NraW5nIHByb3RvY29sCiAgICAgICAgIGlmIHNlbGYuX2xvY2tfbW9kZToKICAgICAgICAgICAg
IGlmIHNlbGYuX2xvY2tfbW9kZSAhPSAndycgb3Igbm90IHNlbGYuZ2V0X3RyYW5zYWN0aW9uKCku
d3JpdGVhYmxlKCk6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3JzLlJlYWRPbmx5RXJyb3Io
c2VsZikKKyAgICAgICAgICAgIHNlbGYuX2xvY2sudmFsaWRhdGVfdG9rZW4odG9rZW4pCiAgICAg
ICAgICAgICBzZWxmLl9sb2NrX2NvdW50ICs9IDEKICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHNlbGYuX2xvY2subG9ja193cml0ZSgpCisgICAgICAgICAgICB0b2tlbl9mcm9tX2xvY2sgPSBz
ZWxmLl9sb2NrLmxvY2tfd3JpdGUodG9rZW49dG9rZW4pCiAgICAgICAgICAgICAjbm90ZSgnd3Jp
dGUgbG9ja2luZyAlcycsIHNlbGYpCiAgICAgICAgICAgICAjdHJhY2ViYWNrLnByaW50X3N0YWNr
KCkKICAgICAgICAgICAgIHNlbGYuX2xvY2tfbW9kZSA9ICd3JwogICAgICAgICAgICAgc2VsZi5f
bG9ja19jb3VudCA9IDEKICAgICAgICAgICAgIHNlbGYuX3NldF90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbnMuV3JpdGVUcmFuc2FjdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHRva2VuX2Zyb21f
bG9jawogCiAgICAgZGVmIGxvY2tfcmVhZChzZWxmKToKICAgICAgICAgIyBtdXR0ZXIoImxvY2sg
cmVhZDogJXMgKCVzKSIsIHNlbGYsIHNlbGYuX2xvY2tfY291bnQpCkBAIC0zMzMsNyArMzUxLDkg
QEAKICAgICBkZWYgYnJlYWtfbG9jayhzZWxmKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcihzZWxmLmJyZWFrX2xvY2spCiAKLSAgICBkZWYgbG9ja193cml0ZShzZWxmKToKKyAg
ICBkZWYgbG9ja193cml0ZShzZWxmLCB0b2tlbj1Ob25lKToKKyAgICAgICAgaWYgdG9rZW4gaXMg
bm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuVG9rZW5Mb2NraW5nTm90U3VwcG9y
dGVkKHNlbGYpCiAgICAgICAgIHNlbGYuX2xvY2sgPSBzZWxmLl90cmFuc3BvcnQubG9ja193cml0
ZShzZWxmLl9lc2NhcGVkX25hbWUpCiAKICAgICBkZWYgbG9ja19yZWFkKHNlbGYpOgpAQCAtMzUx
LDMgKzM3MSw4IEBACiAgICAgICAgICMgZm9yIG9sZC1zdHlsZSBsb2NrcywgY3JlYXRlIHRoZSBm
aWxlIG5vdwogICAgICAgICBzZWxmLl90cmFuc3BvcnQucHV0X2J5dGVzKHNlbGYuX2VzY2FwZWRf
bmFtZSwgJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT1zZWxmLl9maWxlX21v
ZGViaXRzKQorCisgICAgZGVmIHZhbGlkYXRlX3Rva2VuKHNlbGYsIHRva2VuKToKKyAgICAgICAg
aWYgdG9rZW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuVG9rZW5Mb2Nr
aW5nTm90U3VwcG9ydGVkKHNlbGYpCisgICAgICAgIAoK

=== modified file bzrlib/lockdir.py // last-changed:andrew.bennetts at canonical.c
... om-20070328073853-yje2ikoflt6a4jos // encoding:base64
LS0tIGJ6cmxpYi9sb2NrZGlyLnB5CisrKyBienJsaWIvbG9ja2Rpci5weQpAQCAtMTYwLDYgKzE2
MCw3IEBACiAgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CiAgICAgICAgIHNlbGYu
cGF0aCA9IHBhdGgKICAgICAgICAgc2VsZi5fbG9ja19oZWxkID0gRmFsc2UKKyAgICAgICAgc2Vs
Zi5fbG9ja2VkX3ZpYV90b2tlbiA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Zha2VfcmVhZF9sb2Nr
ID0gRmFsc2UKICAgICAgICAgc2VsZi5faGVsZF9kaXIgPSBwYXRoICsgJy9oZWxkJwogICAgICAg
ICBzZWxmLl9oZWxkX2luZm9fcGF0aCA9IHNlbGYuX2hlbGRfZGlyICsgc2VsZi5fX0lORk9fTkFN
RQpAQCAtMjM0LDE1ICsyMzUsMTkgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBu
b3Qgc2VsZi5fbG9ja19oZWxkOgogICAgICAgICAgICAgcmFpc2UgTG9ja05vdEhlbGQoc2VsZikK
LSAgICAgICAgIyByZW5hbWUgYmVmb3JlIGRlbGV0aW5nLCBiZWNhdXNlIHdlIGNhbid0IGF0b21p
Y2FsbHkgcmVtb3ZlIHRoZSB3aG9sZQotICAgICAgICAjIHRyZWUKLSAgICAgICAgdG1wbmFtZSA9
ICclcy9yZWxlYXNpbmcuJXMudG1wJyAlIChzZWxmLnBhdGgsIHJhbmRfY2hhcnMoMjApKQotICAg
ICAgICAjIGdvdHRhIG93biBpdCB0byB1bmxvY2sKLSAgICAgICAgc2VsZi5jb25maXJtKCkKLSAg
ICAgICAgc2VsZi50cmFuc3BvcnQucmVuYW1lKHNlbGYuX2hlbGRfZGlyLCB0bXBuYW1lKQotICAg
ICAgICBzZWxmLl9sb2NrX2hlbGQgPSBGYWxzZQotICAgICAgICBzZWxmLnRyYW5zcG9ydC5kZWxl
dGUodG1wbmFtZSArIHNlbGYuX19JTkZPX05BTUUpCi0gICAgICAgIHNlbGYudHJhbnNwb3J0LnJt
ZGlyKHRtcG5hbWUpCisgICAgICAgIGlmIHNlbGYuX2xvY2tlZF92aWFfdG9rZW46CisgICAgICAg
ICAgICBzZWxmLl9sb2NrZWRfdmlhX3Rva2VuID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX2xv
Y2tfaGVsZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHJlbmFtZSBiZWZv
cmUgZGVsZXRpbmcsIGJlY2F1c2Ugd2UgY2FuJ3QgYXRvbWljYWxseSByZW1vdmUgdGhlCisgICAg
ICAgICAgICAjIHdob2xlIHRyZWUKKyAgICAgICAgICAgIHRtcG5hbWUgPSAnJXMvcmVsZWFzaW5n
LiVzLnRtcCcgJSAoc2VsZi5wYXRoLCByYW5kX2NoYXJzKDIwKSkKKyAgICAgICAgICAgICMgZ290
dGEgb3duIGl0IHRvIHVubG9jaworICAgICAgICAgICAgc2VsZi5jb25maXJtKCkKKyAgICAgICAg
ICAgIHNlbGYudHJhbnNwb3J0LnJlbmFtZShzZWxmLl9oZWxkX2RpciwgdG1wbmFtZSkKKyAgICAg
ICAgICAgIHNlbGYuX2xvY2tfaGVsZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnRyYW5zcG9y
dC5kZWxldGUodG1wbmFtZSArIHNlbGYuX19JTkZPX05BTUUpCisgICAgICAgICAgICBzZWxmLnRy
YW5zcG9ydC5ybWRpcih0bXBuYW1lKQogCiAgICAgZGVmIGJyZWFrX2xvY2soc2VsZik6CiAgICAg
ICAgICIiIkJyZWFrIGEgbG9jayBub3QgaGVsZCBieSB0aGlzIGluc3RhbmNlIG9mIExvY2tEaXIu
CkBAIC00MTUsOSArNDIwLDMyIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAg
IHJhaXNlIExvY2tDb250ZW50aW9uKHNlbGYpCiAKLSAgICBkZWYgbG9ja193cml0ZShzZWxmKToK
LSAgICAgICAgIiIiV2FpdCBmb3IgYW5kIGFjcXVpcmUgdGhlIGxvY2suIiIiCi0gICAgICAgIHNl
bGYud2FpdF9sb2NrKCkKKyAgICBkZWYgbG9ja193cml0ZShzZWxmLCB0b2tlbj1Ob25lKToKKyAg
ICAgICAgIiIiV2FpdCBmb3IgYW5kIGFjcXVpcmUgdGhlIGxvY2suCisgICAgICAgIAorICAgICAg
ICA6cGFyYW0gdG9rZW46IGlmIHRoaXMgaXMgYWxyZWFkeSBsb2NrZWQsIHRoZW4gbG9ja193cml0
ZSB3aWxsIGZhaWwKKyAgICAgICAgICAgIHVubGVzcyB0aGUgdG9rZW4gbWF0Y2hlcyB0aGUgZXhp
c3RpbmcgbG9jay4KKyAgICAgICAgOnJldHVybnM6IGEgdG9rZW4gaWYgdGhpcyBpbnN0YW5jZSBz
dXBwb3J0cyB0b2tlbnMsIG90aGVyd2lzZSBOb25lLgorICAgICAgICA6cmFpc2VzIFRva2VuTG9j
a2luZ05vdFN1cHBvcnRlZDogd2hlbiBhIHRva2VuIGlzIGdpdmVuIGJ1dCB0aGlzCisgICAgICAg
ICAgICBpbnN0YW5jZSBkb2Vzbid0IHN1cHBvcnQgdXNpbmcgdG9rZW4gbG9ja3MuCisgICAgICAg
IDpyYWlzZXMgVG9rZW5NaXNtYXRjaDogaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBkb2Vzbid0IG1h
dGNoIHRoZSB0b2tlbgorICAgICAgICAgICAgb2YgdGhlIGV4aXN0aW5nIGxvY2suCisKKyAgICAg
ICAgQSB0b2tlbiBzaG91bGQgYmUgcGFzc2VkIGluIGlmIHlvdSBrbm93IHRoYXQgeW91IGhhdmUg
bG9ja2VkIHRoZSBvYmplY3QKKyAgICAgICAgc29tZSBvdGhlciB3YXksIGFuZCBuZWVkIHRvIHN5
bmNocm9uaXNlIHRoaXMgb2JqZWN0J3Mgc3RhdGUgd2l0aCB0aGF0CisgICAgICAgIGZhY3QuICBG
b3IgaW5zdGFuY2UsIHRoaXMgY291bGQgaGFwcGVuIHdoZW4gYWNjZXNzaW5nIHRoZSBzYW1lIGJy
YW5jaAorICAgICAgICBvdmVyIGJ6citzc2g6Ly8gYW5kIHRoZW4gZmFsbGluZyBiYWNrIHRvIGRv
IHNvbWUgb3BlcmF0aW9ucyBvbiB0aGUgc2FtZQorICAgICAgICBicmFuY2ggdmlhIHNmdHA6Ly8u
CisgICAgICAgICAKKyAgICAgICAgWFhYOiBkb2NzdHJpbmcgZHVwbGljYXRlZCBmcm9tIExvY2th
YmxlRmlsZXMubG9ja193cml0ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHRva2VuIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgc2VsZi52YWxpZGF0ZV90b2tlbih0b2tlbikKKyAgICAgICAg
ICAgIHNlbGYuX2xvY2tfaGVsZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2xvY2tlZF92aWFf
dG9rZW4gPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLndhaXRfbG9jaygp
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wZWVrKCkuZ2V0KCdub25jZScpCiAKICAgICBkZWYg
bG9ja19yZWFkKHNlbGYpOgogICAgICAgICAiIiJDb21wYXRpYmlsaXR5LW1vZGUgc2hhcmVkIGxv
Y2suCkBAIC00NTcsMyArNDg1LDE0IEBACiAgICAgICAgICAgICAnbG9ja2VkICVzJyAlIChmb3Jt
YXRfZGVsdGEoZGVsdGEpLCksCiAgICAgICAgICAgICBdCiAKKyAgICBkZWYgdmFsaWRhdGVfdG9r
ZW4oc2VsZiwgdG9rZW4pOgorICAgICAgICBpZiB0b2tlbiBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIGluZm8gPSBzZWxmLnBlZWsoKQorICAgICAgICAgICAgaWYgaW5mbyBpcyBOb25lOgorICAg
ICAgICAgICAgICAgICMgTG9jayBpc24ndCBoZWxkCisgICAgICAgICAgICAgICAgbG9ja190b2tl
biA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9ja190b2tlbiA9
IGluZm8uZ2V0KCdub25jZScpCisgICAgICAgICAgICBpZiB0b2tlbiAhPSBsb2NrX3Rva2VuOgor
ICAgICAgICAgICAgICAgIHJhaXNlIGVycm9ycy5Ub2tlbk1pc21hdGNoKHRva2VuLCBsb2NrX3Rv
a2VuKQorCgo=

=== modified file bzrlib/tests/test_lockable_files.py // last-changed:andrew.be
... nnetts at canonical.com-20070328070842-r843houy668oxb9o // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2xvY2thYmxlX2ZpbGVzLnB5CisrKyBienJsaWIvdGVzdHMv
dGVzdF9sb2NrYWJsZV9maWxlcy5weQpAQCAtMjEsNiArMjEsNyBAQAogaW1wb3J0IGJ6cmxpYi5l
cnJvcnMgYXMgZXJyb3JzCiBmcm9tIGJ6cmxpYi5lcnJvcnMgaW1wb3J0IEJ6ckJhZFBhcmFtZXRl
ck5vdFN0cmluZywgTm9TdWNoRmlsZSwgUmVhZE9ubHlFcnJvcgogZnJvbSBienJsaWIubG9ja2Fi
bGVfZmlsZXMgaW1wb3J0IExvY2thYmxlRmlsZXMsIFRyYW5zcG9ydExvY2sKK2Zyb20gYnpybGli
IGltcG9ydCBsb2NrZGlyCiBmcm9tIGJ6cmxpYi5sb2NrZGlyIGltcG9ydCBMb2NrRGlyCiBmcm9t
IGJ6cmxpYi50ZXN0cyBpbXBvcnQgVGVzdENhc2VJblRlbXBEaXIKIGZyb20gYnpybGliLnRlc3Rz
LnRlc3RfdHJhbnNhY3Rpb25zIGltcG9ydCBEdW1teVdlYXZlCkBAIC0zNCw2ICszNSwxNSBAQAog
IyB0aGVzZSB0ZXN0cyBhcmUgYXBwbGllZCBpbiBlYWNoIHBhcmFtZXRlcml6ZWQgc3VpdGUgZm9y
IExvY2thYmxlRmlsZXMKIGNsYXNzIF9UZXN0TG9ja2FibGVGaWxlc19taXhpbihvYmplY3QpOgog
CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIFJlZHVjZSB0aGUgZGVmYXVsdCB0aW1l
b3V0LCBzbyB0aGF0IGlmIHRlc3RzIGZhaWwsIHRoZXkgd2lsbCBkbyBzbworICAgICAgICAjIHJl
YXNvbmFibHkgcXVpY2tseS4KKyAgICAgICAgb3JpZ190aW1lb3V0ID0gbG9ja2Rpci5fREVGQVVM
VF9USU1FT1VUX1NFQ09ORFMKKyAgICAgICAgZGVmIHJlc2V0VGltZW91dCgpOgorICAgICAgICAg
ICAgbG9ja2Rpci5fREVGQVVMVF9USU1FT1VUX1NFQ09ORFMgPSBvcmlnX3RpbWVvdXQKKyAgICAg
ICAgc2VsZi5hZGRDbGVhbnVwKHJlc2V0VGltZW91dCkKKyAgICAgICAgbG9ja2Rpci5fREVGQVVM
VF9USU1FT1VUX1NFQ09ORFMgPSAzCisKICAgICBkZWYgdGVzdF9yZWFkX3dyaXRlKHNlbGYpOgog
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb1N1Y2hGaWxlLCBzZWxmLmxvY2thYmxlLmdldCwg
J2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vU3VjaEZpbGUsIHNlbGYubG9ja2Fi
bGUuZ2V0X3V0ZjgsICdmb28nKQpAQCAtMTI1LDYgKzEzNSwxMTYgQEAKICAgICAgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5Mb2NrQnJva2VuLCBzZWxmLmxvY2thYmxlLnVubG9jaykK
ICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2NrYWJsZS5pc19sb2NrZWQoKSkK
IAorICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmV0dXJuc19Ob25lX3JlZnVzZXNfdG9rZW4oc2Vs
Zik6CisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJsZS5sb2NrX3dyaXRlKCkKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
IyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJsZSBzdXBwb3J0
cworICAgICAgICAgICAgICAgICMgdG9rZW5zLgorICAgICAgICAgICAgICAgIHJldHVybgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTG9ja2luZ05vdFN1cHBvcnRl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9ja2FibGUubG9ja193cml0
ZSwgdG9rZW49J3Rva2VuJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9j
a2FibGUudW5sb2NrKCkKKworICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmFpc2VzX29uX3Rva2Vu
X21pc21hdGNoKHNlbGYpOgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUubG9ja193cml0
ZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAg
ICAgICAgICAgIyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJs
ZSByZWZ1c2VzCisgICAgICAgICAgICAgICAgIyB0b2tlbnMuCisgICAgICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgICAgICBkaWZmZXJlbnRfdG9rZW4gPSB0b2tlbiArICd4eHgnCisgICAgICAg
ICAgICAjIFJlLXVzaW5nIHRoZSBzYW1lIGxvY2thYmxlIGluc3RhbmNlIHdpdGggYSBkaWZmZXJl
bnQgdG9rZW4gd2lsbAorICAgICAgICAgICAgIyByYWlzZSBUb2tlbk1pc21hdGNoLgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTWlzbWF0Y2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2thYmxlLmxvY2tfd3JpdGUsIHRva2VuPWRpZmZl
cmVudF90b2tlbikKKyAgICAgICAgICAgICMgQSBzZXBlcmF0ZSBpbnN0YW5jZSBmb3IgdGhlIHNh
bWUgbG9ja2FibGUgd2lsbCBhbHNvIHJhaXNlCisgICAgICAgICAgICAjIFRva2VuTWlzbWF0Y2gu
CisgICAgICAgICAgICAjIFRoaXMgZGV0ZWN0cyB0aGUgY2FzZSB3aGVyZSBhIGNhbGxlciBjbGFp
bXMgdG8gaGF2ZSBhIGxvY2sgKHZpYQorICAgICAgICAgICAgIyB0aGUgdG9rZW4pIGZvciBhbiBl
eHRlcm5hbCByZXNvdXJjZSwgYnV0IGRvZXNuJ3QgKHRoZSB0b2tlbiBpcworICAgICAgICAgICAg
IyBkaWZmZXJlbnQpLiAgQ2xpZW50cyBuZWVkIGEgc2VwZXJhdGUgbG9jayBvYmplY3QgdG8gbWFr
ZSBzdXJlIHRoZQorICAgICAgICAgICAgIyBleHRlcm5hbCByZXNvdXJjZSBpcyBwcm9iZWQsIHdo
ZXJlYXMgdGhlIGV4aXN0aW5nIGxvY2sgb2JqZWN0CisgICAgICAgICAgICAjIG1pZ2h0IGNhY2hl
LgorICAgICAgICAgICAgbmV3X2xvY2thYmxlID0gc2VsZi5nZXRfbG9ja2FibGUoKQorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTWlzbWF0Y2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0ZSwgdG9rZW49ZGlmZmVy
ZW50X3Rva2VuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS51
bmxvY2soKQorCisgICAgZGVmIHRlc3RfbG9ja193cml0ZV93aXRoX21hdGNoaW5nX3Rva2VuKHNl
bGYpOgorICAgICAgICAjIElmIHRoZSB0b2tlbiBtYXRjaGVzLCBzbyBubyBleGNlcHRpb24gaXMg
cmFpc2VkIGJ5IGxvY2tfd3JpdGUuCisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJsZS5sb2Nr
X3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgTm9uZToKKyAg
ICAgICAgICAgICAgICAjIFRoaXMgdGVzdCBkb2VzIG5vdCBhcHBseSwgYmVjYXVzZSB0aGlzIGxv
Y2thYmxlIHJlZnVzZXMKKyAgICAgICAgICAgICAgICAjIHRva2Vucy4KKyAgICAgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgICAgICMgVGhlIHNhbWUgaW5zdGFuY2Ugd2lsbCBhY2NlcHQgYSBz
ZWNvbmQgbG9ja193cml0ZSBpZiB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAjIHRva2VuIG1h
dGNoZXMuCisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLmxvY2tfd3JpdGUodG9rZW49dG9rZW4p
CisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLnVubG9jaygpCisgICAgICAgICAgICAjIENhbGxp
bmcgbG9ja193cml0ZSBvbiBhIG5ldyBpbnN0YW5jZSBmb3IgdGhlIHNhbWUgbG9ja2FibGUgd2ls
bAorICAgICAgICAgICAgIyBhbHNvIHN1Y2NlZWQuCisgICAgICAgICAgICBuZXdfbG9ja2FibGUg
PSBzZWxmLmdldF9sb2NrYWJsZSgpCisgICAgICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0
ZSh0b2tlbj10b2tlbikKKyAgICAgICAgICAgIG5ld19sb2NrYWJsZS51bmxvY2soKQorICAgICAg
ICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS51bmxvY2soKQorCisgICAgZGVm
IHRlc3RfdW5sb2NrX2FmdGVyX2xvY2tfd3JpdGVfd2l0aF90b2tlbihzZWxmKToKKyAgICAgICAg
IyBJZiBsb2NrX3dyaXRlIGRpZCBub3QgcGh5c2ljYWxseSBhY3F1aXJlIHRoZSBsb2NrIChiZWNh
dXNlIGl0IHdhcworICAgICAgICAjIHBhc3NlZCBhIHRva2VuKSwgdGhlbiB1bmxvY2sgc2hvdWxk
IG5vdCBwaHlzaWNhbGx5IHJlbGVhc2UgaXQuCisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJs
ZS5sb2NrX3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgTm9u
ZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgdGVzdCBkb2VzIG5vdCBhcHBseSwgYmVjYXVzZSB0
aGlzIGxvY2thYmxlIHJlZnVzZXMKKyAgICAgICAgICAgICAgICAjIHRva2Vucy4KKyAgICAgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIG5ld19sb2NrYWJsZSA9IHNlbGYuZ2V0X2xvY2th
YmxlKCkKKyAgICAgICAgICAgIG5ld19sb2NrYWJsZS5sb2NrX3dyaXRlKHRva2VuPXRva2VuKQor
ICAgICAgICAgICAgbmV3X2xvY2thYmxlLnVubG9jaygpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoc2VsZi5sb2NrYWJsZS5nZXRfcGh5c2ljYWxfbG9ja19zdGF0dXMoKSkKKyAgICAgICAg
ZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9ja2FibGUudW5sb2NrKCkKKworICAgIGRlZiB0
ZXN0X2xvY2tfd3JpdGVfd2l0aF90b2tlbl9mYWlsc193aGVuX3VubG9ja2VkKHNlbGYpOgorICAg
ICAgICAjIExvY2sgYW5kIHVubG9jayB0byBnZXQgYSBzdXBlcmZpY2lhbGx5IHZhbGlkIHRva2Vu
LiAgVGhpcyBtaW1pY3MgYQorICAgICAgICAjIGxpa2VseSBwcm9ncmFtbWluZyBlcnJvciwgd2hl
cmUgYSBjYWxsZXIgYWNjaWRlbnRhbGx5IHRyaWVzIHRvIGxvY2sKKyAgICAgICAgIyB3aXRoIGEg
dG9rZW4gdGhhdCBpcyBubyBsb25nZXIgdmFsaWQgKGJlY2F1c2UgdGhlIG9yaWdpbmFsIGxvY2sg
d2FzCisgICAgICAgICMgcmVsZWFzZWQpLgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUu
bG9ja193cml0ZSgpCisgICAgICAgIHNlbGYubG9ja2FibGUudW5sb2NrKCkKKyAgICAgICAgaWYg
dG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgICMgVGhpcyB0ZXN0IGRvZXMgbm90IGFwcGx5LCBi
ZWNhdXNlIHRoaXMgbG9ja2FibGUgcmVmdXNlcworICAgICAgICAgICAgIyB0b2tlbnMuCisgICAg
ICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuVG9rZW5N
aXNtYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS5sb2NrX3dy
aXRlLCB0b2tlbj10b2tlbikKKworICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmVlbnRlcl93aXRo
X3Rva2VuKHNlbGYpOgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUubG9ja193cml0ZSgp
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAgICAg
ICAgICAgIyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJsZSBy
ZWZ1c2VzCisgICAgICAgICAgICAgICAgIyB0b2tlbnMuCisgICAgICAgICAgICAgICAgcmV0dXJu
CisgICAgICAgICAgICAjIFJlbG9jayB3aXRoIGEgdG9rZW4uCisgICAgICAgICAgICBzZWxmLmxv
Y2thYmxlLmxvY2tfd3JpdGUodG9rZW49dG9rZW4pCisgICAgICAgICAgICBzZWxmLmxvY2thYmxl
LnVubG9jaygpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLnVu
bG9jaygpCisgICAgICAgICMgVGhlIGxvY2sgc2hvdWxkIGJlIHVubG9ja2VkIG9uIGRpc2suICBW
ZXJpZnkgdGhhdCB3aXRoIGEgbmV3IGxvY2sKKyAgICAgICAgIyBpbnN0YW5jZS4KKyAgICAgICAg
bmV3X2xvY2thYmxlID0gc2VsZi5nZXRfbG9ja2FibGUoKQorICAgICAgICAjIENhbGxpbmcgbG9j
a193cml0ZSBub3cgc2hvdWxkIHdvcmssIHJhdGhlciB0aGFuIHJhaXNlIExvY2tDb250ZW50aW9u
LgorICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0ZSgpCisgICAgICAgIG5ld19sb2NrYWJs
ZS51bmxvY2soKQorCisKKworCiAKICMgVGhpcyBtZXRob2Qgb2YgYWRhcHRpbmcgdGVzdHMgdG8g
cGFyYW1ldGVycyBpcyBkaWZmZXJlbnQgdG8gCiAjIHRoZSBUZXN0UHJvdmlkZXJBZGFwdGVycyB1
c2VkIGVsc2V3aGVyZSwgYnV0IHNlZW1zIHNpbXBsZXIgZm9yIHRoaXMgCkBAIC0xMzMsNyArMjUz
LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Rlc3RMb2NrYWJs
ZUZpbGVzX21peGluKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwZXIoVGVz
dExvY2thYmxlRmlsZXNfVHJhbnNwb3J0TG9jaywgc2VsZikuc2V0VXAoKQorICAgICAgICBUZXN0
Q2FzZUluVGVtcERpci5zZXRVcChzZWxmKQorICAgICAgICBfVGVzdExvY2thYmxlRmlsZXNfbWl4
aW4uc2V0VXAoc2VsZikKICAgICAgICAgdHJhbnNwb3J0ID0gZ2V0X3RyYW5zcG9ydCgnLicpCiAg
ICAgICAgIHRyYW5zcG9ydC5ta2RpcignLmJ6cicpCiAgICAgICAgIHNlbGYuc3ViX3RyYW5zcG9y
dCA9IHRyYW5zcG9ydC5jbG9uZSgnLmJ6cicpCkBAIC0xNTUsNyArMjc2LDggQEAKICAgICAiIiJM
b2NrYWJsZUZpbGUgdGVzdHMgcnVuIHdpdGggTG9ja0RpciB1bmRlcm5lYXRoIiIiCiAKICAgICBk
ZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cGVyKFRlc3RMb2NrYWJsZUZpbGVzX0xvY2tEaXIs
IHNlbGYpLnNldFVwKCkKKyAgICAgICAgVGVzdENhc2VJblRlbXBEaXIuc2V0VXAoc2VsZikKKyAg
ICAgICAgX1Rlc3RMb2NrYWJsZUZpbGVzX21peGluLnNldFVwKHNlbGYpCiAgICAgICAgIHNlbGYu
dHJhbnNwb3J0ID0gZ2V0X3RyYW5zcG9ydCgnLicpCiAgICAgICAgIHNlbGYubG9ja2FibGUgPSBz
ZWxmLmdldF9sb2NrYWJsZSgpCiAgICAgICAgICMgdGhlIGxvY2sgY3JlYXRpb24gaGVyZSBzZXRz
IG1vZGUgLSB0ZXN0X3Blcm1pc3Npb25zIG9uIGJyYW5jaCAKCg==

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200703290
... 51401-kqbu8ootnk9dlbgn
# revision id: andrew.bennetts at canonical.com-20070329051401-kqbu8ootnk9dlbgn
# sha1: 180617525dca5552931e8cbac617a532b159f000
# inventory sha1: 2d7cc7a6dbe298bfc64cb9facb23fbeb924be39b
# parent ids:
#   andrew.bennetts at canonical.com-20070328075403-ibqxtr196emuc4ut
#   pqm at pqm.ubuntu.com-20070329043540-952aff23533c1c26
# properties:
#   branch-nick: bzr.dev.hpss.api.changes

# message:
#   Merge from bzr.dev.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Wed 2007-03-28 17:54:03.255000114 +1000

=== modified file NEWS // encoding:base64
LS0tIE5FV1MKKysrIE5FV1MKQEAgLTExLDYgKzExLDEwIEBACiAgICAgICByZXF1aXJlcyBhbiBl
eHBsaWNpdCBhY3Rpb24gdXNpbmcgYSBDaHJvb3RTZXJ2ZXIuCiAgICAgICAoUm9iZXJ0IENvbGxp
bnMsIEFuZHJldyBCZW5uZXR0cykKIAorICAgICogYGBMb2NrYWJsZUZpbGVzLmxvY2tfd3JpdGUo
KWBgIG5vdyBhY2NlcHRzIGEgYGB0b2tlbmBgIGtleXdvcmQgYXJndW1lbnQsCisgICAgICBzbyB0
aGF0IGEgc2VwZXJhdGUgTG9ja2FibGVGaWxlcyBpbnN0YW5jZSBjYW4gc2hhcmUgYSBsb2NrIGlm
IGl0IGhhcyB0aGUKKyAgICAgIHJpZ2h0IHRva2VuLiAgKEFuZHJldyBCZW5uZXR0cywgUm9iZXJ0
IENvbGxpbnMpCisKICAgVEVTVElORzoKIAogICAgICogQWRkZWQgYGBienJsaWIuc3RyYWNlLnN0
cmFjZWBgIHdoaWNoIHdpbGwgc3RyYWNlIGEgc2luZ2xlIGNhbGxhYmxlIGFuZAoK

=== modified file bzrlib/errors.py // last-changed:andrew.bennetts at canonical.co
... m-20070328073853-yje2ikoflt6a4jos // encoding:base64
LS0tIGJ6cmxpYi9lcnJvcnMucHkKKysrIGJ6cmxpYi9lcnJvcnMucHkKQEAgLTc4OSw2ICs3ODks
MjcgQEAKICAgICAgICAgc2VsZi5sb2NrID0gbG9jawogCiAKK2NsYXNzIFRva2VuTG9ja2luZ05v
dFN1cHBvcnRlZChMb2NrRXJyb3IpOgorCisgICAgX2ZtdCA9ICJUaGUgb2JqZWN0ICUob2JqKXMg
ZG9lcyBub3Qgc3VwcG9ydCB0b2tlbiBzcGVjaWZ5aW5nIGEgdG9rZW4gd2hlbiBsb2NraW5nLiIK
KworICAgIGludGVybmFsX2Vycm9yID0gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9i
aik6CisgICAgICAgIHNlbGYub2JqID0gb2JqCisKKworY2xhc3MgVG9rZW5NaXNtYXRjaChMb2Nr
QnJva2VuKToKKworICAgIF9mbXQgPSAiVGhlIGxvY2sgdG9rZW4gJShnaXZlbl90b2tlbilyIGRv
ZXMgbm90IG1hdGNoIGxvY2sgdG9rZW4gJShsb2NrX3Rva2VuKXIuIgorCisgICAgaW50ZXJuYWxf
ZXJyb3IgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2l2ZW5fdG9rZW4sIGxvY2tf
dG9rZW4pOgorICAgICAgICBzZWxmLmdpdmVuX3Rva2VuID0gZ2l2ZW5fdG9rZW4KKyAgICAgICAg
c2VsZi5sb2NrX3Rva2VuID0gbG9ja190b2tlbgorCisKIGNsYXNzIFBvaW50bGVzc0NvbW1pdChC
enJFcnJvcik6CiAKICAgICBfZm10ID0gIk5vIGNoYW5nZXMgdG8gY29tbWl0IgoK

=== modified file bzrlib/lockable_files.py // last-changed:andrew.bennetts at cano
... nical.com-20070328073853-yje2ikoflt6a4jos // encoding:base64
LS0tIGJ6cmxpYi9sb2NrYWJsZV9maWxlcy5weQorKysgYnpybGliL2xvY2thYmxlX2ZpbGVzLnB5
CkBAIC0yMjIsMjEgKzIyMiwzOSBAQAogICAgICAgICAgICAgcmFpc2UgZXJyb3JzLkJ6ckJhZFBh
cmFtZXRlck5vdFN0cmluZyhhX3N0cmluZykKICAgICAgICAgc2VsZi5wdXRfYnl0ZXMocGF0aCwg
YV9zdHJpbmcuZW5jb2RlKCd1dGYtOCcpKQogCi0gICAgZGVmIGxvY2tfd3JpdGUoc2VsZik6Cisg
ICAgZGVmIGxvY2tfd3JpdGUoc2VsZiwgdG9rZW49Tm9uZSk6CisgICAgICAgICIiIkxvY2sgdGhp
cyBncm91cCBvZiBmaWxlcyBmb3Igd3JpdGluZy4KKyAgICAgICAgCisgICAgICAgIDpwYXJhbSB0
b2tlbjogaWYgdGhpcyBpcyBhbHJlYWR5IGxvY2tlZCwgdGhlbiBsb2NrX3dyaXRlIHdpbGwgZmFp
bAorICAgICAgICAgICAgdW5sZXNzIHRoZSB0b2tlbiBtYXRjaGVzIHRoZSBleGlzdGluZyBsb2Nr
LgorICAgICAgICA6cmV0dXJuczogYSB0b2tlbiBpZiB0aGlzIGluc3RhbmNlIHN1cHBvcnRzIHRv
a2Vucywgb3RoZXJ3aXNlIE5vbmUuCisgICAgICAgIDpyYWlzZXMgVG9rZW5Mb2NraW5nTm90U3Vw
cG9ydGVkOiB3aGVuIGEgdG9rZW4gaXMgZ2l2ZW4gYnV0IHRoaXMKKyAgICAgICAgICAgIGluc3Rh
bmNlIGRvZXNuJ3Qgc3VwcG9ydCB1c2luZyB0b2tlbiBsb2Nrcy4KKyAgICAgICAgOnJhaXNlcyBN
aXNtYXRjaGVkVG9rZW46IGlmIHRoZSBzcGVjaWZpZWQgdG9rZW4gZG9lc24ndCBtYXRjaCB0aGUg
dG9rZW4KKyAgICAgICAgICAgIG9mIHRoZSBleGlzdGluZyBsb2NrLgorCisgICAgICAgIEEgdG9r
ZW4gc2hvdWxkIGJlIHBhc3NlZCBpbiBpZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIGxvY2tlZCB0
aGUgb2JqZWN0CisgICAgICAgIHNvbWUgb3RoZXIgd2F5LCBhbmQgbmVlZCB0byBzeW5jaHJvbmlz
ZSB0aGlzIG9iamVjdCdzIHN0YXRlIHdpdGggdGhhdAorICAgICAgICBmYWN0LiAgRm9yIGluc3Rh
bmNlLCB0aGlzIGNvdWxkIGhhcHBlbiB3aGVuIGFjY2Vzc2luZyB0aGUgc2FtZSBicmFuY2gKKyAg
ICAgICAgb3ZlciBienIrc3NoOi8vIGFuZCB0aGVuIGZhbGxpbmcgYmFjayB0byBkbyBzb21lIG9w
ZXJhdGlvbnMgb24gdGhlIHNhbWUKKyAgICAgICAgYnJhbmNoIHZpYSBzZnRwOi8vLgorICAgICAg
ICAiIiIKICAgICAgICAgIyBtdXR0ZXIoImxvY2sgd3JpdGU6ICVzICglcykiLCBzZWxmLCBzZWxm
Ll9sb2NrX2NvdW50KQogICAgICAgICAjIFRPRE86IFVwZ3JhZGUgbG9ja2luZyB0byBzdXBwb3J0
IHVzaW5nIGEgVHJhbnNwb3J0LAogICAgICAgICAjIGFuZCBwb3RlbnRpYWxseSBhIHJlbW90ZSBs
b2NraW5nIHByb3RvY29sCiAgICAgICAgIGlmIHNlbGYuX2xvY2tfbW9kZToKICAgICAgICAgICAg
IGlmIHNlbGYuX2xvY2tfbW9kZSAhPSAndycgb3Igbm90IHNlbGYuZ2V0X3RyYW5zYWN0aW9uKCku
d3JpdGVhYmxlKCk6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3JzLlJlYWRPbmx5RXJyb3Io
c2VsZikKKyAgICAgICAgICAgIHNlbGYuX2xvY2sudmFsaWRhdGVfdG9rZW4odG9rZW4pCiAgICAg
ICAgICAgICBzZWxmLl9sb2NrX2NvdW50ICs9IDEKICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHNlbGYuX2xvY2subG9ja193cml0ZSgpCisgICAgICAgICAgICB0b2tlbl9mcm9tX2xvY2sgPSBz
ZWxmLl9sb2NrLmxvY2tfd3JpdGUodG9rZW49dG9rZW4pCiAgICAgICAgICAgICAjbm90ZSgnd3Jp
dGUgbG9ja2luZyAlcycsIHNlbGYpCiAgICAgICAgICAgICAjdHJhY2ViYWNrLnByaW50X3N0YWNr
KCkKICAgICAgICAgICAgIHNlbGYuX2xvY2tfbW9kZSA9ICd3JwogICAgICAgICAgICAgc2VsZi5f
bG9ja19jb3VudCA9IDEKICAgICAgICAgICAgIHNlbGYuX3NldF90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbnMuV3JpdGVUcmFuc2FjdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHRva2VuX2Zyb21f
bG9jawogCiAgICAgZGVmIGxvY2tfcmVhZChzZWxmKToKICAgICAgICAgIyBtdXR0ZXIoImxvY2sg
cmVhZDogJXMgKCVzKSIsIHNlbGYsIHNlbGYuX2xvY2tfY291bnQpCkBAIC0zMzMsNyArMzUxLDkg
QEAKICAgICBkZWYgYnJlYWtfbG9jayhzZWxmKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcihzZWxmLmJyZWFrX2xvY2spCiAKLSAgICBkZWYgbG9ja193cml0ZShzZWxmKToKKyAg
ICBkZWYgbG9ja193cml0ZShzZWxmLCB0b2tlbj1Ob25lKToKKyAgICAgICAgaWYgdG9rZW4gaXMg
bm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuVG9rZW5Mb2NraW5nTm90U3VwcG9y
dGVkKHNlbGYpCiAgICAgICAgIHNlbGYuX2xvY2sgPSBzZWxmLl90cmFuc3BvcnQubG9ja193cml0
ZShzZWxmLl9lc2NhcGVkX25hbWUpCiAKICAgICBkZWYgbG9ja19yZWFkKHNlbGYpOgpAQCAtMzUx
LDMgKzM3MSw4IEBACiAgICAgICAgICMgZm9yIG9sZC1zdHlsZSBsb2NrcywgY3JlYXRlIHRoZSBm
aWxlIG5vdwogICAgICAgICBzZWxmLl90cmFuc3BvcnQucHV0X2J5dGVzKHNlbGYuX2VzY2FwZWRf
bmFtZSwgJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT1zZWxmLl9maWxlX21v
ZGViaXRzKQorCisgICAgZGVmIHZhbGlkYXRlX3Rva2VuKHNlbGYsIHRva2VuKToKKyAgICAgICAg
aWYgdG9rZW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuVG9rZW5Mb2Nr
aW5nTm90U3VwcG9ydGVkKHNlbGYpCisgICAgICAgIAoK

=== modified file bzrlib/lockdir.py // last-changed:andrew.bennetts at canonical.c
... om-20070328073853-yje2ikoflt6a4jos // encoding:base64
LS0tIGJ6cmxpYi9sb2NrZGlyLnB5CisrKyBienJsaWIvbG9ja2Rpci5weQpAQCAtMTYwLDYgKzE2
MCw3IEBACiAgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CiAgICAgICAgIHNlbGYu
cGF0aCA9IHBhdGgKICAgICAgICAgc2VsZi5fbG9ja19oZWxkID0gRmFsc2UKKyAgICAgICAgc2Vs
Zi5fbG9ja2VkX3ZpYV90b2tlbiA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Zha2VfcmVhZF9sb2Nr
ID0gRmFsc2UKICAgICAgICAgc2VsZi5faGVsZF9kaXIgPSBwYXRoICsgJy9oZWxkJwogICAgICAg
ICBzZWxmLl9oZWxkX2luZm9fcGF0aCA9IHNlbGYuX2hlbGRfZGlyICsgc2VsZi5fX0lORk9fTkFN
RQpAQCAtMjM0LDE1ICsyMzUsMTkgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBu
b3Qgc2VsZi5fbG9ja19oZWxkOgogICAgICAgICAgICAgcmFpc2UgTG9ja05vdEhlbGQoc2VsZikK
LSAgICAgICAgIyByZW5hbWUgYmVmb3JlIGRlbGV0aW5nLCBiZWNhdXNlIHdlIGNhbid0IGF0b21p
Y2FsbHkgcmVtb3ZlIHRoZSB3aG9sZQotICAgICAgICAjIHRyZWUKLSAgICAgICAgdG1wbmFtZSA9
ICclcy9yZWxlYXNpbmcuJXMudG1wJyAlIChzZWxmLnBhdGgsIHJhbmRfY2hhcnMoMjApKQotICAg
ICAgICAjIGdvdHRhIG93biBpdCB0byB1bmxvY2sKLSAgICAgICAgc2VsZi5jb25maXJtKCkKLSAg
ICAgICAgc2VsZi50cmFuc3BvcnQucmVuYW1lKHNlbGYuX2hlbGRfZGlyLCB0bXBuYW1lKQotICAg
ICAgICBzZWxmLl9sb2NrX2hlbGQgPSBGYWxzZQotICAgICAgICBzZWxmLnRyYW5zcG9ydC5kZWxl
dGUodG1wbmFtZSArIHNlbGYuX19JTkZPX05BTUUpCi0gICAgICAgIHNlbGYudHJhbnNwb3J0LnJt
ZGlyKHRtcG5hbWUpCisgICAgICAgIGlmIHNlbGYuX2xvY2tlZF92aWFfdG9rZW46CisgICAgICAg
ICAgICBzZWxmLl9sb2NrZWRfdmlhX3Rva2VuID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX2xv
Y2tfaGVsZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHJlbmFtZSBiZWZv
cmUgZGVsZXRpbmcsIGJlY2F1c2Ugd2UgY2FuJ3QgYXRvbWljYWxseSByZW1vdmUgdGhlCisgICAg
ICAgICAgICAjIHdob2xlIHRyZWUKKyAgICAgICAgICAgIHRtcG5hbWUgPSAnJXMvcmVsZWFzaW5n
LiVzLnRtcCcgJSAoc2VsZi5wYXRoLCByYW5kX2NoYXJzKDIwKSkKKyAgICAgICAgICAgICMgZ290
dGEgb3duIGl0IHRvIHVubG9jaworICAgICAgICAgICAgc2VsZi5jb25maXJtKCkKKyAgICAgICAg
ICAgIHNlbGYudHJhbnNwb3J0LnJlbmFtZShzZWxmLl9oZWxkX2RpciwgdG1wbmFtZSkKKyAgICAg
ICAgICAgIHNlbGYuX2xvY2tfaGVsZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnRyYW5zcG9y
dC5kZWxldGUodG1wbmFtZSArIHNlbGYuX19JTkZPX05BTUUpCisgICAgICAgICAgICBzZWxmLnRy
YW5zcG9ydC5ybWRpcih0bXBuYW1lKQogCiAgICAgZGVmIGJyZWFrX2xvY2soc2VsZik6CiAgICAg
ICAgICIiIkJyZWFrIGEgbG9jayBub3QgaGVsZCBieSB0aGlzIGluc3RhbmNlIG9mIExvY2tEaXIu
CkBAIC00MTUsOSArNDIwLDMyIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAg
IHJhaXNlIExvY2tDb250ZW50aW9uKHNlbGYpCiAKLSAgICBkZWYgbG9ja193cml0ZShzZWxmKToK
LSAgICAgICAgIiIiV2FpdCBmb3IgYW5kIGFjcXVpcmUgdGhlIGxvY2suIiIiCi0gICAgICAgIHNl
bGYud2FpdF9sb2NrKCkKKyAgICBkZWYgbG9ja193cml0ZShzZWxmLCB0b2tlbj1Ob25lKToKKyAg
ICAgICAgIiIiV2FpdCBmb3IgYW5kIGFjcXVpcmUgdGhlIGxvY2suCisgICAgICAgIAorICAgICAg
ICA6cGFyYW0gdG9rZW46IGlmIHRoaXMgaXMgYWxyZWFkeSBsb2NrZWQsIHRoZW4gbG9ja193cml0
ZSB3aWxsIGZhaWwKKyAgICAgICAgICAgIHVubGVzcyB0aGUgdG9rZW4gbWF0Y2hlcyB0aGUgZXhp
c3RpbmcgbG9jay4KKyAgICAgICAgOnJldHVybnM6IGEgdG9rZW4gaWYgdGhpcyBpbnN0YW5jZSBz
dXBwb3J0cyB0b2tlbnMsIG90aGVyd2lzZSBOb25lLgorICAgICAgICA6cmFpc2VzIFRva2VuTG9j
a2luZ05vdFN1cHBvcnRlZDogd2hlbiBhIHRva2VuIGlzIGdpdmVuIGJ1dCB0aGlzCisgICAgICAg
ICAgICBpbnN0YW5jZSBkb2Vzbid0IHN1cHBvcnQgdXNpbmcgdG9rZW4gbG9ja3MuCisgICAgICAg
IDpyYWlzZXMgVG9rZW5NaXNtYXRjaDogaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBkb2Vzbid0IG1h
dGNoIHRoZSB0b2tlbgorICAgICAgICAgICAgb2YgdGhlIGV4aXN0aW5nIGxvY2suCisKKyAgICAg
ICAgQSB0b2tlbiBzaG91bGQgYmUgcGFzc2VkIGluIGlmIHlvdSBrbm93IHRoYXQgeW91IGhhdmUg
bG9ja2VkIHRoZSBvYmplY3QKKyAgICAgICAgc29tZSBvdGhlciB3YXksIGFuZCBuZWVkIHRvIHN5
bmNocm9uaXNlIHRoaXMgb2JqZWN0J3Mgc3RhdGUgd2l0aCB0aGF0CisgICAgICAgIGZhY3QuICBG
b3IgaW5zdGFuY2UsIHRoaXMgY291bGQgaGFwcGVuIHdoZW4gYWNjZXNzaW5nIHRoZSBzYW1lIGJy
YW5jaAorICAgICAgICBvdmVyIGJ6citzc2g6Ly8gYW5kIHRoZW4gZmFsbGluZyBiYWNrIHRvIGRv
IHNvbWUgb3BlcmF0aW9ucyBvbiB0aGUgc2FtZQorICAgICAgICBicmFuY2ggdmlhIHNmdHA6Ly8u
CisgICAgICAgICAKKyAgICAgICAgWFhYOiBkb2NzdHJpbmcgZHVwbGljYXRlZCBmcm9tIExvY2th
YmxlRmlsZXMubG9ja193cml0ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHRva2VuIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgc2VsZi52YWxpZGF0ZV90b2tlbih0b2tlbikKKyAgICAgICAg
ICAgIHNlbGYuX2xvY2tfaGVsZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2xvY2tlZF92aWFf
dG9rZW4gPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLndhaXRfbG9jaygp
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wZWVrKCkuZ2V0KCdub25jZScpCiAKICAgICBkZWYg
bG9ja19yZWFkKHNlbGYpOgogICAgICAgICAiIiJDb21wYXRpYmlsaXR5LW1vZGUgc2hhcmVkIGxv
Y2suCkBAIC00NTcsMyArNDg1LDE0IEBACiAgICAgICAgICAgICAnbG9ja2VkICVzJyAlIChmb3Jt
YXRfZGVsdGEoZGVsdGEpLCksCiAgICAgICAgICAgICBdCiAKKyAgICBkZWYgdmFsaWRhdGVfdG9r
ZW4oc2VsZiwgdG9rZW4pOgorICAgICAgICBpZiB0b2tlbiBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIGluZm8gPSBzZWxmLnBlZWsoKQorICAgICAgICAgICAgaWYgaW5mbyBpcyBOb25lOgorICAg
ICAgICAgICAgICAgICMgTG9jayBpc24ndCBoZWxkCisgICAgICAgICAgICAgICAgbG9ja190b2tl
biA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9ja190b2tlbiA9
IGluZm8uZ2V0KCdub25jZScpCisgICAgICAgICAgICBpZiB0b2tlbiAhPSBsb2NrX3Rva2VuOgor
ICAgICAgICAgICAgICAgIHJhaXNlIGVycm9ycy5Ub2tlbk1pc21hdGNoKHRva2VuLCBsb2NrX3Rv
a2VuKQorCgo=

=== modified file bzrlib/tests/test_lockable_files.py // last-changed:andrew.be
... nnetts at canonical.com-20070328070842-r843houy668oxb9o // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2xvY2thYmxlX2ZpbGVzLnB5CisrKyBienJsaWIvdGVzdHMv
dGVzdF9sb2NrYWJsZV9maWxlcy5weQpAQCAtMjEsNiArMjEsNyBAQAogaW1wb3J0IGJ6cmxpYi5l
cnJvcnMgYXMgZXJyb3JzCiBmcm9tIGJ6cmxpYi5lcnJvcnMgaW1wb3J0IEJ6ckJhZFBhcmFtZXRl
ck5vdFN0cmluZywgTm9TdWNoRmlsZSwgUmVhZE9ubHlFcnJvcgogZnJvbSBienJsaWIubG9ja2Fi
bGVfZmlsZXMgaW1wb3J0IExvY2thYmxlRmlsZXMsIFRyYW5zcG9ydExvY2sKK2Zyb20gYnpybGli
IGltcG9ydCBsb2NrZGlyCiBmcm9tIGJ6cmxpYi5sb2NrZGlyIGltcG9ydCBMb2NrRGlyCiBmcm9t
IGJ6cmxpYi50ZXN0cyBpbXBvcnQgVGVzdENhc2VJblRlbXBEaXIKIGZyb20gYnpybGliLnRlc3Rz
LnRlc3RfdHJhbnNhY3Rpb25zIGltcG9ydCBEdW1teVdlYXZlCkBAIC0zNCw2ICszNSwxNSBAQAog
IyB0aGVzZSB0ZXN0cyBhcmUgYXBwbGllZCBpbiBlYWNoIHBhcmFtZXRlcml6ZWQgc3VpdGUgZm9y
IExvY2thYmxlRmlsZXMKIGNsYXNzIF9UZXN0TG9ja2FibGVGaWxlc19taXhpbihvYmplY3QpOgog
CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIFJlZHVjZSB0aGUgZGVmYXVsdCB0aW1l
b3V0LCBzbyB0aGF0IGlmIHRlc3RzIGZhaWwsIHRoZXkgd2lsbCBkbyBzbworICAgICAgICAjIHJl
YXNvbmFibHkgcXVpY2tseS4KKyAgICAgICAgb3JpZ190aW1lb3V0ID0gbG9ja2Rpci5fREVGQVVM
VF9USU1FT1VUX1NFQ09ORFMKKyAgICAgICAgZGVmIHJlc2V0VGltZW91dCgpOgorICAgICAgICAg
ICAgbG9ja2Rpci5fREVGQVVMVF9USU1FT1VUX1NFQ09ORFMgPSBvcmlnX3RpbWVvdXQKKyAgICAg
ICAgc2VsZi5hZGRDbGVhbnVwKHJlc2V0VGltZW91dCkKKyAgICAgICAgbG9ja2Rpci5fREVGQVVM
VF9USU1FT1VUX1NFQ09ORFMgPSAzCisKICAgICBkZWYgdGVzdF9yZWFkX3dyaXRlKHNlbGYpOgog
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb1N1Y2hGaWxlLCBzZWxmLmxvY2thYmxlLmdldCwg
J2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vU3VjaEZpbGUsIHNlbGYubG9ja2Fi
bGUuZ2V0X3V0ZjgsICdmb28nKQpAQCAtMTI1LDYgKzEzNSwxMTYgQEAKICAgICAgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5Mb2NrQnJva2VuLCBzZWxmLmxvY2thYmxlLnVubG9jaykK
ICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2NrYWJsZS5pc19sb2NrZWQoKSkK
IAorICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmV0dXJuc19Ob25lX3JlZnVzZXNfdG9rZW4oc2Vs
Zik6CisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJsZS5sb2NrX3dyaXRlKCkKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
IyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJsZSBzdXBwb3J0
cworICAgICAgICAgICAgICAgICMgdG9rZW5zLgorICAgICAgICAgICAgICAgIHJldHVybgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTG9ja2luZ05vdFN1cHBvcnRl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9ja2FibGUubG9ja193cml0
ZSwgdG9rZW49J3Rva2VuJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9j
a2FibGUudW5sb2NrKCkKKworICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmFpc2VzX29uX3Rva2Vu
X21pc21hdGNoKHNlbGYpOgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUubG9ja193cml0
ZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAg
ICAgICAgICAgIyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJs
ZSByZWZ1c2VzCisgICAgICAgICAgICAgICAgIyB0b2tlbnMuCisgICAgICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgICAgICBkaWZmZXJlbnRfdG9rZW4gPSB0b2tlbiArICd4eHgnCisgICAgICAg
ICAgICAjIFJlLXVzaW5nIHRoZSBzYW1lIGxvY2thYmxlIGluc3RhbmNlIHdpdGggYSBkaWZmZXJl
bnQgdG9rZW4gd2lsbAorICAgICAgICAgICAgIyByYWlzZSBUb2tlbk1pc21hdGNoLgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTWlzbWF0Y2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2thYmxlLmxvY2tfd3JpdGUsIHRva2VuPWRpZmZl
cmVudF90b2tlbikKKyAgICAgICAgICAgICMgQSBzZXBlcmF0ZSBpbnN0YW5jZSBmb3IgdGhlIHNh
bWUgbG9ja2FibGUgd2lsbCBhbHNvIHJhaXNlCisgICAgICAgICAgICAjIFRva2VuTWlzbWF0Y2gu
CisgICAgICAgICAgICAjIFRoaXMgZGV0ZWN0cyB0aGUgY2FzZSB3aGVyZSBhIGNhbGxlciBjbGFp
bXMgdG8gaGF2ZSBhIGxvY2sgKHZpYQorICAgICAgICAgICAgIyB0aGUgdG9rZW4pIGZvciBhbiBl
eHRlcm5hbCByZXNvdXJjZSwgYnV0IGRvZXNuJ3QgKHRoZSB0b2tlbiBpcworICAgICAgICAgICAg
IyBkaWZmZXJlbnQpLiAgQ2xpZW50cyBuZWVkIGEgc2VwZXJhdGUgbG9jayBvYmplY3QgdG8gbWFr
ZSBzdXJlIHRoZQorICAgICAgICAgICAgIyBleHRlcm5hbCByZXNvdXJjZSBpcyBwcm9iZWQsIHdo
ZXJlYXMgdGhlIGV4aXN0aW5nIGxvY2sgb2JqZWN0CisgICAgICAgICAgICAjIG1pZ2h0IGNhY2hl
LgorICAgICAgICAgICAgbmV3X2xvY2thYmxlID0gc2VsZi5nZXRfbG9ja2FibGUoKQorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTWlzbWF0Y2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0ZSwgdG9rZW49ZGlmZmVy
ZW50X3Rva2VuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS51
bmxvY2soKQorCisgICAgZGVmIHRlc3RfbG9ja193cml0ZV93aXRoX21hdGNoaW5nX3Rva2VuKHNl
bGYpOgorICAgICAgICAjIElmIHRoZSB0b2tlbiBtYXRjaGVzLCBzbyBubyBleGNlcHRpb24gaXMg
cmFpc2VkIGJ5IGxvY2tfd3JpdGUuCisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJsZS5sb2Nr
X3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgTm9uZToKKyAg
ICAgICAgICAgICAgICAjIFRoaXMgdGVzdCBkb2VzIG5vdCBhcHBseSwgYmVjYXVzZSB0aGlzIGxv
Y2thYmxlIHJlZnVzZXMKKyAgICAgICAgICAgICAgICAjIHRva2Vucy4KKyAgICAgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgICAgICMgVGhlIHNhbWUgaW5zdGFuY2Ugd2lsbCBhY2NlcHQgYSBz
ZWNvbmQgbG9ja193cml0ZSBpZiB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAjIHRva2VuIG1h
dGNoZXMuCisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLmxvY2tfd3JpdGUodG9rZW49dG9rZW4p
CisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLnVubG9jaygpCisgICAgICAgICAgICAjIENhbGxp
bmcgbG9ja193cml0ZSBvbiBhIG5ldyBpbnN0YW5jZSBmb3IgdGhlIHNhbWUgbG9ja2FibGUgd2ls
bAorICAgICAgICAgICAgIyBhbHNvIHN1Y2NlZWQuCisgICAgICAgICAgICBuZXdfbG9ja2FibGUg
PSBzZWxmLmdldF9sb2NrYWJsZSgpCisgICAgICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0
ZSh0b2tlbj10b2tlbikKKyAgICAgICAgICAgIG5ld19sb2NrYWJsZS51bmxvY2soKQorICAgICAg
ICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS51bmxvY2soKQorCisgICAgZGVm
IHRlc3RfdW5sb2NrX2FmdGVyX2xvY2tfd3JpdGVfd2l0aF90b2tlbihzZWxmKToKKyAgICAgICAg
IyBJZiBsb2NrX3dyaXRlIGRpZCBub3QgcGh5c2ljYWxseSBhY3F1aXJlIHRoZSBsb2NrIChiZWNh
dXNlIGl0IHdhcworICAgICAgICAjIHBhc3NlZCBhIHRva2VuKSwgdGhlbiB1bmxvY2sgc2hvdWxk
IG5vdCBwaHlzaWNhbGx5IHJlbGVhc2UgaXQuCisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJs
ZS5sb2NrX3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgTm9u
ZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgdGVzdCBkb2VzIG5vdCBhcHBseSwgYmVjYXVzZSB0
aGlzIGxvY2thYmxlIHJlZnVzZXMKKyAgICAgICAgICAgICAgICAjIHRva2Vucy4KKyAgICAgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIG5ld19sb2NrYWJsZSA9IHNlbGYuZ2V0X2xvY2th
YmxlKCkKKyAgICAgICAgICAgIG5ld19sb2NrYWJsZS5sb2NrX3dyaXRlKHRva2VuPXRva2VuKQor
ICAgICAgICAgICAgbmV3X2xvY2thYmxlLnVubG9jaygpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoc2VsZi5sb2NrYWJsZS5nZXRfcGh5c2ljYWxfbG9ja19zdGF0dXMoKSkKKyAgICAgICAg
ZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9ja2FibGUudW5sb2NrKCkKKworICAgIGRlZiB0
ZXN0X2xvY2tfd3JpdGVfd2l0aF90b2tlbl9mYWlsc193aGVuX3VubG9ja2VkKHNlbGYpOgorICAg
ICAgICAjIExvY2sgYW5kIHVubG9jayB0byBnZXQgYSBzdXBlcmZpY2lhbGx5IHZhbGlkIHRva2Vu
LiAgVGhpcyBtaW1pY3MgYQorICAgICAgICAjIGxpa2VseSBwcm9ncmFtbWluZyBlcnJvciwgd2hl
cmUgYSBjYWxsZXIgYWNjaWRlbnRhbGx5IHRyaWVzIHRvIGxvY2sKKyAgICAgICAgIyB3aXRoIGEg
dG9rZW4gdGhhdCBpcyBubyBsb25nZXIgdmFsaWQgKGJlY2F1c2UgdGhlIG9yaWdpbmFsIGxvY2sg
d2FzCisgICAgICAgICMgcmVsZWFzZWQpLgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUu
bG9ja193cml0ZSgpCisgICAgICAgIHNlbGYubG9ja2FibGUudW5sb2NrKCkKKyAgICAgICAgaWYg
dG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgICMgVGhpcyB0ZXN0IGRvZXMgbm90IGFwcGx5LCBi
ZWNhdXNlIHRoaXMgbG9ja2FibGUgcmVmdXNlcworICAgICAgICAgICAgIyB0b2tlbnMuCisgICAg
ICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuVG9rZW5N
aXNtYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS5sb2NrX3dy
aXRlLCB0b2tlbj10b2tlbikKKworICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmVlbnRlcl93aXRo
X3Rva2VuKHNlbGYpOgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUubG9ja193cml0ZSgp
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAgICAg
ICAgICAgIyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJsZSBy
ZWZ1c2VzCisgICAgICAgICAgICAgICAgIyB0b2tlbnMuCisgICAgICAgICAgICAgICAgcmV0dXJu
CisgICAgICAgICAgICAjIFJlbG9jayB3aXRoIGEgdG9rZW4uCisgICAgICAgICAgICBzZWxmLmxv
Y2thYmxlLmxvY2tfd3JpdGUodG9rZW49dG9rZW4pCisgICAgICAgICAgICBzZWxmLmxvY2thYmxl
LnVubG9jaygpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLnVu
bG9jaygpCisgICAgICAgICMgVGhlIGxvY2sgc2hvdWxkIGJlIHVubG9ja2VkIG9uIGRpc2suICBW
ZXJpZnkgdGhhdCB3aXRoIGEgbmV3IGxvY2sKKyAgICAgICAgIyBpbnN0YW5jZS4KKyAgICAgICAg
bmV3X2xvY2thYmxlID0gc2VsZi5nZXRfbG9ja2FibGUoKQorICAgICAgICAjIENhbGxpbmcgbG9j
a193cml0ZSBub3cgc2hvdWxkIHdvcmssIHJhdGhlciB0aGFuIHJhaXNlIExvY2tDb250ZW50aW9u
LgorICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0ZSgpCisgICAgICAgIG5ld19sb2NrYWJs
ZS51bmxvY2soKQorCisKKworCiAKICMgVGhpcyBtZXRob2Qgb2YgYWRhcHRpbmcgdGVzdHMgdG8g
cGFyYW1ldGVycyBpcyBkaWZmZXJlbnQgdG8gCiAjIHRoZSBUZXN0UHJvdmlkZXJBZGFwdGVycyB1
c2VkIGVsc2V3aGVyZSwgYnV0IHNlZW1zIHNpbXBsZXIgZm9yIHRoaXMgCkBAIC0xMzMsNyArMjUz
LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Rlc3RMb2NrYWJs
ZUZpbGVzX21peGluKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwZXIoVGVz
dExvY2thYmxlRmlsZXNfVHJhbnNwb3J0TG9jaywgc2VsZikuc2V0VXAoKQorICAgICAgICBUZXN0
Q2FzZUluVGVtcERpci5zZXRVcChzZWxmKQorICAgICAgICBfVGVzdExvY2thYmxlRmlsZXNfbWl4
aW4uc2V0VXAoc2VsZikKICAgICAgICAgdHJhbnNwb3J0ID0gZ2V0X3RyYW5zcG9ydCgnLicpCiAg
ICAgICAgIHRyYW5zcG9ydC5ta2RpcignLmJ6cicpCiAgICAgICAgIHNlbGYuc3ViX3RyYW5zcG9y
dCA9IHRyYW5zcG9ydC5jbG9uZSgnLmJ6cicpCkBAIC0xNTUsNyArMjc2LDggQEAKICAgICAiIiJM
b2NrYWJsZUZpbGUgdGVzdHMgcnVuIHdpdGggTG9ja0RpciB1bmRlcm5lYXRoIiIiCiAKICAgICBk
ZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cGVyKFRlc3RMb2NrYWJsZUZpbGVzX0xvY2tEaXIs
IHNlbGYpLnNldFVwKCkKKyAgICAgICAgVGVzdENhc2VJblRlbXBEaXIuc2V0VXAoc2VsZikKKyAg
ICAgICAgX1Rlc3RMb2NrYWJsZUZpbGVzX21peGluLnNldFVwKHNlbGYpCiAgICAgICAgIHNlbGYu
dHJhbnNwb3J0ID0gZ2V0X3RyYW5zcG9ydCgnLicpCiAgICAgICAgIHNlbGYubG9ja2FibGUgPSBz
ZWxmLmdldF9sb2NrYWJsZSgpCiAgICAgICAgICMgdGhlIGxvY2sgY3JlYXRpb24gaGVyZSBzZXRz
IG1vZGUgLSB0ZXN0X3Blcm1pc3Npb25zIG9uIGJyYW5jaCAKCg==

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200703280
... 75403-ibqxtr196emuc4ut
# revision id: andrew.bennetts at canonical.com-20070328075403-ibqxtr196emuc4ut
# sha1: 423945c7ed06ad5ea5f9e3143806a0ae1cce7c9c
# inventory sha1: d796bcffd96f5a53c6b9740a51e3de6fa98ca7db
# parent ids:
#   andrew.bennetts at canonical.com-20070328073853-yje2ikoflt6a4jos
#   pqm at pqm.ubuntu.com-20070328065822-999550a858a3ced3
# properties:
#   branch-nick: bzr.dev.hpss.api.changes

# message:
#   Some tweaks in response to review.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Wed 2007-03-28 17:38:53.598999977 +1000

=== modified file bzrlib/errors.py // encoding:base64
LS0tIGJ6cmxpYi9lcnJvcnMucHkKKysrIGJ6cmxpYi9lcnJvcnMucHkKQEAgLTc5OSw3ICs3OTks
NyBAQAogICAgICAgICBzZWxmLm9iaiA9IG9iagogCiAKLWNsYXNzIFRva2VuTWlzbWF0Y2goTG9j
a0Vycm9yKToKK2NsYXNzIFRva2VuTWlzbWF0Y2goTG9ja0Jyb2tlbik6CiAKICAgICBfZm10ID0g
IlRoZSBsb2NrIHRva2VuICUoZ2l2ZW5fdG9rZW4pciBkb2VzIG5vdCBtYXRjaCBsb2NrIHRva2Vu
ICUobG9ja190b2tlbilyLiIKIAoK

=== modified file bzrlib/lockable_files.py // encoding:base64
LS0tIGJ6cmxpYi9sb2NrYWJsZV9maWxlcy5weQorKysgYnpybGliL2xvY2thYmxlX2ZpbGVzLnB5
CkBAIC0yMzIsNiArMjMyLDEyIEBACiAgICAgICAgICAgICBpbnN0YW5jZSBkb2Vzbid0IHN1cHBv
cnQgdXNpbmcgdG9rZW4gbG9ja3MuCiAgICAgICAgIDpyYWlzZXMgTWlzbWF0Y2hlZFRva2VuOiBp
ZiB0aGUgc3BlY2lmaWVkIHRva2VuIGRvZXNuJ3QgbWF0Y2ggdGhlIHRva2VuCiAgICAgICAgICAg
ICBvZiB0aGUgZXhpc3RpbmcgbG9jay4KKworICAgICAgICBBIHRva2VuIHNob3VsZCBiZSBwYXNz
ZWQgaW4gaWYgeW91IGtub3cgdGhhdCB5b3UgaGF2ZSBsb2NrZWQgdGhlIG9iamVjdAorICAgICAg
ICBzb21lIG90aGVyIHdheSwgYW5kIG5lZWQgdG8gc3luY2hyb25pc2UgdGhpcyBvYmplY3QncyBz
dGF0ZSB3aXRoIHRoYXQKKyAgICAgICAgZmFjdC4gIEZvciBpbnN0YW5jZSwgdGhpcyBjb3VsZCBo
YXBwZW4gd2hlbiBhY2Nlc3NpbmcgdGhlIHNhbWUgYnJhbmNoCisgICAgICAgIG92ZXIgYnpyK3Nz
aDovLyBhbmQgdGhlbiBmYWxsaW5nIGJhY2sgdG8gZG8gc29tZSBvcGVyYXRpb25zIG9uIHRoZSBz
YW1lCisgICAgICAgIGJyYW5jaCB2aWEgc2Z0cDovLy4KICAgICAgICAgIiIiCiAgICAgICAgICMg
bXV0dGVyKCJsb2NrIHdyaXRlOiAlcyAoJXMpIiwgc2VsZiwgc2VsZi5fbG9ja19jb3VudCkKICAg
ICAgICAgIyBUT0RPOiBVcGdyYWRlIGxvY2tpbmcgdG8gc3VwcG9ydCB1c2luZyBhIFRyYW5zcG9y
dCwKCg==

=== modified file bzrlib/lockdir.py // encoding:base64
LS0tIGJ6cmxpYi9sb2NrZGlyLnB5CisrKyBienJsaWIvbG9ja2Rpci5weQpAQCAtNDI4LDggKzQy
OCwxNCBAQAogICAgICAgICA6cmV0dXJuczogYSB0b2tlbiBpZiB0aGlzIGluc3RhbmNlIHN1cHBv
cnRzIHRva2Vucywgb3RoZXJ3aXNlIE5vbmUuCiAgICAgICAgIDpyYWlzZXMgVG9rZW5Mb2NraW5n
Tm90U3VwcG9ydGVkOiB3aGVuIGEgdG9rZW4gaXMgZ2l2ZW4gYnV0IHRoaXMKICAgICAgICAgICAg
IGluc3RhbmNlIGRvZXNuJ3Qgc3VwcG9ydCB1c2luZyB0b2tlbiBsb2Nrcy4KLSAgICAgICAgOnJh
aXNlcyBNaXNtYXRjaGVkVG9rZW46IGlmIHRoZSBzcGVjaWZpZWQgdG9rZW4gZG9lc24ndCBtYXRj
aCB0aGUgdG9rZW4KKyAgICAgICAgOnJhaXNlcyBUb2tlbk1pc21hdGNoOiBpZiB0aGUgc3BlY2lm
aWVkIHRva2VuIGRvZXNuJ3QgbWF0Y2ggdGhlIHRva2VuCiAgICAgICAgICAgICBvZiB0aGUgZXhp
c3RpbmcgbG9jay4KKworICAgICAgICBBIHRva2VuIHNob3VsZCBiZSBwYXNzZWQgaW4gaWYgeW91
IGtub3cgdGhhdCB5b3UgaGF2ZSBsb2NrZWQgdGhlIG9iamVjdAorICAgICAgICBzb21lIG90aGVy
IHdheSwgYW5kIG5lZWQgdG8gc3luY2hyb25pc2UgdGhpcyBvYmplY3QncyBzdGF0ZSB3aXRoIHRo
YXQKKyAgICAgICAgZmFjdC4gIEZvciBpbnN0YW5jZSwgdGhpcyBjb3VsZCBoYXBwZW4gd2hlbiBh
Y2Nlc3NpbmcgdGhlIHNhbWUgYnJhbmNoCisgICAgICAgIG92ZXIgYnpyK3NzaDovLyBhbmQgdGhl
biBmYWxsaW5nIGJhY2sgdG8gZG8gc29tZSBvcGVyYXRpb25zIG9uIHRoZSBzYW1lCisgICAgICAg
IGJyYW5jaCB2aWEgc2Z0cDovLy4KICAgICAgICAgIAogICAgICAgICBYWFg6IGRvY3N0cmluZyBk
dXBsaWNhdGVkIGZyb20gTG9ja2FibGVGaWxlcy5sb2NrX3dyaXRlLgogICAgICAgICAiIiIKCg==

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200703280
... 73853-yje2ikoflt6a4jos
# revision id: andrew.bennetts at canonical.com-20070328073853-yje2ikoflt6a4jos
# sha1: 844d8839518587ec68905179fbe3e8811c3af5e4
# inventory sha1: e8e37f50d7dc8ad9ec9a1a2d8b5b9915f3455875
# parent ids:
#   andrew.bennetts at canonical.com-20070328070842-r843houy668oxb9o
# properties:
#   branch-nick: bzr.dev.hpss.api.changes

# message:
#   Merge from bzr.dev.
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Wed 2007-03-28 17:08:42.578999996 +1000

=== modified file NEWS // encoding:base64
LS0tIE5FV1MKKysrIE5FV1MKQEAgLTUsNiArNSwxMCBAQAogICAgICogYnpybGliIEFQSSBjb21w
YXRhYmlsaXR5IHdpdGggMC44IGhhcyBiZWVuIGRyb3BwZWQsIGNsZWFuaW5nIHVwIHNvbWUKICAg
ICAgIGNvZGUgcGF0aHMuIChSb2JlcnQgQ29sbGlucykKIAorICAgICogYGBMb2NrYWJsZUZpbGVz
LmxvY2tfd3JpdGUoKWBgIG5vdyBhY2NlcHRzIGEgYGB0b2tlbmBgIGtleXdvcmQgYXJndW1lbnQs
CisgICAgICBzbyB0aGF0IGEgc2VwZXJhdGUgTG9ja2FibGVGaWxlcyBpbnN0YW5jZSBjYW4gc2hh
cmUgYSBsb2NrIGlmIGl0IGhhcyB0aGUKKyAgICAgIHJpZ2h0IHRva2VuLiAgKEFuZHJldyBCZW5u
ZXR0cywgUm9iZXJ0IENvbGxpbnMpCisKICAgVEVTVElORzoKIAogICAgICogQWRkZWQgYGBienJs
aWIuc3RyYWNlLnN0cmFjZWBgIHdoaWNoIHdpbGwgc3RyYWNlIGEgc2luZ2xlIGNhbGxhYmxlIGFu
ZAoK

=== modified file bzrlib/errors.py // encoding:base64
LS0tIGJ6cmxpYi9lcnJvcnMucHkKKysrIGJ6cmxpYi9lcnJvcnMucHkKQEAgLTc4OSw2ICs3ODks
MjcgQEAKICAgICAgICAgc2VsZi5sb2NrID0gbG9jawogCiAKK2NsYXNzIFRva2VuTG9ja2luZ05v
dFN1cHBvcnRlZChMb2NrRXJyb3IpOgorCisgICAgX2ZtdCA9ICJUaGUgb2JqZWN0ICUob2JqKXMg
ZG9lcyBub3Qgc3VwcG9ydCB0b2tlbiBzcGVjaWZ5aW5nIGEgdG9rZW4gd2hlbiBsb2NraW5nLiIK
KworICAgIGludGVybmFsX2Vycm9yID0gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9i
aik6CisgICAgICAgIHNlbGYub2JqID0gb2JqCisKKworY2xhc3MgVG9rZW5NaXNtYXRjaChMb2Nr
RXJyb3IpOgorCisgICAgX2ZtdCA9ICJUaGUgbG9jayB0b2tlbiAlKGdpdmVuX3Rva2VuKXIgZG9l
cyBub3QgbWF0Y2ggbG9jayB0b2tlbiAlKGxvY2tfdG9rZW4pci4iCisKKyAgICBpbnRlcm5hbF9l
cnJvciA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnaXZlbl90b2tlbiwgbG9ja190
b2tlbik6CisgICAgICAgIHNlbGYuZ2l2ZW5fdG9rZW4gPSBnaXZlbl90b2tlbgorICAgICAgICBz
ZWxmLmxvY2tfdG9rZW4gPSBsb2NrX3Rva2VuCisKKwogY2xhc3MgUG9pbnRsZXNzQ29tbWl0KEJ6
ckVycm9yKToKIAogICAgIF9mbXQgPSAiTm8gY2hhbmdlcyB0byBjb21taXQiCgo=

=== modified file bzrlib/lockable_files.py // encoding:base64
LS0tIGJ6cmxpYi9sb2NrYWJsZV9maWxlcy5weQorKysgYnpybGliL2xvY2thYmxlX2ZpbGVzLnB5
CkBAIC0yMjIsMjEgKzIyMiwzMyBAQAogICAgICAgICAgICAgcmFpc2UgZXJyb3JzLkJ6ckJhZFBh
cmFtZXRlck5vdFN0cmluZyhhX3N0cmluZykKICAgICAgICAgc2VsZi5wdXRfYnl0ZXMocGF0aCwg
YV9zdHJpbmcuZW5jb2RlKCd1dGYtOCcpKQogCi0gICAgZGVmIGxvY2tfd3JpdGUoc2VsZik6Cisg
ICAgZGVmIGxvY2tfd3JpdGUoc2VsZiwgdG9rZW49Tm9uZSk6CisgICAgICAgICIiIkxvY2sgdGhp
cyBncm91cCBvZiBmaWxlcyBmb3Igd3JpdGluZy4KKyAgICAgICAgCisgICAgICAgIDpwYXJhbSB0
b2tlbjogaWYgdGhpcyBpcyBhbHJlYWR5IGxvY2tlZCwgdGhlbiBsb2NrX3dyaXRlIHdpbGwgZmFp
bAorICAgICAgICAgICAgdW5sZXNzIHRoZSB0b2tlbiBtYXRjaGVzIHRoZSBleGlzdGluZyBsb2Nr
LgorICAgICAgICA6cmV0dXJuczogYSB0b2tlbiBpZiB0aGlzIGluc3RhbmNlIHN1cHBvcnRzIHRv
a2Vucywgb3RoZXJ3aXNlIE5vbmUuCisgICAgICAgIDpyYWlzZXMgVG9rZW5Mb2NraW5nTm90U3Vw
cG9ydGVkOiB3aGVuIGEgdG9rZW4gaXMgZ2l2ZW4gYnV0IHRoaXMKKyAgICAgICAgICAgIGluc3Rh
bmNlIGRvZXNuJ3Qgc3VwcG9ydCB1c2luZyB0b2tlbiBsb2Nrcy4KKyAgICAgICAgOnJhaXNlcyBN
aXNtYXRjaGVkVG9rZW46IGlmIHRoZSBzcGVjaWZpZWQgdG9rZW4gZG9lc24ndCBtYXRjaCB0aGUg
dG9rZW4KKyAgICAgICAgICAgIG9mIHRoZSBleGlzdGluZyBsb2NrLgorICAgICAgICAiIiIKICAg
ICAgICAgIyBtdXR0ZXIoImxvY2sgd3JpdGU6ICVzICglcykiLCBzZWxmLCBzZWxmLl9sb2NrX2Nv
dW50KQogICAgICAgICAjIFRPRE86IFVwZ3JhZGUgbG9ja2luZyB0byBzdXBwb3J0IHVzaW5nIGEg
VHJhbnNwb3J0LAogICAgICAgICAjIGFuZCBwb3RlbnRpYWxseSBhIHJlbW90ZSBsb2NraW5nIHBy
b3RvY29sCiAgICAgICAgIGlmIHNlbGYuX2xvY2tfbW9kZToKICAgICAgICAgICAgIGlmIHNlbGYu
X2xvY2tfbW9kZSAhPSAndycgb3Igbm90IHNlbGYuZ2V0X3RyYW5zYWN0aW9uKCkud3JpdGVhYmxl
KCk6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3JzLlJlYWRPbmx5RXJyb3Ioc2VsZikKKyAg
ICAgICAgICAgIHNlbGYuX2xvY2sudmFsaWRhdGVfdG9rZW4odG9rZW4pCiAgICAgICAgICAgICBz
ZWxmLl9sb2NrX2NvdW50ICs9IDEKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX2xv
Y2subG9ja193cml0ZSgpCisgICAgICAgICAgICB0b2tlbl9mcm9tX2xvY2sgPSBzZWxmLl9sb2Nr
LmxvY2tfd3JpdGUodG9rZW49dG9rZW4pCiAgICAgICAgICAgICAjbm90ZSgnd3JpdGUgbG9ja2lu
ZyAlcycsIHNlbGYpCiAgICAgICAgICAgICAjdHJhY2ViYWNrLnByaW50X3N0YWNrKCkKICAgICAg
ICAgICAgIHNlbGYuX2xvY2tfbW9kZSA9ICd3JwogICAgICAgICAgICAgc2VsZi5fbG9ja19jb3Vu
dCA9IDEKICAgICAgICAgICAgIHNlbGYuX3NldF90cmFuc2FjdGlvbih0cmFuc2FjdGlvbnMuV3Jp
dGVUcmFuc2FjdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHRva2VuX2Zyb21fbG9jawogCiAg
ICAgZGVmIGxvY2tfcmVhZChzZWxmKToKICAgICAgICAgIyBtdXR0ZXIoImxvY2sgcmVhZDogJXMg
KCVzKSIsIHNlbGYsIHNlbGYuX2xvY2tfY291bnQpCkBAIC0zMzMsNyArMzQ1LDkgQEAKICAgICBk
ZWYgYnJlYWtfbG9jayhzZWxmKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihz
ZWxmLmJyZWFrX2xvY2spCiAKLSAgICBkZWYgbG9ja193cml0ZShzZWxmKToKKyAgICBkZWYgbG9j
a193cml0ZShzZWxmLCB0b2tlbj1Ob25lKToKKyAgICAgICAgaWYgdG9rZW4gaXMgbm90IE5vbmU6
CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuVG9rZW5Mb2NraW5nTm90U3VwcG9ydGVkKHNlbGYp
CiAgICAgICAgIHNlbGYuX2xvY2sgPSBzZWxmLl90cmFuc3BvcnQubG9ja193cml0ZShzZWxmLl9l
c2NhcGVkX25hbWUpCiAKICAgICBkZWYgbG9ja19yZWFkKHNlbGYpOgpAQCAtMzUxLDMgKzM2NSw4
IEBACiAgICAgICAgICMgZm9yIG9sZC1zdHlsZSBsb2NrcywgY3JlYXRlIHRoZSBmaWxlIG5vdwog
ICAgICAgICBzZWxmLl90cmFuc3BvcnQucHV0X2J5dGVzKHNlbGYuX2VzY2FwZWRfbmFtZSwgJycs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT1zZWxmLl9maWxlX21vZGViaXRzKQor
CisgICAgZGVmIHZhbGlkYXRlX3Rva2VuKHNlbGYsIHRva2VuKToKKyAgICAgICAgaWYgdG9rZW4g
aXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBlcnJvcnMuVG9rZW5Mb2NraW5nTm90U3Vw
cG9ydGVkKHNlbGYpCisgICAgICAgIAoK

=== modified file bzrlib/lockdir.py // last-changed:andrew.bennetts at canonical.c
... om-20070212044932-k9keo85c0s9gg5wv // encoding:base64
LS0tIGJ6cmxpYi9sb2NrZGlyLnB5CisrKyBienJsaWIvbG9ja2Rpci5weQpAQCAtMTYwLDYgKzE2
MCw3IEBACiAgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CiAgICAgICAgIHNlbGYu
cGF0aCA9IHBhdGgKICAgICAgICAgc2VsZi5fbG9ja19oZWxkID0gRmFsc2UKKyAgICAgICAgc2Vs
Zi5fbG9ja2VkX3ZpYV90b2tlbiA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Zha2VfcmVhZF9sb2Nr
ID0gRmFsc2UKICAgICAgICAgc2VsZi5faGVsZF9kaXIgPSBwYXRoICsgJy9oZWxkJwogICAgICAg
ICBzZWxmLl9oZWxkX2luZm9fcGF0aCA9IHNlbGYuX2hlbGRfZGlyICsgc2VsZi5fX0lORk9fTkFN
RQpAQCAtMjM0LDE1ICsyMzUsMTkgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBu
b3Qgc2VsZi5fbG9ja19oZWxkOgogICAgICAgICAgICAgcmFpc2UgTG9ja05vdEhlbGQoc2VsZikK
LSAgICAgICAgIyByZW5hbWUgYmVmb3JlIGRlbGV0aW5nLCBiZWNhdXNlIHdlIGNhbid0IGF0b21p
Y2FsbHkgcmVtb3ZlIHRoZSB3aG9sZQotICAgICAgICAjIHRyZWUKLSAgICAgICAgdG1wbmFtZSA9
ICclcy9yZWxlYXNpbmcuJXMudG1wJyAlIChzZWxmLnBhdGgsIHJhbmRfY2hhcnMoMjApKQotICAg
ICAgICAjIGdvdHRhIG93biBpdCB0byB1bmxvY2sKLSAgICAgICAgc2VsZi5jb25maXJtKCkKLSAg
ICAgICAgc2VsZi50cmFuc3BvcnQucmVuYW1lKHNlbGYuX2hlbGRfZGlyLCB0bXBuYW1lKQotICAg
ICAgICBzZWxmLl9sb2NrX2hlbGQgPSBGYWxzZQotICAgICAgICBzZWxmLnRyYW5zcG9ydC5kZWxl
dGUodG1wbmFtZSArIHNlbGYuX19JTkZPX05BTUUpCi0gICAgICAgIHNlbGYudHJhbnNwb3J0LnJt
ZGlyKHRtcG5hbWUpCisgICAgICAgIGlmIHNlbGYuX2xvY2tlZF92aWFfdG9rZW46CisgICAgICAg
ICAgICBzZWxmLl9sb2NrZWRfdmlhX3Rva2VuID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX2xv
Y2tfaGVsZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHJlbmFtZSBiZWZv
cmUgZGVsZXRpbmcsIGJlY2F1c2Ugd2UgY2FuJ3QgYXRvbWljYWxseSByZW1vdmUgdGhlCisgICAg
ICAgICAgICAjIHdob2xlIHRyZWUKKyAgICAgICAgICAgIHRtcG5hbWUgPSAnJXMvcmVsZWFzaW5n
LiVzLnRtcCcgJSAoc2VsZi5wYXRoLCByYW5kX2NoYXJzKDIwKSkKKyAgICAgICAgICAgICMgZ290
dGEgb3duIGl0IHRvIHVubG9jaworICAgICAgICAgICAgc2VsZi5jb25maXJtKCkKKyAgICAgICAg
ICAgIHNlbGYudHJhbnNwb3J0LnJlbmFtZShzZWxmLl9oZWxkX2RpciwgdG1wbmFtZSkKKyAgICAg
ICAgICAgIHNlbGYuX2xvY2tfaGVsZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnRyYW5zcG9y
dC5kZWxldGUodG1wbmFtZSArIHNlbGYuX19JTkZPX05BTUUpCisgICAgICAgICAgICBzZWxmLnRy
YW5zcG9ydC5ybWRpcih0bXBuYW1lKQogCiAgICAgZGVmIGJyZWFrX2xvY2soc2VsZik6CiAgICAg
ICAgICIiIkJyZWFrIGEgbG9jayBub3QgaGVsZCBieSB0aGlzIGluc3RhbmNlIG9mIExvY2tEaXIu
CkBAIC00MTUsOSArNDIwLDI2IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAg
IHJhaXNlIExvY2tDb250ZW50aW9uKHNlbGYpCiAKLSAgICBkZWYgbG9ja193cml0ZShzZWxmKToK
LSAgICAgICAgIiIiV2FpdCBmb3IgYW5kIGFjcXVpcmUgdGhlIGxvY2suIiIiCi0gICAgICAgIHNl
bGYud2FpdF9sb2NrKCkKKyAgICBkZWYgbG9ja193cml0ZShzZWxmLCB0b2tlbj1Ob25lKToKKyAg
ICAgICAgIiIiV2FpdCBmb3IgYW5kIGFjcXVpcmUgdGhlIGxvY2suCisgICAgICAgIAorICAgICAg
ICA6cGFyYW0gdG9rZW46IGlmIHRoaXMgaXMgYWxyZWFkeSBsb2NrZWQsIHRoZW4gbG9ja193cml0
ZSB3aWxsIGZhaWwKKyAgICAgICAgICAgIHVubGVzcyB0aGUgdG9rZW4gbWF0Y2hlcyB0aGUgZXhp
c3RpbmcgbG9jay4KKyAgICAgICAgOnJldHVybnM6IGEgdG9rZW4gaWYgdGhpcyBpbnN0YW5jZSBz
dXBwb3J0cyB0b2tlbnMsIG90aGVyd2lzZSBOb25lLgorICAgICAgICA6cmFpc2VzIFRva2VuTG9j
a2luZ05vdFN1cHBvcnRlZDogd2hlbiBhIHRva2VuIGlzIGdpdmVuIGJ1dCB0aGlzCisgICAgICAg
ICAgICBpbnN0YW5jZSBkb2Vzbid0IHN1cHBvcnQgdXNpbmcgdG9rZW4gbG9ja3MuCisgICAgICAg
IDpyYWlzZXMgTWlzbWF0Y2hlZFRva2VuOiBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGRvZXNuJ3Qg
bWF0Y2ggdGhlIHRva2VuCisgICAgICAgICAgICBvZiB0aGUgZXhpc3RpbmcgbG9jay4KKyAgICAg
ICAgIAorICAgICAgICBYWFg6IGRvY3N0cmluZyBkdXBsaWNhdGVkIGZyb20gTG9ja2FibGVGaWxl
cy5sb2NrX3dyaXRlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgdG9rZW4gaXMgbm90IE5vbmU6
CisgICAgICAgICAgICBzZWxmLnZhbGlkYXRlX3Rva2VuKHRva2VuKQorICAgICAgICAgICAgc2Vs
Zi5fbG9ja19oZWxkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fbG9ja2VkX3ZpYV90b2tlbiA9
IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYud2FpdF9sb2NrKCkKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLnBlZWsoKS5nZXQoJ25vbmNlJykKIAogICAgIGRlZiBsb2NrX3Jl
YWQoc2VsZik6CiAgICAgICAgICIiIkNvbXBhdGliaWxpdHktbW9kZSBzaGFyZWQgbG9jay4KQEAg
LTQ1NywzICs0NzksMTQgQEAKICAgICAgICAgICAgICdsb2NrZWQgJXMnICUgKGZvcm1hdF9kZWx0
YShkZWx0YSksKSwKICAgICAgICAgICAgIF0KIAorICAgIGRlZiB2YWxpZGF0ZV90b2tlbihzZWxm
LCB0b2tlbik6CisgICAgICAgIGlmIHRva2VuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5m
byA9IHNlbGYucGVlaygpCisgICAgICAgICAgICBpZiBpbmZvIGlzIE5vbmU6CisgICAgICAgICAg
ICAgICAgIyBMb2NrIGlzbid0IGhlbGQKKyAgICAgICAgICAgICAgICBsb2NrX3Rva2VuID0gTm9u
ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2NrX3Rva2VuID0gaW5mby5n
ZXQoJ25vbmNlJykKKyAgICAgICAgICAgIGlmIHRva2VuICE9IGxvY2tfdG9rZW46CisgICAgICAg
ICAgICAgICAgcmFpc2UgZXJyb3JzLlRva2VuTWlzbWF0Y2godG9rZW4sIGxvY2tfdG9rZW4pCisK
Cg==

=== modified file bzrlib/tests/test_lockable_files.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2xvY2thYmxlX2ZpbGVzLnB5CisrKyBienJsaWIvdGVzdHMv
dGVzdF9sb2NrYWJsZV9maWxlcy5weQpAQCAtMjEsNiArMjEsNyBAQAogaW1wb3J0IGJ6cmxpYi5l
cnJvcnMgYXMgZXJyb3JzCiBmcm9tIGJ6cmxpYi5lcnJvcnMgaW1wb3J0IEJ6ckJhZFBhcmFtZXRl
ck5vdFN0cmluZywgTm9TdWNoRmlsZSwgUmVhZE9ubHlFcnJvcgogZnJvbSBienJsaWIubG9ja2Fi
bGVfZmlsZXMgaW1wb3J0IExvY2thYmxlRmlsZXMsIFRyYW5zcG9ydExvY2sKK2Zyb20gYnpybGli
IGltcG9ydCBsb2NrZGlyCiBmcm9tIGJ6cmxpYi5sb2NrZGlyIGltcG9ydCBMb2NrRGlyCiBmcm9t
IGJ6cmxpYi50ZXN0cyBpbXBvcnQgVGVzdENhc2VJblRlbXBEaXIKIGZyb20gYnpybGliLnRlc3Rz
LnRlc3RfdHJhbnNhY3Rpb25zIGltcG9ydCBEdW1teVdlYXZlCkBAIC0zNCw2ICszNSwxNSBAQAog
IyB0aGVzZSB0ZXN0cyBhcmUgYXBwbGllZCBpbiBlYWNoIHBhcmFtZXRlcml6ZWQgc3VpdGUgZm9y
IExvY2thYmxlRmlsZXMKIGNsYXNzIF9UZXN0TG9ja2FibGVGaWxlc19taXhpbihvYmplY3QpOgog
CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIFJlZHVjZSB0aGUgZGVmYXVsdCB0aW1l
b3V0LCBzbyB0aGF0IGlmIHRlc3RzIGZhaWwsIHRoZXkgd2lsbCBkbyBzbworICAgICAgICAjIHJl
YXNvbmFibHkgcXVpY2tseS4KKyAgICAgICAgb3JpZ190aW1lb3V0ID0gbG9ja2Rpci5fREVGQVVM
VF9USU1FT1VUX1NFQ09ORFMKKyAgICAgICAgZGVmIHJlc2V0VGltZW91dCgpOgorICAgICAgICAg
ICAgbG9ja2Rpci5fREVGQVVMVF9USU1FT1VUX1NFQ09ORFMgPSBvcmlnX3RpbWVvdXQKKyAgICAg
ICAgc2VsZi5hZGRDbGVhbnVwKHJlc2V0VGltZW91dCkKKyAgICAgICAgbG9ja2Rpci5fREVGQVVM
VF9USU1FT1VUX1NFQ09ORFMgPSAzCisKICAgICBkZWYgdGVzdF9yZWFkX3dyaXRlKHNlbGYpOgog
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb1N1Y2hGaWxlLCBzZWxmLmxvY2thYmxlLmdldCwg
J2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vU3VjaEZpbGUsIHNlbGYubG9ja2Fi
bGUuZ2V0X3V0ZjgsICdmb28nKQpAQCAtMTI1LDYgKzEzNSwxMTYgQEAKICAgICAgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5Mb2NrQnJva2VuLCBzZWxmLmxvY2thYmxlLnVubG9jaykK
ICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2NrYWJsZS5pc19sb2NrZWQoKSkK
IAorICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmV0dXJuc19Ob25lX3JlZnVzZXNfdG9rZW4oc2Vs
Zik6CisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJsZS5sb2NrX3dyaXRlKCkKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
IyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJsZSBzdXBwb3J0
cworICAgICAgICAgICAgICAgICMgdG9rZW5zLgorICAgICAgICAgICAgICAgIHJldHVybgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTG9ja2luZ05vdFN1cHBvcnRl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9ja2FibGUubG9ja193cml0
ZSwgdG9rZW49J3Rva2VuJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9j
a2FibGUudW5sb2NrKCkKKworICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmFpc2VzX29uX3Rva2Vu
X21pc21hdGNoKHNlbGYpOgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUubG9ja193cml0
ZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAg
ICAgICAgICAgIyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJs
ZSByZWZ1c2VzCisgICAgICAgICAgICAgICAgIyB0b2tlbnMuCisgICAgICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgICAgICBkaWZmZXJlbnRfdG9rZW4gPSB0b2tlbiArICd4eHgnCisgICAgICAg
ICAgICAjIFJlLXVzaW5nIHRoZSBzYW1lIGxvY2thYmxlIGluc3RhbmNlIHdpdGggYSBkaWZmZXJl
bnQgdG9rZW4gd2lsbAorICAgICAgICAgICAgIyByYWlzZSBUb2tlbk1pc21hdGNoLgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTWlzbWF0Y2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2thYmxlLmxvY2tfd3JpdGUsIHRva2VuPWRpZmZl
cmVudF90b2tlbikKKyAgICAgICAgICAgICMgQSBzZXBlcmF0ZSBpbnN0YW5jZSBmb3IgdGhlIHNh
bWUgbG9ja2FibGUgd2lsbCBhbHNvIHJhaXNlCisgICAgICAgICAgICAjIFRva2VuTWlzbWF0Y2gu
CisgICAgICAgICAgICAjIFRoaXMgZGV0ZWN0cyB0aGUgY2FzZSB3aGVyZSBhIGNhbGxlciBjbGFp
bXMgdG8gaGF2ZSBhIGxvY2sgKHZpYQorICAgICAgICAgICAgIyB0aGUgdG9rZW4pIGZvciBhbiBl
eHRlcm5hbCByZXNvdXJjZSwgYnV0IGRvZXNuJ3QgKHRoZSB0b2tlbiBpcworICAgICAgICAgICAg
IyBkaWZmZXJlbnQpLiAgQ2xpZW50cyBuZWVkIGEgc2VwZXJhdGUgbG9jayBvYmplY3QgdG8gbWFr
ZSBzdXJlIHRoZQorICAgICAgICAgICAgIyBleHRlcm5hbCByZXNvdXJjZSBpcyBwcm9iZWQsIHdo
ZXJlYXMgdGhlIGV4aXN0aW5nIGxvY2sgb2JqZWN0CisgICAgICAgICAgICAjIG1pZ2h0IGNhY2hl
LgorICAgICAgICAgICAgbmV3X2xvY2thYmxlID0gc2VsZi5nZXRfbG9ja2FibGUoKQorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTWlzbWF0Y2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0ZSwgdG9rZW49ZGlmZmVy
ZW50X3Rva2VuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS51
bmxvY2soKQorCisgICAgZGVmIHRlc3RfbG9ja193cml0ZV93aXRoX21hdGNoaW5nX3Rva2VuKHNl
bGYpOgorICAgICAgICAjIElmIHRoZSB0b2tlbiBtYXRjaGVzLCBzbyBubyBleGNlcHRpb24gaXMg
cmFpc2VkIGJ5IGxvY2tfd3JpdGUuCisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJsZS5sb2Nr
X3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgTm9uZToKKyAg
ICAgICAgICAgICAgICAjIFRoaXMgdGVzdCBkb2VzIG5vdCBhcHBseSwgYmVjYXVzZSB0aGlzIGxv
Y2thYmxlIHJlZnVzZXMKKyAgICAgICAgICAgICAgICAjIHRva2Vucy4KKyAgICAgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgICAgICMgVGhlIHNhbWUgaW5zdGFuY2Ugd2lsbCBhY2NlcHQgYSBz
ZWNvbmQgbG9ja193cml0ZSBpZiB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAjIHRva2VuIG1h
dGNoZXMuCisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLmxvY2tfd3JpdGUodG9rZW49dG9rZW4p
CisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLnVubG9jaygpCisgICAgICAgICAgICAjIENhbGxp
bmcgbG9ja193cml0ZSBvbiBhIG5ldyBpbnN0YW5jZSBmb3IgdGhlIHNhbWUgbG9ja2FibGUgd2ls
bAorICAgICAgICAgICAgIyBhbHNvIHN1Y2NlZWQuCisgICAgICAgICAgICBuZXdfbG9ja2FibGUg
PSBzZWxmLmdldF9sb2NrYWJsZSgpCisgICAgICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0
ZSh0b2tlbj10b2tlbikKKyAgICAgICAgICAgIG5ld19sb2NrYWJsZS51bmxvY2soKQorICAgICAg
ICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS51bmxvY2soKQorCisgICAgZGVm
IHRlc3RfdW5sb2NrX2FmdGVyX2xvY2tfd3JpdGVfd2l0aF90b2tlbihzZWxmKToKKyAgICAgICAg
IyBJZiBsb2NrX3dyaXRlIGRpZCBub3QgcGh5c2ljYWxseSBhY3F1aXJlIHRoZSBsb2NrIChiZWNh
dXNlIGl0IHdhcworICAgICAgICAjIHBhc3NlZCBhIHRva2VuKSwgdGhlbiB1bmxvY2sgc2hvdWxk
IG5vdCBwaHlzaWNhbGx5IHJlbGVhc2UgaXQuCisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJs
ZS5sb2NrX3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgTm9u
ZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgdGVzdCBkb2VzIG5vdCBhcHBseSwgYmVjYXVzZSB0
aGlzIGxvY2thYmxlIHJlZnVzZXMKKyAgICAgICAgICAgICAgICAjIHRva2Vucy4KKyAgICAgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIG5ld19sb2NrYWJsZSA9IHNlbGYuZ2V0X2xvY2th
YmxlKCkKKyAgICAgICAgICAgIG5ld19sb2NrYWJsZS5sb2NrX3dyaXRlKHRva2VuPXRva2VuKQor
ICAgICAgICAgICAgbmV3X2xvY2thYmxlLnVubG9jaygpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoc2VsZi5sb2NrYWJsZS5nZXRfcGh5c2ljYWxfbG9ja19zdGF0dXMoKSkKKyAgICAgICAg
ZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9ja2FibGUudW5sb2NrKCkKKworICAgIGRlZiB0
ZXN0X2xvY2tfd3JpdGVfd2l0aF90b2tlbl9mYWlsc193aGVuX3VubG9ja2VkKHNlbGYpOgorICAg
ICAgICAjIExvY2sgYW5kIHVubG9jayB0byBnZXQgYSBzdXBlcmZpY2lhbGx5IHZhbGlkIHRva2Vu
LiAgVGhpcyBtaW1pY3MgYQorICAgICAgICAjIGxpa2VseSBwcm9ncmFtbWluZyBlcnJvciwgd2hl
cmUgYSBjYWxsZXIgYWNjaWRlbnRhbGx5IHRyaWVzIHRvIGxvY2sKKyAgICAgICAgIyB3aXRoIGEg
dG9rZW4gdGhhdCBpcyBubyBsb25nZXIgdmFsaWQgKGJlY2F1c2UgdGhlIG9yaWdpbmFsIGxvY2sg
d2FzCisgICAgICAgICMgcmVsZWFzZWQpLgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUu
bG9ja193cml0ZSgpCisgICAgICAgIHNlbGYubG9ja2FibGUudW5sb2NrKCkKKyAgICAgICAgaWYg
dG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgICMgVGhpcyB0ZXN0IGRvZXMgbm90IGFwcGx5LCBi
ZWNhdXNlIHRoaXMgbG9ja2FibGUgcmVmdXNlcworICAgICAgICAgICAgIyB0b2tlbnMuCisgICAg
ICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuVG9rZW5N
aXNtYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS5sb2NrX3dy
aXRlLCB0b2tlbj10b2tlbikKKworICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmVlbnRlcl93aXRo
X3Rva2VuKHNlbGYpOgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUubG9ja193cml0ZSgp
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAgICAg
ICAgICAgIyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJsZSBy
ZWZ1c2VzCisgICAgICAgICAgICAgICAgIyB0b2tlbnMuCisgICAgICAgICAgICAgICAgcmV0dXJu
CisgICAgICAgICAgICAjIFJlbG9jayB3aXRoIGEgdG9rZW4uCisgICAgICAgICAgICBzZWxmLmxv
Y2thYmxlLmxvY2tfd3JpdGUodG9rZW49dG9rZW4pCisgICAgICAgICAgICBzZWxmLmxvY2thYmxl
LnVubG9jaygpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLnVu
bG9jaygpCisgICAgICAgICMgVGhlIGxvY2sgc2hvdWxkIGJlIHVubG9ja2VkIG9uIGRpc2suICBW
ZXJpZnkgdGhhdCB3aXRoIGEgbmV3IGxvY2sKKyAgICAgICAgIyBpbnN0YW5jZS4KKyAgICAgICAg
bmV3X2xvY2thYmxlID0gc2VsZi5nZXRfbG9ja2FibGUoKQorICAgICAgICAjIENhbGxpbmcgbG9j
a193cml0ZSBub3cgc2hvdWxkIHdvcmssIHJhdGhlciB0aGFuIHJhaXNlIExvY2tDb250ZW50aW9u
LgorICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0ZSgpCisgICAgICAgIG5ld19sb2NrYWJs
ZS51bmxvY2soKQorCisKKworCiAKICMgVGhpcyBtZXRob2Qgb2YgYWRhcHRpbmcgdGVzdHMgdG8g
cGFyYW1ldGVycyBpcyBkaWZmZXJlbnQgdG8gCiAjIHRoZSBUZXN0UHJvdmlkZXJBZGFwdGVycyB1
c2VkIGVsc2V3aGVyZSwgYnV0IHNlZW1zIHNpbXBsZXIgZm9yIHRoaXMgCkBAIC0xMzMsNyArMjUz
LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Rlc3RMb2NrYWJs
ZUZpbGVzX21peGluKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwZXIoVGVz
dExvY2thYmxlRmlsZXNfVHJhbnNwb3J0TG9jaywgc2VsZikuc2V0VXAoKQorICAgICAgICBUZXN0
Q2FzZUluVGVtcERpci5zZXRVcChzZWxmKQorICAgICAgICBfVGVzdExvY2thYmxlRmlsZXNfbWl4
aW4uc2V0VXAoc2VsZikKICAgICAgICAgdHJhbnNwb3J0ID0gZ2V0X3RyYW5zcG9ydCgnLicpCiAg
ICAgICAgIHRyYW5zcG9ydC5ta2RpcignLmJ6cicpCiAgICAgICAgIHNlbGYuc3ViX3RyYW5zcG9y
dCA9IHRyYW5zcG9ydC5jbG9uZSgnLmJ6cicpCkBAIC0xNTUsNyArMjc2LDggQEAKICAgICAiIiJM
b2NrYWJsZUZpbGUgdGVzdHMgcnVuIHdpdGggTG9ja0RpciB1bmRlcm5lYXRoIiIiCiAKICAgICBk
ZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cGVyKFRlc3RMb2NrYWJsZUZpbGVzX0xvY2tEaXIs
IHNlbGYpLnNldFVwKCkKKyAgICAgICAgVGVzdENhc2VJblRlbXBEaXIuc2V0VXAoc2VsZikKKyAg
ICAgICAgX1Rlc3RMb2NrYWJsZUZpbGVzX21peGluLnNldFVwKHNlbGYpCiAgICAgICAgIHNlbGYu
dHJhbnNwb3J0ID0gZ2V0X3RyYW5zcG9ydCgnLicpCiAgICAgICAgIHNlbGYubG9ja2FibGUgPSBz
ZWxmLmdldF9sb2NrYWJsZSgpCiAgICAgICAgICMgdGhlIGxvY2sgY3JlYXRpb24gaGVyZSBzZXRz
IG1vZGUgLSB0ZXN0X3Blcm1pc3Npb25zIG9uIGJyYW5jaCAKCg==

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200703280
... 70842-r843houy668oxb9o
# revision id: andrew.bennetts at canonical.com-20070328070842-r843houy668oxb9o
# sha1: e5e7a8d4caf068695408ce139e5fbb7278ecdc65
# inventory sha1: 952965bd42b759dc63643378de70b95521d4829d
# parent ids:
#   andrew.bennetts at canonical.com-20070212044932-k9keo85c0s9gg5wv
#   pqm at pqm.ubuntu.com-20070328022809-40aa40f8edf4e502
# properties:
#   branch-nick: bzr.dev.hpss.api.changes

# message:
#   ``LockableFiles.lock_write()`` now accepts a ``token`` keyword argument, so that
#   a seperate LockableFiles instance can share a lock if it has the right token.
#   (Andrew Bennetts, Robert Collins)
#   
# committer: Andrew Bennetts <andrew.bennetts at canonical.com>
# date: Mon 2007-02-12 15:49:32.362999916 +1100

=== modified file NEWS // encoding:base64
LS0tIE5FV1MKKysrIE5FV1MKQEAgLTc3LDYgKzc3LDEwIEBACiAgICAgICB5b3UgcGFzcyBhIFVu
aWNvZGUgc3RyaW5nIHJhdGhlciB0aGFuIGFuIDgtYml0IHN0cmluZy4gQ2FsbGVycyBuZWVkCiAg
ICAgICB0byBiZSB1cGRhdGVkIHRvIGVuY29kZSBmaXJzdC4gKEpvaG4gQXJiYXNoIE1laW5lbCkK
IAorICAgICogYGBMb2NrYWJsZUZpbGVzLmxvY2tfd3JpdGUoKWBgIG5vdyBhY2NlcHRzIGEgYGB0
b2tlbmBgIGtleXdvcmQgYXJndW1lbnQsCisgICAgICBzbyB0aGF0IGEgc2VwZXJhdGUgTG9ja2Fi
bGVGaWxlcyBpbnN0YW5jZSBjYW4gc2hhcmUgYSBsb2NrIGlmIGl0IGhhcyB0aGUKKyAgICAgIHJp
Z2h0IHRva2VuLiAgKEFuZHJldyBCZW5uZXR0cywgUm9iZXJ0IENvbGxpbnMpCisKICAgQlVHRklY
RVM6CiAKICAgICAqIGBgYnpyIGFubm90YXRlYGAgbm93IHVzZXMgZG90dGVkIHJldm5vcyBmcm9t
IHRoZSB2aWV3cG9pbnQgb2YgdGhlCgo=

=== modified file bzrlib/errors.py // encoding:base64
LS0tIGJ6cmxpYi9lcnJvcnMucHkKKysrIGJ6cmxpYi9lcnJvcnMucHkKQEAgLTc0NCw2ICs3NDQs
MjcgQEAKICAgICAgICAgc2VsZi5sb2NrID0gbG9jawogCiAKK2NsYXNzIFRva2VuTG9ja2luZ05v
dFN1cHBvcnRlZChMb2NrRXJyb3IpOgorCisgICAgX2ZtdCA9ICJUaGUgb2JqZWN0ICUob2JqKXMg
ZG9lcyBub3Qgc3VwcG9ydCB0b2tlbiBzcGVjaWZ5aW5nIGEgdG9rZW4gd2hlbiBsb2NraW5nLiIK
KworICAgIGludGVybmFsX2Vycm9yID0gVHJ1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9i
aik6CisgICAgICAgIHNlbGYub2JqID0gb2JqCisKKworY2xhc3MgVG9rZW5NaXNtYXRjaChMb2Nr
RXJyb3IpOgorCisgICAgX2ZtdCA9ICJUaGUgbG9jayB0b2tlbiAlKGdpdmVuX3Rva2VuKXIgZG9l
cyBub3QgbWF0Y2ggbG9jayB0b2tlbiAlKGxvY2tfdG9rZW4pci4iCisKKyAgICBpbnRlcm5hbF9l
cnJvciA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnaXZlbl90b2tlbiwgbG9ja190
b2tlbik6CisgICAgICAgIHNlbGYuZ2l2ZW5fdG9rZW4gPSBnaXZlbl90b2tlbgorICAgICAgICBz
ZWxmLmxvY2tfdG9rZW4gPSBsb2NrX3Rva2VuCisKKwogY2xhc3MgUG9pbnRsZXNzQ29tbWl0KEJ6
ckVycm9yKToKIAogICAgIF9mbXQgPSAiTm8gY2hhbmdlcyB0byBjb21taXQiCgo=

=== modified file bzrlib/lockable_files.py // encoding:base64
LS0tIGJ6cmxpYi9sb2NrYWJsZV9maWxlcy5weQorKysgYnpybGliL2xvY2thYmxlX2ZpbGVzLnB5
CkBAIC0yMTIsMjEgKzIxMiwzMyBAQAogICAgICAgICAgICAgcmFpc2UgZXJyb3JzLkJ6ckJhZFBh
cmFtZXRlck5vdFN0cmluZyhhX3N0cmluZykKICAgICAgICAgc2VsZi5wdXQocGF0aCwgU3RyaW5n
SU8oYV9zdHJpbmcuZW5jb2RlKCd1dGYtOCcpKSkKIAotICAgIGRlZiBsb2NrX3dyaXRlKHNlbGYp
OgorICAgIGRlZiBsb2NrX3dyaXRlKHNlbGYsIHRva2VuPU5vbmUpOgorICAgICAgICAiIiJMb2Nr
IHRoaXMgZ3JvdXAgb2YgZmlsZXMgZm9yIHdyaXRpbmcuCisgICAgICAgIAorICAgICAgICA6cGFy
YW0gdG9rZW46IGlmIHRoaXMgaXMgYWxyZWFkeSBsb2NrZWQsIHRoZW4gbG9ja193cml0ZSB3aWxs
IGZhaWwKKyAgICAgICAgICAgIHVubGVzcyB0aGUgdG9rZW4gbWF0Y2hlcyB0aGUgZXhpc3Rpbmcg
bG9jay4KKyAgICAgICAgOnJldHVybnM6IGEgdG9rZW4gaWYgdGhpcyBpbnN0YW5jZSBzdXBwb3J0
cyB0b2tlbnMsIG90aGVyd2lzZSBOb25lLgorICAgICAgICA6cmFpc2VzIFRva2VuTG9ja2luZ05v
dFN1cHBvcnRlZDogd2hlbiBhIHRva2VuIGlzIGdpdmVuIGJ1dCB0aGlzCisgICAgICAgICAgICBp
bnN0YW5jZSBkb2Vzbid0IHN1cHBvcnQgdXNpbmcgdG9rZW4gbG9ja3MuCisgICAgICAgIDpyYWlz
ZXMgTWlzbWF0Y2hlZFRva2VuOiBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGRvZXNuJ3QgbWF0Y2gg
dGhlIHRva2VuCisgICAgICAgICAgICBvZiB0aGUgZXhpc3RpbmcgbG9jay4KKyAgICAgICAgIiIi
CiAgICAgICAgICMgbXV0dGVyKCJsb2NrIHdyaXRlOiAlcyAoJXMpIiwgc2VsZiwgc2VsZi5fbG9j
a19jb3VudCkKICAgICAgICAgIyBUT0RPOiBVcGdyYWRlIGxvY2tpbmcgdG8gc3VwcG9ydCB1c2lu
ZyBhIFRyYW5zcG9ydCwKICAgICAgICAgIyBhbmQgcG90ZW50aWFsbHkgYSByZW1vdGUgbG9ja2lu
ZyBwcm90b2NvbAogICAgICAgICBpZiBzZWxmLl9sb2NrX21vZGU6CiAgICAgICAgICAgICBpZiBz
ZWxmLl9sb2NrX21vZGUgIT0gJ3cnIG9yIG5vdCBzZWxmLmdldF90cmFuc2FjdGlvbigpLndyaXRl
YWJsZSgpOgogICAgICAgICAgICAgICAgIHJhaXNlIGVycm9ycy5SZWFkT25seUVycm9yKHNlbGYp
CisgICAgICAgICAgICBzZWxmLl9sb2NrLnZhbGlkYXRlX3Rva2VuKHRva2VuKQogICAgICAgICAg
ICAgc2VsZi5fbG9ja19jb3VudCArPSAxCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxm
Ll9sb2NrLmxvY2tfd3JpdGUoKQorICAgICAgICAgICAgdG9rZW5fZnJvbV9sb2NrID0gc2VsZi5f
bG9jay5sb2NrX3dyaXRlKHRva2VuPXRva2VuKQogICAgICAgICAgICAgI25vdGUoJ3dyaXRlIGxv
Y2tpbmcgJXMnLCBzZWxmKQogICAgICAgICAgICAgI3RyYWNlYmFjay5wcmludF9zdGFjaygpCiAg
ICAgICAgICAgICBzZWxmLl9sb2NrX21vZGUgPSAndycKICAgICAgICAgICAgIHNlbGYuX2xvY2tf
Y291bnQgPSAxCiAgICAgICAgICAgICBzZWxmLl9zZXRfdHJhbnNhY3Rpb24odHJhbnNhY3Rpb25z
LldyaXRlVHJhbnNhY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiB0b2tlbl9mcm9tX2xvY2sK
IAogICAgIGRlZiBsb2NrX3JlYWQoc2VsZik6CiAgICAgICAgICMgbXV0dGVyKCJsb2NrIHJlYWQ6
ICVzICglcykiLCBzZWxmLCBzZWxmLl9sb2NrX2NvdW50KQpAQCAtMzIzLDcgKzMzNSw5IEBACiAg
ICAgZGVmIGJyZWFrX2xvY2soc2VsZik6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJy
b3Ioc2VsZi5icmVha19sb2NrKQogCi0gICAgZGVmIGxvY2tfd3JpdGUoc2VsZik6CisgICAgZGVm
IGxvY2tfd3JpdGUoc2VsZiwgdG9rZW49Tm9uZSk6CisgICAgICAgIGlmIHRva2VuIGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JzLlRva2VuTG9ja2luZ05vdFN1cHBvcnRlZChz
ZWxmKQogICAgICAgICBzZWxmLl9sb2NrID0gc2VsZi5fdHJhbnNwb3J0LmxvY2tfd3JpdGUoc2Vs
Zi5fZXNjYXBlZF9uYW1lKQogCiAgICAgZGVmIGxvY2tfcmVhZChzZWxmKToKQEAgLTM0MSwzICsz
NTUsOCBAQAogICAgICAgICAjIGZvciBvbGQtc3R5bGUgbG9ja3MsIGNyZWF0ZSB0aGUgZmlsZSBu
b3cKICAgICAgICAgc2VsZi5fdHJhbnNwb3J0LnB1dF9ieXRlcyhzZWxmLl9lc2NhcGVkX25hbWUs
ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9c2VsZi5fZmlsZV9tb2RlYml0
cykKKworICAgIGRlZiB2YWxpZGF0ZV90b2tlbihzZWxmLCB0b2tlbik6CisgICAgICAgIGlmIHRv
a2VuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JzLlRva2VuTG9ja2luZ05v
dFN1cHBvcnRlZChzZWxmKQorICAgICAgICAKCg==

=== modified file bzrlib/lockdir.py // encoding:base64
LS0tIGJ6cmxpYi9sb2NrZGlyLnB5CisrKyBienJsaWIvbG9ja2Rpci5weQpAQCAtMTYwLDYgKzE2
MCw3IEBACiAgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CiAgICAgICAgIHNlbGYu
cGF0aCA9IHBhdGgKICAgICAgICAgc2VsZi5fbG9ja19oZWxkID0gRmFsc2UKKyAgICAgICAgc2Vs
Zi5fbG9ja2VkX3ZpYV90b2tlbiA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Zha2VfcmVhZF9sb2Nr
ID0gRmFsc2UKICAgICAgICAgc2VsZi5faGVsZF9kaXIgPSBwYXRoICsgJy9oZWxkJwogICAgICAg
ICBzZWxmLl9oZWxkX2luZm9fcGF0aCA9IHNlbGYuX2hlbGRfZGlyICsgc2VsZi5fX0lORk9fTkFN
RQpAQCAtMjM0LDE1ICsyMzUsMTkgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBu
b3Qgc2VsZi5fbG9ja19oZWxkOgogICAgICAgICAgICAgcmFpc2UgTG9ja05vdEhlbGQoc2VsZikK
LSAgICAgICAgIyByZW5hbWUgYmVmb3JlIGRlbGV0aW5nLCBiZWNhdXNlIHdlIGNhbid0IGF0b21p
Y2FsbHkgcmVtb3ZlIHRoZSB3aG9sZQotICAgICAgICAjIHRyZWUKLSAgICAgICAgdG1wbmFtZSA9
ICclcy9yZWxlYXNpbmcuJXMudG1wJyAlIChzZWxmLnBhdGgsIHJhbmRfY2hhcnMoMjApKQotICAg
ICAgICAjIGdvdHRhIG93biBpdCB0byB1bmxvY2sKLSAgICAgICAgc2VsZi5jb25maXJtKCkKLSAg
ICAgICAgc2VsZi50cmFuc3BvcnQucmVuYW1lKHNlbGYuX2hlbGRfZGlyLCB0bXBuYW1lKQotICAg
ICAgICBzZWxmLl9sb2NrX2hlbGQgPSBGYWxzZQotICAgICAgICBzZWxmLnRyYW5zcG9ydC5kZWxl
dGUodG1wbmFtZSArIHNlbGYuX19JTkZPX05BTUUpCi0gICAgICAgIHNlbGYudHJhbnNwb3J0LnJt
ZGlyKHRtcG5hbWUpCisgICAgICAgIGlmIHNlbGYuX2xvY2tlZF92aWFfdG9rZW46CisgICAgICAg
ICAgICBzZWxmLl9sb2NrZWRfdmlhX3Rva2VuID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX2xv
Y2tfaGVsZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHJlbmFtZSBiZWZv
cmUgZGVsZXRpbmcsIGJlY2F1c2Ugd2UgY2FuJ3QgYXRvbWljYWxseSByZW1vdmUgdGhlCisgICAg
ICAgICAgICAjIHdob2xlIHRyZWUKKyAgICAgICAgICAgIHRtcG5hbWUgPSAnJXMvcmVsZWFzaW5n
LiVzLnRtcCcgJSAoc2VsZi5wYXRoLCByYW5kX2NoYXJzKDIwKSkKKyAgICAgICAgICAgICMgZ290
dGEgb3duIGl0IHRvIHVubG9jaworICAgICAgICAgICAgc2VsZi5jb25maXJtKCkKKyAgICAgICAg
ICAgIHNlbGYudHJhbnNwb3J0LnJlbmFtZShzZWxmLl9oZWxkX2RpciwgdG1wbmFtZSkKKyAgICAg
ICAgICAgIHNlbGYuX2xvY2tfaGVsZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnRyYW5zcG9y
dC5kZWxldGUodG1wbmFtZSArIHNlbGYuX19JTkZPX05BTUUpCisgICAgICAgICAgICBzZWxmLnRy
YW5zcG9ydC5ybWRpcih0bXBuYW1lKQogCiAgICAgZGVmIGJyZWFrX2xvY2soc2VsZik6CiAgICAg
ICAgICIiIkJyZWFrIGEgbG9jayBub3QgaGVsZCBieSB0aGlzIGluc3RhbmNlIG9mIExvY2tEaXIu
CkBAIC00MTUsOSArNDIwLDI2IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAg
IHJhaXNlIExvY2tDb250ZW50aW9uKHNlbGYpCiAKLSAgICBkZWYgbG9ja193cml0ZShzZWxmKToK
LSAgICAgICAgIiIiV2FpdCBmb3IgYW5kIGFjcXVpcmUgdGhlIGxvY2suIiIiCi0gICAgICAgIHNl
bGYud2FpdF9sb2NrKCkKKyAgICBkZWYgbG9ja193cml0ZShzZWxmLCB0b2tlbj1Ob25lKToKKyAg
ICAgICAgIiIiV2FpdCBmb3IgYW5kIGFjcXVpcmUgdGhlIGxvY2suCisgICAgICAgIAorICAgICAg
ICA6cGFyYW0gdG9rZW46IGlmIHRoaXMgaXMgYWxyZWFkeSBsb2NrZWQsIHRoZW4gbG9ja193cml0
ZSB3aWxsIGZhaWwKKyAgICAgICAgICAgIHVubGVzcyB0aGUgdG9rZW4gbWF0Y2hlcyB0aGUgZXhp
c3RpbmcgbG9jay4KKyAgICAgICAgOnJldHVybnM6IGEgdG9rZW4gaWYgdGhpcyBpbnN0YW5jZSBz
dXBwb3J0cyB0b2tlbnMsIG90aGVyd2lzZSBOb25lLgorICAgICAgICA6cmFpc2VzIFRva2VuTG9j
a2luZ05vdFN1cHBvcnRlZDogd2hlbiBhIHRva2VuIGlzIGdpdmVuIGJ1dCB0aGlzCisgICAgICAg
ICAgICBpbnN0YW5jZSBkb2Vzbid0IHN1cHBvcnQgdXNpbmcgdG9rZW4gbG9ja3MuCisgICAgICAg
IDpyYWlzZXMgTWlzbWF0Y2hlZFRva2VuOiBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGRvZXNuJ3Qg
bWF0Y2ggdGhlIHRva2VuCisgICAgICAgICAgICBvZiB0aGUgZXhpc3RpbmcgbG9jay4KKyAgICAg
ICAgIAorICAgICAgICBYWFg6IGRvY3N0cmluZyBkdXBsaWNhdGVkIGZyb20gTG9ja2FibGVGaWxl
cy5sb2NrX3dyaXRlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgdG9rZW4gaXMgbm90IE5vbmU6
CisgICAgICAgICAgICBzZWxmLnZhbGlkYXRlX3Rva2VuKHRva2VuKQorICAgICAgICAgICAgc2Vs
Zi5fbG9ja19oZWxkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fbG9ja2VkX3ZpYV90b2tlbiA9
IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYud2FpdF9sb2NrKCkKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLnBlZWsoKS5nZXQoJ25vbmNlJykKIAogICAgIGRlZiBsb2NrX3Jl
YWQoc2VsZik6CiAgICAgICAgICIiIkNvbXBhdGliaWxpdHktbW9kZSBzaGFyZWQgbG9jay4KQEAg
LTQ1NywzICs0NzksMTQgQEAKICAgICAgICAgICAgICdsb2NrZWQgJXMnICUgKGZvcm1hdF9kZWx0
YShkZWx0YSksKSwKICAgICAgICAgICAgIF0KIAorICAgIGRlZiB2YWxpZGF0ZV90b2tlbihzZWxm
LCB0b2tlbik6CisgICAgICAgIGlmIHRva2VuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5m
byA9IHNlbGYucGVlaygpCisgICAgICAgICAgICBpZiBpbmZvIGlzIE5vbmU6CisgICAgICAgICAg
ICAgICAgIyBMb2NrIGlzbid0IGhlbGQKKyAgICAgICAgICAgICAgICBsb2NrX3Rva2VuID0gTm9u
ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2NrX3Rva2VuID0gaW5mby5n
ZXQoJ25vbmNlJykKKyAgICAgICAgICAgIGlmIHRva2VuICE9IGxvY2tfdG9rZW46CisgICAgICAg
ICAgICAgICAgcmFpc2UgZXJyb3JzLlRva2VuTWlzbWF0Y2godG9rZW4sIGxvY2tfdG9rZW4pCisK
Cg==

=== modified file bzrlib/tests/test_lockable_files.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2xvY2thYmxlX2ZpbGVzLnB5CisrKyBienJsaWIvdGVzdHMv
dGVzdF9sb2NrYWJsZV9maWxlcy5weQpAQCAtMjEsNiArMjEsNyBAQAogaW1wb3J0IGJ6cmxpYi5l
cnJvcnMgYXMgZXJyb3JzCiBmcm9tIGJ6cmxpYi5lcnJvcnMgaW1wb3J0IEJ6ckJhZFBhcmFtZXRl
ck5vdFN0cmluZywgTm9TdWNoRmlsZSwgUmVhZE9ubHlFcnJvcgogZnJvbSBienJsaWIubG9ja2Fi
bGVfZmlsZXMgaW1wb3J0IExvY2thYmxlRmlsZXMsIFRyYW5zcG9ydExvY2sKK2Zyb20gYnpybGli
IGltcG9ydCBsb2NrZGlyCiBmcm9tIGJ6cmxpYi5sb2NrZGlyIGltcG9ydCBMb2NrRGlyCiBmcm9t
IGJ6cmxpYi50ZXN0cyBpbXBvcnQgVGVzdENhc2VJblRlbXBEaXIKIGZyb20gYnpybGliLnRlc3Rz
LnRlc3RfdHJhbnNhY3Rpb25zIGltcG9ydCBEdW1teVdlYXZlCkBAIC0zNCw2ICszNSwxNSBAQAog
IyB0aGVzZSB0ZXN0cyBhcmUgYXBwbGllZCBpbiBlYWNoIHBhcmFtZXRlcml6ZWQgc3VpdGUgZm9y
IExvY2thYmxlRmlsZXMKIGNsYXNzIF9UZXN0TG9ja2FibGVGaWxlc19taXhpbihvYmplY3QpOgog
CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIFJlZHVjZSB0aGUgZGVmYXVsdCB0aW1l
b3V0LCBzbyB0aGF0IGlmIHRlc3RzIGZhaWwsIHRoZXkgd2lsbCBkbyBzbworICAgICAgICAjIHJl
YXNvbmFibHkgcXVpY2tseS4KKyAgICAgICAgb3JpZ190aW1lb3V0ID0gbG9ja2Rpci5fREVGQVVM
VF9USU1FT1VUX1NFQ09ORFMKKyAgICAgICAgZGVmIHJlc2V0VGltZW91dCgpOgorICAgICAgICAg
ICAgbG9ja2Rpci5fREVGQVVMVF9USU1FT1VUX1NFQ09ORFMgPSBvcmlnX3RpbWVvdXQKKyAgICAg
ICAgc2VsZi5hZGRDbGVhbnVwKHJlc2V0VGltZW91dCkKKyAgICAgICAgbG9ja2Rpci5fREVGQVVM
VF9USU1FT1VUX1NFQ09ORFMgPSAzCisKICAgICBkZWYgdGVzdF9yZWFkX3dyaXRlKHNlbGYpOgog
ICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb1N1Y2hGaWxlLCBzZWxmLmxvY2thYmxlLmdldCwg
J2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vU3VjaEZpbGUsIHNlbGYubG9ja2Fi
bGUuZ2V0X3V0ZjgsICdmb28nKQpAQCAtMTIyLDYgKzEzMiwxMTYgQEAKICAgICAgICAgICAgIHNl
bGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5Mb2NrQnJva2VuLCBzZWxmLmxvY2thYmxlLnVubG9jaykK
ICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2NrYWJsZS5pc19sb2NrZWQoKSkK
IAorICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmV0dXJuc19Ob25lX3JlZnVzZXNfdG9rZW4oc2Vs
Zik6CisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJsZS5sb2NrX3dyaXRlKCkKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
IyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJsZSBzdXBwb3J0
cworICAgICAgICAgICAgICAgICMgdG9rZW5zLgorICAgICAgICAgICAgICAgIHJldHVybgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTG9ja2luZ05vdFN1cHBvcnRl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9ja2FibGUubG9ja193cml0
ZSwgdG9rZW49J3Rva2VuJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9j
a2FibGUudW5sb2NrKCkKKworICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmFpc2VzX29uX3Rva2Vu
X21pc21hdGNoKHNlbGYpOgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUubG9ja193cml0
ZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAg
ICAgICAgICAgIyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJs
ZSByZWZ1c2VzCisgICAgICAgICAgICAgICAgIyB0b2tlbnMuCisgICAgICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgICAgICBkaWZmZXJlbnRfdG9rZW4gPSB0b2tlbiArICd4eHgnCisgICAgICAg
ICAgICAjIFJlLXVzaW5nIHRoZSBzYW1lIGxvY2thYmxlIGluc3RhbmNlIHdpdGggYSBkaWZmZXJl
bnQgdG9rZW4gd2lsbAorICAgICAgICAgICAgIyByYWlzZSBUb2tlbk1pc21hdGNoLgorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTWlzbWF0Y2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2thYmxlLmxvY2tfd3JpdGUsIHRva2VuPWRpZmZl
cmVudF90b2tlbikKKyAgICAgICAgICAgICMgQSBzZXBlcmF0ZSBpbnN0YW5jZSBmb3IgdGhlIHNh
bWUgbG9ja2FibGUgd2lsbCBhbHNvIHJhaXNlCisgICAgICAgICAgICAjIFRva2VuTWlzbWF0Y2gu
CisgICAgICAgICAgICAjIFRoaXMgZGV0ZWN0cyB0aGUgY2FzZSB3aGVyZSBhIGNhbGxlciBjbGFp
bXMgdG8gaGF2ZSBhIGxvY2sgKHZpYQorICAgICAgICAgICAgIyB0aGUgdG9rZW4pIGZvciBhbiBl
eHRlcm5hbCByZXNvdXJjZSwgYnV0IGRvZXNuJ3QgKHRoZSB0b2tlbiBpcworICAgICAgICAgICAg
IyBkaWZmZXJlbnQpLiAgQ2xpZW50cyBuZWVkIGEgc2VwZXJhdGUgbG9jayBvYmplY3QgdG8gbWFr
ZSBzdXJlIHRoZQorICAgICAgICAgICAgIyBleHRlcm5hbCByZXNvdXJjZSBpcyBwcm9iZWQsIHdo
ZXJlYXMgdGhlIGV4aXN0aW5nIGxvY2sgb2JqZWN0CisgICAgICAgICAgICAjIG1pZ2h0IGNhY2hl
LgorICAgICAgICAgICAgbmV3X2xvY2thYmxlID0gc2VsZi5nZXRfbG9ja2FibGUoKQorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLlRva2VuTWlzbWF0Y2gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0ZSwgdG9rZW49ZGlmZmVy
ZW50X3Rva2VuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS51
bmxvY2soKQorCisgICAgZGVmIHRlc3RfbG9ja193cml0ZV93aXRoX21hdGNoaW5nX3Rva2VuKHNl
bGYpOgorICAgICAgICAjIElmIHRoZSB0b2tlbiBtYXRjaGVzLCBzbyBubyBleGNlcHRpb24gaXMg
cmFpc2VkIGJ5IGxvY2tfd3JpdGUuCisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJsZS5sb2Nr
X3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgTm9uZToKKyAg
ICAgICAgICAgICAgICAjIFRoaXMgdGVzdCBkb2VzIG5vdCBhcHBseSwgYmVjYXVzZSB0aGlzIGxv
Y2thYmxlIHJlZnVzZXMKKyAgICAgICAgICAgICAgICAjIHRva2Vucy4KKyAgICAgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgICAgICMgVGhlIHNhbWUgaW5zdGFuY2Ugd2lsbCBhY2NlcHQgYSBz
ZWNvbmQgbG9ja193cml0ZSBpZiB0aGUgc3BlY2lmaWVkCisgICAgICAgICAgICAjIHRva2VuIG1h
dGNoZXMuCisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLmxvY2tfd3JpdGUodG9rZW49dG9rZW4p
CisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLnVubG9jaygpCisgICAgICAgICAgICAjIENhbGxp
bmcgbG9ja193cml0ZSBvbiBhIG5ldyBpbnN0YW5jZSBmb3IgdGhlIHNhbWUgbG9ja2FibGUgd2ls
bAorICAgICAgICAgICAgIyBhbHNvIHN1Y2NlZWQuCisgICAgICAgICAgICBuZXdfbG9ja2FibGUg
PSBzZWxmLmdldF9sb2NrYWJsZSgpCisgICAgICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0
ZSh0b2tlbj10b2tlbikKKyAgICAgICAgICAgIG5ld19sb2NrYWJsZS51bmxvY2soKQorICAgICAg
ICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS51bmxvY2soKQorCisgICAgZGVm
IHRlc3RfdW5sb2NrX2FmdGVyX2xvY2tfd3JpdGVfd2l0aF90b2tlbihzZWxmKToKKyAgICAgICAg
IyBJZiBsb2NrX3dyaXRlIGRpZCBub3QgcGh5c2ljYWxseSBhY3F1aXJlIHRoZSBsb2NrIChiZWNh
dXNlIGl0IHdhcworICAgICAgICAjIHBhc3NlZCBhIHRva2VuKSwgdGhlbiB1bmxvY2sgc2hvdWxk
IG5vdCBwaHlzaWNhbGx5IHJlbGVhc2UgaXQuCisgICAgICAgIHRva2VuID0gc2VsZi5sb2NrYWJs
ZS5sb2NrX3dyaXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdG9rZW4gaXMgTm9u
ZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgdGVzdCBkb2VzIG5vdCBhcHBseSwgYmVjYXVzZSB0
aGlzIGxvY2thYmxlIHJlZnVzZXMKKyAgICAgICAgICAgICAgICAjIHRva2Vucy4KKyAgICAgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIG5ld19sb2NrYWJsZSA9IHNlbGYuZ2V0X2xvY2th
YmxlKCkKKyAgICAgICAgICAgIG5ld19sb2NrYWJsZS5sb2NrX3dyaXRlKHRva2VuPXRva2VuKQor
ICAgICAgICAgICAgbmV3X2xvY2thYmxlLnVubG9jaygpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoc2VsZi5sb2NrYWJsZS5nZXRfcGh5c2ljYWxfbG9ja19zdGF0dXMoKSkKKyAgICAgICAg
ZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9ja2FibGUudW5sb2NrKCkKKworICAgIGRlZiB0
ZXN0X2xvY2tfd3JpdGVfd2l0aF90b2tlbl9mYWlsc193aGVuX3VubG9ja2VkKHNlbGYpOgorICAg
ICAgICAjIExvY2sgYW5kIHVubG9jayB0byBnZXQgYSBzdXBlcmZpY2lhbGx5IHZhbGlkIHRva2Vu
LiAgVGhpcyBtaW1pY3MgYQorICAgICAgICAjIGxpa2VseSBwcm9ncmFtbWluZyBlcnJvciwgd2hl
cmUgYSBjYWxsZXIgYWNjaWRlbnRhbGx5IHRyaWVzIHRvIGxvY2sKKyAgICAgICAgIyB3aXRoIGEg
dG9rZW4gdGhhdCBpcyBubyBsb25nZXIgdmFsaWQgKGJlY2F1c2UgdGhlIG9yaWdpbmFsIGxvY2sg
d2FzCisgICAgICAgICMgcmVsZWFzZWQpLgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUu
bG9ja193cml0ZSgpCisgICAgICAgIHNlbGYubG9ja2FibGUudW5sb2NrKCkKKyAgICAgICAgaWYg
dG9rZW4gaXMgTm9uZToKKyAgICAgICAgICAgICMgVGhpcyB0ZXN0IGRvZXMgbm90IGFwcGx5LCBi
ZWNhdXNlIHRoaXMgbG9ja2FibGUgcmVmdXNlcworICAgICAgICAgICAgIyB0b2tlbnMuCisgICAg
ICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMuVG9rZW5N
aXNtYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NrYWJsZS5sb2NrX3dy
aXRlLCB0b2tlbj10b2tlbikKKworICAgIGRlZiB0ZXN0X2xvY2tfd3JpdGVfcmVlbnRlcl93aXRo
X3Rva2VuKHNlbGYpOgorICAgICAgICB0b2tlbiA9IHNlbGYubG9ja2FibGUubG9ja193cml0ZSgp
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHRva2VuIGlzIE5vbmU6CisgICAgICAgICAg
ICAgICAgIyBUaGlzIHRlc3QgZG9lcyBub3QgYXBwbHksIGJlY2F1c2UgdGhpcyBsb2NrYWJsZSBy
ZWZ1c2VzCisgICAgICAgICAgICAgICAgIyB0b2tlbnMuCisgICAgICAgICAgICAgICAgcmV0dXJu
CisgICAgICAgICAgICAjIFJlbG9jayB3aXRoIGEgdG9rZW4uCisgICAgICAgICAgICBzZWxmLmxv
Y2thYmxlLmxvY2tfd3JpdGUodG9rZW49dG9rZW4pCisgICAgICAgICAgICBzZWxmLmxvY2thYmxl
LnVubG9jaygpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmxvY2thYmxlLnVu
bG9jaygpCisgICAgICAgICMgVGhlIGxvY2sgc2hvdWxkIGJlIHVubG9ja2VkIG9uIGRpc2suICBW
ZXJpZnkgdGhhdCB3aXRoIGEgbmV3IGxvY2sKKyAgICAgICAgIyBpbnN0YW5jZS4KKyAgICAgICAg
bmV3X2xvY2thYmxlID0gc2VsZi5nZXRfbG9ja2FibGUoKQorICAgICAgICAjIENhbGxpbmcgbG9j
a193cml0ZSBub3cgc2hvdWxkIHdvcmssIHJhdGhlciB0aGFuIHJhaXNlIExvY2tDb250ZW50aW9u
LgorICAgICAgICBuZXdfbG9ja2FibGUubG9ja193cml0ZSgpCisgICAgICAgIG5ld19sb2NrYWJs
ZS51bmxvY2soKQorCisKKworCiAKICMgVGhpcyBtZXRob2Qgb2YgYWRhcHRpbmcgdGVzdHMgdG8g
cGFyYW1ldGVycyBpcyBkaWZmZXJlbnQgdG8gCiAjIHRoZSBUZXN0UHJvdmlkZXJBZGFwdGVycyB1
c2VkIGVsc2V3aGVyZSwgYnV0IHNlZW1zIHNpbXBsZXIgZm9yIHRoaXMgCkBAIC0xMzAsNyArMjUw
LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Rlc3RMb2NrYWJs
ZUZpbGVzX21peGluKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwZXIoVGVz
dExvY2thYmxlRmlsZXNfVHJhbnNwb3J0TG9jaywgc2VsZikuc2V0VXAoKQorICAgICAgICBUZXN0
Q2FzZUluVGVtcERpci5zZXRVcChzZWxmKQorICAgICAgICBfVGVzdExvY2thYmxlRmlsZXNfbWl4
aW4uc2V0VXAoc2VsZikKICAgICAgICAgdHJhbnNwb3J0ID0gZ2V0X3RyYW5zcG9ydCgnLicpCiAg
ICAgICAgIHRyYW5zcG9ydC5ta2RpcignLmJ6cicpCiAgICAgICAgIHNlbGYuc3ViX3RyYW5zcG9y
dCA9IHRyYW5zcG9ydC5jbG9uZSgnLmJ6cicpCkBAIC0xNTIsNyArMjczLDggQEAKICAgICAiIiJM
b2NrYWJsZUZpbGUgdGVzdHMgcnVuIHdpdGggTG9ja0RpciB1bmRlcm5lYXRoIiIiCiAKICAgICBk
ZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cGVyKFRlc3RMb2NrYWJsZUZpbGVzX0xvY2tEaXIs
IHNlbGYpLnNldFVwKCkKKyAgICAgICAgVGVzdENhc2VJblRlbXBEaXIuc2V0VXAoc2VsZikKKyAg
ICAgICAgX1Rlc3RMb2NrYWJsZUZpbGVzX21peGluLnNldFVwKHNlbGYpCiAgICAgICAgIHNlbGYu
dHJhbnNwb3J0ID0gZ2V0X3RyYW5zcG9ydCgnLicpCiAgICAgICAgIHNlbGYubG9ja2FibGUgPSBz
ZWxmLmdldF9sb2NrYWJsZSgpCiAgICAgICAgICMgdGhlIGxvY2sgY3JlYXRpb24gaGVyZSBzZXRz
IG1vZGUgLSB0ZXN0X3Blcm1pc3Npb25zIG9uIGJyYW5jaCAKCg==

=== modified directory  // last-changed:andrew.bennetts at canonical.com-200702120
... 44932-k9keo85c0s9gg5wv
# revision id: andrew.bennetts at canonical.com-20070212044932-k9keo85c0s9gg5wv
# sha1: 65a77db6de0736cd2ebbcdc18d85fc56196da73f
# inventory sha1: 47f91a0e4f6e74fc7d535953c5a4136a792f5915
# parent ids:
#   pqm at pqm.ubuntu.com-20070209195330-312ec52588462782
# properties:
#   branch-nick: bzr.dev.hpss.api.changes



More information about the bazaar mailing list