Rev 4187: Turn record_iter_changes into a generator to emit file system hashes. in http://people.ubuntu.com/~robertc/baz2.0/pending/commit-uses-ric
Robert Collins
robertc at robertcollins.net
Wed Mar 25 02:13:58 GMT 2009
At http://people.ubuntu.com/~robertc/baz2.0/pending/commit-uses-ric
------------------------------------------------------------
revno: 4187
revision-id: robertc at robertcollins.net-20090325021348-fx6614yo5iypfugr
parent: robertc at robertcollins.net-20090325005422-fpp8rspbwldukhzk
committer: Robert Collins <robertc at robertcollins.net>
branch nick: commit-uses-ric
timestamp: Wed 2009-03-25 13:13:48 +1100
message:
Turn record_iter_changes into a generator to emit file system hashes.
=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py 2009-03-24 22:46:51 +0000
+++ b/bzrlib/repository.py 2009-03-25 02:13:48 +0000
@@ -564,7 +564,8 @@
to basis_revision_id.
:param _entry_factory: Private method to bind entry_factory locally for
performance.
- :return: None
+ :return: A generator of (file_id, relpath, fs_hash) tuples for use with
+ tree._observed_sha1.
"""
# Create an inventory delta based on deltas between all the parents and
# deltas between all the parent inventories. We use inventory delta's
@@ -726,8 +727,10 @@
try:
entry.text_sha1, entry.text_size = self._add_text_to_weave(
file_id, lines, heads, nostore_sha)
+ yield file_id, change[1][1], (entry.text_sha1, stat_value)
except errors.ExistingContent:
# No content change against a carry_over parent
+ # Perhaps this should also yield a fs hash update?
carried_over = True
entry.text_size = parent_entry.text_size
entry.text_sha1 = parent_entry.text_sha1
=== modified file 'bzrlib/tests/per_repository/test_commit_builder.py'
--- a/bzrlib/tests/per_repository/test_commit_builder.py 2009-03-25 00:54:22 +0000
+++ b/bzrlib/tests/per_repository/test_commit_builder.py 2009-03-25 02:13:48 +0000
@@ -76,8 +76,8 @@
try:
builder = tree.branch.get_commit_builder([])
try:
- builder.record_iter_changes(tree, tree.last_revision(),
- tree.iter_changes(tree.basis_tree()))
+ list(builder.record_iter_changes(tree, tree.last_revision(),
+ tree.iter_changes(tree.basis_tree())))
builder.finish_inventory()
except:
builder.abort()
@@ -107,7 +107,7 @@
basis = tree.basis_tree()
last_rev = tree.last_revision()
changes = tree.iter_changes(basis)
- builder.record_iter_changes(tree, last_rev, changes)
+ list(builder.record_iter_changes(tree, last_rev, changes))
builder.finish_inventory()
finally:
builder.abort()
@@ -179,8 +179,8 @@
return
self.assertFalse(builder.random_revid)
try:
- builder.record_iter_changes(tree, tree.last_revision(),
- tree.iter_changes(tree.basis_tree()))
+ list(builder.record_iter_changes(tree, tree.last_revision(),
+ tree.iter_changes(tree.basis_tree())))
builder.finish_inventory()
except:
builder.abort()
@@ -255,7 +255,7 @@
tree.lock_write()
builder = tree.branch.get_commit_builder([old_revision_id])
try:
- builder.record_iter_changes(tree, old_revision_id, [])
+ list(builder.record_iter_changes(tree, old_revision_id, []))
# Regardless of repository root behaviour we should consider this a
# pointless commit.
self.assertFalse(builder.any_changes())
@@ -393,7 +393,8 @@
delete_change = ('foo-id', ('foo', None), True, (True, False),
(tree.path2id(''), None), ('foo', None), ('file', None),
(False, None))
- builder.record_iter_changes(tree, rev_id, [delete_change])
+ list(builder.record_iter_changes(tree, rev_id,
+ [delete_change]))
self.assertEqual(("foo", None, "foo-id", None),
builder._basis_delta[0])
self.assertTrue(builder.any_changes())
@@ -448,8 +449,9 @@
try:
builder = tree.branch.get_commit_builder([])
try:
- builder.record_iter_changes(tree, _mod_revision.NULL_REVISION,
- tree.iter_changes(tree.basis_tree()))
+ list(builder.record_iter_changes(tree,
+ _mod_revision.NULL_REVISION,
+ tree.iter_changes(tree.basis_tree())))
builder.finish_inventory()
rev_id = builder.commit('foo bar')
except:
@@ -849,8 +851,8 @@
record a new version.
:param delta_against_basis: True of the commit of new_name is expected
to have a delta against the basis.
- :param expect_fs_hash: ignored, present for compatibility with test
- driver code for 'mini_commit'.
+ :param expect_fs_hash: If true, looks for a fs hash output from
+ record_iter_changes.
"""
tree.lock_write()
try:
@@ -866,10 +868,21 @@
parent_invs.append(tree.branch.repository.revision_tree(
parent_id).inventory)
changes = list(tree.iter_changes(parent_tree))
- builder.record_iter_changes(tree, parent_ids[0], changes)
+ result = list(builder.record_iter_changes(tree, parent_ids[0],
+ changes))
+ file_id = tree.path2id(new_name)
+ if expect_fs_hash:
+ tree_file_stat = tree.get_file_with_stat(file_id)
+ tree_file_stat[0].close()
+ self.assertLength(1, result)
+ result = result[0]
+ self.assertEqual(result[:2], (file_id, new_name))
+ self.assertEqual(result[2][0], tree.get_file_sha1(file_id))
+ self.assertEqualStat(result[2][1], tree_file_stat[1])
+ else:
+ self.assertEqual([], result)
delta = builder._basis_delta
delta_dict = dict((change[2], change) for change in delta)
- file_id = tree.path2id(new_name)
version_recorded = (file_id in delta_dict and
delta_dict[file_id][3] is not None and
delta_dict[file_id][3].revision == builder._new_revision_id)
More information about the bazaar-commits
mailing list