102
102
tree.add(['file1.txt', 'file2.bin', 'file3.txt'])
103
103
tree.commit('commit raw content')
104
# Commit another revision with various changes
104
fileid_1 = tree.path2id('file1.txt')
105
fileid_2 = tree.path2id('file2.bin')
106
fileid_3 = tree.path2id('file3.txt')
107
# Commit another revision with various changes. We make sure
108
# the change includes a modification, an addition, a deletion and
109
# a rename from a path without content filtering to one with it.
105
110
self.build_tree_contents([
106
111
(dir + '/file1.txt', 'Foo ROCKS!'),
107
(dir + '/file2.txt', 'Hello World'),
112
(dir + '/file4.txt', 'Hello World'),
109
tree.add(['file2.txt'])
114
tree.add(['file4.txt'])
110
115
tree.remove(['file3.txt'], keep_files=False)
111
116
tree.rename_one('file2.bin', 'file3.txt')
112
117
tree.commit("change, add and rename stuff")
113
txt1_fileid = tree.path2id('file1.txt')
114
txt2_fileid = tree.path2id('file2.txt')
115
txt3_fileid = tree.path2id('file3.txt')
116
return tree, txt1_fileid, txt2_fileid, txt3_fileid
118
fileid_4 = tree.path2id('file4.txt')
119
return tree, fileid_1, fileid_2, fileid_3, fileid_4
118
121
def patch_in_content_filter(self):
119
122
# Patch in a custom, symmetric content filter stack
253
256
def test_content_filtering_applied_on_pull(self):
254
257
# Create a source branch with two revisions
255
source, txt_fileid, txt2_fileid, txt3_fileid = \
258
source, fileid_1, fileid_2, fileid_3, fileid_4 = \
256
259
self.create_cf_tree_with_two_revisions(txt_reader=None,
257
260
txt_writer=None, dir='source')
258
261
if not source.supports_content_filtering():
260
263
self.assertFileEqual("Foo ROCKS!", 'source/file1.txt')
261
self.assert_basis_content("Foo ROCKS!", source, txt_fileid)
264
self.assert_basis_content("Foo ROCKS!", source, fileid_1)
263
266
# Now patch in content filtering and branch from revision 1
264
267
self.patch_in_content_filter()
265
268
self.run_bzr('branch -r1 source target')
266
269
target = WorkingTree.open('target')
267
270
self.assertFileEqual("fOO tXT", 'target/file1.txt')
268
self.assert_basis_content("Foo Txt", target, txt_fileid)
271
self.assert_basis_content("Foo Txt", target, fileid_1)
272
self.assertFileEqual("bAR tXT", 'target/file3.txt')
273
self.assert_basis_content("Bar Txt", target, fileid_3)
270
275
# Pull the latter change and check the target tree is updated
271
276
self.run_bzr('pull -d target')
277
self.assert_basis_content("Foo ROCKS!", target, fileid_1)
272
278
self.assertFileEqual("fOO rocks!", 'target/file1.txt')
273
self.assert_basis_content("Foo ROCKS!", target, txt_fileid)
274
self.assertFileEqual("hELLO wORLD", 'target/file2.txt')
275
self.assert_basis_content("Hello World", target, txt2_fileid)
279
self.assert_basis_content("Hello World", target, fileid_4)
280
self.assertFileEqual("hELLO wORLD", 'target/file4.txt')
281
self.assert_basis_content("Foo Bin", target, fileid_2)
282
#self.assertFileEqual("fOO bIN", 'target/file3.txt')
277
284
def test_content_filtering_applied_on_merge(self):
278
285
# Create a source branch with two revisions
279
source, txt_fileid, txt2_fileid, txt3_fileid = \
286
source, fileid_1, fileid_2, fileid_3, fileid_4 = \
280
287
self.create_cf_tree_with_two_revisions(txt_reader=None,
281
288
txt_writer=None, dir='source')
282
289
if not source.supports_content_filtering():
291
self.assert_basis_content("Foo ROCKS!", source, fileid_1)
284
292
self.assertFileEqual("Foo ROCKS!", 'source/file1.txt')
285
self.assert_basis_content("Foo ROCKS!", source, txt_fileid)
287
294
# Now patch in content filtering and branch from revision 1
288
295
self.patch_in_content_filter()
289
296
self.run_bzr('branch -r1 source target')
290
297
target = WorkingTree.open('target')
298
self.assert_basis_content("Foo Txt", target, fileid_1)
291
299
self.assertFileEqual("fOO tXT", 'target/file1.txt')
292
self.assert_basis_content("Foo Txt", target, txt_fileid)
300
self.assertFileEqual("Foo Bin", 'target/file2.bin')
301
self.assertFileEqual("bAR tXT", 'target/file3.txt')
294
303
# Merge the latter change and check the target tree is updated
295
304
self.run_bzr('merge -d target source')
296
305
self.assertFileEqual("fOO rocks!", 'target/file1.txt')
297
self.assertFileEqual("hELLO wORLD", 'target/file2.txt')
306
#self.assertFileEqual("fOO bIN", 'target/file3.txt')
307
self.assertFileEqual("hELLO wORLD", 'target/file4.txt')
299
309
# Commit the merge and check the right content is stored
300
310
target.commit("merge file1.txt changes from source")
301
self.assert_basis_content("Foo ROCKS!", target, txt_fileid)
302
self.assert_basis_content("Hello World", target, txt2_fileid)
311
self.assert_basis_content("Foo ROCKS!", target, fileid_1)
312
self.assert_basis_content("Foo Bin", target, fileid_2)
313
self.assert_basis_content("Hello World", target, fileid_4)
304
315
def test_content_filtering_applied_on_switch(self):
305
316
# Create a source branch with two revisions
306
source, txt_fileid, txt2_fileid, txt3_fileid = \
317
source, fileid_1, fileid_2, fileid_3, fileid_4 = \
307
318
self.create_cf_tree_with_two_revisions(txt_reader=None,
308
319
txt_writer=None, dir='branch-a')
309
320
if not source.supports_content_filtering():