[PATCH] bzrlib API to add pending revision properties to a working tree

James Henstridge james at jamesh.id.au
Sat Sep 2 11:45:13 BST 2006


On 02/09/06, John Arbash Meinel <john at arbash-meinel.com> wrote:
> James Henstridge wrote:
> > On 01/09/06, Martin Pool <mbp at canonical.com> wrote:
>
> ...
>
> >> +1 on the facility.
> >>
> >> I don't think they should be called 'pending'.  From the PoV of the
> >> working tree, they're just *the* revprops.  (Everything about the
> >> working tree is in this sense pending.)
> >
> > Okay, I chose the name to match "pending-merges", but I see those APIs
> > seem to be wrappers around set/get_parent_ids() now.  So do you think
> > get_revprops(), set_revprops() and add_revprop() would be better
> > names?
> >
> > James.
>
>
> By the way, you shouldn't use the extension '.bundle'. Because mail
> programs don't show them as text. It is better to use .diff or .patch,
> since then we can review the patch just by reading the email.
>
> I'll wait to review the second submission.
>
> I really think we would rather spell out the names, though:
>
> get_revision_properties()
>
> Though I would prefer:
>
> get_meta_properties() myself.
>
> get_properties() seems too minimal and unclear.
>
> I think pending-merges was back when we were deciding how we would
> record merges (back in 0.0.1). Back when everything was in one .bzr/
> directory (not split up by repository/branch/checkout). And it was
> possible that we would have a 'pending-merges' for the working stuff,
> and a 'merges' for the archived stuff. But we recorded it differently.
>
> So pending is just because of legacy. :)

Okay, I've attached an updated bundle that uses "revision_properties"
instead of "pending_revprops".  I think "meta_properties" would cause
confusion because (a) they are referred to as revision properties
elsewhere in the codebase and (b) the equivalent concept in Subversion
is called revision properties (no need to be different for the sake of
it).

James.
-------------- next part --------------
# Bazaar revision bundle v0.8
#
# message:
#   some further fixes after renaming
# committer: James Henstridge <james.henstridge at canonical.com>
# date: Sat 2006-09-02 18:31:47.852999926 +0800

=== added file bzrlib/tests/workingtree_implementations/test_revprops.py // fil
... e-id:test_pending_revprop-20060901093045-dr37c3gayae7z8d7-1
--- /dev/null
+++ bzrlib/tests/workingtree_implementations/test_revprops.py
@@ -0,0 +1,74 @@
+# (C) 2006 Canonical Ltd
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+"""Tests for interface conformance of working tree revision property methods"""
+
+from cStringIO import StringIO
+
+from bzrlib.errors import RevisionPropertiesFormatError
+from bzrlib.tests.workingtree_implementations import TestCaseWithWorkingTree
+
+
+class TestRevisionProperties(TestCaseWithWorkingTree):
+
+    def test_get_revision_properties(self):
+        t = self.make_branch_and_tree('.')
+        self.assertEqual({}, t.get_revision_properties())
+        t.set_revision_properties({u'key1': u'value1'})
+        self.assertEqual({u'key1': u'value1'}, t.get_revision_properties())
+        t.add_revision_property('key2', 'value2')
+        self.assertEqual({u'key1': u'value1',
+                          u'key2': u'value2'}, t.get_revision_properties()) 
+
+    def test_invalid_revision_properties_file(self):
+        t = self.make_branch_and_tree('.')
+        t._control_files.put('revision-properties', StringIO('invalid data'))
+        self.assertRaises(RevisionPropertiesFormatError,
+                          t.get_revision_properties)
+
+    def test_commit_revision_properties(self):
+        t = self.make_branch_and_tree('.')
+        b = t.branch
+        # no working tree revprops after commit
+        t.add_revision_property('key1', 'value1')
+        rev1_id = t.commit('foo', allow_pointless=True)
+        self.assertEqual({}, t.get_revision_properties())
+        rev1 = b.repository.get_revision(rev1_id)
+        self.failUnless(u'key1' in rev1.properties)
+        self.assertEqual(u'value1', rev1.properties['key1'])
+
+        # value from commit() takes precedence over working tree value
+        t.add_revision_property('key1', 'value1')
+        t.add_revision_property('key2', 'tree value')
+        rev2_id = t.commit('foo', revprops={'key2': 'commit value'},
+                           allow_pointless=True)
+        rev2 = b.repository.get_revision(rev2_id)
+        self.assertEqual(u'value1', rev2.properties['key1'])
+        self.assertEqual(u'commit value', rev2.properties['key2'])
+
+    def test_revert_revision_properties(self):
+        t = self.make_branch_and_tree('.')
+        # doing a full revert removes revprops
+        t.add_revision_property('key1', 'value1')
+        t.revert([])
+        self.assertEqual({}, t.get_revision_properties())
+
+        # reverting a list of files leaves revprops
+        t.add_revision_property('key1', 'value1')
+        file('hello.txt', 'w').write('file contents')
+        t.add(['hello.txt'])
+        t.revert(['hello.txt'])
+        self.assertEqual({u'key1': u'value1'}, t.get_revision_properties())

=== modified file bzrlib/commit.py
--- bzrlib/commit.py
+++ bzrlib/commit.py
@@ -319,6 +319,9 @@
             # and now do the commit locally.
             self.branch.append_revision(self.rev_id)
 
+            # reset the working tree revision properties.
+            self.work_tree.set_revision_properties({})
+
             # if the builder gave us the revisiontree it created back, we
             # could use it straight away here.
             # TODO: implement this.

=== modified file bzrlib/errors.py // last-changed:james.henstridge at canonical.c
... om-20060902102804-fdea7414b7898a8d
--- bzrlib/errors.py
+++ bzrlib/errors.py
@@ -1022,6 +1022,10 @@
     """Format error in conflict listings"""
 
 
+class RevisionPropertiesFormatError(BzrNewError):
+    """Format error in revision property listing"""
+
+
 class CorruptRepository(BzrNewError):
     """An error has been detected in the repository %(repo_path)s.
 Please run bzr reconcile on this repository."""

=== modified file bzrlib/testament.py // last-changed:james.henstridge at canonica
... l.com-20060901093317-40a45b3d967a7fb2
--- bzrlib/testament.py
+++ bzrlib/testament.py
@@ -183,7 +183,7 @@
             return []
         r = ['properties:\n']
         for name, value in sorted(self.revprops.items()):
-            assert isinstance(name, str)
+            assert isinstance(name, basestring)
             assert not contains_whitespace(name)
             r.append('  %s:\n' % name)
             for line in value.splitlines():

=== modified file bzrlib/tests/workingtree_implementations/__init__.py
--- bzrlib/tests/workingtree_implementations/__init__.py
+++ bzrlib/tests/workingtree_implementations/__init__.py
@@ -61,6 +61,7 @@
         'bzrlib.tests.workingtree_implementations.test_is_ignored',
         'bzrlib.tests.workingtree_implementations.test_locking',
         'bzrlib.tests.workingtree_implementations.test_parents',
+        'bzrlib.tests.workingtree_implementations.test_revprops',
         'bzrlib.tests.workingtree_implementations.test_pull',
         'bzrlib.tests.workingtree_implementations.test_workingtree',
         ]

=== modified file bzrlib/workingtree.py // last-changed:james.henstridge at canoni
... cal.com-20060902102804-fdea7414b7898a8d
--- bzrlib/workingtree.py
+++ bzrlib/workingtree.py
@@ -31,6 +31,7 @@
 
 MERGE_MODIFIED_HEADER_1 = "BZR merge-modified list format 1"
 CONFLICT_HEADER_1 = "BZR conflict list format 1"
+REVISION_PROPERTIES_HEADER_1 = "BZR revision properties list format 1"
 
 # TODO: Give the workingtree sole responsibility for the working inventory;
 # remove the variable and references to it from the branch.  This may require
@@ -65,6 +66,7 @@
                            NoSuchFile,
                            NotVersionedError,
                            MergeModifiedFormatError,
+                           RevisionPropertiesFormatError,
                            UnsupportedOperation,
                            )
 from bzrlib.inventory import InventoryEntry, Inventory
