~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to testchangeset.py

Merging Aaron Bentley's fixes to the changeset logic.

Show diffs side-by-side

added added

removed removed

Lines of Context:
10
10
 
11
11
class MockTree(object):
12
12
    def __init__(self):
 
13
        from bzrlib.inventory import RootEntry, ROOT_ID
13
14
        object.__init__(self)
14
 
        self.paths = {}
15
 
        self.ids = {}
 
15
        self.paths = {ROOT_ID: ""}
 
16
        self.ids = {"": ROOT_ID}
16
17
        self.contents = {}
 
18
        self.root = RootEntry(ROOT_ID)
 
19
 
 
20
    inventory = property(lambda x:x)
17
21
 
18
22
    def __iter__(self):
19
23
        return self.paths.iterkeys()
20
24
 
 
25
    def __getitem__(self, file_id):
 
26
        if file_id == self.root.file_id:
 
27
            return self.root
 
28
        else:
 
29
            return self.make_entry(file_id, self.paths[file_id])
 
30
 
 
31
    def parent_id(self, file_id):
 
32
        from os.path import dirname
 
33
        parent_dir = dirname(self.paths[file_id])
 
34
        if parent_dir == "":
 
35
            return None
 
36
        return self.ids[parent_dir]
 
37
 
 
38
    def iter_entries(self):
 
39
        for path, file_id in self.ids.iteritems():
 
40
            yield path, self[file_id]
 
41
 
 
42
    def get_file_kind(self, file_id):
 
43
        if file_id in self.contents:
 
44
            kind = 'file'
 
45
        else:
 
46
            kind = 'directory'
 
47
        return kind
 
48
 
 
49
    def make_entry(self, file_id, path):
 
50
        from os.path import basename
 
51
        from bzrlib.inventory import InventoryEntry
 
52
        name = basename(path)
 
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
 
59
        return ie
 
60
 
21
61
    def add_dir(self, file_id, path):
22
62
        self.paths[file_id] = path
23
63
        self.ids[path] = file_id
41
81
        result.seek(0,0)
42
82
        return result
43
83
 
 
84
    def contents_stats(self, file_id):
 
85
        from bzrlib.osutils import sha_file
 
86
        if file_id not in self.contents:
 
87
            return None, None
 
88
        text_sha1 = sha_file(self.get_file(file_id))
 
89
        return text_sha1, len(self.contents[file_id])
 
90
 
 
91
 
44
92
class CTreeTester(unittest.TestCase):
45
93
    """A simple unittest tester for the ChangesetTree class."""
46
94
 
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'])
210
258
 
211
259
class CSetTester(InTempDir):
366
414
 
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')
370
418
 
371
419
        cset = self.get_valid_cset('a@cset-0-3', 'a@cset-0-4')
372
420
        # Check a rollup changeset