RFC: difference in dirstate iter_changes and inventory iter_changes
John Arbash Meinel
john at arbash-meinel.com
Wed Aug 13 17:37:09 BST 2008
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Robert Collins wrote:
> On Thu, 2008-08-07 at 23:07 -0400, Aaron Bentley wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Robert Collins wrote:
>>> tree.add('foo')
>>> os.unlink('foo')
>>> len(tree.iter_changes(tree.basis_tree()))
>>> -> 1 for inventory based iter_changes
>>> -> 0 for dirstate
>>>
>>> any objection to my making these consistently 1 ?
>> I'm in favour of that.
>
> Partly done, and I found an interesting thing:
>
> consider these two tests:
>
> === modified file 'bzrlib/tests/intertree_implementations/test_compare.py'
> --- bzrlib/tests/intertree_implementations/test_compare.py 2008-03-07 14:25:46 +0000
> +++ bzrlib/tests/intertree_implementations/test_compare.py 2008-08-13 02:50:31 +0000
> @@ -695,6 +695,32 @@
> ])
> self.assertEqual(expected, self.do_iter_changes(tree1, tree2))
>
> + def test_only_in_source_and_missing(self):
> + tree1 = self.make_branch_and_tree('tree1')
> + tree2 = self.make_to_branch_and_tree('tree2')
> + tree2.set_root_id(tree1.get_root_id())
> + self.build_tree(['tree1/file'])
> + tree1.add(['file'], ['file-id'])
> + os.unlink('tree1/file')
> + tree1, tree2 = self.mutable_trees_to_locked_test_trees(tree1, tree2)
> + root_id = tree1.path2id('')
> + expected = [('file-id', ('file', None), False, (True, False),
> + (root_id, None), ('file', None), (None, None), (False, None))]
> + self.assertEqual(expected, self.do_iter_changes(tree1, tree2))
> +
> + def test_only_in_target_and_missing(self):
> + tree1 = self.make_branch_and_tree('tree1')
> + tree2 = self.make_to_branch_and_tree('tree2')
> + tree2.set_root_id(tree1.get_root_id())
> + self.build_tree(['tree2/file'])
> + tree2.add(['file'], ['file-id'])
> + os.unlink('tree2/file')
> + tree1, tree2 = self.mutable_trees_to_locked_test_trees(tree1, tree2)
> + root_id = tree1.path2id('')
> + expected = [('file-id', (None, 'file'), False, (False, True),
> + (None, root_id), (None, 'file'), (None, None), (None, False))]
> + self.assertEqual(expected, self.do_iter_changes(tree1, tree2))
> +
> def test_unchanged_with_renames_and_modifications(self):
> """want_unchanged should generate a list of unchanged entries."""
> tree1 = self.make_branch_and_tree('1')
>
>
> Both fail on DirState as I expected; on the inventory based case though,
> one passes and one fails - but the tests are symmetrical!
>
> So whats the failure?
> Turns out that
> missing-in-source returns True to 'content_change' and
> missing-in-target-only returns False to 'content_change'.
>
> I think False is a better answer (the content hasn't changed from one
> tree to the other - its absent in both) so I'm going to fix the
> missing-only-in-source case unless someone replies to the mail objecting
> or providing a rationale for it being assymetric.
>
> -Rob
>
A kind change is considered a content change, so going from kind ==
'file' to kind == None should be a content change, IMO.
John
=:->
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iEYEARECAAYFAkijDbUACgkQJdeBCYSNAAP21QCeMGKXFa3k1GOaM6GVYcZkBB69
u84AoJyApFWzpcTPuYIvYtQ+mveryk3p
=xQiL
-----END PGP SIGNATURE-----
More information about the bazaar
mailing list