@@ -547,16 +549,17 @@
     def commit(self, message=None, revprops=None, *args, **kwargs):
         # avoid circular imports
         from bzrlib.commit import Commit
-        if revprops is None:
-            revprops = {}
-        if not 'branch-nick' in revprops:
-            revprops['branch-nick'] = self.branch.nick
+        all_revprops = self.get_revision_properties()
+        if revprops is not None:
+            all_revprops.update(revprops)
+        if not 'branch-nick' in all_revprops:
+            all_revprops['branch-nick'] = self.branch.nick
         # args for wt.commit start at message from the Commit.commit method,
         # but with branch a kwarg now, passing in args as is results in the
         #message being used for the branch
         args = (DEPRECATED_PARAMETER, message, ) + args
-        committed_id = Commit().commit( working_tree=self, revprops=revprops,
-            *args, **kwargs)
+        committed_id = Commit().commit(
+            working_tree=self, revprops=all_revprops, *args, **kwargs)
         self._set_inventory(self.read_working_inventory())
         return committed_id
 
@@ -796,6 +799,47 @@
                 merge_hashes[file_id] = hash
         return merge_hashes
 
+    @needs_read_lock
+    def get_revision_properties(self):
+        """Get the dictionary of revision properties.
+
+        These properties will be applied to the next committed revision.
+        """
+        try:
+            propfile = self._control_files.get('revision-properties')
+        except NoSuchFile:
+            return {}
+        try:
+            if propfile.next() != REVISION_PROPERTIES_HEADER_1 + '\n':
+                raise RevisionPropertiesFormatError()
+        except StopIteration:
+            raise RevisionPropertiesFormatError()
+        revprops = {}
+        for s in RioReader(propfile):
+            name = s.get('name')
+            value = s.get('value')
+            revprops[name] = value
+        return revprops
+
+    @needs_write_lock
+    def set_revision_properties(self, revprops):
+        """Set the dictionary of revision properties.
+
+        These properties will be applied to the next committed revision.
+        """
+        def iter_stanzas():
+            for name, value in revprops.iteritems():
+                yield Stanza(name=name, value=value)
+        self._put_rio('revision-properties', iter_stanzas(),
+                      REVISION_PROPERTIES_HEADER_1)
+
+    @needs_write_lock
+    def add_revision_property(self, name, value):
+        """Add a revision property for the next commit."""
+        revprops = self.get_revision_properties()
+        revprops[name] = value
+        self.set_revision_properties(revprops)
+
     def get_symlink_target(self, file_id):
         return os.readlink(self.id2abspath(file_id))
 
@@ -1425,6 +1469,7 @@
         conflicts = revert(self, old_tree, filenames, backups, pb)
         if not len(filenames):
             self.set_parent_ids(self.get_parent_ids()[:1])
+            self.set_revision_properties({})
             resolve(self)
         else:
             resolve(self, filenames, ignore_misses=True)

# revision id: james.henstridge at canonical.com-20060902103147-37589f2899f169be
# sha1: d4dde6f15723ca9e48bd66450cbfa48d0a897921
# inventory sha1: 94037045ef9c0f1f8c764aee4c7549af17ee81e5
# parent ids:
#   james.henstridge at canonical.com-20060902102804-fdea7414b7898a8d
# base id: pqm at pqm.ubuntu.com-20060831182704-2de4cd234a448ed1
# properties:
#   branch-nick: bzr.pending-revprops

# message:
#   change function names as suggested in review
# committer: James Henstridge <james.henstridge at canonical.com>
# date: Sat 2006-09-02 18:28:04.959000111 +0800

