23
23
from bzrlib.diff import internal_diff
24
24
from bzrlib.mutabletree import MutableTree
25
25
from bzrlib.osutils import has_symlinks
26
from bzrlib.symbol_versioning import zero_ninetyone, one_zero
27
26
from bzrlib.tests import SymlinkFeature, TestSkipped
28
27
from bzrlib.tests.tree_implementations import TestCaseWithTree
28
from bzrlib.transform import _PreviewTree
29
29
from bzrlib.uncommit import uncommit
32
def get_entry(tree, file_id):
33
return tree.iter_entries_by_dir([file_id]).next()[1]
32
36
class TestPreviousHeads(TestCaseWithTree):
59
63
self.tree = self.workingtree_to_test_tree(self.wt)
60
64
self.tree.lock_read()
61
65
self.addCleanup(self.tree.unlock)
62
self.file_active = self.tree.inventory['fileid']
66
self.file_active = get_entry(self.tree, 'fileid')
63
67
self.weave = self.branch.repository.weave_store.get_weave('fileid',
64
68
self.branch.repository.get_transaction())
66
def get_previous_heads(self, inventories):
67
return self.applyDeprecated(zero_ninetyone,
68
self.file_active.find_previous_heads,
70
self.branch.repository.weave_store,
71
self.branch.repository.get_transaction())
73
def test_fileid_in_no_inventory(self):
74
self.assertEqual({}, self.get_previous_heads([self.inv_A]))
76
def test_fileid_in_one_inventory(self):
77
self.assertEqual({'B':self.inv_B['fileid']},
78
self.get_previous_heads([self.inv_B]))
79
self.assertEqual({'B':self.inv_B['fileid']},
80
self.get_previous_heads([self.inv_A, self.inv_B]))
81
self.assertEqual({'B':self.inv_B['fileid']},
82
self.get_previous_heads([self.inv_B, self.inv_A]))
84
def test_fileid_in_two_inventories_gives_both_entries(self):
85
self.assertEqual({'B':self.inv_B['fileid'],
86
'C':self.inv_C['fileid']},
87
self.get_previous_heads([self.inv_B, self.inv_C]))
88
self.assertEqual({'B':self.inv_B['fileid'],
89
'C':self.inv_C['fileid']},
90
self.get_previous_heads([self.inv_C, self.inv_B]))
92
def test_fileid_in_two_inventories_already_merged_gives_head(self):
93
self.assertEqual({'D':self.inv_D['fileid']},
94
self.get_previous_heads([self.inv_B, self.inv_D]))
95
self.assertEqual({'D':self.inv_D['fileid']},
96
self.get_previous_heads([self.inv_D, self.inv_B]))
98
# TODO: test two inventories with the same file revision
70
# TODO: test two inventories with the same file revision
101
73
class TestInventory(TestCaseWithTree):
104
76
self.tree = self.get_tree_with_subdirs_and_all_content_types()
105
77
self.tree.lock_read()
106
78
self.addCleanup(self.tree.unlock)
107
# Commenting out the following line still fails.
108
self.inv = self.tree.inventory
110
80
def test_symlink_target(self):
111
81
self.requireFeature(SymlinkFeature)
113
if isinstance(self.tree, MutableTree):
83
if isinstance(self.tree, (MutableTree, _PreviewTree)):
114
84
raise TestSkipped(
115
'symlinks not accurately represented in working trees')
116
entry = self.inv[self.inv.path2id('symlink')]
85
'symlinks not accurately represented in working trees and'
87
entry = get_entry(self.tree, self.tree.path2id('symlink'))
117
88
self.assertEqual(entry.symlink_target, 'link-target')
90
def test_symlink_target_tree(self):
91
self.requireFeature(SymlinkFeature)
93
self.assertEqual('link-target',
94
self.tree.get_symlink_target('symlink'))
96
def test_kind_symlink(self):
97
self.requireFeature(SymlinkFeature)
99
self.assertEqual('symlink', self.tree.kind('symlink'))
100
self.assertIs(None, self.tree.get_file_size('symlink'))
119
102
def test_symlink(self):
120
103
self.requireFeature(SymlinkFeature)
122
entry = self.inv[self.inv.path2id('symlink')]
105
entry = get_entry(self.tree, self.tree.path2id('symlink'))
123
106
self.assertEqual(entry.kind, 'symlink')
124
107
self.assertEqual(None, entry.text_size)