# Bazaar revision bundle v0.7 # # message: # Remove stray comment. # committer: Johan Rydberg # date: Tue 2006-06-20 02:07:08.390161037 +0200 === modified file bzrlib/bzrdir.py // last-changed:jrydberg@gnu.org-20060619235 ... 800-c1714b46da352f78 --- bzrlib/bzrdir.py +++ bzrlib/bzrdir.py @@ -1666,10 +1666,7 @@ w = Weave(file_id) self.text_weaves[file_id] = w text_changed = False - previous_entries = ie.find_previous_heads(parent_invs, - None, - None, - entry_vf=w) + previous_entries = ie.find_previous_heads(parent_invs, None, w) for old_revision in previous_entries: # if this fails, its a ghost ? assert old_revision in self.converted_revs === modified file bzrlib/inventory.py // last-changed:jrydberg@gnu.org-20060619 ... 235800-c1714b46da352f78 --- bzrlib/inventory.py +++ bzrlib/inventory.py @@ -155,9 +155,7 @@ """Perform a diff between two entries of the same kind.""" def find_previous_heads(self, previous_inventories, - versioned_file_store, - transaction, - entry_vf=None): + repository, versioned_file=None): """Return the revisions and entries that directly precede this. Returned as a map from revision to inventory entry. @@ -165,15 +163,12 @@ This is a map containing the file revisions in all parents for which the file exists, and its revision is not a parent of any other. If the file is new, the set will be empty. - - :param versioned_file_store: A store where ancestry data on this - file id can be queried. - :param transaction: The transaction that queries to the versioned - file store should be completed under. - :param entry_vf: The entry versioned file, if its already available. + + :param repository: A repository where a VersionedFile object can + be retrieved from if needed. + :param versioned_file: Optional VersionedFile object, if already + available. """ - def get_ancestors(weave, entry): - return set(weave.get_ancestry(entry.revision)) # revision:ie mapping for each ie found in previous_inventories. candidates = {} # revision:ie mapping with one revision for each head. @@ -203,6 +198,8 @@ candidates[ie.revision] = ie # common case optimisation + if not candidates: + return {} if len(candidates) == 1: # if there is only one candidate revision found # then we can opening the versioned file to access ancestry: @@ -211,34 +208,13 @@ heads[ie.revision] = ie return heads - # eliminate ancestors amongst the available candidates: - # heads are those that are not an ancestor of any other candidate - # - this provides convergence at a per-file level. - for ie in candidates.values(): - # may be an ancestor of a known head: - already_present = 0 != len( - [head for head in heads - if ie.revision in head_ancestors[head]]) - if already_present: - # an ancestor of an analyzed candidate. - continue - # not an ancestor of a known head: - # load the versioned file for this file id if needed - if entry_vf is None: - entry_vf = versioned_file_store.get_weave_or_empty( - self.file_id, transaction) - ancestors = get_ancestors(entry_vf, ie) - # may knock something else out: - check_heads = list(heads.keys()) - for head in check_heads: - if head in ancestors: - # this previously discovered 'head' is not - # really a head - its an ancestor of the newly - # found head, - heads.pop(head) - head_ancestors[ie.revision] = ancestors - heads[ie.revision] = ie - return heads + if versioned_file is None: + versioned_file = repository.get_versioned_file(self.file_id) + + suggested_heads = versioned_file.find_heads( + [ie.revision for ie in candidates.values()]) + + return dict([(head, candidates[head]) for head in suggested_heads]) def get_tar_item(self, root, dp, now, tree): """Get a tarfile item and a file stream for its content.""" === modified file bzrlib/repository.py // last-changed:jrydberg@gnu.org-2006061 ... 9235800-c1714b46da352f78 --- bzrlib/repository.py +++ bzrlib/repository.py @@ -647,6 +647,18 @@ result.check() return result + def get_versioned_file(self, file_id): + """Return VersionedFile object associated with file id + file_id. + + Returns None if there is no file associated with the specified + file id. + """ + try: + return self.text_store.get_weave(file_id, self.get_transaction()) + except errors.NoSuchFile: + return None + class AllInOneRepository(Repository): """Legacy support - the repository behaviour for all-in-one branches.""" @@ -2043,10 +2055,7 @@ # which may be the sole parent if it is untouched. if ie.revision is not None: return - previous_entries = ie.find_previous_heads( - parent_invs, - self.repository.weave_store, - self.repository.get_transaction()) + previous_entries = ie.find_previous_heads(parent_invs, self.repository) # we are creating a new revision for ie in the history store # and inventory. ie.snapshot(self._new_revision_id, path, previous_entries, tree, self) === modified file bzrlib/tests/repository_implementations/test_repository.py // ... last-changed:jrydberg@gnu.org-20060619232020-b6353904b4aa7345 --- bzrlib/tests/repository_implementations/test_repository.py +++ bzrlib/tests/repository_implementations/test_repository.py @@ -315,6 +315,17 @@ self.assertEqual(revision.revision_id, revision_id) self.assertEqual(revision, repo.get_revision(revision_id)) + def test_get_versioned_file(self): + tree = self.make_branch_and_tree('.') + self.build_tree(['foo']) + tree.add('foo', 'file1') + tree.commit('rev1', rev_id='rev1') + versioned_file = tree.branch.repository.get_versioned_file('file1') + self.assertTrue(versioned_file.has_version('rev1')) + versioned_file = tree.branch.repository.get_versioned_file('file2') + self.assertEqual(versioned_file, None) + + class TestCaseWithComplexRepository(TestCaseWithRepository): def setUp(self): === modified file bzrlib/tests/test_inv.py // last-changed:jrydberg@gnu.org-200 ... 60619235800-c1714b46da352f78 --- bzrlib/tests/test_inv.py +++ bzrlib/tests/test_inv.py @@ -426,9 +426,7 @@ def get_previous_heads(self, inventories): return self.file_active.find_previous_heads( - inventories, - self.branch.repository.weave_store, - self.branch.repository.get_transaction()) + inventories, self.branch.repository) def test_fileid_in_no_inventory(self): self.assertEqual({}, self.get_previous_heads([self.inv_A])) === modified file bzrlib/versionedfile.py --- bzrlib/versionedfile.py +++ bzrlib/versionedfile.py @@ -458,6 +458,38 @@ b_marker=TextMerge.B_MARKER): return PlanWeaveMerge(plan, a_marker, b_marker).merge_lines()[0] + def find_heads(self, versions): + """Return the versions that directly preceed the specified + versions.""" + # list of revisions, one for each head. + heads = [] + # revision: ancestor list for each head + head_ancestors = {} + # eliminate ancestors amongst the available candidates: + # heads are those that are not an ancestor of any other candidate + # - this provides convergence at a per-file level. + for version_id in versions: + # may be an ancestor of a known head: + already_present = bool([head for head in heads + if version_id in head_ancestors[head]]) + if already_present: + # an ancestor of an analyzed candidate. + continue + # not an ancestor of a known head: + # load the versioned file for this file id if needed + ancestors = self.get_ancestry([version_id]) + # may knock something else out: + check_heads = list(heads) + for head in check_heads: + if head in ancestors: + # this previously discovered 'head' is not + # really a head - its an ancestor of the newly + # found head, + heads.remove(head) + head_ancestors[version_id] = ancestors + heads.append(version_id) + return heads + class PlanWeaveMerge(TextMerge): """Weave merge that takes a plan as its input. # revision id: jrydberg@gnu.org-20060620000708-86bc2dcc2118a045 # sha1: 1bcecf364d23a978c2d0fef20746675cc794fe9f # inventory sha1: a6c74af5de27f9a359b5bfd09967bd12eb3fe0cf # parent ids: # jrydberg@gnu.org-20060619235800-c1714b46da352f78 # base id: pqm@pqm.ubuntu.com-20060619195706-5f9f32cde3bcc4e6 # properties: # branch-nick: bzr.jrydberg.get_versioned_file # message: # Add VersionedFile.find_heads, and let InventoryEntry.find_previous_heads use it. # committer: Johan Rydberg # date: Tue 2006-06-20 01:58:00.518167019 +0200 === modified file bzrlib/bzrdir.py // encoding:base64 LS0tIGJ6cmxpYi9ienJkaXIucHkKKysrIGJ6cmxpYi9ienJkaXIucHkKQEAgLTE2NjYsMTAgKzE2 NjYsNyBAQAogICAgICAgICAgICAgdyA9IFdlYXZlKGZpbGVfaWQpCiAgICAgICAgICAgICBzZWxm LnRleHRfd2VhdmVzW2ZpbGVfaWRdID0gdwogICAgICAgICB0ZXh0X2NoYW5nZWQgPSBGYWxzZQot ICAgICAgICBwcmV2aW91c19lbnRyaWVzID0gaWUuZmluZF9wcmV2aW91c19oZWFkcyhwYXJlbnRf aW52cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZW50cnlfdmY9dykKKyAgICAgICAgcHJldmlvdXNfZW50cmllcyA9IGllLmZpbmRfcHJldmlvdXNf aGVhZHMocGFyZW50X2ludnMsIE5vbmUsIHcpCiAgICAgICAgIGZvciBvbGRfcmV2aXNpb24gaW4g cHJldmlvdXNfZW50cmllczoKICAgICAgICAgICAgICAgICAjIGlmIHRoaXMgZmFpbHMsIGl0cyBh IGdob3N0ID8KICAgICAgICAgICAgICAgICBhc3NlcnQgb2xkX3JldmlzaW9uIGluIHNlbGYuY29u dmVydGVkX3JldnMgCgo= === modified file bzrlib/inventory.py // encoding:base64 LS0tIGJ6cmxpYi9pbnZlbnRvcnkucHkKKysrIGJ6cmxpYi9pbnZlbnRvcnkucHkKQEAgLTE1NSw5 ICsxNTUsNyBAQAogICAgICAgICAiIiJQZXJmb3JtIGEgZGlmZiBiZXR3ZWVuIHR3byBlbnRyaWVz IG9mIHRoZSBzYW1lIGtpbmQuIiIiCiAKICAgICBkZWYgZmluZF9wcmV2aW91c19oZWFkcyhzZWxm LCBwcmV2aW91c19pbnZlbnRvcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJz aW9uZWRfZmlsZV9zdG9yZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlv biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV92Zj1Ob25lKToKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5LCB2ZXJzaW9uZWRfZmlsZT1Ob25lKToKICAg ICAgICAgIiIiUmV0dXJuIHRoZSByZXZpc2lvbnMgYW5kIGVudHJpZXMgdGhhdCBkaXJlY3RseSBw cmVjZWRlIHRoaXMuCiAKICAgICAgICAgUmV0dXJuZWQgYXMgYSBtYXAgZnJvbSByZXZpc2lvbiB0 byBpbnZlbnRvcnkgZW50cnkuCkBAIC0xNjUsMTUgKzE2MywxMiBAQAogICAgICAgICBUaGlzIGlz IGEgbWFwIGNvbnRhaW5pbmcgdGhlIGZpbGUgcmV2aXNpb25zIGluIGFsbCBwYXJlbnRzCiAgICAg ICAgIGZvciB3aGljaCB0aGUgZmlsZSBleGlzdHMsIGFuZCBpdHMgcmV2aXNpb24gaXMgbm90IGEg cGFyZW50IG9mCiAgICAgICAgIGFueSBvdGhlci4gSWYgdGhlIGZpbGUgaXMgbmV3LCB0aGUgc2V0 IHdpbGwgYmUgZW1wdHkuCi0KLSAgICAgICAgOnBhcmFtIHZlcnNpb25lZF9maWxlX3N0b3JlOiBB IHN0b3JlIHdoZXJlIGFuY2VzdHJ5IGRhdGEgb24gdGhpcwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZpbGUgaWQgY2FuIGJlIHF1ZXJpZWQuCi0gICAgICAgIDpwYXJhbSB0 cmFuc2FjdGlvbjogVGhlIHRyYW5zYWN0aW9uIHRoYXQgcXVlcmllcyB0byB0aGUgdmVyc2lvbmVk IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc3RvcmUgc2hvdWxkIGJlIGNvbXBs ZXRlZCB1bmRlci4KLSAgICAgICAgOnBhcmFtIGVudHJ5X3ZmOiBUaGUgZW50cnkgdmVyc2lvbmVk IGZpbGUsIGlmIGl0cyBhbHJlYWR5IGF2YWlsYWJsZS4KKyAgICAgICAgCisgICAgICAgIDpwYXJh bSByZXBvc2l0b3J5OiBBIHJlcG9zaXRvcnkgd2hlcmUgYSBWZXJzaW9uZWRGaWxlIG9iamVjdCBj YW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHJldHJpZXZlZCBmcm9tIGlmIG5lZWRl ZC4KKyAgICAgICAgOnBhcmFtIHZlcnNpb25lZF9maWxlOiBPcHRpb25hbCBWZXJzaW9uZWRGaWxl IG9iamVjdCwgaWYgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWls YWJsZS4KICAgICAgICAgIiIiCi0gICAgICAgIGRlZiBnZXRfYW5jZXN0b3JzKHdlYXZlLCBlbnRy eSk6Ci0gICAgICAgICAgICByZXR1cm4gc2V0KHdlYXZlLmdldF9hbmNlc3RyeShlbnRyeS5yZXZp c2lvbikpCiAgICAgICAgICMgcmV2aXNpb246aWUgbWFwcGluZyBmb3IgZWFjaCBpZSBmb3VuZCBp biBwcmV2aW91c19pbnZlbnRvcmllcy4KICAgICAgICAgY2FuZGlkYXRlcyA9IHt9CiAgICAgICAg ICMgcmV2aXNpb246aWUgbWFwcGluZyB3aXRoIG9uZSByZXZpc2lvbiBmb3IgZWFjaCBoZWFkLgpA QCAtMjAzLDYgKzE5OCw4IEBACiAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXNbaWUucmV2 aXNpb25dID0gaWUKIAogICAgICAgICAjIGNvbW1vbiBjYXNlIG9wdGltaXNhdGlvbgorICAgICAg ICBpZiBub3QgY2FuZGlkYXRlczoKKyAgICAgICAgICAgIHJldHVybiB7fQogICAgICAgICBpZiBs ZW4oY2FuZGlkYXRlcykgPT0gMToKICAgICAgICAgICAgICMgaWYgdGhlcmUgaXMgb25seSBvbmUg Y2FuZGlkYXRlIHJldmlzaW9uIGZvdW5kCiAgICAgICAgICAgICAjIHRoZW4gd2UgY2FuIG9wZW5p bmcgdGhlIHZlcnNpb25lZCBmaWxlIHRvIGFjY2VzcyBhbmNlc3RyeToKQEAgLTIxMSwzNCArMjA4 LDEzIEBACiAgICAgICAgICAgICBoZWFkc1tpZS5yZXZpc2lvbl0gPSBpZQogICAgICAgICAgICAg cmV0dXJuIGhlYWRzCiAKLSAgICAgICAgIyBlbGltaW5hdGUgYW5jZXN0b3JzIGFtb25nc3QgdGhl IGF2YWlsYWJsZSBjYW5kaWRhdGVzOgotICAgICAgICAjIGhlYWRzIGFyZSB0aG9zZSB0aGF0IGFy ZSBub3QgYW4gYW5jZXN0b3Igb2YgYW55IG90aGVyIGNhbmRpZGF0ZQotICAgICAgICAjIC0gdGhp cyBwcm92aWRlcyBjb252ZXJnZW5jZSBhdCBhIHBlci1maWxlIGxldmVsLgotICAgICAgICBmb3Ig aWUgaW4gY2FuZGlkYXRlcy52YWx1ZXMoKToKLSAgICAgICAgICAgICMgbWF5IGJlIGFuIGFuY2Vz dG9yIG9mIGEga25vd24gaGVhZDoKLSAgICAgICAgICAgIGFscmVhZHlfcHJlc2VudCA9IDAgIT0g bGVuKAotICAgICAgICAgICAgICAgIFtoZWFkIGZvciBoZWFkIGluIGhlYWRzIAotICAgICAgICAg ICAgICAgICBpZiBpZS5yZXZpc2lvbiBpbiBoZWFkX2FuY2VzdG9yc1toZWFkXV0pCi0gICAgICAg ICAgICBpZiBhbHJlYWR5X3ByZXNlbnQ6Ci0gICAgICAgICAgICAgICAgIyBhbiBhbmNlc3RvciBv ZiBhbiBhbmFseXplZCBjYW5kaWRhdGUuCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAg ICAgICAgICMgbm90IGFuIGFuY2VzdG9yIG9mIGEga25vd24gaGVhZDoKLSAgICAgICAgICAgICMg bG9hZCB0aGUgdmVyc2lvbmVkIGZpbGUgZm9yIHRoaXMgZmlsZSBpZCBpZiBuZWVkZWQKLSAgICAg ICAgICAgIGlmIGVudHJ5X3ZmIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgZW50cnlfdmYgPSB2 ZXJzaW9uZWRfZmlsZV9zdG9yZS5nZXRfd2VhdmVfb3JfZW1wdHkoCi0gICAgICAgICAgICAgICAg ICAgIHNlbGYuZmlsZV9pZCwgdHJhbnNhY3Rpb24pCi0gICAgICAgICAgICBhbmNlc3RvcnMgPSBn ZXRfYW5jZXN0b3JzKGVudHJ5X3ZmLCBpZSkKLSAgICAgICAgICAgICMgbWF5IGtub2NrIHNvbWV0 aGluZyBlbHNlIG91dDoKLSAgICAgICAgICAgIGNoZWNrX2hlYWRzID0gbGlzdChoZWFkcy5rZXlz KCkpCi0gICAgICAgICAgICBmb3IgaGVhZCBpbiBjaGVja19oZWFkczoKLSAgICAgICAgICAgICAg ICBpZiBoZWFkIGluIGFuY2VzdG9yczoKLSAgICAgICAgICAgICAgICAgICAgIyB0aGlzIHByZXZp b3VzbHkgZGlzY292ZXJlZCAnaGVhZCcgaXMgbm90Ci0gICAgICAgICAgICAgICAgICAgICMgcmVh bGx5IGEgaGVhZCAtIGl0cyBhbiBhbmNlc3RvciBvZiB0aGUgbmV3bHkgCi0gICAgICAgICAgICAg ICAgICAgICMgZm91bmQgaGVhZCwKLSAgICAgICAgICAgICAgICAgICAgaGVhZHMucG9wKGhlYWQp Ci0gICAgICAgICAgICBoZWFkX2FuY2VzdG9yc1tpZS5yZXZpc2lvbl0gPSBhbmNlc3RvcnMKLSAg ICAgICAgICAgIGhlYWRzW2llLnJldmlzaW9uXSA9IGllCi0gICAgICAgIHJldHVybiBoZWFkcwor ICAgICAgICBpZiB2ZXJzaW9uZWRfZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgdmVyc2lvbmVk X2ZpbGUgPSByZXBvc2l0b3J5LmdldF92ZXJzaW9uZWRfZmlsZShzZWxmLmZpbGVfaWQpCisKKyAg ICAgICAgc3VnZ2VzdGVkX2hlYWRzID0gdmVyc2lvbmVkX2ZpbGUuZmluZF9oZWFkcygKKyAgICAg ICAgICAgIFtpZS5yZXZpc2lvbiBmb3IgaWUgaW4gY2FuZGlkYXRlcy52YWx1ZXMoKV0pCisKKyAg ICAgICAgcmV0dXJuIGRpY3QoWyhoZWFkLCBjYW5kaWRhdGVzW2hlYWRdKSBmb3IgaGVhZCBpbiBz dWdnZXN0ZWRfaGVhZHNdKQogCiAgICAgZGVmIGdldF90YXJfaXRlbShzZWxmLCByb290LCBkcCwg bm93LCB0cmVlKToKICAgICAgICAgIiIiR2V0IGEgdGFyZmlsZSBpdGVtIGFuZCBhIGZpbGUgc3Ry ZWFtIGZvciBpdHMgY29udGVudC4iIiIKCg== === modified file bzrlib/repository.py // encoding:base64 LS0tIGJ6cmxpYi9yZXBvc2l0b3J5LnB5CisrKyBienJsaWIvcmVwb3NpdG9yeS5weQpAQCAtMjA1 NSwxMCArMjA1NSw3IEBACiAgICAgICAgICMgd2hpY2ggbWF5IGJlIHRoZSBzb2xlIHBhcmVudCBp ZiBpdCBpcyB1bnRvdWNoZWQuCiAgICAgICAgIGlmIGllLnJldmlzaW9uIGlzIG5vdCBOb25lOgog ICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHByZXZpb3VzX2VudHJpZXMgPSBpZS5maW5kX3By ZXZpb3VzX2hlYWRzKAotICAgICAgICAgICAgcGFyZW50X2ludnMsCi0gICAgICAgICAgICBzZWxm LnJlcG9zaXRvcnkud2VhdmVfc3RvcmUsCi0gICAgICAgICAgICBzZWxmLnJlcG9zaXRvcnkuZ2V0 X3RyYW5zYWN0aW9uKCkpCisgICAgICAgIHByZXZpb3VzX2VudHJpZXMgPSBpZS5maW5kX3ByZXZp b3VzX2hlYWRzKHBhcmVudF9pbnZzLCBzZWxmLnJlcG9zaXRvcnkpCiAgICAgICAgICMgd2UgYXJl IGNyZWF0aW5nIGEgbmV3IHJldmlzaW9uIGZvciBpZSBpbiB0aGUgaGlzdG9yeSBzdG9yZQogICAg ICAgICAjIGFuZCBpbnZlbnRvcnkuCiAgICAgICAgIGllLnNuYXBzaG90KHNlbGYuX25ld19yZXZp c2lvbl9pZCwgcGF0aCwgcHJldmlvdXNfZW50cmllcywgdHJlZSwgc2VsZikKCg== === modified file bzrlib/tests/test_inv.py // encoding:base64 LS0tIGJ6cmxpYi90ZXN0cy90ZXN0X2ludi5weQorKysgYnpybGliL3Rlc3RzL3Rlc3RfaW52LnB5 CkBAIC00MjYsOSArNDI2LDcgQEAKICAgICAgICAgCiAgICAgZGVmIGdldF9wcmV2aW91c19oZWFk cyhzZWxmLCBpbnZlbnRvcmllcyk6CiAgICAgICAgIHJldHVybiBzZWxmLmZpbGVfYWN0aXZlLmZp bmRfcHJldmlvdXNfaGVhZHMoCi0gICAgICAgICAgICBpbnZlbnRvcmllcywgCi0gICAgICAgICAg ICBzZWxmLmJyYW5jaC5yZXBvc2l0b3J5LndlYXZlX3N0b3JlLAotICAgICAgICAgICAgc2VsZi5i cmFuY2gucmVwb3NpdG9yeS5nZXRfdHJhbnNhY3Rpb24oKSkKKyAgICAgICAgICAgIGludmVudG9y aWVzLCBzZWxmLmJyYW5jaC5yZXBvc2l0b3J5KQogICAgICAgICAKICAgICBkZWYgdGVzdF9maWxl aWRfaW5fbm9faW52ZW50b3J5KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHt9LCBz ZWxmLmdldF9wcmV2aW91c19oZWFkcyhbc2VsZi5pbnZfQV0pKQoK === modified file bzrlib/versionedfile.py // encoding:base64 LS0tIGJ6cmxpYi92ZXJzaW9uZWRmaWxlLnB5CisrKyBienJsaWIvdmVyc2lvbmVkZmlsZS5weQpA QCAtNDU4LDYgKzQ1OCwzOSBAQAogICAgICAgICAgICAgICAgICAgICBiX21hcmtlcj1UZXh0TWVy Z2UuQl9NQVJLRVIpOgogICAgICAgICByZXR1cm4gUGxhbldlYXZlTWVyZ2UocGxhbiwgYV9tYXJr ZXIsIGJfbWFya2VyKS5tZXJnZV9saW5lcygpWzBdCiAKKyAgICBkZWYgZmluZF9oZWFkcyhzZWxm LCB2ZXJzaW9ucyk6CisgICAgICAgICIiIlJldHVybiB0aGUgdmVyc2lvbnMgdGhhdCBkaXJlY3Rs eSBwcmVjZWVkIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgdmVyc2lvbnMuIiIiCisgICAgICAgICIi IlNlZSBSZXBvc2l0b3J5RmlsZS5maW5kX2hlYWRzLiIiIgorICAgICAgICAjIGxpc3Qgb2YgcmV2 aXNpb25zLCBvbmUgZm9yIGVhY2ggaGVhZC4KKyAgICAgICAgaGVhZHMgPSBbXQorICAgICAgICAj IHJldmlzaW9uOiBhbmNlc3RvciBsaXN0IGZvciBlYWNoIGhlYWQKKyAgICAgICAgaGVhZF9hbmNl c3RvcnMgPSB7fQorICAgICAgICAjIGVsaW1pbmF0ZSBhbmNlc3RvcnMgYW1vbmdzdCB0aGUgYXZh aWxhYmxlIGNhbmRpZGF0ZXM6CisgICAgICAgICMgaGVhZHMgYXJlIHRob3NlIHRoYXQgYXJlIG5v dCBhbiBhbmNlc3RvciBvZiBhbnkgb3RoZXIgY2FuZGlkYXRlCisgICAgICAgICMgLSB0aGlzIHBy b3ZpZGVzIGNvbnZlcmdlbmNlIGF0IGEgcGVyLWZpbGUgbGV2ZWwuCisgICAgICAgIGZvciB2ZXJz aW9uX2lkIGluIHZlcnNpb25zOgorICAgICAgICAgICAgIyBtYXkgYmUgYW4gYW5jZXN0b3Igb2Yg YSBrbm93biBoZWFkOgorICAgICAgICAgICAgYWxyZWFkeV9wcmVzZW50ID0gYm9vbChbaGVhZCBm b3IgaGVhZCBpbiBoZWFkcyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm IHZlcnNpb25faWQgaW4gaGVhZF9hbmNlc3RvcnNbaGVhZF1dKQorICAgICAgICAgICAgaWYgYWxy ZWFkeV9wcmVzZW50OgorICAgICAgICAgICAgICAgICMgYW4gYW5jZXN0b3Igb2YgYW4gYW5hbHl6 ZWQgY2FuZGlkYXRlLgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjIG5v dCBhbiBhbmNlc3RvciBvZiBhIGtub3duIGhlYWQ6CisgICAgICAgICAgICAjIGxvYWQgdGhlIHZl cnNpb25lZCBmaWxlIGZvciB0aGlzIGZpbGUgaWQgaWYgbmVlZGVkCisgICAgICAgICAgICBhbmNl c3RvcnMgPSBzZWxmLmdldF9hbmNlc3RyeShbdmVyc2lvbl9pZF0pCisgICAgICAgICAgICAjIG1h eSBrbm9jayBzb21ldGhpbmcgZWxzZSBvdXQ6CisgICAgICAgICAgICBjaGVja19oZWFkcyA9IGxp c3QoaGVhZHMpCisgICAgICAgICAgICBmb3IgaGVhZCBpbiBjaGVja19oZWFkczoKKyAgICAgICAg ICAgICAgICBpZiBoZWFkIGluIGFuY2VzdG9yczoKKyAgICAgICAgICAgICAgICAgICAgIyB0aGlz IHByZXZpb3VzbHkgZGlzY292ZXJlZCAnaGVhZCcgaXMgbm90CisgICAgICAgICAgICAgICAgICAg ICMgcmVhbGx5IGEgaGVhZCAtIGl0cyBhbiBhbmNlc3RvciBvZiB0aGUgbmV3bHkgCisgICAgICAg ICAgICAgICAgICAgICMgZm91bmQgaGVhZCwKKyAgICAgICAgICAgICAgICAgICAgaGVhZHMucmVt b3ZlKGhlYWQpCisgICAgICAgICAgICBoZWFkX2FuY2VzdG9yc1t2ZXJzaW9uX2lkXSA9IGFuY2Vz dG9ycworICAgICAgICAgICAgaGVhZHMuYXBwZW5kKHZlcnNpb25faWQpCisgICAgICAgIHJldHVy biBoZWFkcworCiAKIGNsYXNzIFBsYW5XZWF2ZU1lcmdlKFRleHRNZXJnZSk6CiAgICAgIiIiV2Vh dmUgbWVyZ2UgdGhhdCB0YWtlcyBhIHBsYW4gYXMgaXRzIGlucHV0LgoK # revision id: jrydberg@gnu.org-20060619235800-c1714b46da352f78 # sha1: fc067b12b6d9a08475f1140d3b5d36416032ac23 # inventory sha1: 6321326a7cc4b58e3c018e034748dccd2ff09142 # parent ids: # jrydberg@gnu.org-20060619232020-b6353904b4aa7345 # properties: # branch-nick: bzr.jrydberg.get_versioned_file # message: # Add Repository.get_versioned_file. # committer: Johan Rydberg # date: Tue 2006-06-20 01:20:20.904055119 +0200 === modified file bzrlib/repository.py // encoding:base64 LS0tIGJ6cmxpYi9yZXBvc2l0b3J5LnB5CisrKyBienJsaWIvcmVwb3NpdG9yeS5weQpAQCAtNjQ3 LDYgKzY0NywxOCBAQAogICAgICAgICByZXN1bHQuY2hlY2soKQogICAgICAgICByZXR1cm4gcmVz dWx0CiAKKyAgICBkZWYgZ2V0X3ZlcnNpb25lZF9maWxlKHNlbGYsIGZpbGVfaWQpOgorICAgICAg ICAiIiJSZXR1cm4gVmVyc2lvbmVkRmlsZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIGZpbGUgaWQK KyAgICAgICAgZmlsZV9pZC4KKworICAgICAgICBSZXR1cm5zIE5vbmUgaWYgdGhlcmUgaXMgbm8g ZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAorICAgICAgICBmaWxlIGlkLgorICAg ICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGV4dF9zdG9y ZS5nZXRfd2VhdmUoZmlsZV9pZCwgc2VsZi5nZXRfdHJhbnNhY3Rpb24oKSkKKyAgICAgICAgZXhj ZXB0IGVycm9ycy5Ob1N1Y2hGaWxlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwogCiBjbGFz cyBBbGxJbk9uZVJlcG9zaXRvcnkoUmVwb3NpdG9yeSk6CiAgICAgIiIiTGVnYWN5IHN1cHBvcnQg LSB0aGUgcmVwb3NpdG9yeSBiZWhhdmlvdXIgZm9yIGFsbC1pbi1vbmUgYnJhbmNoZXMuIiIiCgo= === modified file bzrlib/tests/repository_implementations/test_repository.py // ... encoding:base64 LS0tIGJ6cmxpYi90ZXN0cy9yZXBvc2l0b3J5X2ltcGxlbWVudGF0aW9ucy90ZXN0X3JlcG9zaXRv cnkucHkKKysrIGJ6cmxpYi90ZXN0cy9yZXBvc2l0b3J5X2ltcGxlbWVudGF0aW9ucy90ZXN0X3Jl cG9zaXRvcnkucHkKQEAgLTMxNSw2ICszMTUsMTcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0 RXF1YWwocmV2aXNpb24ucmV2aXNpb25faWQsIHJldmlzaW9uX2lkKQogICAgICAgICAgICAgc2Vs Zi5hc3NlcnRFcXVhbChyZXZpc2lvbiwgcmVwby5nZXRfcmV2aXNpb24ocmV2aXNpb25faWQpKQog CisgICAgZGVmIHRlc3RfZ2V0X3ZlcnNpb25lZF9maWxlKHNlbGYpOgorICAgICAgICB0cmVlID0g c2VsZi5tYWtlX2JyYW5jaF9hbmRfdHJlZSgnLicpCisgICAgICAgIHNlbGYuYnVpbGRfdHJlZShb J2ZvbyddKQorICAgICAgICB0cmVlLmFkZCgnZm9vJywgJ2ZpbGUxJykKKyAgICAgICAgdHJlZS5j b21taXQoJ3JldjEnLCByZXZfaWQ9J3JldjEnKQorICAgICAgICB2ZXJzaW9uZWRfZmlsZSA9IHRy ZWUuYnJhbmNoLnJlcG9zaXRvcnkuZ2V0X3ZlcnNpb25lZF9maWxlKCdmaWxlMScpCisgICAgICAg IHNlbGYuYXNzZXJ0VHJ1ZSh2ZXJzaW9uZWRfZmlsZS5oYXNfdmVyc2lvbigncmV2MScpKQorICAg ICAgICB2ZXJzaW9uZWRfZmlsZSA9IHRyZWUuYnJhbmNoLnJlcG9zaXRvcnkuZ2V0X3ZlcnNpb25l ZF9maWxlKCdmaWxlMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmVyc2lvbmVkX2ZpbGUs IE5vbmUpCisKKwogY2xhc3MgVGVzdENhc2VXaXRoQ29tcGxleFJlcG9zaXRvcnkoVGVzdENhc2VX aXRoUmVwb3NpdG9yeSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6Cgo= # revision id: jrydberg@gnu.org-20060619232020-b6353904b4aa7345 # sha1: 31054766c28cd9f1e435df963c7a27064a01db09 # inventory sha1: 0c78d83fedc25863120582007ef899743dc5f014 # parent ids: # pqm@pqm.ubuntu.com-20060619195706-5f9f32cde3bcc4e6 # properties: # branch-nick: bzr.jrydberg.get_versioned_file