=== renamed file bzrlib/tests/workingtree_implementations/test_pending_revprops
... .py // bzrlib/tests/workingtree_implementations/test_revprops.py // encodin
... g:base64
LS0tIGJ6cmxpYi90ZXN0cy93b3JraW5ndHJlZV9pbXBsZW1lbnRhdGlvbnMvdGVzdF9wZW5kaW5n
X3JldnByb3BzLnB5CisrKyBienJsaWIvdGVzdHMvd29ya2luZ3RyZWVfaW1wbGVtZW50YXRpb25z
L3Rlc3RfcmV2cHJvcHMucHkKQEAgLTE4LDU2ICsxOCw1NyBAQAogCiBmcm9tIGNTdHJpbmdJTyBp
bXBvcnQgU3RyaW5nSU8KIAotZnJvbSBienJsaWIuZXJyb3JzIGltcG9ydCBQZW5kaW5nUmV2cHJv
cHNGb3JtYXRFcnJvcgorZnJvbSBienJsaWIuZXJyb3JzIGltcG9ydCBSZXZpc2lvblByb3BlcnRp
ZXNGb3JtYXRFcnJvcgogZnJvbSBienJsaWIudGVzdHMud29ya2luZ3RyZWVfaW1wbGVtZW50YXRp
b25zIGltcG9ydCBUZXN0Q2FzZVdpdGhXb3JraW5nVHJlZQogCiAKLWNsYXNzIFRlc3RQZW5kaW5n
UmV2cHJvcHMoVGVzdENhc2VXaXRoV29ya2luZ1RyZWUpOgorY2xhc3MgVGVzdFJldmlzaW9uUHJv
cGVydGllcyhUZXN0Q2FzZVdpdGhXb3JraW5nVHJlZSk6CiAKLSAgICBkZWYgdGVzdF9nZXRfcGVu
ZGluZ19yZXZwcm9wcyhzZWxmKToKKyAgICBkZWYgdGVzdF9nZXRfcmV2aXNpb25fcHJvcGVydGll
cyhzZWxmKToKICAgICAgICAgdCA9IHNlbGYubWFrZV9icmFuY2hfYW5kX3RyZWUoJy4nKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHt9LCB0LmdldF9wZW5kaW5nX3JldnByb3BzKCkpCi0gICAg
ICAgIHQuc2V0X3BlbmRpbmdfcmV2cHJvcHMoe3Una2V5MSc6IHUndmFsdWUxJ30pCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoe3Una2V5MSc6IHUndmFsdWUxJ30sIHQuZ2V0X3BlbmRpbmdfcmV2
cHJvcHMoKSkKLSAgICAgICAgdC5hZGRfcGVuZGluZ19yZXZwcm9wKCdrZXkyJywgJ3ZhbHVlMicp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe30sIHQuZ2V0X3JldmlzaW9uX3Byb3BlcnRpZXMo
KSkKKyAgICAgICAgdC5zZXRfcmV2aXNpb25fcHJvcGVydGllcyh7dSdrZXkxJzogdSd2YWx1ZTEn
fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7dSdrZXkxJzogdSd2YWx1ZTEnfSwgdC5nZXRf
cmV2aXNpb25fcHJvcGVydGllcygpKQorICAgICAgICB0LmFkZF9yZXZpc2lvbl9wcm9wZXJ0eSgn
a2V5MicsICd2YWx1ZTInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHt1J2tleTEnOiB1J3Zh
bHVlMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHUna2V5Mic6IHUndmFsdWUyJ30sIHQu
Z2V0X3BlbmRpbmdfcmV2cHJvcHMoKSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHUna2V5
Mic6IHUndmFsdWUyJ30sIHQuZ2V0X3JldmlzaW9uX3Byb3BlcnRpZXMoKSkgCiAKLSAgICBkZWYg
dGVzdF9pbnZhbGlkX3BlbmRpbmdfcmV2cHJvcHNfZmlsZShzZWxmKToKKyAgICBkZWYgdGVzdF9p
bnZhbGlkX3JldmlzaW9uX3Byb3BlcnRpZXNfZmlsZShzZWxmKToKICAgICAgICAgdCA9IHNlbGYu
bWFrZV9icmFuY2hfYW5kX3RyZWUoJy4nKQotICAgICAgICB0Ll9jb250cm9sX2ZpbGVzLnB1dCgn
cGVuZGluZy1yZXZwcm9wcycsIFN0cmluZ0lPKCdpbnZhbGlkIGRhdGEnKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoUGVuZGluZ1JldnByb3BzRm9ybWF0RXJyb3IsIHQuZ2V0X3BlbmRpbmdf
cmV2cHJvcHMpCisgICAgICAgIHQuX2NvbnRyb2xfZmlsZXMucHV0KCdyZXZpc2lvbi1wcm9wZXJ0
aWVzJywgU3RyaW5nSU8oJ2ludmFsaWQgZGF0YScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhSZXZpc2lvblByb3BlcnRpZXNGb3JtYXRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgdC5nZXRfcmV2aXNpb25fcHJvcGVydGllcykKIAotICAgIGRlZiB0ZXN0X2NvbW1pdF9wZW5k
aW5nX3JldnByb3BzKHNlbGYpOgorICAgIGRlZiB0ZXN0X2NvbW1pdF9yZXZpc2lvbl9wcm9wZXJ0
aWVzKHNlbGYpOgogICAgICAgICB0ID0gc2VsZi5tYWtlX2JyYW5jaF9hbmRfdHJlZSgnLicpCiAg
ICAgICAgIGIgPSB0LmJyYW5jaAogICAgICAgICAjIG5vIHBlbmRpbmcgcmV2cHJvcHMgYWZ0ZXIg
Y29tbWl0Ci0gICAgICAgIHQuYWRkX3BlbmRpbmdfcmV2cHJvcCgna2V5MScsICd2YWx1ZTEnKQor
ICAgICAgICB0LmFkZF9yZXZpc2lvbl9wcm9wZXJ0eSgna2V5MScsICd2YWx1ZTEnKQogICAgICAg
ICByZXYxX2lkID0gdC5jb21taXQoJ2ZvbycsIGFsbG93X3BvaW50bGVzcz1UcnVlKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHt9LCB0LmdldF9wZW5kaW5nX3JldnByb3BzKCkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoe30sIHQuZ2V0X3JldmlzaW9uX3Byb3BlcnRpZXMoKSkKICAgICAg
ICAgcmV2MSA9IGIucmVwb3NpdG9yeS5nZXRfcmV2aXNpb24ocmV2MV9pZCkKICAgICAgICAgc2Vs
Zi5mYWlsVW5sZXNzKHUna2V5MScgaW4gcmV2MS5wcm9wZXJ0aWVzKQogICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHUndmFsdWUxJywgcmV2MS5wcm9wZXJ0aWVzWydrZXkxJ10pCiAKICAgICAgICAg
IyB2YWx1ZSBmcm9tIGNvbW1pdCgpIHRha2VzIHByZWNlZGVuY2UgdG8gcGVuZGluZyByZXZwcm9w
Ci0gICAgICAgIHQuYWRkX3BlbmRpbmdfcmV2cHJvcCgna2V5MScsICd2YWx1ZTEnKQotICAgICAg
ICB0LmFkZF9wZW5kaW5nX3JldnByb3AoJ2tleTInLCAncGVuZGluZyB2YWx1ZScpCisgICAgICAg
IHQuYWRkX3JldmlzaW9uX3Byb3BlcnR5KCdrZXkxJywgJ3ZhbHVlMScpCisgICAgICAgIHQuYWRk
X3JldmlzaW9uX3Byb3BlcnR5KCdrZXkyJywgJ3BlbmRpbmcgdmFsdWUnKQogICAgICAgICByZXYy
X2lkID0gdC5jb21taXQoJ2ZvbycsIHJldnByb3BzPXsna2V5Mic6ICdjb21taXQgdmFsdWUnfSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3BvaW50bGVzcz1UcnVlKQogICAgICAg
ICByZXYyID0gYi5yZXBvc2l0b3J5LmdldF9yZXZpc2lvbihyZXYyX2lkKQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHUndmFsdWUxJywgcmV2Mi5wcm9wZXJ0aWVzWydrZXkxJ10pCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwodSdjb21taXQgdmFsdWUnLCByZXYyLnByb3BlcnRpZXNbJ2tleTIn
XSkKIAotICAgIGRlZiB0ZXN0X3JldmVydF9wZW5kaW5nX3JldnByb3BzKHNlbGYpOgorICAgIGRl
ZiB0ZXN0X3JldmVydF9yZXZpc2lvbl9wcm9wZXJ0aWVzKHNlbGYpOgogICAgICAgICB0ID0gc2Vs
Zi5tYWtlX2JyYW5jaF9hbmRfdHJlZSgnLicpCiAgICAgICAgICMgZG9pbmcgYSBmdWxsIHJldmVy
dCByZW1vdmVzIHBlbmRpbmcgcmV2cHJvcHMKLSAgICAgICAgdC5hZGRfcGVuZGluZ19yZXZwcm9w
KCdrZXkxJywgJ3ZhbHVlMScpCisgICAgICAgIHQuYWRkX3JldmlzaW9uX3Byb3BlcnR5KCdrZXkx
JywgJ3ZhbHVlMScpCiAgICAgICAgIHQucmV2ZXJ0KFtdKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHt9LCB0LmdldF9wZW5kaW5nX3JldnByb3BzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoe30sIHQuZ2V0X3JldmlzaW9uX3Byb3BlcnRpZXMoKSkKIAogICAgICAgICAjIHJldmVydGlu
ZyBhIGxpc3Qgb2YgZmlsZXMgbGVhdmVzIHBlbmRpbmcgcmV2cHJvcHMKLSAgICAgICAgdC5hZGRf
cGVuZGluZ19yZXZwcm9wKCdrZXkxJywgJ3ZhbHVlMScpCisgICAgICAgIHQuYWRkX3JldmlzaW9u
X3Byb3BlcnR5KCdrZXkxJywgJ3ZhbHVlMScpCiAgICAgICAgIGZpbGUoJ2hlbGxvLnR4dCcsICd3
Jykud3JpdGUoJ2ZpbGUgY29udGVudHMnKQogICAgICAgICB0LmFkZChbJ2hlbGxvLnR4dCddKQog
ICAgICAgICB0LnJldmVydChbJ2hlbGxvLnR4dCddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHt1J2tleTEnOiB1J3ZhbHVlMSd9LCB0LmdldF9wZW5kaW5nX3JldnByb3BzKCkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoe3Una2V5MSc6IHUndmFsdWUxJ30sIHQuZ2V0X3JldmlzaW9uX3By
b3BlcnRpZXMoKSkKCg==

=== modified file bzrlib/commit.py // encoding:base64
LS0tIGJ6cmxpYi9jb21taXQucHkKKysrIGJ6cmxpYi9jb21taXQucHkKQEAgLTMyMCw3ICszMjAs
NyBAQAogICAgICAgICAgICAgc2VsZi5icmFuY2guYXBwZW5kX3JldmlzaW9uKHNlbGYucmV2X2lk
KQogCiAgICAgICAgICAgICAjIHJlc2V0IHRoZSBsaXN0IG9mIHBlbmRpbmcgcmV2aXNpb24gcHJv
cGVydGllcy4KLSAgICAgICAgICAgIHNlbGYud29ya190cmVlLnNldF9wZW5kaW5nX3JldnByb3Bz
KHt9KQorICAgICAgICAgICAgc2VsZi53b3JrX3RyZWUuc2V0X3JldmlzaW9uX3Byb3BlcnRpZXMo
e30pCiAKICAgICAgICAgICAgICMgaWYgdGhlIGJ1aWxkZXIgZ2F2ZSB1cyB0aGUgcmV2aXNpb250
cmVlIGl0IGNyZWF0ZWQgYmFjaywgd2UKICAgICAgICAgICAgICMgY291bGQgdXNlIGl0IHN0cmFp
Z2h0IGF3YXkgaGVyZS4KCg==

