23
from bzrlib import osutils
24
from bzrlib.tests import SymlinkFeature, TestCaseWithTransport
25
from bzrlib.testament import Testament, StrictTestament, StrictTestament3
26
from bzrlib.transform import TreeTransform
23
from breezy import osutils
24
from breezy.tests import TestCaseWithTransport
25
from breezy.testament import (
30
from breezy.transform import TreeTransform
31
from breezy.tests.features import (
29
36
class TestamentSetup(TestCaseWithTransport):
32
39
super(TestamentSetup, self).setUp()
33
self.wt = self.make_branch_and_tree('.', format='dirstate-with-subtree')
34
self.wt.set_root_id('TREE_ROT')
40
self.wt = self.make_branch_and_tree('.', format='development-subtree')
41
self.wt.set_root_id(b'TREE_ROT')
35
42
b = self.b = self.wt.branch
36
43
b.nick = "test branch"
37
44
self.wt.commit(message='initial null commit',
38
45
committer='test@user',
39
46
timestamp=1129025423, # 'Tue Oct 11 20:10:23 2005'
42
self.build_tree_contents([('hello', 'contents of hello file'),
48
rev_id=b'test@user-1')
49
self.build_tree_contents([('hello', b'contents of hello file'),
44
('src/foo.c', 'int main()\n{\n}\n')])
51
('src/foo.c', b'int main()\n{\n}\n')])
45
52
self.wt.add(['hello', 'src', 'src/foo.c'],
46
['hello-id', 'src-id', 'foo.c-id'])
53
[b'hello-id', b'src-id', b'foo.c-id'])
47
54
tt = TreeTransform(self.wt)
48
55
trans_id = tt.trans_id_tree_path('hello')
49
56
tt.set_executability(True, trans_id)
69
76
def test_null_testament(self):
70
77
"""Testament for a revision with no contents."""
71
t = self.from_revision(self.b.repository, 'test@user-1')
78
t = self.from_revision(self.b.repository, b'test@user-1')
72
79
ass = self.assertTrue
73
80
eq = self.assertEqual
74
81
ass(isinstance(t, Testament))
75
eq(t.revision_id, 'test@user-1')
82
eq(t.revision_id, b'test@user-1')
76
83
eq(t.committer, 'test@user')
77
84
eq(t.timestamp, 1129025423)
80
87
def test_testment_text_form(self):
81
88
"""Conversion of testament to canonical text form."""
82
t = self.from_revision(self.b.repository, 'test@user-1')
89
t = self.from_revision(self.b.repository, b'test@user-1')
83
90
text_form = t.as_text()
84
91
self.log('testament text form:\n' + text_form)
85
self.assertEqualDiff(text_form, self.expected('rev_1'))
92
self.assertEqualDiff(text_form, self.expected(b'rev_1'))
86
93
short_text_form = t.as_short_text()
87
self.assertEqualDiff(short_text_form, self.expected('rev_1_short'))
94
self.assertEqualDiff(short_text_form, self.expected(b'rev_1_short'))
89
96
def test_testament_with_contents(self):
90
97
"""Testament containing a file and a directory."""
91
t = self.from_revision(self.b.repository, 'test@user-2')
98
t = self.from_revision(self.b.repository, b'test@user-2')
92
99
text_form = t.as_text()
93
100
self.log('testament text form:\n' + text_form)
94
self.assertEqualDiff(text_form, self.expected('rev_2'))
101
self.assertEqualDiff(text_form, self.expected(b'rev_2'))
95
102
actual_short = t.as_short_text()
96
self.assertEqualDiff(actual_short, self.expected('rev_2_short'))
103
self.assertEqualDiff(actual_short, self.expected(b'rev_2_short'))
98
105
def test_testament_symlinks(self):
99
106
"""Testament containing symlink (where possible)"""
100
107
self.requireFeature(SymlinkFeature)
101
108
os.symlink('wibble/linktarget', 'link')
102
self.wt.add(['link'], ['link-id'])
109
self.wt.add(['link'], [b'link-id'])
103
110
self.wt.commit(message='add symlink',
104
111
timestamp=1129025493,
106
rev_id='test@user-3',
113
rev_id=b'test@user-3',
107
114
committer='test@user')
108
t = self.from_revision(self.b.repository, 'test@user-3')
109
self.assertEqualDiff(t.as_text(), self.expected('rev_3'))
115
t = self.from_revision(self.b.repository, b'test@user-3')
116
self.assertEqualDiff(t.as_text(), self.expected(b'rev_3'))
111
118
def test_testament_revprops(self):
112
119
"""Testament to revision with extra properties"""
113
props = dict(flavor='sour cherry\ncream cheese',
120
props = {u'flavor': 'sour cherry\ncream cheese',
117
124
self.wt.commit(message='revision with properties',
118
125
timestamp=1129025493,
120
rev_id='test@user-3',
127
rev_id=b'test@user-3',
121
128
committer='test@user',
123
t = self.from_revision(self.b.repository, 'test@user-3')
124
self.assertEqualDiff(t.as_text(), self.expected('rev_props'))
130
t = self.from_revision(self.b.repository, b'test@user-3')
131
self.assertEqualDiff(t.as_text(), self.expected(b'rev_props'))
126
133
def test_testament_unicode_commit_message(self):
128
135
message=u'non-ascii commit \N{COPYRIGHT SIGN} me',
129
136
timestamp=1129025493,
131
rev_id='test@user-3',
132
committer='Erik B\xe5gfors <test@user>',
133
revprops={'uni':u'\xb5'}
138
rev_id=b'test@user-3',
139
committer=u'Erik B\xe5gfors <test@user>',
140
revprops={u'uni':u'\xb5'}
135
t = self.from_revision(self.b.repository, 'test@user-3')
142
t = self.from_revision(self.b.repository, b'test@user-3')
136
143
self.assertEqualDiff(
137
144
self.expected('sample_unicode').encode('utf-8'), t.as_text())
146
def test_from_tree(self):
147
tree = self.b.repository.revision_tree(b'test@user-2')
148
testament = self.testament_class().from_revision_tree(tree)
149
text_1 = testament.as_short_text()
150
text_2 = self.from_revision(self.b.repository,
151
b'test@user-2').as_short_text()
152
self.assertEqual(text_1, text_2)
139
154
def test___init__(self):
140
revision = self.b.repository.get_revision('test@user-2')
141
inventory = self.b.repository.get_inventory('test@user-2')
142
testament_1 = self.testament_class()(revision, inventory)
155
revision = self.b.repository.get_revision(b'test@user-2')
156
tree = self.b.repository.revision_tree(b'test@user-2')
157
testament_1 = self.testament_class()(revision, tree)
143
158
text_1 = testament_1.as_short_text()
144
159
text_2 = self.from_revision(self.b.repository,
145
'test@user-2').as_short_text()
160
b'test@user-2').as_short_text()
146
161
self.assertEqual(text_1, text_2)