11
11
class MockTree(object):
12
12
def __init__(self):
13
from bzrlib.inventory import RootEntry, ROOT_ID
13
14
object.__init__(self)
15
self.paths = {ROOT_ID: ""}
16
self.ids = {"": ROOT_ID}
18
self.root = RootEntry(ROOT_ID)
20
inventory = property(lambda x:x)
18
22
def __iter__(self):
19
23
return self.paths.iterkeys()
25
def __getitem__(self, file_id):
26
if file_id == self.root.file_id:
29
return self.make_entry(file_id, self.paths[file_id])
31
def parent_id(self, file_id):
32
from os.path import dirname
33
parent_dir = dirname(self.paths[file_id])
36
return self.ids[parent_dir]
38
def iter_entries(self):
39
for path, file_id in self.ids.iteritems():
40
yield path, self[file_id]
42
def get_file_kind(self, file_id):
43
if file_id in self.contents:
49
def make_entry(self, file_id, path):
50
from os.path import basename
51
from bzrlib.inventory import InventoryEntry
53
kind = self.get_file_kind(file_id)
54
parent_id = self.parent_id(file_id)
55
text_sha_1, text_size = self.contents_stats(file_id)
56
ie = InventoryEntry(file_id, name, kind, parent_id)
57
ie.text_sha_1 = text_sha_1
58
ie.text_size = text_size
21
61
def add_dir(self, file_id, path):
22
62
self.paths[file_id] = path
23
63
self.ids[path] = file_id
84
def contents_stats(self, file_id):
85
from bzrlib.osutils import sha_file
86
if file_id not in self.contents:
88
text_sha1 = sha_file(self.get_file(file_id))
89
return text_sha1, len(self.contents[file_id])
44
92
class CTreeTester(unittest.TestCase):
45
93
"""A simple unittest tester for the ChangesetTree class."""
205
253
ctree = self.make_tree_1()[0]
206
254
self.assertEqual(self.sorted_ids(ctree), ['a', 'b', 'c', 'd'])
207
255
ctree.note_deletion("grandparent/parent/file")
208
ctree.note_id("e", "grandparent/alt_parent/fool")
256
ctree.note_id("e", "grandparent/alt_parent/fool", kind="directory")
209
257
self.assertEqual(self.sorted_ids(ctree), ['a', 'b', 'd', 'e'])
211
259
class CSetTester(InTempDir):
367
415
# Now move the directory
368
416
self.b1.rename_one('dir', 'sub/dir')
369
self.b1.commit('rename dir', 'a@cset-0-4')
417
self.b1.commit('rename dir', rev_id='a@cset-0-4')
371
419
cset = self.get_valid_cset('a@cset-0-3', 'a@cset-0-4')
372
420
# Check a rollup changeset