=== modified file bzrlib/errors.py // encoding:base64
LS0tIGJ6cmxpYi9lcnJvcnMucHkKKysrIGJ6cmxpYi9lcnJvcnMucHkKQEAgLTEwMjIsOCArMTAy
Miw4IEBACiAgICAgIiIiRm9ybWF0IGVycm9yIGluIGNvbmZsaWN0IGxpc3RpbmdzIiIiCiAKIAot
Y2xhc3MgUGVuZGluZ1JldnByb3BzRm9ybWF0RXJyb3IoQnpyTmV3RXJyb3IpOgotICAgICIiIkZv
cm1hdCBlcnJvciBpbiBwZW5kaW5nIHJldmlzaW9uIHByb3BlcnR5IGxpc3RpbmciIiIKK2NsYXNz
IFJldmlzaW9uUHJvcGVydGllc0Zvcm1hdEVycm9yKEJ6ck5ld0Vycm9yKToKKyAgICAiIiJGb3Jt
YXQgZXJyb3IgaW4gcmV2aXNpb24gcHJvcGVydHkgbGlzdGluZyIiIgogCiAKIGNsYXNzIENvcnJ1
cHRSZXBvc2l0b3J5KEJ6ck5ld0Vycm9yKToKCg==

=== modified file bzrlib/workingtree.py // encoding:base64
LS0tIGJ6cmxpYi93b3JraW5ndHJlZS5weQorKysgYnpybGliL3dvcmtpbmd0cmVlLnB5CkBAIC0z
MSw3ICszMSw3IEBACiAKIE1FUkdFX01PRElGSUVEX0hFQURFUl8xID0gIkJaUiBtZXJnZS1tb2Rp
ZmllZCBsaXN0IGZvcm1hdCAxIgogQ09ORkxJQ1RfSEVBREVSXzEgPSAiQlpSIGNvbmZsaWN0IGxp
c3QgZm9ybWF0IDEiCi1QRU5ESU5HX1JFVlBST1BTX0hFQURFUl8xID0gIkJaUiBwZW5kaW5nIHJl
dmlzaW9uIHByb3BlcnRpZXMgbGlzdCBmb3JtYXQgMSIKK1JFVklTSU9OX1BST1BFUlRJRVNfSEVB
REVSXzEgPSAiQlpSIHJldmlzaW9uIHByb3BlcnRpZXMgbGlzdCBmb3JtYXQgMSIKIAogIyBUT0RP
OiBHaXZlIHRoZSB3b3JraW5ndHJlZSBzb2xlIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgd29ya2lu
ZyBpbnZlbnRvcnk7CiAjIHJlbW92ZSB0aGUgdmFyaWFibGUgYW5kIHJlZmVyZW5jZXMgdG8gaXQg
ZnJvbSB0aGUgYnJhbmNoLiAgVGhpcyBtYXkgcmVxdWlyZQpAQCAtNjYsNyArNjYsNyBAQAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9TdWNoRmlsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5vdFZlcnNpb25lZEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVy
Z2VNb2RpZmllZEZvcm1hdEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVuZGlu
Z1JldnByb3BzRm9ybWF0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXZpc2lv
blByb3BlcnRpZXNGb3JtYXRFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuc3Vw
cG9ydGVkT3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogZnJvbSBienJs
aWIuaW52ZW50b3J5IGltcG9ydCBJbnZlbnRvcnlFbnRyeSwgSW52ZW50b3J5CkBAIC01NDksNyAr
NTQ5LDcgQEAKICAgICBkZWYgY29tbWl0KHNlbGYsIG1lc3NhZ2U9Tm9uZSwgcmV2cHJvcHM9Tm9u
ZSwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgIyBhdm9pZCBjaXJjdWxhciBpbXBvcnRzCiAg
ICAgICAgIGZyb20gYnpybGliLmNvbW1pdCBpbXBvcnQgQ29tbWl0Ci0gICAgICAgIGFsbF9yZXZw
cm9wcyA9IHNlbGYuZ2V0X3BlbmRpbmdfcmV2cHJvcHMoKQorICAgICAgICBhbGxfcmV2cHJvcHMg
PSBzZWxmLmdldF9yZXZpc2lvbl9wcm9wZXJ0aWVzKCkKICAgICAgICAgaWYgcmV2cHJvcHMgaXMg
bm90IE5vbmU6CiAgICAgICAgICAgICBhbGxfcmV2cHJvcHMudXBkYXRlKHJldnByb3BzKQogICAg
ICAgICBpZiBub3QgJ2JyYW5jaC1uaWNrJyBpbiBhbGxfcmV2cHJvcHM6CkBAIC04MDAsMjEgKzgw
MCwyMCBAQAogICAgICAgICByZXR1cm4gbWVyZ2VfaGFzaGVzCiAKICAgICBAbmVlZHNfcmVhZF9s
b2NrCi0gICAgZGVmIGdldF9wZW5kaW5nX3JldnByb3BzKHNlbGYpOgotICAgICAgICAiIiJHZXQg
dGhlIGxpc3Qgb2YgcGVuZGluZyByZXZpc2lvbiBwcm9wZXJ0aWVzLgorICAgIGRlZiBnZXRfcmV2
aXNpb25fcHJvcGVydGllcyhzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSBkaWN0aW9uYXJ5IG9m
IHJldmlzaW9uIHByb3BlcnRpZXMuCiAKLSAgICAgICAgVGhlc2UgcHJvcGVydGllcyB3aWxsIGJl
IHNldCBhcyByZXZpc2lvbiBwcm9wZXJ0aWVzIG9uIHRoZQotICAgICAgICBuZXh0IGNvbW1pdC4K
KyAgICAgICAgVGhlc2UgcHJvcGVydGllcyB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIG5leHQgY29t
bWl0dGVkIHJldmlzaW9uLgogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgotICAgICAgICAgICAg
cHJvcGZpbGUgPSBzZWxmLl9jb250cm9sX2ZpbGVzLmdldCgncGVuZGluZy1yZXZwcm9wcycpCisg
ICAgICAgICAgICBwcm9wZmlsZSA9IHNlbGYuX2NvbnRyb2xfZmlsZXMuZ2V0KCdyZXZpc2lvbi1w
cm9wZXJ0aWVzJykKICAgICAgICAgZXhjZXB0IE5vU3VjaEZpbGU6CiAgICAgICAgICAgICByZXR1
cm4ge30KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgcHJvcGZpbGUubmV4dCgpICE9IFBF
TkRJTkdfUkVWUFJPUFNfSEVBREVSXzEgKyAnXG4nOgotICAgICAgICAgICAgICAgIHJhaXNlIFBl
bmRpbmdSZXZwcm9wc0Zvcm1hdEVycm9yKCkKKyAgICAgICAgICAgIGlmIHByb3BmaWxlLm5leHQo
KSAhPSBSRVZJU0lPTl9QUk9QRVJUSUVTX0hFQURFUl8xICsgJ1xuJzoKKyAgICAgICAgICAgICAg
ICByYWlzZSBSZXZpc2lvblByb3BlcnRpZXNGb3JtYXRFcnJvcigpCiAgICAgICAgIGV4Y2VwdCBT
dG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgUGVuZGluZ1JldnByb3BzRm9ybWF0RXJy
b3IoKQorICAgICAgICAgICAgcmFpc2UgUmV2aXNpb25Qcm9wZXJ0aWVzRm9ybWF0RXJyb3IoKQog
ICAgICAgICByZXZwcm9wcyA9IHt9CiAgICAgICAgIGZvciBzIGluIFJpb1JlYWRlcihwcm9wZmls
ZSk6CiAgICAgICAgICAgICBuYW1lID0gcy5nZXQoJ25hbWUnKQpAQCAtODIzLDI0ICs4MjIsMjMg
QEAKICAgICAgICAgcmV0dXJuIHJldnByb3BzCiAKICAgICBAbmVlZHNfd3JpdGVfbG9jawotICAg
IGRlZiBzZXRfcGVuZGluZ19yZXZwcm9wcyhzZWxmLCByZXZwcm9wcyk6Ci0gICAgICAgICIiIlNl
dCB0aGUgbGlzdCBvZiBwZW5kaW5nIHJldmlzaW9uIHByb3BlcnRpZXMuCisgICAgZGVmIHNldF9y
ZXZpc2lvbl9wcm9wZXJ0aWVzKHNlbGYsIHJldnByb3BzKToKKyAgICAgICAgIiIiU2V0IHRoZSBk
aWN0aW9uYXJ5IG9mIHJldmlzaW9uIHByb3BlcnRpZXMuCiAKLSAgICAgICAgVGhlc2UgcHJvcGVy
dGllcyB3aWxsIGJlIHNldCBhcyByZXZpc2lvbiBwcm9wZXJ0aWVzIG9uIHRoZQotICAgICAgICBu
ZXh0IGNvbW1pdC4KKyAgICAgICAgVGhlc2UgcHJvcGVydGllcyB3aWxsIGJlIGFwcGxpZWQgdG8g
dGhlIG5leHQgY29tbWl0dGVkIHJldmlzaW9uLgogICAgICAgICAiIiIKICAgICAgICAgZGVmIGl0
ZXJfc3RhbnphcygpOgogICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHJldnByb3BzLml0
ZXJpdGVtcygpOgogICAgICAgICAgICAgICAgIHlpZWxkIFN0YW56YShuYW1lPW5hbWUsIHZhbHVl
PXZhbHVlKQotICAgICAgICBzZWxmLl9wdXRfcmlvKCdwZW5kaW5nLXJldnByb3BzJywgaXRlcl9z
dGFuemFzKCksCi0gICAgICAgICAgICAgICAgICAgICAgUEVORElOR19SRVZQUk9QU19IRUFERVJf
MSkKKyAgICAgICAgc2VsZi5fcHV0X3JpbygncmV2aXNpb24tcHJvcGVydGllcycsIGl0ZXJfc3Rh
bnphcygpLAorICAgICAgICAgICAgICAgICAgICAgIFJFVklTSU9OX1BST1BFUlRJRVNfSEVBREVS
XzEpCiAKICAgICBAbmVlZHNfd3JpdGVfbG9jawotICAgIGRlZiBhZGRfcGVuZGluZ19yZXZwcm9w
KHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICBkZWYgYWRkX3JldmlzaW9uX3Byb3BlcnR5KHNlbGYs
IG5hbWUsIHZhbHVlKToKICAgICAgICAgIiIiQWRkIGEgcmV2aXNpb24gcHJvcGVydHkgZm9yIHRo
ZSBuZXh0IGNvbW1pdC4iIiIKLSAgICAgICAgcmV2cHJvcHMgPSBzZWxmLmdldF9wZW5kaW5nX3Jl
dnByb3BzKCkKKyAgICAgICAgcmV2cHJvcHMgPSBzZWxmLmdldF9yZXZpc2lvbl9wcm9wZXJ0aWVz
KCkKICAgICAgICAgcmV2cHJvcHNbbmFtZV0gPSB2YWx1ZQotICAgICAgICBzZWxmLnNldF9wZW5k
aW5nX3JldnByb3BzKHJldnByb3BzKQorICAgICAgICBzZWxmLnNldF9yZXZpc2lvbl9wcm9wZXJ0
aWVzKHJldnByb3BzKQogCiAgICAgZGVmIGdldF9zeW1saW5rX3RhcmdldChzZWxmLCBmaWxlX2lk
KToKICAgICAgICAgcmV0dXJuIG9zLnJlYWRsaW5rKHNlbGYuaWQyYWJzcGF0aChmaWxlX2lkKSkK
QEAgLTE0NzEsNyArMTQ2OSw3IEBACiAgICAgICAgIGNvbmZsaWN0cyA9IHJldmVydChzZWxmLCBv
bGRfdHJlZSwgZmlsZW5hbWVzLCBiYWNrdXBzLCBwYikKICAgICAgICAgaWYgbm90IGxlbihmaWxl
bmFtZXMpOgogICAgICAgICAgICAgc2VsZi5zZXRfcGFyZW50X2lkcyhzZWxmLmdldF9wYXJlbnRf
aWRzKClbOjFdKQotICAgICAgICAgICAgc2VsZi5zZXRfcGVuZGluZ19yZXZwcm9wcyh7fSkKKyAg
ICAgICAgICAgIHNlbGYuc2V0X3JldmlzaW9uX3Byb3BlcnRpZXMoe30pCiAgICAgICAgICAgICBy
ZXNvbHZlKHNlbGYpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXNvbHZlKHNlbGYsIGZp
bGVuYW1lcywgaWdub3JlX21pc3Nlcz1UcnVlKQoK

