# Bazaar revision bundle v0.8 # # message: # Don't require commits when we are merging (allow merging to an empty branch) # committer: Henry Ludemann # date: Sun 2007-01-28 12:23:27.651000023 +0000 === modified file bzrlib/benchmarks/tree_creator/heavily_merged.py // last-chan ... ged:henry@munchkin-20070128121809-40atkbyi5dvopw7z --- bzrlib/benchmarks/tree_creator/heavily_merged.py +++ bzrlib/benchmarks/tree_creator/heavily_merged.py @@ -63,7 +63,7 @@ revision_id = tree2.commit('no-changes commit %d-b' % i) tree.branch.fetch(tree2.branch, revision_id) tree.add_parent_tree_id(revision_id) - tree.set_parent_ids(tree.get_parent_ids()[:1]) + tree.set_parent_ids([tree.get_parent_id()]) finally: tree2.unlock() finally: === modified file bzrlib/builtins.py --- bzrlib/builtins.py +++ bzrlib/builtins.py @@ -892,7 +892,7 @@ else: tree.lock_tree_write() try: - existing_pending_merges = tree.get_parent_ids()[1:] + existing_pending_merges = tree.get_merged_ids()[:] last_rev = tree.last_revision() if last_rev == tree.branch.last_revision(): # may be up to date, check master too. @@ -904,7 +904,7 @@ conflicts = tree.update() revno = tree.branch.revision_id_to_revno(tree.last_revision()) note('Updated to revision %d.' % (revno,)) - if tree.get_parent_ids()[1:] != existing_pending_merges: + if tree.get_merged_ids() != existing_pending_merges: note('Your local commits will now show as pending merges with ' "'bzr status', and can be committed with 'bzr commit'.") if conflicts != 0: @@ -2411,16 +2411,17 @@ tree, file_list = tree_files(file_list) tree.lock_write() try: - parents = tree.get_parent_ids() - if len(parents) != 2: + parent = tree.get_parent_id() + if len(tree.get_merged_ids()) != 1: raise errors.BzrCommandError("Sorry, remerge only works after normal" " merges. Not cherrypicking or" " multi-merges.") + pending = tree.get_merged_ids()[0] repository = tree.branch.repository - base_revision = common_ancestor(parents[0], - parents[1], repository) + base_revision = common_ancestor(parent, + pending, repository) base_tree = repository.revision_tree(base_revision) - other_tree = repository.revision_tree(parents[1]) + other_tree = repository.revision_tree(pending) interesting_ids = None new_conflicts = [] conflicts = tree.conflicts() @@ -2455,7 +2456,7 @@ tree.branch, other_tree, base_tree, this_tree=tree, interesting_ids=interesting_ids, - other_rev_id=parents[1], + other_rev_id=pending, merge_type=merge_type, show_base=show_base, reprocess=reprocess) @@ -3048,7 +3049,7 @@ pb=pb) merger.pp = ProgressPhase("Merge phase", 5, pb) merger.pp.next_phase() - merger.check_basis(check_clean) + merger.check_basis(check_clean, require_commits=False) merger.set_other(other_revision) merger.pp.next_phase() merger.set_base(base_revision) === modified file bzrlib/commit.py // last-changed:henry@munchkin-2007012713263 ... 7-iwvb26uik4k6dejd --- bzrlib/commit.py +++ bzrlib/commit.py @@ -245,14 +245,7 @@ self._check_bound_branch() # check for out of date working trees - try: - first_tree_parent = self.work_tree.get_parent_ids()[0] - except IndexError: - # if there are no parents, treat our parent as 'None' - # this is so that we still consier the master branch - # - in a checkout scenario the tree may have no - # parents but the branch may do. - first_tree_parent = None + first_tree_parent = self.work_tree.get_parent_id() master_last = self.master_branch.last_revision() if (master_last is not None and master_last != first_tree_parent): @@ -283,11 +276,16 @@ self.pb_count = 0 self._gather_parents() - if len(self.parents) > 1 and self.specific_files: + if len(self.merged_ids) > 0 and self.specific_files: raise NotImplementedError('selected-file commit of merges is not supported yet: files %r', self.specific_files) - self.builder = self.branch.get_commit_builder(self.parents, + if self.parent_id is not None: + parents = [self.parent_id] + else: + parents = [] + parents.extend(self.merged_ids) + self.builder = self.branch.get_commit_builder(parents, self.config, timestamp, timezone, committer, revprops, rev_id) self._remove_deleted() @@ -382,7 +380,7 @@ if self.allow_pointless: return # A merge with no effect on files - if len(self.parents) > 1: + if len(self.merged_ids) > 0: return # work around the fact that a newly-initted tree does differ from its # basis @@ -497,9 +495,14 @@ """Record the parents of a merge for merge detection.""" # TODO: Make sure that this list doesn't contain duplicate # entries and the order is preserved when doing this. - self.parents = self.work_tree.get_parent_ids() + self.parent_id = self.work_tree.get_parent_id() + self.merged_ids = self.work_tree.get_merged_ids() self.parent_invs = [] - for revision in self.parents: + parents = [] + if self.parent_id is not None: + parents.append(self.parent_id) + parents.extend(self.merged_ids) + for revision in parents: if self.branch.repository.has_revision(revision): mutter('commit parent revision {%s}', revision) inventory = self.branch.repository.get_inventory(revision) === modified file bzrlib/info.py // last-changed:henry@munchkin-20070127132637- ... iwvb26uik4k6dejd --- bzrlib/info.py +++ bzrlib/info.py @@ -177,10 +177,7 @@ basis = working.basis_tree() work_inv = working.inventory history = branch.revision_history() - try: - tree_last_id = working.get_parent_ids()[0] - except IndexError: - tree_last_id = None + tree_last_id = working.get_parent_id() if len(history) and tree_last_id != history[-1]: tree_last_revno = branch.revision_id_to_revno(tree_last_id) === modified file bzrlib/memorytree.py // last-changed:henry@munchkin-200701281 ... 21809-40atkbyi5dvopw7z --- bzrlib/memorytree.py +++ bzrlib/memorytree.py @@ -83,15 +83,6 @@ stream = self._file_transport.get(path) return sha_file(stream) - @needs_read_lock - def get_parent_ids(self): - """See Tree.get_parent_ids. - - This implementation returns the current cached value from - self._parent_ids. - """ - return list(self._parent_ids) - def has_filename(self, filename): """See Tree.has_filename().""" return self._file_transport.has(filename) @@ -219,6 +210,18 @@ else: raise errors.NoSuchId(self, file_id) + @needs_read_lock + def get_parent_id(self): + if len(self.branch.revision_history()) == 0 or len(self._parent_ids) == 0: + return None + return self._parent_ids[0] + + @needs_read_lock + def get_merged_ids(self): + if len(self.branch.revision_history()) == 0: + return self._parent_ids[:] + return self._parent_ids[1:] + def set_parent_trees(self, parents_list, allow_leftmost_as_ghost=False): """See MutableTree.set_parent_trees().""" if len(parents_list) == 0: === modified file bzrlib/status.py // last-changed:henry@munchkin-2007012713263 ... 7-iwvb26uik4k6dejd --- bzrlib/status.py +++ bzrlib/status.py @@ -164,12 +164,11 @@ def show_pending_merges(new, to_file, short=False): """Write out a display of pending merges in a working tree.""" - parents = new.get_parent_ids() - if len(parents) < 2: + pending = new.get_merged_ids() + if len(pending) == 0: return - pending = parents[1:] branch = new.branch - last_revision = parents[0] + last_revision = new.get_parent_id() if not short: print >>to_file, 'pending merges:' if last_revision is not None: === modified file bzrlib/symbol_versioning.py // last-changed:henry@munchkin-20 ... 070127132637-iwvb26uik4k6dejd --- bzrlib/symbol_versioning.py +++ bzrlib/symbol_versioning.py @@ -33,6 +33,7 @@ 'zero_twelve', 'zero_thirteen', 'zero_fourteen', + 'zero_fifteen', ] from warnings import warn @@ -47,6 +48,7 @@ zero_twelve = "%s was deprecated in version 0.12." zero_thirteen = "%s was deprecated in version 0.13." zero_fourteen = "%s was deprecated in version 0.14." +zero_fifteen = "%s was deprecated in version 0.15." def set_warning_method(method): === modified file bzrlib/tests/workingtree_implementations/test_parents.py // l ... ast-changed:henry@munchkin-20070128121809-40atkbyi5dvopw7z --- bzrlib/tests/workingtree_implementations/test_parents.py +++ bzrlib/tests/workingtree_implementations/test_parents.py @@ -32,11 +32,19 @@ the pre-get_parent_ids() api - which is now deprecated. """ self.assertEqual(expected, tree.get_parent_ids()) - if expected == []: + + if len(tree.branch.revision_history()) == 0: + # If we don't have any revision history, then we shouldn't have + # a last revision self.assertEqual(None, tree.last_revision()) + pending = expected + elif len(expected) > 0: + self.assertEqual(expected[0], tree.last_revision()) + pending = expected[1:] else: - self.assertEqual(expected[0], tree.last_revision()) - self.assertEqual(expected[1:], + self.assertEqual(None, tree.last_revision()) + pending = [] + self.assertEqual(pending, self.applyDeprecated(symbol_versioning.zero_eleven, tree.pending_merges)) === modified file bzrlib/tree.py // last-changed:henry@munchkin-20070128121809- ... 40atkbyi5dvopw7z --- bzrlib/tree.py +++ bzrlib/tree.py @@ -33,6 +33,12 @@ from bzrlib.inter import InterObject from bzrlib.osutils import fingerprint_file import bzrlib.revision +from bzrlib.symbol_versioning import ( + deprecated_list, + deprecated_method, + warn, + zero_fifteen, + ) from bzrlib.trace import mutter, note @@ -100,14 +106,44 @@ """ return [] + @deprecated_method(zero_fifteen) def get_parent_ids(self): - """Get the parent ids for this tree. - - :return: a list of parent ids. [] is returned to indicate + """ Get a list of parent ids for this tree. + + Should use get_parent_id and get_merged_ids instead. + + :return: A list of revision ids. + """ + if self.get_parent_id() is not None: + result = [self.get_parent_id()] + else: + result = [] + result.extend(self.get_merged_ids()) + return deprecated_list(zero_fifteen, 'parent_ids', result) + + def __warn_deprecated_get_parent_ids(self): + symbol = "%s.%s.%s" % (self.__class__.__module__, + self.__class__.__name__, + self.get_parent_ids.__name__ + ) + warn(zero_fifteen % symbol, DeprecationWarning, stacklevel=2) + + def get_parent_id(self): + """Get the parent id for this tree. + + :return: a parent id. None is returned to indicate a tree with no parents. - :raises: BzrError if the parents are not known. - """ - raise NotImplementedError(self.get_parent_ids) + :raises: BzrError if the parent is not known. + """ + raise NotImplementedError(self.get_merged_ids) + + def get_merged_ids(self): + """Get merged revision ids for this tree + + :return: A list of merged revisions. + :raises: BzrError if the merged revisions is not known. + """ + raise NotImplementedError(self.get_merged_ids) def has_filename(self, filename): """True if the tree has given filename.""" @@ -252,7 +288,10 @@ ' use repository.revision_tree instead.', DeprecationWarning, stacklevel=2) - def get_parent_ids(self): + def get_parent_id(self): + return None + + def get_merged_ids(self): return [] def get_symlink_target(self, file_id): === modified file bzrlib/uncommit.py // last-changed:henry@munchkin-20070127132 ... 637-iwvb26uik4k6dejd --- bzrlib/uncommit.py +++ bzrlib/uncommit.py @@ -40,7 +40,7 @@ pending_merges = [] if tree is not None: - pending_merges = tree.get_parent_ids()[1:] + pending_merges = tree.get_merged_ids() master = branch.get_master_branch() if master is not None: === modified file bzrlib/workingtree.py // last-changed:henry@munchkin-20070128 ... 121809-40atkbyi5dvopw7z --- bzrlib/workingtree.py +++ bzrlib/workingtree.py @@ -381,9 +381,8 @@ If the left most parent is a ghost then the returned tree will be an empty tree - one obtained by calling repository.revision_tree(None). """ - try: - revision_id = self.get_parent_ids()[0] - except IndexError: + revision_id = self.get_parent_id() + if revision_id is None: # no parents, return an empty revision tree. # in the future this should return the tree for # 'empty:' - the implicit root empty tree. @@ -493,32 +492,35 @@ old_lines = list(basis.annotate_iter(file_id)) old = [old_lines] for tree in self.branch.repository.revision_trees( - self.get_parent_ids()[1:]): + self.get_merged_ids()): if file_id not in tree: continue old.append(list(tree.annotate_iter(file_id))) return annotate.reannotate(old, self.get_file(file_id).readlines(), CURRENT_REVISION) - def get_parent_ids(self): - """See Tree.get_parent_ids. + @needs_read_lock + def get_parent_id(self): + """See Tree.get_parent_id. + """ + return self._last_revision() - This implementation reads the pending merges list and last_revision - value and uses that to decide what the parents list should be. + @needs_read_lock + def get_merged_ids(self): + """See Tree.get_merged_ids. + + This implementation reads the pending merges list to detect + the merged id list. """ - last_rev = self._last_revision() - if last_rev is None: - parents = [] - else: - parents = [last_rev] + merged = [] try: merges_file = self._control_files.get_utf8('pending-merges') except NoSuchFile: pass else: for l in merges_file.readlines(): - parents.append(l.rstrip('\n')) - return parents + merged.append(l.rstrip('\n')) + return merged @needs_read_lock def get_root_id(self): @@ -697,7 +699,7 @@ As of 0.11 this is deprecated. Please see WorkingTree.get_parent_ids() instead - which is available on all tree objects. """ - return self.get_parent_ids()[1:] + return self.get_merged_ids() def _check_parents_for_ghosts(self, revision_ids, allow_leftmost_as_ghost): """Common ghost checking functionality from set_parent_*. @@ -711,9 +713,8 @@ self.branch.repository.has_revision(leftmost_id)): raise errors.GhostRevisionUnusableHere(leftmost_id) - def _set_merges_from_parent_ids(self, parent_ids): - merges = parent_ids[1:] - self._control_files.put_utf8('pending-merges', '\n'.join(merges)) + def _set_merged_ids(self, merged_ids): + self._control_files.put_utf8('pending-merges', '\n'.join(merged_ids)) @needs_tree_write_lock def set_parent_ids(self, revision_ids, allow_leftmost_as_ghost=False): @@ -731,12 +732,15 @@ self._check_parents_for_ghosts(revision_ids, allow_leftmost_as_ghost=allow_leftmost_as_ghost) - if len(revision_ids) > 0: - self.set_last_revision(revision_ids[0]) + if len(self.branch.revision_history()) == 0 or len(revision_ids) == 0: + parent = None + merged_ids = revision_ids[:] else: - self.set_last_revision(None) + parent = revision_ids[0] + merged_ids = revision_ids[1:] + self.set_last_revision(parent) - self._set_merges_from_parent_ids(revision_ids) + self._set_merged_ids(merged_ids) @needs_tree_write_lock def set_parent_trees(self, parents_list, allow_leftmost_as_ghost=False): @@ -749,8 +753,15 @@ if len(parent_ids) == 0: leftmost_parent_id = None leftmost_parent_tree = None + merged_ids = [] else: - leftmost_parent_id, leftmost_parent_tree = parents_list[0] + if len(self.branch.revision_history()) == 0: + leftmost_parent_id = None + leftmost_parent_tree = None + merged_ids = [id for id in parent_ids if id is not None] + else: + leftmost_parent_id, leftmost_parent_tree = parents_list[0] + merged_ids = parent_ids[1:] if self._change_last_revision(leftmost_parent_id): if leftmost_parent_tree is None: @@ -762,13 +773,15 @@ xml = self._create_basis_xml_from_inventory( leftmost_parent_id, inv) self._write_basis_inventory(xml) - self._set_merges_from_parent_ids(parent_ids) + self._set_merged_ids(merged_ids) @needs_tree_write_lock def set_pending_merges(self, rev_list): - parents = self.get_parent_ids() - leftmost = parents[:1] - new_parents = leftmost + rev_list + if self.get_parent_id() is not None: + new_parents = [self.get_parent_id()] + else: + new_parents = [] + new_parents.extend(rev_list) self.set_parent_ids(new_parents) @needs_tree_write_lock @@ -1200,7 +1213,7 @@ # we have to pull the merge trees out again, because # merge_inner has set the ids. - this corner is not yet # layered well enough to prevent double handling. - merges = self.get_parent_ids()[1:] + merges = self.get_merged_ids() parent_trees.extend([ (parent, repository.revision_tree(parent)) for parent in merges]) @@ -1511,7 +1524,10 @@ old_tree = self.basis_tree() conflicts = transform.revert(self, old_tree, filenames, backups, pb) if not len(filenames): - self.set_parent_ids(self.get_parent_ids()[:1]) + if self.get_parent_id() is None: + self.set_parent_ids([]) + else: + self.set_parent_ids([self.get_parent_id()]) resolve(self) else: resolve(self, filenames, ignore_misses=True) @@ -1640,10 +1656,7 @@ # local work is unreferenced and will appear to have been lost. # result = 0 - try: - last_rev = self.get_parent_ids()[0] - except IndexError: - last_rev = None + last_rev = self.get_parent_id() if last_rev != self.branch.last_revision(): # merge tree state up to new branch tip. basis = self.basis_tree() @@ -1658,7 +1671,7 @@ # TODO - dedup parents list with things merged by pull ? # reuse the tree we've updated to to set the basis: parent_trees = [(self.branch.last_revision(), to_tree)] - merges = self.get_parent_ids()[1:] + merges = self.get_merged_ids() # Ideally we ask the tree for the trees here, that way the working # tree can decide whether to give us teh entire tree or give us a # lazy initialised tree. dirstate for instance will have the trees === modified directory // last-changed:henry@munchkin-20070128122327-2jji8su8i ... 9mfry1e # revision id: henry@munchkin-20070128122327-2jji8su8i9mfry1e # sha1: bce2bdd53cc5999e5b324794849219f80bb43e48 # inventory sha1: cb58629b8490f19e65027b2a6dcf6adad6a65016 # parent ids: # henry@munchkin-20070128121809-40atkbyi5dvopw7z # base id: henry@munchkin-20070127095535-ot6q1cwzo00g1tfn # properties: # branch-nick: bzr.test # message: # Fix issues causing existing unit tests to fail # committer: Henry Ludemann # date: Sun 2007-01-28 12:18:09.198999882 +0000 === modified file bzrlib/benchmarks/tree_creator/heavily_merged.py // encoding: ... base64 LS0tIGJ6cmxpYi9iZW5jaG1hcmtzL3RyZWVfY3JlYXRvci9oZWF2aWx5X21lcmdlZC5weQorKysg YnpybGliL2JlbmNobWFya3MvdHJlZV9jcmVhdG9yL2hlYXZpbHlfbWVyZ2VkLnB5CkBAIC02Myw3 ICs2Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uX2lkID0gdHJlZTIuY29tbWl0 KCduby1jaGFuZ2VzIGNvbW1pdCAlZC1iJyAlIGkpCiAgICAgICAgICAgICAgICAgICAgIHRyZWUu YnJhbmNoLmZldGNoKHRyZWUyLmJyYW5jaCwgcmV2aXNpb25faWQpCiAgICAgICAgICAgICAgICAg ICAgIHRyZWUuYWRkX3BhcmVudF90cmVlX2lkKHJldmlzaW9uX2lkKQotICAgICAgICAgICAgICAg IHRyZWUuc2V0X3BhcmVudF9pZHModHJlZS5nZXRfcGFyZW50X2lkcygpWzoxXSkKKyAgICAgICAg ICAgICAgICB0cmVlLnNldF9wYXJlbnRfaWRzKFt0cmVlLmdldF9wYXJlbnRfaWQoKV0pCiAgICAg ICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHRyZWUyLnVubG9jaygpCiAgICAgICAg IGZpbmFsbHk6Cgo= === modified file bzrlib/memorytree.py // encoding:base64 LS0tIGJ6cmxpYi9tZW1vcnl0cmVlLnB5CisrKyBienJsaWIvbWVtb3J5dHJlZS5weQpAQCAtODMs MTUgKzgzLDYgQEAKICAgICAgICAgc3RyZWFtID0gc2VsZi5fZmlsZV90cmFuc3BvcnQuZ2V0KHBh dGgpCiAgICAgICAgIHJldHVybiBzaGFfZmlsZShzdHJlYW0pCiAKLSAgICBAbmVlZHNfcmVhZF9s b2NrCi0gICAgZGVmIGdldF9wYXJlbnRfaWRzKHNlbGYpOgotICAgICAgICAiIiJTZWUgVHJlZS5n ZXRfcGFyZW50X2lkcy4KLQotICAgICAgICBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgdGhl IGN1cnJlbnQgY2FjaGVkIHZhbHVlIGZyb20KLSAgICAgICAgICAgIHNlbGYuX3BhcmVudF9pZHMu Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gbGlzdChzZWxmLl9wYXJlbnRfaWRzKQotCiAg ICAgZGVmIGhhc19maWxlbmFtZShzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIlNlZSBUcmVl Lmhhc19maWxlbmFtZSgpLiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fZmlsZV90cmFuc3BvcnQu aGFzKGZpbGVuYW1lKQpAQCAtMjE5LDYgKzIxMCwxOCBAQAogICAgICAgICAgICAgZWxzZToKICAg ICAgICAgICAgICAgICByYWlzZSBlcnJvcnMuTm9TdWNoSWQoc2VsZiwgZmlsZV9pZCkKIAorICAg IEBuZWVkc19yZWFkX2xvY2sKKyAgICBkZWYgZ2V0X3BhcmVudF9pZChzZWxmKToKKyAgICAgICAg aWYgbGVuKHNlbGYuYnJhbmNoLnJldmlzaW9uX2hpc3RvcnkoKSkgPT0gMCBvciBsZW4oc2VsZi5f cGFyZW50X2lkcykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVy biBzZWxmLl9wYXJlbnRfaWRzWzBdCisgICAgCisgICAgQG5lZWRzX3JlYWRfbG9jaworICAgIGRl ZiBnZXRfbWVyZ2VkX2lkcyhzZWxmKToKKyAgICAgICAgaWYgbGVuKHNlbGYuYnJhbmNoLnJldmlz aW9uX2hpc3RvcnkoKSkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wYXJlbnRfaWRz WzpdCisgICAgICAgIHJldHVybiBzZWxmLl9wYXJlbnRfaWRzWzE6XQorCiAgICAgZGVmIHNldF9w YXJlbnRfdHJlZXMoc2VsZiwgcGFyZW50c19saXN0LCBhbGxvd19sZWZ0bW9zdF9hc19naG9zdD1G YWxzZSk6CiAgICAgICAgICIiIlNlZSBNdXRhYmxlVHJlZS5zZXRfcGFyZW50X3RyZWVzKCkuIiIi CiAgICAgICAgIGlmIGxlbihwYXJlbnRzX2xpc3QpID09IDA6Cgo= === modified file bzrlib/tests/workingtree_implementations/test_parents.py // e ... ncoding:base64 LS0tIGJ6cmxpYi90ZXN0cy93b3JraW5ndHJlZV9pbXBsZW1lbnRhdGlvbnMvdGVzdF9wYXJlbnRz LnB5CisrKyBienJsaWIvdGVzdHMvd29ya2luZ3RyZWVfaW1wbGVtZW50YXRpb25zL3Rlc3RfcGFy ZW50cy5weQpAQCAtMzIsMTEgKzMyLDE5IEBACiAgICAgICAgIHRoZSBwcmUtZ2V0X3BhcmVudF9p ZHMoKSBhcGkgLSB3aGljaCBpcyBub3cgZGVwcmVjYXRlZC4KICAgICAgICAgIiIiCiAgICAgICAg IHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHRyZWUuZ2V0X3BhcmVudF9pZHMoKSkKLSAgICAg ICAgaWYgZXhwZWN0ZWQgPT0gW106CisKKyAgICAgICAgaWYgbGVuKHRyZWUuYnJhbmNoLnJldmlz aW9uX2hpc3RvcnkoKSkgPT0gMDoKKyAgICAgICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBhbnkg cmV2aXNpb24gaGlzdG9yeSwgdGhlbiB3ZSBzaG91bGRuJ3QgaGF2ZQorICAgICAgICAgICAgIyBh IGxhc3QgcmV2aXNpb24KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgdHJlZS5s YXN0X3JldmlzaW9uKCkpCisgICAgICAgICAgICBwZW5kaW5nID0gZXhwZWN0ZWQKKyAgICAgICAg ZWxpZiBsZW4oZXhwZWN0ZWQpID4gMDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhw ZWN0ZWRbMF0sIHRyZWUubGFzdF9yZXZpc2lvbigpKQorICAgICAgICAgICAgcGVuZGluZyA9IGV4 cGVjdGVkWzE6XQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChl eHBlY3RlZFswXSwgdHJlZS5sYXN0X3JldmlzaW9uKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1 YWwoZXhwZWN0ZWRbMTpdLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCB0cmVl Lmxhc3RfcmV2aXNpb24oKSkKKyAgICAgICAgICAgIHBlbmRpbmcgPSBbXQorICAgICAgICBzZWxm LmFzc2VydEVxdWFsKHBlbmRpbmcsCiAgICAgICAgICAgICBzZWxmLmFwcGx5RGVwcmVjYXRlZChz eW1ib2xfdmVyc2lvbmluZy56ZXJvX2VsZXZlbiwKICAgICAgICAgICAgICAgICB0cmVlLnBlbmRp bmdfbWVyZ2VzKSkKIAoK === modified file bzrlib/tree.py // encoding:base64 LS0tIGJ6cmxpYi90cmVlLnB5CisrKyBienJsaWIvdHJlZS5weQpAQCAtMzQsNiArMzQsNyBAQAog ZnJvbSBienJsaWIub3N1dGlscyBpbXBvcnQgZmluZ2VycHJpbnRfZmlsZQogaW1wb3J0IGJ6cmxp Yi5yZXZpc2lvbgogZnJvbSBienJsaWIuc3ltYm9sX3ZlcnNpb25pbmcgaW1wb3J0ICgKKyAgICAg ICAgZGVwcmVjYXRlZF9saXN0LAogICAgICAgICBkZXByZWNhdGVkX21ldGhvZCwKICAgICAgICAg d2FybiwKICAgICAgICAgemVyb19maWZ0ZWVuLApAQCAtMTE4LDcgKzExOSw3IEBACiAgICAgICAg IGVsc2U6CiAgICAgICAgICAgICByZXN1bHQgPSBbXQogICAgICAgICByZXN1bHQuZXh0ZW5kKHNl bGYuZ2V0X21lcmdlZF9pZHMoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICByZXR1 cm4gZGVwcmVjYXRlZF9saXN0KHplcm9fZmlmdGVlbiwgJ3BhcmVudF9pZHMnLCByZXN1bHQpCiAK ICAgICBkZWYgX193YXJuX2RlcHJlY2F0ZWRfZ2V0X3BhcmVudF9pZHMoc2VsZik6CiAgICAgICAg IHN5bWJvbCA9ICIlcy4lcy4lcyIgJSAoc2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywKQEAgLTEz NCwxMyArMTM1LDcgQEAKICAgICAgICAgYSB0cmVlIHdpdGggbm8gcGFyZW50cy4KICAgICAgICAg OnJhaXNlczogQnpyRXJyb3IgaWYgdGhlIHBhcmVudCBpcyBub3Qga25vd24uCiAgICAgICAgICIi IgotICAgICAgICAjIElmIHdlIGhhdmVuJ3QgYmVlbiBpbXBsZW1lbnRlZCwgaXQgaXMgbGlrZWx5 IHRoZSBkZXJpdmVkIGNsYXNzIGltcGxlbWVudGVkIGdldF9wYXJlbnRfaWRzLgotICAgICAgICBz ZWxmLl9fd2Fybl9kZXByZWNhdGVkX2dldF9wYXJlbnRfaWRzKCkKLSAgICAgICAgcGFyZW50X2lk cyA9IHNlbGYuZ2V0X3BhcmVudF9pZHMoKQotICAgICAgICByZXN1bHQgPSBOb25lCi0gICAgICAg IGlmIGxlbihwYXJlbnRfaWRzKSA+IDA6Ci0gICAgICAgICAgICByZXN1bHQgPSBwYXJlbnRfaWRz WzBdCi0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF cnJvcihzZWxmLmdldF9tZXJnZWRfaWRzKQogCiAgICAgZGVmIGdldF9tZXJnZWRfaWRzKHNlbGYp OgogICAgICAgICAiIiJHZXQgbWVyZ2VkIHJldmlzaW9uIGlkcyBmb3IgdGhpcyB0cmVlCkBAIC0x NDgsOSArMTQzLDcgQEAKICAgICAgICAgOnJldHVybjogQSBsaXN0IG9mIG1lcmdlZCByZXZpc2lv bnMuCiAgICAgICAgIDpyYWlzZXM6IEJ6ckVycm9yIGlmIHRoZSBtZXJnZWQgcmV2aXNpb25zIGlz IG5vdCBrbm93bi4KICAgICAgICAgIiIiCi0gICAgICAgICMgSWYgd2UgaGF2ZW4ndCBiZWVuIGlt cGxlbWVudGVkLCBpdCBpcyBsaWtlbHkgdGhlIGRlcml2ZWQgY2xhc3MgaW1wbGVtZW50ZWQgZ2V0 X3BhcmVudF9pZHMuCi0gICAgICAgIHNlbGYuX193YXJuX2RlcHJlY2F0ZWRfZ2V0X3BhcmVudF9p ZHMoKQotICAgICAgICByZXR1cm4gc2VsZi5nZXRfcGFyZW50X2lkcygpWzE6XQorICAgICAgICBy YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuZ2V0X21lcmdlZF9pZHMpCiAgICAgCiAgICAg ZGVmIGhhc19maWxlbmFtZShzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIlRydWUgaWYgdGhl IHRyZWUgaGFzIGdpdmVuIGZpbGVuYW1lLiIiIgoK === modified file bzrlib/workingtree.py // encoding:base64 LS0tIGJ6cmxpYi93b3JraW5ndHJlZS5weQorKysgYnpybGliL3dvcmtpbmd0cmVlLnB5CkBAIC00 OTksMTEgKzQ5OSwxMyBAQAogICAgICAgICByZXR1cm4gYW5ub3RhdGUucmVhbm5vdGF0ZShvbGQs IHNlbGYuZ2V0X2ZpbGUoZmlsZV9pZCkucmVhZGxpbmVzKCksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIENVUlJFTlRfUkVWSVNJT04pCiAKKyAgICBAbmVlZHNfcmVhZF9sb2Nr CiAgICAgZGVmIGdldF9wYXJlbnRfaWQoc2VsZik6CiAgICAgICAgICIiIlNlZSBUcmVlLmdldF9w YXJlbnRfaWQuCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5fbGFzdF9yZXZpc2lv bigpCiAgICAgICAgIAorICAgIEBuZWVkc19yZWFkX2xvY2sKICAgICBkZWYgZ2V0X21lcmdlZF9p ZHMoc2VsZik6CiAgICAgICAgICIiIlNlZSBUcmVlLmdldF9tZXJnZWRfaWRzLgogCkBAIC02OTcs NyArNjk5LDcgQEAKICAgICAgICAgQXMgb2YgMC4xMSB0aGlzIGlzIGRlcHJlY2F0ZWQuIFBsZWFz ZSBzZWUgV29ya2luZ1RyZWUuZ2V0X3BhcmVudF9pZHMoKQogICAgICAgICBpbnN0ZWFkIC0gd2hp Y2ggaXMgYXZhaWxhYmxlIG9uIGFsbCB0cmVlIG9iamVjdHMuCiAgICAgICAgICIiIgotICAgICAg ICByZXR1cm4gc2VsZi5nZXRfcGFyZW50X2lkcygpWzE6XQorICAgICAgICByZXR1cm4gc2VsZi5n ZXRfbWVyZ2VkX2lkcygpCiAKICAgICBkZWYgX2NoZWNrX3BhcmVudHNfZm9yX2dob3N0cyhzZWxm LCByZXZpc2lvbl9pZHMsIGFsbG93X2xlZnRtb3N0X2FzX2dob3N0KToKICAgICAgICAgIiIiQ29t bW9uIGdob3N0IGNoZWNraW5nIGZ1bmN0aW9uYWxpdHkgZnJvbSBzZXRfcGFyZW50XyouCkBAIC03 MTEsOSArNzEzLDggQEAKICAgICAgICAgICAgICAgICBzZWxmLmJyYW5jaC5yZXBvc2l0b3J5Lmhh c19yZXZpc2lvbihsZWZ0bW9zdF9pZCkpOgogICAgICAgICAgICAgICAgIHJhaXNlIGVycm9ycy5H aG9zdFJldmlzaW9uVW51c2FibGVIZXJlKGxlZnRtb3N0X2lkKQogCi0gICAgZGVmIF9zZXRfbWVy Z2VzX2Zyb21fcGFyZW50X2lkcyhzZWxmLCBwYXJlbnRfaWRzKToKLSAgICAgICAgbWVyZ2VzID0g cGFyZW50X2lkc1sxOl0KLSAgICAgICAgc2VsZi5fY29udHJvbF9maWxlcy5wdXRfdXRmOCgncGVu ZGluZy1tZXJnZXMnLCAnXG4nLmpvaW4obWVyZ2VzKSkKKyAgICBkZWYgX3NldF9tZXJnZWRfaWRz KHNlbGYsIG1lcmdlZF9pZHMpOgorICAgICAgICBzZWxmLl9jb250cm9sX2ZpbGVzLnB1dF91dGY4 KCdwZW5kaW5nLW1lcmdlcycsICdcbicuam9pbihtZXJnZWRfaWRzKSkKIAogICAgIEBuZWVkc190 cmVlX3dyaXRlX2xvY2sKICAgICBkZWYgc2V0X3BhcmVudF9pZHMoc2VsZiwgcmV2aXNpb25faWRz LCBhbGxvd19sZWZ0bW9zdF9hc19naG9zdD1GYWxzZSk6CkBAIC03MzEsMTIgKzczMiwxNSBAQAog ICAgICAgICBzZWxmLl9jaGVja19wYXJlbnRzX2Zvcl9naG9zdHMocmV2aXNpb25faWRzLAogICAg ICAgICAgICAgYWxsb3dfbGVmdG1vc3RfYXNfZ2hvc3Q9YWxsb3dfbGVmdG1vc3RfYXNfZ2hvc3Qp CiAKLSAgICAgICAgaWYgbGVuKHJldmlzaW9uX2lkcykgPiAwOgotICAgICAgICAgICAgc2VsZi5z ZXRfbGFzdF9yZXZpc2lvbihyZXZpc2lvbl9pZHNbMF0pCisgICAgICAgIGlmIGxlbihzZWxmLmJy YW5jaC5yZXZpc2lvbl9oaXN0b3J5KCkpID09IDAgb3IgbGVuKHJldmlzaW9uX2lkcykgPT0gMDoK KyAgICAgICAgICAgIHBhcmVudCA9IE5vbmUKKyAgICAgICAgICAgIG1lcmdlZF9pZHMgPSByZXZp c2lvbl9pZHNbOl0KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2V0X2xhc3RfcmV2 aXNpb24oTm9uZSkKKyAgICAgICAgICAgIHBhcmVudCA9IHJldmlzaW9uX2lkc1swXQorICAgICAg ICAgICAgbWVyZ2VkX2lkcyA9IHJldmlzaW9uX2lkc1sxOl0KKyAgICAgICAgc2VsZi5zZXRfbGFz dF9yZXZpc2lvbihwYXJlbnQpCiAKLSAgICAgICAgc2VsZi5fc2V0X21lcmdlc19mcm9tX3BhcmVu dF9pZHMocmV2aXNpb25faWRzKQorICAgICAgICBzZWxmLl9zZXRfbWVyZ2VkX2lkcyhtZXJnZWRf aWRzKQogCiAgICAgQG5lZWRzX3RyZWVfd3JpdGVfbG9jawogICAgIGRlZiBzZXRfcGFyZW50X3Ry ZWVzKHNlbGYsIHBhcmVudHNfbGlzdCwgYWxsb3dfbGVmdG1vc3RfYXNfZ2hvc3Q9RmFsc2UpOgpA QCAtNzQ5LDggKzc1MywxNSBAQAogICAgICAgICBpZiBsZW4ocGFyZW50X2lkcykgPT0gMDoKICAg ICAgICAgICAgIGxlZnRtb3N0X3BhcmVudF9pZCA9IE5vbmUKICAgICAgICAgICAgIGxlZnRtb3N0 X3BhcmVudF90cmVlID0gTm9uZQorICAgICAgICAgICAgbWVyZ2VkX2lkcyA9IFtdCiAgICAgICAg IGVsc2U6Ci0gICAgICAgICAgICBsZWZ0bW9zdF9wYXJlbnRfaWQsIGxlZnRtb3N0X3BhcmVudF90 cmVlID0gcGFyZW50c19saXN0WzBdCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5icmFuY2gucmV2 aXNpb25faGlzdG9yeSgpKSA9PSAwOgorICAgICAgICAgICAgICAgIGxlZnRtb3N0X3BhcmVudF9p ZCA9IE5vbmUKKyAgICAgICAgICAgICAgICBsZWZ0bW9zdF9wYXJlbnRfdHJlZSA9IE5vbmUKKyAg ICAgICAgICAgICAgICBtZXJnZWRfaWRzID0gW2lkIGZvciBpZCBpbiBwYXJlbnRfaWRzIGlmIGlk IGlzIG5vdCBOb25lXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsZWZ0bW9z dF9wYXJlbnRfaWQsIGxlZnRtb3N0X3BhcmVudF90cmVlID0gcGFyZW50c19saXN0WzBdCisgICAg ICAgICAgICAgICAgbWVyZ2VkX2lkcyA9IHBhcmVudF9pZHNbMTpdCiAKICAgICAgICAgaWYgc2Vs Zi5fY2hhbmdlX2xhc3RfcmV2aXNpb24obGVmdG1vc3RfcGFyZW50X2lkKToKICAgICAgICAgICAg IGlmIGxlZnRtb3N0X3BhcmVudF90cmVlIGlzIE5vbmU6CkBAIC03NjIsMTMgKzc3MywxNSBAQAog ICAgICAgICAgICAgICAgIHhtbCA9IHNlbGYuX2NyZWF0ZV9iYXNpc194bWxfZnJvbV9pbnZlbnRv cnkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdG1vc3RfcGFy ZW50X2lkLCBpbnYpCiAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfYmFzaXNfaW52ZW50b3J5 KHhtbCkKLSAgICAgICAgc2VsZi5fc2V0X21lcmdlc19mcm9tX3BhcmVudF9pZHMocGFyZW50X2lk cykKKyAgICAgICAgc2VsZi5fc2V0X21lcmdlZF9pZHMobWVyZ2VkX2lkcykKIAogICAgIEBuZWVk c190cmVlX3dyaXRlX2xvY2sKICAgICBkZWYgc2V0X3BlbmRpbmdfbWVyZ2VzKHNlbGYsIHJldl9s aXN0KToKLSAgICAgICAgcGFyZW50cyA9IHNlbGYuZ2V0X3BhcmVudF9pZHMoKQotICAgICAgICBs ZWZ0bW9zdCA9IHBhcmVudHNbOjFdCi0gICAgICAgIG5ld19wYXJlbnRzID0gbGVmdG1vc3QgKyBy ZXZfbGlzdAorICAgICAgICBpZiBzZWxmLmdldF9wYXJlbnRfaWQoKSBpcyBub3QgTm9uZToKKyAg ICAgICAgICAgIG5ld19wYXJlbnRzID0gW3NlbGYuZ2V0X3BhcmVudF9pZCgpXQorICAgICAgICBl bHNlOgorICAgICAgICAgICAgbmV3X3BhcmVudHMgPSBbXQorICAgICAgICBuZXdfcGFyZW50cy5l eHRlbmQocmV2X2xpc3QpCiAgICAgICAgIHNlbGYuc2V0X3BhcmVudF9pZHMobmV3X3BhcmVudHMp CiAKICAgICBAbmVlZHNfdHJlZV93cml0ZV9sb2NrCkBAIC0xMjAwLDcgKzEyMTMsNyBAQAogICAg ICAgICAgICAgICAgICMgd2UgaGF2ZSB0byBwdWxsIHRoZSBtZXJnZSB0cmVlcyBvdXQgYWdhaW4s IGJlY2F1c2UgCiAgICAgICAgICAgICAgICAgIyBtZXJnZV9pbm5lciBoYXMgc2V0IHRoZSBpZHMu IC0gdGhpcyBjb3JuZXIgaXMgbm90IHlldCAKICAgICAgICAgICAgICAgICAjIGxheWVyZWQgd2Vs bCBlbm91Z2ggdG8gcHJldmVudCBkb3VibGUgaGFuZGxpbmcuCi0gICAgICAgICAgICAgICAgbWVy Z2VzID0gc2VsZi5nZXRfcGFyZW50X2lkcygpWzE6XQorICAgICAgICAgICAgICAgIG1lcmdlcyA9 IHNlbGYuZ2V0X21lcmdlZF9pZHMoKQogICAgICAgICAgICAgICAgIHBhcmVudF90cmVlcy5leHRl bmQoWwogICAgICAgICAgICAgICAgICAgICAocGFyZW50LCByZXBvc2l0b3J5LnJldmlzaW9uX3Ry ZWUocGFyZW50KSkgZm9yCiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgaW4gbWVyZ2VzXSkK QEAgLTE1MTEsNyArMTUyNCwxMCBAQAogICAgICAgICAgICAgb2xkX3RyZWUgPSBzZWxmLmJhc2lz X3RyZWUoKQogICAgICAgICBjb25mbGljdHMgPSB0cmFuc2Zvcm0ucmV2ZXJ0KHNlbGYsIG9sZF90 cmVlLCBmaWxlbmFtZXMsIGJhY2t1cHMsIHBiKQogICAgICAgICBpZiBub3QgbGVuKGZpbGVuYW1l cyk6Ci0gICAgICAgICAgICBzZWxmLnNldF9wYXJlbnRfaWRzKHNlbGYuZ2V0X3BhcmVudF9pZHMo KVs6MV0pCisgICAgICAgICAgICBpZiBzZWxmLmdldF9wYXJlbnRfaWQoKSBpcyBOb25lOgorICAg ICAgICAgICAgICAgIHNlbGYuc2V0X3BhcmVudF9pZHMoW10pCisgICAgICAgICAgICBlbHNlOgor ICAgICAgICAgICAgICAgIHNlbGYuc2V0X3BhcmVudF9pZHMoW3NlbGYuZ2V0X3BhcmVudF9pZCgp XSkKICAgICAgICAgICAgIHJlc29sdmUoc2VsZikKICAgICAgICAgZWxzZToKICAgICAgICAgICAg IHJlc29sdmUoc2VsZiwgZmlsZW5hbWVzLCBpZ25vcmVfbWlzc2VzPVRydWUpCkBAIC0xNjQwLDEw ICsxNjU2LDcgQEAKICAgICAgICAgIyBsb2NhbCB3b3JrIGlzIHVucmVmZXJlbmNlZCBhbmQgd2ls bCBhcHBlYXIgdG8gaGF2ZSBiZWVuIGxvc3QuCiAgICAgICAgICMgCiAgICAgICAgIHJlc3VsdCA9 IDAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbGFzdF9yZXYgPSBzZWxmLmdldF9wYXJlbnRf aWRzKClbMF0KLSAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICBsYXN0X3Jl diA9IE5vbmUKKyAgICAgICAgbGFzdF9yZXYgPSBzZWxmLmdldF9wYXJlbnRfaWQoKQogICAgICAg ICBpZiBsYXN0X3JldiAhPSBzZWxmLmJyYW5jaC5sYXN0X3JldmlzaW9uKCk6CiAgICAgICAgICAg ICAjIG1lcmdlIHRyZWUgc3RhdGUgdXAgdG8gbmV3IGJyYW5jaCB0aXAuCiAgICAgICAgICAgICBi YXNpcyA9IHNlbGYuYmFzaXNfdHJlZSgpCkBAIC0xNjU4LDcgKzE2NzEsNyBAQAogICAgICAgICAg ICAgIyBUT0RPIC0gZGVkdXAgcGFyZW50cyBsaXN0IHdpdGggdGhpbmdzIG1lcmdlZCBieSBwdWxs ID8KICAgICAgICAgICAgICMgcmV1c2UgdGhlIHRyZWUgd2UndmUgdXBkYXRlZCB0byB0byBzZXQg dGhlIGJhc2lzOgogICAgICAgICAgICAgcGFyZW50X3RyZWVzID0gWyhzZWxmLmJyYW5jaC5sYXN0 X3JldmlzaW9uKCksIHRvX3RyZWUpXQotICAgICAgICAgICAgbWVyZ2VzID0gc2VsZi5nZXRfcGFy ZW50X2lkcygpWzE6XQorICAgICAgICAgICAgbWVyZ2VzID0gc2VsZi5nZXRfbWVyZ2VkX2lkcygp CiAgICAgICAgICAgICAjIElkZWFsbHkgd2UgYXNrIHRoZSB0cmVlIGZvciB0aGUgdHJlZXMgaGVy ZSwgdGhhdCB3YXkgdGhlIHdvcmtpbmcKICAgICAgICAgICAgICMgdHJlZSBjYW4gZGVjaWRlIHdo ZXRoZXIgdG8gZ2l2ZSB1cyB0ZWggZW50aXJlIHRyZWUgb3IgZ2l2ZSB1cyBhCiAgICAgICAgICAg ICAjIGxhenkgaW5pdGlhbGlzZWQgdHJlZS4gZGlyc3RhdGUgZm9yIGluc3RhbmNlIHdpbGwgaGF2 ZSB0aGUgdHJlZXMKCg== === modified directory // last-changed:henry@munchkin-20070128121809-40atkbyi5 ... dvopw7z # revision id: henry@munchkin-20070128121809-40atkbyi5dvopw7z # sha1: efa3a5148695ad32c8f581a0111c156816fc291a # inventory sha1: 89dd49264e6b558ae917e735efd88f0de4107bd8 # parent ids: # henry@munchkin-20070127132637-iwvb26uik4k6dejd # properties: # branch-nick: bzr.test # message: # Split tree 'get_parent_ids' into 'get_parent_id' and 'get_merged_ids' # committer: Henry Ludemann # date: Sat 2007-01-27 13:26:37.345999956 +0000 === modified file bzrlib/builtins.py // encoding:base64 LS0tIGJ6cmxpYi9idWlsdGlucy5weQorKysgYnpybGliL2J1aWx0aW5zLnB5CkBAIC04OTIsNyAr ODkyLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyZWUubG9ja190cmVlX3dyaXRl KCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhpc3RpbmdfcGVuZGluZ19tZXJnZXMgPSB0 cmVlLmdldF9wYXJlbnRfaWRzKClbMTpdCisgICAgICAgICAgICBleGlzdGluZ19wZW5kaW5nX21l cmdlcyA9IHRyZWUuZ2V0X21lcmdlZF9pZHMoKVs6XQogICAgICAgICAgICAgbGFzdF9yZXYgPSB0 cmVlLmxhc3RfcmV2aXNpb24oKQogICAgICAgICAgICAgaWYgbGFzdF9yZXYgPT0gdHJlZS5icmFu Y2gubGFzdF9yZXZpc2lvbigpOgogICAgICAgICAgICAgICAgICMgbWF5IGJlIHVwIHRvIGRhdGUs IGNoZWNrIG1hc3RlciB0b28uCkBAIC05MDQsNyArOTA0LDcgQEAKICAgICAgICAgICAgIGNvbmZs aWN0cyA9IHRyZWUudXBkYXRlKCkKICAgICAgICAgICAgIHJldm5vID0gdHJlZS5icmFuY2gucmV2 aXNpb25faWRfdG9fcmV2bm8odHJlZS5sYXN0X3JldmlzaW9uKCkpCiAgICAgICAgICAgICBub3Rl KCdVcGRhdGVkIHRvIHJldmlzaW9uICVkLicgJSAocmV2bm8sKSkKLSAgICAgICAgICAgIGlmIHRy ZWUuZ2V0X3BhcmVudF9pZHMoKVsxOl0gIT0gZXhpc3RpbmdfcGVuZGluZ19tZXJnZXM6CisgICAg ICAgICAgICBpZiB0cmVlLmdldF9tZXJnZWRfaWRzKCkgIT0gZXhpc3RpbmdfcGVuZGluZ19tZXJn ZXM6CiAgICAgICAgICAgICAgICAgbm90ZSgnWW91ciBsb2NhbCBjb21taXRzIHdpbGwgbm93IHNo b3cgYXMgcGVuZGluZyBtZXJnZXMgd2l0aCAnCiAgICAgICAgICAgICAgICAgICAgICAiJ2J6ciBz dGF0dXMnLCBhbmQgY2FuIGJlIGNvbW1pdHRlZCB3aXRoICdienIgY29tbWl0Jy4iKQogICAgICAg ICAgICAgaWYgY29uZmxpY3RzICE9IDA6CkBAIC0yNDExLDE2ICsyNDExLDE3IEBACiAgICAgICAg IHRyZWUsIGZpbGVfbGlzdCA9IHRyZWVfZmlsZXMoZmlsZV9saXN0KQogICAgICAgICB0cmVlLmxv Y2tfd3JpdGUoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwYXJlbnRzID0gdHJlZS5nZXRf cGFyZW50X2lkcygpCi0gICAgICAgICAgICBpZiBsZW4ocGFyZW50cykgIT0gMjoKKyAgICAgICAg ICAgIHBhcmVudCA9IHRyZWUuZ2V0X3BhcmVudF9pZCgpCisgICAgICAgICAgICBpZiBsZW4odHJl ZS5nZXRfbWVyZ2VkX2lkcygpKSAhPSAxOgogICAgICAgICAgICAgICAgIHJhaXNlIGVycm9ycy5C enJDb21tYW5kRXJyb3IoIlNvcnJ5LCByZW1lcmdlIG9ubHkgd29ya3MgYWZ0ZXIgbm9ybWFsIgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBtZXJnZXMuICBO b3QgY2hlcnJ5cGlja2luZyBvciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICIgbXVsdGktbWVyZ2VzLiIpCisgICAgICAgICAgICBwZW5kaW5nID0gdHJlZS5n ZXRfbWVyZ2VkX2lkcygpWzBdCiAgICAgICAgICAgICByZXBvc2l0b3J5ID0gdHJlZS5icmFuY2gu cmVwb3NpdG9yeQotICAgICAgICAgICAgYmFzZV9yZXZpc2lvbiA9IGNvbW1vbl9hbmNlc3Rvcihw YXJlbnRzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw YXJlbnRzWzFdLCByZXBvc2l0b3J5KQorICAgICAgICAgICAgYmFzZV9yZXZpc2lvbiA9IGNvbW1v bl9hbmNlc3RvcihwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBlbmRpbmcsIHJlcG9zaXRvcnkpCiAgICAgICAgICAgICBiYXNlX3RyZWUgPSByZXBv c2l0b3J5LnJldmlzaW9uX3RyZWUoYmFzZV9yZXZpc2lvbikKLSAgICAgICAgICAgIG90aGVyX3Ry ZWUgPSByZXBvc2l0b3J5LnJldmlzaW9uX3RyZWUocGFyZW50c1sxXSkKKyAgICAgICAgICAgIG90 aGVyX3RyZWUgPSByZXBvc2l0b3J5LnJldmlzaW9uX3RyZWUocGVuZGluZykKICAgICAgICAgICAg IGludGVyZXN0aW5nX2lkcyA9IE5vbmUKICAgICAgICAgICAgIG5ld19jb25mbGljdHMgPSBbXQog ICAgICAgICAgICAgY29uZmxpY3RzID0gdHJlZS5jb25mbGljdHMoKQpAQCAtMjQ1NSw3ICsyNDU2 LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZS5icmFuY2gs IG90aGVyX3RyZWUsIGJhc2VfdHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhpc190cmVlPXRyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludGVyZXN0aW5nX2lkcz1pbnRlcmVzdGluZ19pZHMsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG90aGVyX3Jldl9pZD1wYXJlbnRzWzFdLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcl9yZXZfaWQ9cGVuZGluZywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VfdHlwZT1tZXJnZV90eXBlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93X2Jhc2U9c2hvd19iYXNlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByb2Nlc3M9cmVwcm9jZXNz KQoK === modified file bzrlib/commit.py // encoding:base64 LS0tIGJ6cmxpYi9jb21taXQucHkKKysrIGJ6cmxpYi9jb21taXQucHkKQEAgLTI0NSwxNCArMjQ1 LDcgQEAKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX2JvdW5kX2JyYW5jaCgpCiAKICAgICAgICAg ICAgICMgY2hlY2sgZm9yIG91dCBvZiBkYXRlIHdvcmtpbmcgdHJlZXMKLSAgICAgICAgICAgIHRy eToKLSAgICAgICAgICAgICAgICBmaXJzdF90cmVlX3BhcmVudCA9IHNlbGYud29ya190cmVlLmdl dF9wYXJlbnRfaWRzKClbMF0KLSAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAg ICAgICAgICAgICMgaWYgdGhlcmUgYXJlIG5vIHBhcmVudHMsIHRyZWF0IG91ciBwYXJlbnQgYXMg J05vbmUnCi0gICAgICAgICAgICAgICAgIyB0aGlzIGlzIHNvIHRoYXQgd2Ugc3RpbGwgY29uc2ll ciB0aGUgbWFzdGVyIGJyYW5jaAotICAgICAgICAgICAgICAgICMgLSBpbiBhIGNoZWNrb3V0IHNj ZW5hcmlvIHRoZSB0cmVlIG1heSBoYXZlIG5vCi0gICAgICAgICAgICAgICAgIyBwYXJlbnRzIGJ1 dCB0aGUgYnJhbmNoIG1heSBkby4KLSAgICAgICAgICAgICAgICBmaXJzdF90cmVlX3BhcmVudCA9 IE5vbmUKKyAgICAgICAgICAgIGZpcnN0X3RyZWVfcGFyZW50ID0gc2VsZi53b3JrX3RyZWUuZ2V0 X3BhcmVudF9pZCgpCiAgICAgICAgICAgICBtYXN0ZXJfbGFzdCA9IHNlbGYubWFzdGVyX2JyYW5j aC5sYXN0X3JldmlzaW9uKCkKICAgICAgICAgICAgIGlmIChtYXN0ZXJfbGFzdCBpcyBub3QgTm9u ZSBhbmQKICAgICAgICAgICAgICAgICBtYXN0ZXJfbGFzdCAhPSBmaXJzdF90cmVlX3BhcmVudCk6 CkBAIC0yODMsMTEgKzI3NiwxNiBAQAogICAgICAgICAgICAgc2VsZi5wYl9jb3VudCA9IDAKIAog ICAgICAgICAgICAgc2VsZi5fZ2F0aGVyX3BhcmVudHMoKQotICAgICAgICAgICAgaWYgbGVuKHNl bGYucGFyZW50cykgPiAxIGFuZCBzZWxmLnNwZWNpZmljX2ZpbGVzOgorICAgICAgICAgICAgaWYg bGVuKHNlbGYubWVyZ2VkX2lkcykgPiAwIGFuZCBzZWxmLnNwZWNpZmljX2ZpbGVzOgogICAgICAg ICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3NlbGVjdGVkLWZpbGUgY29tbWl0 IG9mIG1lcmdlcyBpcyBub3Qgc3VwcG9ydGVkIHlldDogZmlsZXMgJXInLAogICAgICAgICAgICAg ICAgICAgICAgICAgc2VsZi5zcGVjaWZpY19maWxlcykKICAgICAgICAgICAgIAotICAgICAgICAg ICAgc2VsZi5idWlsZGVyID0gc2VsZi5icmFuY2guZ2V0X2NvbW1pdF9idWlsZGVyKHNlbGYucGFy ZW50cywgCisgICAgICAgICAgICBpZiBzZWxmLnBhcmVudF9pZCBpcyBub3QgTm9uZToKKyAgICAg ICAgICAgICAgICBwYXJlbnRzID0gW3NlbGYucGFyZW50X2lkXQorICAgICAgICAgICAgZWxzZToK KyAgICAgICAgICAgICAgICBwYXJlbnRzID0gW10KKyAgICAgICAgICAgIHBhcmVudHMuZXh0ZW5k KHNlbGYubWVyZ2VkX2lkcykKKyAgICAgICAgICAgIHNlbGYuYnVpbGRlciA9IHNlbGYuYnJhbmNo LmdldF9jb21taXRfYnVpbGRlcihwYXJlbnRzLAogICAgICAgICAgICAgICAgIHNlbGYuY29uZmln LCB0aW1lc3RhbXAsIHRpbWV6b25lLCBjb21taXR0ZXIsIHJldnByb3BzLCByZXZfaWQpCiAgICAg ICAgICAgICAKICAgICAgICAgICAgIHNlbGYuX3JlbW92ZV9kZWxldGVkKCkKQEAgLTM4Miw3ICsz ODAsNyBAQAogICAgICAgICBpZiBzZWxmLmFsbG93X3BvaW50bGVzczoKICAgICAgICAgICAgIHJl dHVybgogICAgICAgICAjIEEgbWVyZ2Ugd2l0aCBubyBlZmZlY3Qgb24gZmlsZXMKLSAgICAgICAg aWYgbGVuKHNlbGYucGFyZW50cykgPiAxOgorICAgICAgICBpZiBsZW4oc2VsZi5tZXJnZWRfaWRz KSA+IDA6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgIyB3b3JrIGFyb3VuZCB0aGUgZmFj dCB0aGF0IGEgbmV3bHktaW5pdHRlZCB0cmVlIGRvZXMgZGlmZmVyIGZyb20gaXRzCiAgICAgICAg ICMgYmFzaXMKQEAgLTQ5Nyw5ICs0OTUsMTQgQEAKICAgICAgICAgIiIiUmVjb3JkIHRoZSBwYXJl bnRzIG9mIGEgbWVyZ2UgZm9yIG1lcmdlIGRldGVjdGlvbi4iIiIKICAgICAgICAgIyBUT0RPOiBN YWtlIHN1cmUgdGhhdCB0aGlzIGxpc3QgZG9lc24ndCBjb250YWluIGR1cGxpY2F0ZSAKICAgICAg ICAgIyBlbnRyaWVzIGFuZCB0aGUgb3JkZXIgaXMgcHJlc2VydmVkIHdoZW4gZG9pbmcgdGhpcy4K LSAgICAgICAgc2VsZi5wYXJlbnRzID0gc2VsZi53b3JrX3RyZWUuZ2V0X3BhcmVudF9pZHMoKQor ICAgICAgICBzZWxmLnBhcmVudF9pZCA9IHNlbGYud29ya190cmVlLmdldF9wYXJlbnRfaWQoKQor ICAgICAgICBzZWxmLm1lcmdlZF9pZHMgPSBzZWxmLndvcmtfdHJlZS5nZXRfbWVyZ2VkX2lkcygp CiAgICAgICAgIHNlbGYucGFyZW50X2ludnMgPSBbXQotICAgICAgICBmb3IgcmV2aXNpb24gaW4g c2VsZi5wYXJlbnRzOgorICAgICAgICBwYXJlbnRzID0gW10KKyAgICAgICAgaWYgc2VsZi5wYXJl bnRfaWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwYXJlbnRzLmFwcGVuZChzZWxmLnBhcmVu dF9pZCkKKyAgICAgICAgcGFyZW50cy5leHRlbmQoc2VsZi5tZXJnZWRfaWRzKQorICAgICAgICBm b3IgcmV2aXNpb24gaW4gcGFyZW50czoKICAgICAgICAgICAgIGlmIHNlbGYuYnJhbmNoLnJlcG9z aXRvcnkuaGFzX3JldmlzaW9uKHJldmlzaW9uKToKICAgICAgICAgICAgICAgICBtdXR0ZXIoJ2Nv bW1pdCBwYXJlbnQgcmV2aXNpb24geyVzfScsIHJldmlzaW9uKQogICAgICAgICAgICAgICAgIGlu dmVudG9yeSA9IHNlbGYuYnJhbmNoLnJlcG9zaXRvcnkuZ2V0X2ludmVudG9yeShyZXZpc2lvbikK Cg== === modified file bzrlib/info.py // encoding:base64 LS0tIGJ6cmxpYi9pbmZvLnB5CisrKyBienJsaWIvaW5mby5weQpAQCAtMTc3LDEwICsxNzcsNyBA QAogICAgIGJhc2lzID0gd29ya2luZy5iYXNpc190cmVlKCkKICAgICB3b3JrX2ludiA9IHdvcmtp bmcuaW52ZW50b3J5CiAgICAgaGlzdG9yeSA9IGJyYW5jaC5yZXZpc2lvbl9oaXN0b3J5KCkKLSAg ICB0cnk6Ci0gICAgICAgIHRyZWVfbGFzdF9pZCA9IHdvcmtpbmcuZ2V0X3BhcmVudF9pZHMoKVsw XQotICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICB0cmVlX2xhc3RfaWQgPSBOb25lCisg ICAgdHJlZV9sYXN0X2lkID0gd29ya2luZy5nZXRfcGFyZW50X2lkKCkKIAogICAgIGlmIGxlbiho aXN0b3J5KSBhbmQgdHJlZV9sYXN0X2lkICE9IGhpc3RvcnlbLTFdOgogICAgICAgICB0cmVlX2xh c3RfcmV2bm8gPSBicmFuY2gucmV2aXNpb25faWRfdG9fcmV2bm8odHJlZV9sYXN0X2lkKQoK === modified file bzrlib/status.py // encoding:base64 LS0tIGJ6cmxpYi9zdGF0dXMucHkKKysrIGJ6cmxpYi9zdGF0dXMucHkKQEAgLTE2NCwxMiArMTY0 LDExIEBACiAKIGRlZiBzaG93X3BlbmRpbmdfbWVyZ2VzKG5ldywgdG9fZmlsZSwgc2hvcnQ9RmFs c2UpOgogICAgICIiIldyaXRlIG91dCBhIGRpc3BsYXkgb2YgcGVuZGluZyBtZXJnZXMgaW4gYSB3 b3JraW5nIHRyZWUuIiIiCi0gICAgcGFyZW50cyA9IG5ldy5nZXRfcGFyZW50X2lkcygpCi0gICAg aWYgbGVuKHBhcmVudHMpIDwgMjoKKyAgICBwZW5kaW5nID0gbmV3LmdldF9tZXJnZWRfaWRzKCkK KyAgICBpZiBsZW4ocGVuZGluZykgPT0gMDoKICAgICAgICAgcmV0dXJuCi0gICAgcGVuZGluZyA9 IHBhcmVudHNbMTpdCiAgICAgYnJhbmNoID0gbmV3LmJyYW5jaAotICAgIGxhc3RfcmV2aXNpb24g PSBwYXJlbnRzWzBdCisgICAgbGFzdF9yZXZpc2lvbiA9IG5ldy5nZXRfcGFyZW50X2lkKCkKICAg ICBpZiBub3Qgc2hvcnQ6CiAgICAgICAgIHByaW50ID4+dG9fZmlsZSwgJ3BlbmRpbmcgbWVyZ2Vz OicKICAgICBpZiBsYXN0X3JldmlzaW9uIGlzIG5vdCBOb25lOgoK === modified file bzrlib/symbol_versioning.py // encoding:base64 LS0tIGJ6cmxpYi9zeW1ib2xfdmVyc2lvbmluZy5weQorKysgYnpybGliL3N5bWJvbF92ZXJzaW9u aW5nLnB5CkBAIC0zMyw2ICszMyw3IEBACiAgICAgICAgICAgICd6ZXJvX3R3ZWx2ZScsCiAgICAg ICAgICAgICd6ZXJvX3RoaXJ0ZWVuJywKICAgICAgICAgICAgJ3plcm9fZm91cnRlZW4nLAorICAg ICAgICAgICAnemVyb19maWZ0ZWVuJywKICAgICAgICAgICAgXQogCiBmcm9tIHdhcm5pbmdzIGlt cG9ydCB3YXJuCkBAIC00Nyw2ICs0OCw3IEBACiB6ZXJvX3R3ZWx2ZSA9ICIlcyB3YXMgZGVwcmVj YXRlZCBpbiB2ZXJzaW9uIDAuMTIuIgogemVyb190aGlydGVlbiA9ICIlcyB3YXMgZGVwcmVjYXRl ZCBpbiB2ZXJzaW9uIDAuMTMuIgogemVyb19mb3VydGVlbiA9ICIlcyB3YXMgZGVwcmVjYXRlZCBp biB2ZXJzaW9uIDAuMTQuIgoremVyb19maWZ0ZWVuID0gIiVzIHdhcyBkZXByZWNhdGVkIGluIHZl cnNpb24gMC4xNS4iCiAKIAogZGVmIHNldF93YXJuaW5nX21ldGhvZChtZXRob2QpOgoK === modified file bzrlib/tree.py // encoding:base64 LS0tIGJ6cmxpYi90cmVlLnB5CisrKyBienJsaWIvdHJlZS5weQpAQCAtMzMsNiArMzMsMTEgQEAK IGZyb20gYnpybGliLmludGVyIGltcG9ydCBJbnRlck9iamVjdAogZnJvbSBienJsaWIub3N1dGls cyBpbXBvcnQgZmluZ2VycHJpbnRfZmlsZQogaW1wb3J0IGJ6cmxpYi5yZXZpc2lvbgorZnJvbSBi enJsaWIuc3ltYm9sX3ZlcnNpb25pbmcgaW1wb3J0ICgKKyAgICAgICAgZGVwcmVjYXRlZF9tZXRo b2QsCisgICAgICAgIHdhcm4sCisgICAgICAgIHplcm9fZmlmdGVlbiwKKyAgICAgICAgKQogZnJv bSBienJsaWIudHJhY2UgaW1wb3J0IG11dHRlciwgbm90ZQogCiAKQEAgLTEwMCwxNCArMTA1LDUy IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gW10KIAorICAgIEBkZXByZWNhdGVkX21l dGhvZCh6ZXJvX2ZpZnRlZW4pCiAgICAgZGVmIGdldF9wYXJlbnRfaWRzKHNlbGYpOgotICAgICAg ICAiIiJHZXQgdGhlIHBhcmVudCBpZHMgZm9yIHRoaXMgdHJlZS4gCi0KLSAgICAgICAgOnJldHVy bjogYSBsaXN0IG9mIHBhcmVudCBpZHMuIFtdIGlzIHJldHVybmVkIHRvIGluZGljYXRlCisgICAg ICAgICIiIiBHZXQgYSBsaXN0IG9mIHBhcmVudCBpZHMgZm9yIHRoaXMgdHJlZS4KKyAgICAgICAg CisgICAgICAgIFNob3VsZCB1c2UgZ2V0X3BhcmVudF9pZCBhbmQgZ2V0X21lcmdlZF9pZHMgaW5z dGVhZC4KKworICAgICAgICA6cmV0dXJuOiBBIGxpc3Qgb2YgcmV2aXNpb24gaWRzLgorICAgICAg ICAiIiIKKyAgICAgICAgaWYgc2VsZi5nZXRfcGFyZW50X2lkKCkgaXMgbm90IE5vbmU6CisgICAg ICAgICAgICByZXN1bHQgPSBbc2VsZi5nZXRfcGFyZW50X2lkKCldCisgICAgICAgIGVsc2U6Cisg ICAgICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICByZXN1bHQuZXh0ZW5kKHNlbGYuZ2V0X21l cmdlZF9pZHMoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9fd2Fybl9kZXBy ZWNhdGVkX2dldF9wYXJlbnRfaWRzKHNlbGYpOgorICAgICAgICBzeW1ib2wgPSAiJXMuJXMuJXMi ICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2VsZi5nZXRfcGFyZW50X2lkcy5fX25hbWVfXworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkKKyAgICAgICAgd2Fybih6ZXJvX2ZpZnRlZW4gJSBzeW1ib2wsIERlcHJlY2F0 aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorCisgICAgZGVmIGdldF9wYXJlbnRfaWQoc2VsZik6 CisgICAgICAgICIiIkdldCB0aGUgcGFyZW50IGlkIGZvciB0aGlzIHRyZWUuIAorCisgICAgICAg IDpyZXR1cm46IGEgcGFyZW50IGlkLiBOb25lIGlzIHJldHVybmVkIHRvIGluZGljYXRlCiAgICAg ICAgIGEgdHJlZSB3aXRoIG5vIHBhcmVudHMuCi0gICAgICAgIDpyYWlzZXM6IEJ6ckVycm9yIGlm IHRoZSBwYXJlbnRzIGFyZSBub3Qga25vd24uCi0gICAgICAgICIiIgotICAgICAgICByYWlzZSBO b3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuZ2V0X3BhcmVudF9pZHMpCisgICAgICAgIDpyYWlzZXM6 IEJ6ckVycm9yIGlmIHRoZSBwYXJlbnQgaXMgbm90IGtub3duLgorICAgICAgICAiIiIKKyAgICAg ICAgIyBJZiB3ZSBoYXZlbid0IGJlZW4gaW1wbGVtZW50ZWQsIGl0IGlzIGxpa2VseSB0aGUgZGVy aXZlZCBjbGFzcyBpbXBsZW1lbnRlZCBnZXRfcGFyZW50X2lkcy4KKyAgICAgICAgc2VsZi5fX3dh cm5fZGVwcmVjYXRlZF9nZXRfcGFyZW50X2lkcygpCisgICAgICAgIHBhcmVudF9pZHMgPSBzZWxm LmdldF9wYXJlbnRfaWRzKCkKKyAgICAgICAgcmVzdWx0ID0gTm9uZQorICAgICAgICBpZiBsZW4o cGFyZW50X2lkcykgPiAwOgorICAgICAgICAgICAgcmVzdWx0ID0gcGFyZW50X2lkc1swXQorICAg ICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgZ2V0X21lcmdlZF9pZHMoc2VsZik6CisgICAg ICAgICIiIkdldCBtZXJnZWQgcmV2aXNpb24gaWRzIGZvciB0aGlzIHRyZWUKKworICAgICAgICA6 cmV0dXJuOiBBIGxpc3Qgb2YgbWVyZ2VkIHJldmlzaW9ucy4KKyAgICAgICAgOnJhaXNlczogQnpy RXJyb3IgaWYgdGhlIG1lcmdlZCByZXZpc2lvbnMgaXMgbm90IGtub3duLgorICAgICAgICAiIiIK KyAgICAgICAgIyBJZiB3ZSBoYXZlbid0IGJlZW4gaW1wbGVtZW50ZWQsIGl0IGlzIGxpa2VseSB0 aGUgZGVyaXZlZCBjbGFzcyBpbXBsZW1lbnRlZCBnZXRfcGFyZW50X2lkcy4KKyAgICAgICAgc2Vs Zi5fX3dhcm5fZGVwcmVjYXRlZF9nZXRfcGFyZW50X2lkcygpCisgICAgICAgIHJldHVybiBzZWxm LmdldF9wYXJlbnRfaWRzKClbMTpdCiAgICAgCiAgICAgZGVmIGhhc19maWxlbmFtZShzZWxmLCBm aWxlbmFtZSk6CiAgICAgICAgICIiIlRydWUgaWYgdGhlIHRyZWUgaGFzIGdpdmVuIGZpbGVuYW1l LiIiIgpAQCAtMjUyLDcgKzI5NSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICcgdXNlIHJlcG9zaXRvcnkucmV2aXNpb25fdHJlZSBpbnN0ZWFkLicsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCiAKLSAg ICBkZWYgZ2V0X3BhcmVudF9pZHMoc2VsZik6CisgICAgZGVmIGdldF9wYXJlbnRfaWQoc2VsZik6 CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0X21lcmdlZF9pZHMoc2VsZik6CiAg ICAgICAgIHJldHVybiBbXQogCiAgICAgZGVmIGdldF9zeW1saW5rX3RhcmdldChzZWxmLCBmaWxl X2lkKToKCg== === modified file bzrlib/uncommit.py // encoding:base64 LS0tIGJ6cmxpYi91bmNvbW1pdC5weQorKysgYnpybGliL3VuY29tbWl0LnB5CkBAIC00MCw3ICs0 MCw3IEBACiAKICAgICAgICAgcGVuZGluZ19tZXJnZXMgPSBbXQogICAgICAgICBpZiB0cmVlIGlz IG5vdCBOb25lOgotICAgICAgICAgICAgcGVuZGluZ19tZXJnZXMgPSB0cmVlLmdldF9wYXJlbnRf aWRzKClbMTpdCisgICAgICAgICAgICBwZW5kaW5nX21lcmdlcyA9IHRyZWUuZ2V0X21lcmdlZF9p ZHMoKQogCiAgICAgICAgIG1hc3RlciA9IGJyYW5jaC5nZXRfbWFzdGVyX2JyYW5jaCgpCiAgICAg ICAgIGlmIG1hc3RlciBpcyBub3QgTm9uZToKCg== === modified file bzrlib/workingtree.py // encoding:base64 LS0tIGJ6cmxpYi93b3JraW5ndHJlZS5weQorKysgYnpybGliL3dvcmtpbmd0cmVlLnB5CkBAIC0z ODEsOSArMzgxLDggQEAKICAgICAgICAgSWYgdGhlIGxlZnQgbW9zdCBwYXJlbnQgaXMgYSBnaG9z dCB0aGVuIHRoZSByZXR1cm5lZCB0cmVlIHdpbGwgYmUgYW4KICAgICAgICAgZW1wdHkgdHJlZSAt IG9uZSBvYnRhaW5lZCBieSBjYWxsaW5nIHJlcG9zaXRvcnkucmV2aXNpb25fdHJlZShOb25lKS4K ICAgICAgICAgIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldmlzaW9uX2lkID0gc2Vs Zi5nZXRfcGFyZW50X2lkcygpWzBdCi0gICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAg ICByZXZpc2lvbl9pZCA9IHNlbGYuZ2V0X3BhcmVudF9pZCgpCisgICAgICAgIGlmIHJldmlzaW9u X2lkIGlzIE5vbmU6CiAgICAgICAgICAgICAjIG5vIHBhcmVudHMsIHJldHVybiBhbiBlbXB0eSBy ZXZpc2lvbiB0cmVlLgogICAgICAgICAgICAgIyBpbiB0aGUgZnV0dXJlIHRoaXMgc2hvdWxkIHJl dHVybiB0aGUgdHJlZSBmb3IKICAgICAgICAgICAgICMgJ2VtcHR5OicgLSB0aGUgaW1wbGljaXQg cm9vdCBlbXB0eSB0cmVlLgpAQCAtNDkzLDMyICs0OTIsMzMgQEAKICAgICAgICAgICAgIG9sZF9s aW5lcyA9IGxpc3QoYmFzaXMuYW5ub3RhdGVfaXRlcihmaWxlX2lkKSkKICAgICAgICAgb2xkID0g W29sZF9saW5lc10KICAgICAgICAgZm9yIHRyZWUgaW4gc2VsZi5icmFuY2gucmVwb3NpdG9yeS5y ZXZpc2lvbl90cmVlcygKLSAgICAgICAgICAgIHNlbGYuZ2V0X3BhcmVudF9pZHMoKVsxOl0pOgor ICAgICAgICAgICAgc2VsZi5nZXRfbWVyZ2VkX2lkcygpKToKICAgICAgICAgICAgIGlmIGZpbGVf aWQgbm90IGluIHRyZWU6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIG9s ZC5hcHBlbmQobGlzdCh0cmVlLmFubm90YXRlX2l0ZXIoZmlsZV9pZCkpKQogICAgICAgICByZXR1 cm4gYW5ub3RhdGUucmVhbm5vdGF0ZShvbGQsIHNlbGYuZ2V0X2ZpbGUoZmlsZV9pZCkucmVhZGxp bmVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVUlJFTlRfUkVWSVNJ T04pCiAKLSAgICBkZWYgZ2V0X3BhcmVudF9pZHMoc2VsZik6Ci0gICAgICAgICIiIlNlZSBUcmVl LmdldF9wYXJlbnRfaWRzLgorICAgIGRlZiBnZXRfcGFyZW50X2lkKHNlbGYpOgorICAgICAgICAi IiJTZWUgVHJlZS5nZXRfcGFyZW50X2lkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNl bGYuX2xhc3RfcmV2aXNpb24oKQogICAgICAgICAKLSAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlv biByZWFkcyB0aGUgcGVuZGluZyBtZXJnZXMgbGlzdCBhbmQgbGFzdF9yZXZpc2lvbgotICAgICAg ICB2YWx1ZSBhbmQgdXNlcyB0aGF0IHRvIGRlY2lkZSB3aGF0IHRoZSBwYXJlbnRzIGxpc3Qgc2hv dWxkIGJlLgorICAgIGRlZiBnZXRfbWVyZ2VkX2lkcyhzZWxmKToKKyAgICAgICAgIiIiU2VlIFRy ZWUuZ2V0X21lcmdlZF9pZHMuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiByZWFkcyB0 aGUgcGVuZGluZyBtZXJnZXMgbGlzdCB0byBkZXRlY3QKKyAgICAgICAgdGhlIG1lcmdlZCBpZCBs aXN0LgogICAgICAgICAiIiIKLSAgICAgICAgbGFzdF9yZXYgPSBzZWxmLl9sYXN0X3JldmlzaW9u KCkKLSAgICAgICAgaWYgbGFzdF9yZXYgaXMgTm9uZToKLSAgICAgICAgICAgIHBhcmVudHMgPSBb XQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGFyZW50cyA9IFtsYXN0X3Jldl0KKyAgICAg ICAgbWVyZ2VkID0gW10KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbWVyZ2VzX2ZpbGUgPSBz ZWxmLl9jb250cm9sX2ZpbGVzLmdldF91dGY4KCdwZW5kaW5nLW1lcmdlcycpCiAgICAgICAgIGV4 Y2VwdCBOb1N1Y2hGaWxlOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAg ICAgICAgZm9yIGwgaW4gbWVyZ2VzX2ZpbGUucmVhZGxpbmVzKCk6Ci0gICAgICAgICAgICAgICAg cGFyZW50cy5hcHBlbmQobC5yc3RyaXAoJ1xuJykpCi0gICAgICAgIHJldHVybiBwYXJlbnRzCisg ICAgICAgICAgICAgICAgbWVyZ2VkLmFwcGVuZChsLnJzdHJpcCgnXG4nKSkKKyAgICAgICAgcmV0 dXJuIG1lcmdlZAogCiAgICAgQG5lZWRzX3JlYWRfbG9jawogICAgIGRlZiBnZXRfcm9vdF9pZChz ZWxmKToKCg== === modified directory // last-changed:henry@munchkin-20070127132637-iwvb26uik ... 4k6dejd # revision id: henry@munchkin-20070127132637-iwvb26uik4k6dejd # sha1: 859a5e25bdef3faad990ddcabfbcaa4c1171d404 # inventory sha1: 93083e4e2f2a490462768b6cbce7e11449b9b16b # parent ids: # henry@munchkin-20070127095535-ot6q1cwzo00g1tfn # properties: # branch-nick: bzr.parents