162
162
transform.set_executability(False, trans_id2)
163
163
transform.version_file('my_pretties2', trans_id2)
164
164
modified_paths = transform.apply().modified_paths
165
self.assertEqual('contents', self.wt.get_file_byname('name').read())
165
self.assertEqual('contents', self.wt.get_file('name').read())
166
166
self.assertEqual(self.wt.path2id('name'), 'my_pretties')
167
self.assertIs(self.wt.is_executable('my_pretties'), True)
168
self.assertIs(self.wt.is_executable('my_pretties2'), False)
167
self.assertIs(self.wt.is_executable('name'), True)
168
self.assertIs(self.wt.is_executable('name2'), False)
169
169
self.assertEqual('directory', file_kind(self.wt.abspath('oz')))
170
170
self.assertEqual(len(modified_paths), 3)
171
171
tree_mod_paths = [self.wt.id2abspath(f) for f in
249
249
transform.create_file('content-two',
250
250
transform.create_path('two', root))
251
251
transform.apply()
252
fo, st1 = self.wt.get_file_with_stat(None, path='one', filtered=False)
252
fo, st1 = self.wt.get_file_with_stat('one', filtered=False)
254
fo, st2 = self.wt.get_file_with_stat(None, path='two', filtered=False)
254
fo, st2 = self.wt.get_file_with_stat('two', filtered=False)
256
256
# We only guarantee 2s resolution
257
257
self.assertTrue(abs(creation_mtime - st1.st_mtime) < 2.0,
382
382
self.assertRaises(ReusingTransform, transform.find_conflicts)
383
383
self.assertEqual('contents', file(self.wt.abspath('name')).read())
384
384
self.assertEqual(self.wt.path2id('name'), 'my_pretties')
385
self.assertIs(self.wt.is_executable('my_pretties'), True)
385
self.assertIs(self.wt.is_executable('name'), True)
386
386
self.assertEqual(self.wt.path2id('oz'), 'oz-id')
387
387
self.assertEqual(self.wt.path2id('oz/dorothy'), 'dorothy-id')
388
388
self.assertEqual(self.wt.path2id('oz/dorothy/toto'), 'toto-id')
390
390
self.assertEqual('toto-contents',
391
self.wt.get_file_byname('oz/dorothy/toto').read())
392
self.assertIs(self.wt.is_executable('toto-id'), False)
391
self.wt.get_file('oz/dorothy/toto').read())
392
self.assertIs(self.wt.is_executable('oz/dorothy/toto'), False)
394
394
def test_tree_reference(self):
395
395
transform, root = self.get_transform()
1067
1067
self.assertRaises(KeyError, transform.set_executability, None, uws)
1068
1068
transform.apply()
1069
self.assertTrue(wt.is_executable('soc'))
1070
self.assertTrue(wt.is_executable('sac'))
1069
self.assertTrue(wt.is_executable('set_on_creation'))
1070
self.assertTrue(wt.is_executable('set_after_creation'))
1072
1072
def test_preserve_mode(self):
1073
1073
"""File mode is preserved when replacing content"""
1078
1078
transform.apply()
1079
1079
self.wt.lock_write()
1080
1080
self.addCleanup(self.wt.unlock)
1081
self.assertTrue(self.wt.is_executable('file1-id'))
1081
self.assertTrue(self.wt.is_executable('file1'))
1082
1082
transform, root = self.get_transform()
1083
1083
file1_id = transform.trans_id_tree_file_id('file1-id')
1084
1084
transform.delete_contents(file1_id)
1085
1085
transform.create_file('contents2', file1_id)
1086
1086
transform.apply()
1087
self.assertTrue(self.wt.is_executable('file1-id'))
1087
self.assertTrue(self.wt.is_executable('file1'))
1089
1089
def test__set_mode_stats_correctly(self):
1090
1090
"""_set_mode stats to determine file mode."""
1610
1610
tree2 = self.make_branch_and_tree('tree2')
1611
1611
tt = TreeTransform(tree2)
1612
1612
foo_trans_id = tt.create_path('foo', tt.root)
1613
create_from_tree(tt, foo_trans_id, tree1, 'foo-id')
1613
create_from_tree(tt, foo_trans_id, tree1, 'foo', file_id='foo-id')
1614
1614
bar_trans_id = tt.create_path('bar', tt.root)
1615
create_from_tree(tt, bar_trans_id, tree1, 'bar-id')
1615
create_from_tree(tt, bar_trans_id, tree1, 'bar', file_id='bar-id')
1617
1617
self.assertEqual('directory', osutils.file_kind('tree2/foo'))
1618
1618
self.assertFileEqual('baz', 'tree2/bar')
1625
1625
tree2 = self.make_branch_and_tree('tree2')
1626
1626
tt = TreeTransform(tree2)
1627
1627
foo_trans_id = tt.create_path('foo', tt.root)
1628
create_from_tree(tt, foo_trans_id, tree1, 'foo-id', bytes='qux')
1628
create_from_tree(tt, foo_trans_id, tree1, 'foo', file_id='foo-id',
1630
1631
self.assertFileEqual('qux', 'tree2/foo')
1636
1637
tree1.add('foo', 'foo-id')
1637
1638
tt = TreeTransform(self.make_branch_and_tree('tree2'))
1638
1639
foo_trans_id = tt.create_path('foo', tt.root)
1639
create_from_tree(tt, foo_trans_id, tree1, 'foo-id')
1640
create_from_tree(tt, foo_trans_id, tree1, 'foo', file_id='foo-id')
1641
1642
self.assertEqual('bar', os.readlink('tree2/foo'))
1729
1730
Merge3Merger(this.wt, this.wt, base.wt, other.wt)
1731
1732
# textual merge
1732
self.assertEqual(this.wt.get_file('a').read(), 'y\nb\nc\nd\bz\n')
1733
self.assertEqual(this.wt.get_file(this.wt.id2path('a')).read(), 'y\nb\nc\nd\bz\n')
1733
1734
# three-way text conflict
1734
self.assertEqual(this.wt.get_file('b').read(),
1735
self.assertEqual(this.wt.get_file(this.wt.id2path('b')).read(),
1735
1736
conflict_text('b', 'b2'))
1737
self.assertEqual(this.wt.get_file('c').read(), 'c2')
1738
self.assertEqual(this.wt.get_file(this.wt.id2path('c')).read(), 'c2')
1739
self.assertEqual(this.wt.get_file('d').read(), 'd2')
1740
self.assertEqual(this.wt.get_file(this.wt.id2path('d')).read(), 'd2')
1740
1741
# Ambigious clean merge
1741
self.assertEqual(this.wt.get_file('e').read(), 'e2')
1742
self.assertEqual(this.wt.get_file(this.wt.id2path('e')).read(), 'e2')
1743
self.assertEqual(this.wt.get_file('f').read(), 'f')
1744
self.assertEqual(this.wt.get_file(this.wt.id2path('f')).read(), 'f')
1744
1745
# Correct correct results when THIS == OTHER
1745
self.assertEqual(this.wt.get_file('g').read(), 'g')
1746
self.assertEqual(this.wt.get_file(this.wt.id2path('g')).read(), 'g')
1746
1747
# Text conflict when THIS & OTHER are text and BASE is dir
1747
self.assertEqual(this.wt.get_file('h').read(),
1748
self.assertEqual(this.wt.get_file(this.wt.id2path('h')).read(),
1748
1749
conflict_text('1\n2\n3\n4\n', 'h\ni\nj\nk\n'))
1749
self.assertEqual(this.wt.get_file_byname('h.THIS').read(),
1750
self.assertEqual(this.wt.get_file('h.THIS').read(),
1750
1751
'1\n2\n3\n4\n')
1751
self.assertEqual(this.wt.get_file_byname('h.OTHER').read(),
1752
self.assertEqual(this.wt.get_file('h.OTHER').read(),
1752
1753
'h\ni\nj\nk\n')
1753
1754
self.assertEqual(file_kind(this.wt.abspath('h.BASE')), 'directory')
1754
self.assertEqual(this.wt.get_file('i').read(),
1755
self.assertEqual(this.wt.get_file(this.wt.id2path('i')).read(),
1755
1756
conflict_text('1\n2\n3\n4\n', 'h\ni\nj\nk\n'))
1756
self.assertEqual(this.wt.get_file_byname('i.THIS').read(),
1757
self.assertEqual(this.wt.get_file('i.THIS').read(),
1757
1758
'1\n2\n3\n4\n')
1758
self.assertEqual(this.wt.get_file_byname('i.OTHER').read(),
1759
self.assertEqual(this.wt.get_file('i.OTHER').read(),
1759
1760
'h\ni\nj\nk\n')
1760
1761
self.assertEqual(os.path.exists(this.wt.abspath('i.BASE')), False)
1761
1762
modified = ['a', 'b', 'c', 'h', 'i']
2047
2048
self.build_tree_contents([('source/file2', 'C')])
2049
2050
real_source_get_file = source.get_file
2050
def get_file(file_id, path=None):
2051
def get_file(path, file_id=None):
2051
2052
calls.append(file_id)
2052
return real_source_get_file(file_id, path)
2053
return real_source_get_file(path, file_id)
2053
2054
source.get_file = get_file
2054
2055
target = self.make_branch_and_tree('target')
2055
2056
revision_tree = source.basis_tree()
2099
2100
os.symlink('file2', 'source/file1')
2101
2102
real_source_get_file = source.get_file
2102
def get_file(file_id, path=None):
2103
def get_file(path, file_id=None):
2103
2104
calls.append(file_id)
2104
return real_source_get_file(file_id, path)
2105
return real_source_get_file(path, file_id)
2105
2106
source.get_file = get_file
2106
2107
target = self.make_branch_and_tree('target')
2107
2108
revision_tree = source.basis_tree()
2267
2268
entry2_state = entry2[1][0]
2268
2269
# Now, make sure that we don't have to re-read the content. The
2269
2270
# packed_stat should match exactly.
2270
self.assertEqual(entry1_sha, target.get_file_sha1('file1-id', 'file1'))
2271
self.assertEqual(entry1_sha, target.get_file_sha1('file1', 'file1-id'))
2271
2272
self.assertEqual(entry2_sha,
2272
target.get_file_sha1('file2-id', 'dir/file2'))
2273
target.get_file_sha1('dir/file2', 'file2-id'))
2273
2274
self.assertEqual(entry1_state, entry1[1][0])
2274
2275
self.assertEqual(entry2_state, entry2[1][0])
2345
2346
rev = tt.commit(branch, 'message')
2346
2347
tree = branch.basis_tree()
2347
2348
self.assertEqual('file', tree.id2path('file-id'))
2348
self.assertEqual('contents', tree.get_file_text('file-id'))
2349
self.assertEqual('contents', tree.get_file_text('file', 'file-id'))
2349
2350
self.assertEqual('dir', tree.id2path('dir-id'))
2350
2351
if SymlinkFeature.available():
2351
2352
self.assertEqual('dir/symlink', tree.id2path('symlink-id'))
2352
self.assertEqual('target', tree.get_symlink_target('symlink-id'))
2353
self.assertEqual('target', tree.get_symlink_target('dir/symlink'))
2354
2355
def test_add_unversioned(self):
2355
2356
branch, tt = self.get_branch_and_transform()
2731
2732
self.addCleanup(preview.finalize)
2732
2733
preview.new_file('file2', preview.root, 'content B\n', 'file2-id')
2733
2734
preview_tree = preview.get_preview_tree()
2734
self.assertEqual(preview_tree.kind('file2-id'), 'file')
2735
self.assertEqual(preview_tree.kind('file2'), 'file')
2735
2736
self.assertEqual(
2736
preview_tree.get_file('file2-id').read(), 'content B\n')
2737
preview_tree.get_file('file2', 'file2-id').read(), 'content B\n')
2738
2739
def test_diff_preview_tree(self):
2739
2740
revision_tree = self.create_tree()
2818
2819
preview.new_file('file', preview.root, 'contents', 'file-id')
2819
2820
preview.new_directory('directory', preview.root, 'dir-id')
2820
2821
preview_tree = preview.get_preview_tree()
2821
self.assertEqual('file', preview_tree.kind('file-id'))
2822
self.assertEqual('directory', preview_tree.kind('dir-id'))
2822
self.assertEqual('file', preview_tree.kind('file'))
2823
self.assertEqual('directory', preview_tree.kind('directory'))
2824
2825
def test_get_file_mtime(self):
2825
2826
preview = self.get_empty_preview()
2828
2829
limbo_path = preview._limbo_name(file_trans_id)
2829
2830
preview_tree = preview.get_preview_tree()
2830
2831
self.assertEqual(os.stat(limbo_path).st_mtime,
2831
preview_tree.get_file_mtime('file-id'))
2832
preview_tree.get_file_mtime('file', 'file-id'))
2833
2834
def test_get_file_mtime_renamed(self):
2834
2835
work_tree = self.make_branch_and_tree('tree')
2839
2840
file_trans_id = preview.trans_id_tree_file_id('file-id')
2840
2841
preview.adjust_path('renamed', preview.root, file_trans_id)
2841
2842
preview_tree = preview.get_preview_tree()
2842
preview_mtime = preview_tree.get_file_mtime('file-id', 'renamed')
2843
work_mtime = work_tree.get_file_mtime('file-id', 'file')
2843
preview_mtime = preview_tree.get_file_mtime('renamed', 'file-id')
2844
work_mtime = work_tree.get_file_mtime('file', 'file-id')
2845
2846
def test_get_file_size(self):
2846
2847
work_tree = self.make_branch_and_tree('tree')
2851
2852
new_id = preview.new_file('name', preview.root, 'contents', 'new-id',
2853
2854
tree = preview.get_preview_tree()
2854
self.assertEqual(len('old'), tree.get_file_size('old-id'))
2855
self.assertEqual(len('contents'), tree.get_file_size('new-id'))
2855
self.assertEqual(len('old'), tree.get_file_size('old'))
2856
self.assertEqual(len('contents'), tree.get_file_size('name'))
2857
2858
def test_get_file(self):
2858
2859
preview = self.get_empty_preview()
2859
2860
preview.new_file('file', preview.root, 'contents', 'file-id')
2860
2861
preview_tree = preview.get_preview_tree()
2861
tree_file = preview_tree.get_file('file-id')
2862
tree_file = preview_tree.get_file('file')
2863
2864
self.assertEqual('contents', tree_file.read())
2870
2871
preview.new_symlink('symlink', preview.root, 'target', 'symlink-id')
2871
2872
preview_tree = preview.get_preview_tree()
2872
2873
self.assertEqual('target',
2873
preview_tree.get_symlink_target('symlink-id'))
2874
preview_tree.get_symlink_target('symlink'))
2875
2876
def test_all_file_ids(self):
2876
2877
tree = self.make_branch_and_tree('tree')
3117
3118
file_trans_id = preview.trans_id_file_id('file-id')
3118
3119
preview.delete_contents(file_trans_id)
3119
3120
preview_tree = preview.get_preview_tree()
3120
annotation = preview_tree.annotate_iter('file-id', 'me:')
3121
annotation = preview_tree.annotate_iter('file', default_revision='me:')
3121
3122
self.assertIs(None, annotation)
3123
3124
def test_stored_kind(self):
3124
3125
preview = self.get_empty_preview()
3125
3126
preview.new_file('file', preview.root, 'a\nb\nc\n', 'file-id')
3126
3127
preview_tree = preview.get_preview_tree()
3127
self.assertEqual('file', preview_tree.stored_kind('file-id'))
3128
self.assertEqual('file', preview_tree.stored_kind('file'))
3129
3130
def test_is_executable(self):
3130
3131
preview = self.get_empty_preview()
3131
3132
preview.new_file('file', preview.root, 'a\nb\nc\n', 'file-id')
3132
3133
preview.set_executability(True, preview.trans_id_file_id('file-id'))
3133
3134
preview_tree = preview.get_preview_tree()
3134
self.assertEqual(True, preview_tree.is_executable('file-id'))
3135
self.assertEqual(True, preview_tree.is_executable('file'))
3136
3137
def test_get_set_parent_ids(self):
3137
3138
revision_tree, preview_tree = self.get_tree_and_preview_tree()
3238
3239
tt = merger.make_merger().make_preview_transform()
3239
3240
self.addCleanup(tt.finalize)
3240
3241
final_tree = tt.get_preview_tree()
3241
self.assertEqual('a\nb\nc\n', final_tree.get_file_text('file-id'))
3244
final_tree.get_file_text(final_tree.id2path('file-id')))
3243
3246
def test_merge_preview_into_workingtree(self):
3244
3247
tree = self.make_branch_and_tree('tree')
3294
3297
self.addCleanup(preview.finalize)
3295
3298
preview.new_file('foo', preview.root, 'bar', 'baz-id')
3296
3299
preview_tree = preview.get_preview_tree()
3297
self.assertEqual(False, preview_tree.is_executable('baz-id',
3299
self.assertEqual(False, preview_tree.is_executable('baz-id'))
3300
self.assertEqual(False, preview_tree.is_executable('tree/foo', 'baz-id'))
3301
self.assertEqual(False, preview_tree.is_executable('tree/foo'))
3301
3303
def test_commit_preview_tree(self):
3302
3304
tree = self.make_branch_and_tree('tree')
3313
3315
builder.finish_inventory()
3314
3316
rev2_id = builder.commit('rev2')
3315
3317
rev2_tree = tree.branch.repository.revision_tree(rev2_id)
3316
self.assertEqual('contents', rev2_tree.get_file_text('file_id'))
3318
self.assertEqual('contents', rev2_tree.get_file_text('file'))
3318
3320
def test_ascii_limbo_paths(self):
3319
3321
self.requireFeature(features.UnicodeFilenameFeature)