# revision id: james.henstridge at canonical.com-20060902102804-fdea7414b7898a8d
# sha1: 41a8b721e4d5efc8c0959efb4ce75c44ca5def69
# inventory sha1: 3f8d0f38b3328dfebbd789635a777e7bdac64d81
# parent ids:
#   james.henstridge at canonical.com-20060901093317-40a45b3d967a7fb2
# properties:
#   branch-nick: bzr.pending-revprops

# message:
#   Apply pending revision properties during merge.
#   
#   Test pending revprop behaviour w.r.t. commiting and reverting tree.
#   
# committer: James Henstridge <james.henstridge at canonical.com>
# date: Fri 2006-09-01 17:33:17.163000107 +0800

=== added file bzrlib/tests/workingtree_implementations/test_pending_revprops.p
... y // file-id:test_pending_revprop-20060901093045-dr37c3gayae7z8d7-1 // enco
... ding:base64
LS0tIC9kZXYvbnVsbAorKysgYnpybGliL3Rlc3RzL3dvcmtpbmd0cmVlX2ltcGxlbWVudGF0aW9u
cy90ZXN0X3BlbmRpbmdfcmV2cHJvcHMucHkKQEAgLTAsMCArMSw3MyBAQAorIyAoQykgMjAwNiBD
YW5vbmljYWwgTHRkCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
CisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworIiIiVGVzdHMg
Zm9yIGludGVyZmFjZSBjb25mb3JtYW5jZSBvZiB3b3JraW5nIHRyZWUgcGVuZGluZyByZXZwcm9w
IG1ldGhvZHMiIiIKKworZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKK2Zyb20gYnpy
bGliLmVycm9ycyBpbXBvcnQgUGVuZGluZ1JldnByb3BzRm9ybWF0RXJyb3IKK2Zyb20gYnpybGli
LnRlc3RzLndvcmtpbmd0cmVlX2ltcGxlbWVudGF0aW9ucyBpbXBvcnQgVGVzdENhc2VXaXRoV29y
a2luZ1RyZWUKKworCitjbGFzcyBUZXN0UGVuZGluZ1JldnByb3BzKFRlc3RDYXNlV2l0aFdvcmtp
bmdUcmVlKToKKworICAgIGRlZiB0ZXN0X2dldF9wZW5kaW5nX3JldnByb3BzKHNlbGYpOgorICAg
ICAgICB0ID0gc2VsZi5tYWtlX2JyYW5jaF9hbmRfdHJlZSgnLicpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoe30sIHQuZ2V0X3BlbmRpbmdfcmV2cHJvcHMoKSkKKyAgICAgICAgdC5zZXRfcGVu
ZGluZ19yZXZwcm9wcyh7dSdrZXkxJzogdSd2YWx1ZTEnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCh7dSdrZXkxJzogdSd2YWx1ZTEnfSwgdC5nZXRfcGVuZGluZ19yZXZwcm9wcygpKQorICAg
ICAgICB0LmFkZF9wZW5kaW5nX3JldnByb3AoJ2tleTInLCAndmFsdWUyJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCh7dSdrZXkxJzogdSd2YWx1ZTEnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICB1J2tleTInOiB1J3ZhbHVlMid9LCB0LmdldF9wZW5kaW5nX3JldnByb3BzKCkpIAorCisg
ICAgZGVmIHRlc3RfaW52YWxpZF9wZW5kaW5nX3JldnByb3BzX2ZpbGUoc2VsZik6CisgICAgICAg
IHQgPSBzZWxmLm1ha2VfYnJhbmNoX2FuZF90cmVlKCcuJykKKyAgICAgICAgdC5fY29udHJvbF9m
aWxlcy5wdXQoJ3BlbmRpbmctcmV2cHJvcHMnLCBTdHJpbmdJTygnaW52YWxpZCBkYXRhJykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFBlbmRpbmdSZXZwcm9wc0Zvcm1hdEVycm9yLCB0Lmdl
dF9wZW5kaW5nX3JldnByb3BzKQorCisgICAgZGVmIHRlc3RfY29tbWl0X3BlbmRpbmdfcmV2cHJv
cHMoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLm1ha2VfYnJhbmNoX2FuZF90cmVlKCcuJykKKyAg
ICAgICAgYiA9IHQuYnJhbmNoCisgICAgICAgICMgbm8gcGVuZGluZyByZXZwcm9wcyBhZnRlciBj
b21taXQKKyAgICAgICAgdC5hZGRfcGVuZGluZ19yZXZwcm9wKCdrZXkxJywgJ3ZhbHVlMScpCisg
ICAgICAgIHJldjFfaWQgPSB0LmNvbW1pdCgnZm9vJywgYWxsb3dfcG9pbnRsZXNzPVRydWUpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe30sIHQuZ2V0X3BlbmRpbmdfcmV2cHJvcHMoKSkKKyAg
ICAgICAgcmV2MSA9IGIucmVwb3NpdG9yeS5nZXRfcmV2aXNpb24ocmV2MV9pZCkKKyAgICAgICAg
c2VsZi5mYWlsVW5sZXNzKHUna2V5MScgaW4gcmV2MS5wcm9wZXJ0aWVzKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHUndmFsdWUxJywgcmV2MS5wcm9wZXJ0aWVzWydrZXkxJ10pCisKKyAgICAg
ICAgIyB2YWx1ZSBmcm9tIGNvbW1pdCgpIHRha2VzIHByZWNlZGVuY2UgdG8gcGVuZGluZyByZXZw
cm9wCisgICAgICAgIHQuYWRkX3BlbmRpbmdfcmV2cHJvcCgna2V5MScsICd2YWx1ZTEnKQorICAg
ICAgICB0LmFkZF9wZW5kaW5nX3JldnByb3AoJ2tleTInLCAncGVuZGluZyB2YWx1ZScpCisgICAg
ICAgIHJldjJfaWQgPSB0LmNvbW1pdCgnZm9vJywgcmV2cHJvcHM9eydrZXkyJzogJ2NvbW1pdCB2
YWx1ZSd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfcG9pbnRsZXNzPVRydWUp
CisgICAgICAgIHJldjIgPSBiLnJlcG9zaXRvcnkuZ2V0X3JldmlzaW9uKHJldjJfaWQpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd2YWx1ZTEnLCByZXYyLnByb3BlcnRpZXNbJ2tleTEnXSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2NvbW1pdCB2YWx1ZScsIHJldjIucHJvcGVydGll
c1sna2V5MiddKQorCisgICAgZGVmIHRlc3RfcmV2ZXJ0X3BlbmRpbmdfcmV2cHJvcHMoc2VsZik6
CisgICAgICAgIHQgPSBzZWxmLm1ha2VfYnJhbmNoX2FuZF90cmVlKCcuJykKKyAgICAgICAgIyBk
b2luZyBhIGZ1bGwgcmV2ZXJ0IHJlbW92ZXMgcGVuZGluZyByZXZwcm9wcworICAgICAgICB0LmFk
ZF9wZW5kaW5nX3JldnByb3AoJ2tleTEnLCAndmFsdWUxJykKKyAgICAgICAgdC5yZXZlcnQoW10p
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe30sIHQuZ2V0X3BlbmRpbmdfcmV2cHJvcHMoKSkK
KworICAgICAgICAjIHJldmVydGluZyBhIGxpc3Qgb2YgZmlsZXMgbGVhdmVzIHBlbmRpbmcgcmV2
cHJvcHMKKyAgICAgICAgdC5hZGRfcGVuZGluZ19yZXZwcm9wKCdrZXkxJywgJ3ZhbHVlMScpCisg
ICAgICAgIGZpbGUoJ2hlbGxvLnR4dCcsICd3Jykud3JpdGUoJ2ZpbGUgY29udGVudHMnKQorICAg
ICAgICB0LmFkZChbJ2hlbGxvLnR4dCddKQorICAgICAgICB0LnJldmVydChbJ2hlbGxvLnR4dCdd
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHt1J2tleTEnOiB1J3ZhbHVlMSd9LCB0LmdldF9w
ZW5kaW5nX3JldnByb3BzKCkpCgo=

=== modified file bzrlib/commit.py // encoding:base64
LS0tIGJ6cmxpYi9jb21taXQucHkKKysrIGJ6cmxpYi9jb21taXQucHkKQEAgLTMxOSw2ICszMTks
OSBAQAogICAgICAgICAgICAgIyBhbmQgbm93IGRvIHRoZSBjb21taXQgbG9jYWxseS4KICAgICAg
ICAgICAgIHNlbGYuYnJhbmNoLmFwcGVuZF9yZXZpc2lvbihzZWxmLnJldl9pZCkKIAorICAgICAg
ICAgICAgIyByZXNldCB0aGUgbGlzdCBvZiBwZW5kaW5nIHJldmlzaW9uIHByb3BlcnRpZXMuCisg
ICAgICAgICAgICBzZWxmLndvcmtfdHJlZS5zZXRfcGVuZGluZ19yZXZwcm9wcyh7fSkKKwogICAg
ICAgICAgICAgIyBpZiB0aGUgYnVpbGRlciBnYXZlIHVzIHRoZSByZXZpc2lvbnRyZWUgaXQgY3Jl
YXRlZCBiYWNrLCB3ZQogICAgICAgICAgICAgIyBjb3VsZCB1c2UgaXQgc3RyYWlnaHQgYXdheSBo
ZXJlLgogICAgICAgICAgICAgIyBUT0RPOiBpbXBsZW1lbnQgdGhpcy4KCg==

=== modified file bzrlib/errors.py // encoding:base64
LS0tIGJ6cmxpYi9lcnJvcnMucHkKKysrIGJ6cmxpYi9lcnJvcnMucHkKQEAgLTEwMjIsNyArMTAy
Miw3IEBACiAgICAgIiIiRm9ybWF0IGVycm9yIGluIGNvbmZsaWN0IGxpc3RpbmdzIiIiCiAKIAot
Y2xhc3MgUGVuZGluZ1JldnByb3BGb3JtYXRFcnJvcihCenJOZXdFcnJvcik6CitjbGFzcyBQZW5k
aW5nUmV2cHJvcHNGb3JtYXRFcnJvcihCenJOZXdFcnJvcik6CiAgICAgIiIiRm9ybWF0IGVycm9y
IGluIHBlbmRpbmcgcmV2aXNpb24gcHJvcGVydHkgbGlzdGluZyIiIgogCiAKCg==

=== modified file bzrlib/testament.py // encoding:base64
LS0tIGJ6cmxpYi90ZXN0YW1lbnQucHkKKysrIGJ6cmxpYi90ZXN0YW1lbnQucHkKQEAgLTE4Myw3
ICsxODMsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIHIgPSBbJ3Byb3BlcnRp
ZXM6XG4nXQogICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gc29ydGVkKHNlbGYucmV2cHJvcHMu
aXRlbXMoKSk6Ci0gICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShuYW1lLCBzdHIpCisgICAg
ICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShuYW1lLCBiYXNlc3RyaW5nKQogICAgICAgICAgICAg
YXNzZXJ0IG5vdCBjb250YWluc193aGl0ZXNwYWNlKG5hbWUpCiAgICAgICAgICAgICByLmFwcGVu
ZCgnICAlczpcbicgJSBuYW1lKQogICAgICAgICAgICAgZm9yIGxpbmUgaW4gdmFsdWUuc3BsaXRs
aW5lcygpOgoK

=== modified file bzrlib/tests/workingtree_implementations/__init__.py // encod
... ing:base64
LS0tIGJ6cmxpYi90ZXN0cy93b3JraW5ndHJlZV9pbXBsZW1lbnRhdGlvbnMvX19pbml0X18ucHkK
KysrIGJ6cmxpYi90ZXN0cy93b3JraW5ndHJlZV9pbXBsZW1lbnRhdGlvbnMvX19pbml0X18ucHkK
QEAgLTYxLDYgKzYxLDcgQEAKICAgICAgICAgJ2J6cmxpYi50ZXN0cy53b3JraW5ndHJlZV9pbXBs
ZW1lbnRhdGlvbnMudGVzdF9pc19pZ25vcmVkJywKICAgICAgICAgJ2J6cmxpYi50ZXN0cy53b3Jr
aW5ndHJlZV9pbXBsZW1lbnRhdGlvbnMudGVzdF9sb2NraW5nJywKICAgICAgICAgJ2J6cmxpYi50
ZXN0cy53b3JraW5ndHJlZV9pbXBsZW1lbnRhdGlvbnMudGVzdF9wYXJlbnRzJywKKyAgICAgICAg
J2J6cmxpYi50ZXN0cy53b3JraW5ndHJlZV9pbXBsZW1lbnRhdGlvbnMudGVzdF9wZW5kaW5nX3Jl
dnByb3BzJywKICAgICAgICAgJ2J6cmxpYi50ZXN0cy53b3JraW5ndHJlZV9pbXBsZW1lbnRhdGlv
bnMudGVzdF9wdWxsJywKICAgICAgICAgJ2J6cmxpYi50ZXN0cy53b3JraW5ndHJlZV9pbXBsZW1l
bnRhdGlvbnMudGVzdF93b3JraW5ndHJlZScsCiAgICAgICAgIF0KCg==

=== modified file bzrlib/workingtree.py // encoding:base64
LS0tIGJ6cmxpYi93b3JraW5ndHJlZS5weQorKysgYnpybGliL3dvcmtpbmd0cmVlLnB5CkBAIC02
Niw3ICs2Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb1N1Y2hGaWxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm90VmVyc2lvbmVkRXJyb3IsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBNZXJnZU1vZGlmaWVkRm9ybWF0RXJyb3IsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBQZW5kaW5nUmV2cHJvcEZvcm1hdEVycm9yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUGVuZGluZ1JldnByb3BzRm9ybWF0RXJyb3IsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICkKIGZyb20gYnpybGliLmludmVudG9yeSBpbXBvcnQgSW52ZW50b3J5RW50cnksIEludmVudG9y
eQpAQCAtNTQ5LDE2ICs1NDksMTcgQEAKICAgICBkZWYgY29tbWl0KHNlbGYsIG1lc3NhZ2U9Tm9u
ZSwgcmV2cHJvcHM9Tm9uZSwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgIyBhdm9pZCBjaXJj
dWxhciBpbXBvcnRzCiAgICAgICAgIGZyb20gYnpybGliLmNvbW1pdCBpbXBvcnQgQ29tbWl0Ci0g
ICAgICAgIGlmIHJldnByb3BzIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXZwcm9wcyA9IHt9Ci0g
ICAgICAgIGlmIG5vdCAnYnJhbmNoLW5pY2snIGluIHJldnByb3BzOgotICAgICAgICAgICAgcmV2
cHJvcHNbJ2JyYW5jaC1uaWNrJ10gPSBzZWxmLmJyYW5jaC5uaWNrCisgICAgICAgIGFsbF9yZXZw
cm9wcyA9IHNlbGYuZ2V0X3BlbmRpbmdfcmV2cHJvcHMoKQorICAgICAgICBpZiByZXZwcm9wcyBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIGFsbF9yZXZwcm9wcy51cGRhdGUocmV2cHJvcHMpCisg
ICAgICAgIGlmIG5vdCAnYnJhbmNoLW5pY2snIGluIGFsbF9yZXZwcm9wczoKKyAgICAgICAgICAg
IGFsbF9yZXZwcm9wc1snYnJhbmNoLW5pY2snXSA9IHNlbGYuYnJhbmNoLm5pY2sKICAgICAgICAg
IyBhcmdzIGZvciB3dC5jb21taXQgc3RhcnQgYXQgbWVzc2FnZSBmcm9tIHRoZSBDb21taXQuY29t
bWl0IG1ldGhvZCwKICAgICAgICAgIyBidXQgd2l0aCBicmFuY2ggYSBrd2FyZyBub3csIHBhc3Np
bmcgaW4gYXJncyBhcyBpcyByZXN1bHRzIGluIHRoZQogICAgICAgICAjbWVzc2FnZSBiZWluZyB1
c2VkIGZvciB0aGUgYnJhbmNoCiAgICAgICAgIGFyZ3MgPSAoREVQUkVDQVRFRF9QQVJBTUVURVIs
IG1lc3NhZ2UsICkgKyBhcmdzCi0gICAgICAgIGNvbW1pdHRlZF9pZCA9IENvbW1pdCgpLmNvbW1p
dCggd29ya2luZ190cmVlPXNlbGYsIHJldnByb3BzPXJldnByb3BzLAotICAgICAgICAgICAgKmFy
Z3MsICoqa3dhcmdzKQorICAgICAgICBjb21taXR0ZWRfaWQgPSBDb21taXQoKS5jb21taXQoCisg
ICAgICAgICAgICB3b3JraW5nX3RyZWU9c2VsZiwgcmV2cHJvcHM9YWxsX3JldnByb3BzLCAqYXJn
cywgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuX3NldF9pbnZlbnRvcnkoc2VsZi5yZWFkX3dvcmtp
bmdfaW52ZW50b3J5KCkpCiAgICAgICAgIHJldHVybiBjb21taXR0ZWRfaWQKIApAQCAtODM1LDgg
KzgzNiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgUEVORElOR19SRVZQUk9QU19IRUFERVJf
MSkKIAogICAgIEBuZWVkc193cml0ZV9sb2NrCi0gICAgZGVmIHNldF9wZW5kaW5nX3JldnByb3Ao
c2VsZiwgbmFtZSwgdmFsdWUpOgotICAgICAgICAiIiJTZXQgYSByZXZpc2lvbiBwcm9wZXJ0eSBm
b3IgdGhlIG5leHQgY29tbWl0LiIiIgorICAgIGRlZiBhZGRfcGVuZGluZ19yZXZwcm9wKHNlbGYs
IG5hbWUsIHZhbHVlKToKKyAgICAgICAgIiIiQWRkIGEgcmV2aXNpb24gcHJvcGVydHkgZm9yIHRo
ZSBuZXh0IGNvbW1pdC4iIiIKICAgICAgICAgcmV2cHJvcHMgPSBzZWxmLmdldF9wZW5kaW5nX3Jl
dnByb3BzKCkKICAgICAgICAgcmV2cHJvcHNbbmFtZV0gPSB2YWx1ZQogICAgICAgICBzZWxmLnNl
dF9wZW5kaW5nX3JldnByb3BzKHJldnByb3BzKQpAQCAtMTQ3MCw2ICsxNDcxLDcgQEAKICAgICAg
ICAgY29uZmxpY3RzID0gcmV2ZXJ0KHNlbGYsIG9sZF90cmVlLCBmaWxlbmFtZXMsIGJhY2t1cHMs
IHBiKQogICAgICAgICBpZiBub3QgbGVuKGZpbGVuYW1lcyk6CiAgICAgICAgICAgICBzZWxmLnNl
dF9wYXJlbnRfaWRzKHNlbGYuZ2V0X3BhcmVudF9pZHMoKVs6MV0pCisgICAgICAgICAgICBzZWxm
LnNldF9wZW5kaW5nX3JldnByb3BzKHt9KQogICAgICAgICAgICAgcmVzb2x2ZShzZWxmKQogICAg
ICAgICBlbHNlOgogICAgICAgICAgICAgcmVzb2x2ZShzZWxmLCBmaWxlbmFtZXMsIGlnbm9yZV9t
aXNzZXM9VHJ1ZSkKCg==

# revision id: james.henstridge at canonical.com-20060901093317-40a45b3d967a7fb2
# sha1: c7370b19aeb237c65d1d9a36c03cf0c204498ff2
# inventory sha1: afd6088ae4c7b592bfb67923c484e9e94f56e4a3
# parent ids:
#   james.henstridge at canonical.com-20060901075447-6b3fdff3eda4b7e9
# properties:
#   branch-nick: bzr.pending-revprops

# message:
#   add code to mange a list of pending revprops in the working tree
# committer: James Henstridge <james.henstridge at canonical.com>
# date: Fri 2006-09-01 15:54:47.914000034 +0800

=== modified file bzrlib/errors.py // encoding:base64
LS0tIGJ6cmxpYi9lcnJvcnMucHkKKysrIGJ6cmxpYi9lcnJvcnMucHkKQEAgLTEwMjIsNiArMTAy
MiwxMCBAQAogICAgICIiIkZvcm1hdCBlcnJvciBpbiBjb25mbGljdCBsaXN0aW5ncyIiIgogCiAK
K2NsYXNzIFBlbmRpbmdSZXZwcm9wRm9ybWF0RXJyb3IoQnpyTmV3RXJyb3IpOgorICAgICIiIkZv
cm1hdCBlcnJvciBpbiBwZW5kaW5nIHJldmlzaW9uIHByb3BlcnR5IGxpc3RpbmciIiIKKworCiBj
bGFzcyBDb3JydXB0UmVwb3NpdG9yeShCenJOZXdFcnJvcik6CiAgICAgIiIiQW4gZXJyb3IgaGFz
IGJlZW4gZGV0ZWN0ZWQgaW4gdGhlIHJlcG9zaXRvcnkgJShyZXBvX3BhdGgpcy4KIFBsZWFzZSBy
dW4gYnpyIHJlY29uY2lsZSBvbiB0aGlzIHJlcG9zaXRvcnkuIiIiCgo=

=== modified file bzrlib/workingtree.py // encoding:base64
LS0tIGJ6cmxpYi93b3JraW5ndHJlZS5weQorKysgYnpybGliL3dvcmtpbmd0cmVlLnB5CkBAIC0z
MSw2ICszMSw3IEBACiAKIE1FUkdFX01PRElGSUVEX0hFQURFUl8xID0gIkJaUiBtZXJnZS1tb2Rp
ZmllZCBsaXN0IGZvcm1hdCAxIgogQ09ORkxJQ1RfSEVBREVSXzEgPSAiQlpSIGNvbmZsaWN0IGxp
c3QgZm9ybWF0IDEiCitQRU5ESU5HX1JFVlBST1BTX0hFQURFUl8xID0gIkJaUiBwZW5kaW5nIHJl
dmlzaW9uIHByb3BlcnRpZXMgbGlzdCBmb3JtYXQgMSIKIAogIyBUT0RPOiBHaXZlIHRoZSB3b3Jr
aW5ndHJlZSBzb2xlIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgd29ya2luZyBpbnZlbnRvcnk7CiAj
IHJlbW92ZSB0aGUgdmFyaWFibGUgYW5kIHJlZmVyZW5jZXMgdG8gaXQgZnJvbSB0aGUgYnJhbmNo
LiAgVGhpcyBtYXkgcmVxdWlyZQpAQCAtNjUsNiArNjYsNyBAQAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTm9TdWNoRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdFZlcnNp
b25lZEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVyZ2VNb2RpZmllZEZvcm1h
dEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVuZGluZ1JldnByb3BGb3JtYXRF
cnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogZnJvbSBienJsaWIuaW52ZW50b3J5IGltcG9y
dCBJbnZlbnRvcnlFbnRyeSwgSW52ZW50b3J5CkBAIC03OTYsNiArNzk4LDQ5IEBACiAgICAgICAg
ICAgICAgICAgbWVyZ2VfaGFzaGVzW2ZpbGVfaWRdID0gaGFzaAogICAgICAgICByZXR1cm4gbWVy
Z2VfaGFzaGVzCiAKKyAgICBAbmVlZHNfcmVhZF9sb2NrCisgICAgZGVmIGdldF9wZW5kaW5nX3Jl
dnByb3BzKHNlbGYpOgorICAgICAgICAiIiJHZXQgdGhlIGxpc3Qgb2YgcGVuZGluZyByZXZpc2lv
biBwcm9wZXJ0aWVzLgorCisgICAgICAgIFRoZXNlIHByb3BlcnRpZXMgd2lsbCBiZSBzZXQgYXMg
cmV2aXNpb24gcHJvcGVydGllcyBvbiB0aGUKKyAgICAgICAgbmV4dCBjb21taXQuCisgICAgICAg
ICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm9wZmlsZSA9IHNlbGYuX2NvbnRyb2xf
ZmlsZXMuZ2V0KCdwZW5kaW5nLXJldnByb3BzJykKKyAgICAgICAgZXhjZXB0IE5vU3VjaEZpbGU6
CisgICAgICAgICAgICByZXR1cm4ge30KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgcHJv
cGZpbGUubmV4dCgpICE9IFBFTkRJTkdfUkVWUFJPUFNfSEVBREVSXzEgKyAnXG4nOgorICAgICAg
ICAgICAgICAgIHJhaXNlIFBlbmRpbmdSZXZwcm9wc0Zvcm1hdEVycm9yKCkKKyAgICAgICAgZXhj
ZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICByYWlzZSBQZW5kaW5nUmV2cHJvcHNGb3Jt
YXRFcnJvcigpCisgICAgICAgIHJldnByb3BzID0ge30KKyAgICAgICAgZm9yIHMgaW4gUmlvUmVh
ZGVyKHByb3BmaWxlKToKKyAgICAgICAgICAgIG5hbWUgPSBzLmdldCgnbmFtZScpCisgICAgICAg
ICAgICB2YWx1ZSA9IHMuZ2V0KCd2YWx1ZScpCisgICAgICAgICAgICByZXZwcm9wc1tuYW1lXSA9
IHZhbHVlCisgICAgICAgIHJldHVybiByZXZwcm9wcworCisgICAgQG5lZWRzX3dyaXRlX2xvY2sK
KyAgICBkZWYgc2V0X3BlbmRpbmdfcmV2cHJvcHMoc2VsZiwgcmV2cHJvcHMpOgorICAgICAgICAi
IiJTZXQgdGhlIGxpc3Qgb2YgcGVuZGluZyByZXZpc2lvbiBwcm9wZXJ0aWVzLgorCisgICAgICAg
IFRoZXNlIHByb3BlcnRpZXMgd2lsbCBiZSBzZXQgYXMgcmV2aXNpb24gcHJvcGVydGllcyBvbiB0
aGUKKyAgICAgICAgbmV4dCBjb21taXQuCisgICAgICAgICIiIgorICAgICAgICBkZWYgaXRlcl9z
dGFuemFzKCk6CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gcmV2cHJvcHMuaXRlcml0
ZW1zKCk6CisgICAgICAgICAgICAgICAgeWllbGQgU3RhbnphKG5hbWU9bmFtZSwgdmFsdWU9dmFs
dWUpCisgICAgICAgIHNlbGYuX3B1dF9yaW8oJ3BlbmRpbmctcmV2cHJvcHMnLCBpdGVyX3N0YW56
YXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICBQRU5ESU5HX1JFVlBST1BTX0hFQURFUl8xKQor
CisgICAgQG5lZWRzX3dyaXRlX2xvY2sKKyAgICBkZWYgc2V0X3BlbmRpbmdfcmV2cHJvcChzZWxm
LCBuYW1lLCB2YWx1ZSk6CisgICAgICAgICIiIlNldCBhIHJldmlzaW9uIHByb3BlcnR5IGZvciB0
aGUgbmV4dCBjb21taXQuIiIiCisgICAgICAgIHJldnByb3BzID0gc2VsZi5nZXRfcGVuZGluZ19y
ZXZwcm9wcygpCisgICAgICAgIHJldnByb3BzW25hbWVdID0gdmFsdWUKKyAgICAgICAgc2VsZi5z
ZXRfcGVuZGluZ19yZXZwcm9wcyhyZXZwcm9wcykKKwogICAgIGRlZiBnZXRfc3ltbGlua190YXJn
ZXQoc2VsZiwgZmlsZV9pZCk6CiAgICAgICAgIHJldHVybiBvcy5yZWFkbGluayhzZWxmLmlkMmFi
c3BhdGgoZmlsZV9pZCkpCiAKCg==

# revision id: james.henstridge at canonical.com-20060901075447-6b3fdff3eda4b7e9
# sha1: 7ad2fe38796ef07fe334e847ad76ca2ca8a3c725
# inventory sha1: 660a1c1d5cf21308e0d76e874db7ef31348e9196
# parent ids:
#   pqm at pqm.ubuntu.com-20060831182704-2de4cd234a448ed1
# properties:
#   branch-nick: bzr.pending-revprops


More information about the bazaar mailing list