81
86
"""Commit and check two versions of a single file."""
82
87
wt = self.make_branch_and_tree('.')
84
file('hello', 'w').write('hello world')
89
with open('hello', 'w') as f:
90
f.write('hello world')
86
wt.commit(message='add hello')
87
file_id = wt.path2id('hello')
89
file('hello', 'w').write('version 2')
90
wt.commit(message='commit 2')
92
eq = self.assertEquals
92
rev1 = wt.commit(message='add hello')
94
with open('hello', 'w') as f:
96
rev2 = wt.commit(message='commit 2')
94
rh = b.revision_history()
95
rev = b.repository.get_revision(rh[0])
100
rev = b.repository.get_revision(rev1)
96
101
eq(rev.message, 'add hello')
98
tree1 = b.repository.revision_tree(rh[0])
103
tree1 = b.repository.revision_tree(rev1)
100
text = tree1.get_file_text(file_id)
105
text = tree1.get_file_text('hello')
102
self.assertEqual('hello world', text)
107
self.assertEqual(b'hello world', text)
104
tree2 = b.repository.revision_tree(rh[1])
109
tree2 = b.repository.revision_tree(rev2)
105
110
tree2.lock_read()
106
text = tree2.get_file_text(file_id)
111
text = tree2.get_file_text('hello')
108
self.assertEqual('version 2', text)
113
self.assertEqual(b'version 2', text)
115
def test_commit_lossy_native(self):
116
"""Attempt a lossy commit to a native branch."""
117
wt = self.make_branch_and_tree('.')
119
with open('hello', 'w') as f:
120
f.write('hello world')
122
revid = wt.commit(message='add hello', rev_id=b'revid', lossy=True)
123
self.assertEqual(b'revid', revid)
125
def test_commit_lossy_foreign(self):
126
"""Attempt a lossy commit to a foreign branch."""
127
test_foreign.register_dummy_foreign_for_test(self)
128
wt = self.make_branch_and_tree('.',
129
format=test_foreign.DummyForeignVcsDirFormat())
131
with open('hello', 'w') as f:
132
f.write('hello world')
134
revid = wt.commit(message='add hello', lossy=True,
135
timestamp=1302659388, timezone=0)
136
self.assertEqual(b'dummy-v1:1302659388-0-UNKNOWN', revid)
138
def test_commit_bound_lossy_foreign(self):
139
"""Attempt a lossy commit to a bzr branch bound to a foreign branch."""
140
test_foreign.register_dummy_foreign_for_test(self)
141
foreign_branch = self.make_branch('foreign',
142
format=test_foreign.DummyForeignVcsDirFormat())
143
wt = foreign_branch.create_checkout("local")
145
with open('local/hello', 'w') as f:
146
f.write('hello world')
148
revid = wt.commit(message='add hello', lossy=True,
149
timestamp=1302659388, timezone=0)
150
self.assertEqual(b'dummy-v1:1302659388-0-0', revid)
151
self.assertEqual(b'dummy-v1:1302659388-0-0',
152
foreign_branch.last_revision())
153
self.assertEqual(b'dummy-v1:1302659388-0-0',
154
wt.branch.last_revision())
110
156
def test_missing_commit(self):
111
157
"""Test a commit with a missing file"""
112
158
wt = self.make_branch_and_tree('.')
114
file('hello', 'w').write('hello world')
115
wt.add(['hello'], ['hello-id'])
160
with open('hello', 'w') as f:
161
f.write('hello world')
162
wt.add(['hello'], [b'hello-id'])
116
163
wt.commit(message='add hello')
118
165
os.remove('hello')
119
wt.commit('removed hello', rev_id='rev2')
166
reporter = CapturingReporter()
167
wt.commit('removed hello', rev_id=b'rev2', reporter=reporter)
169
[('missing', u'hello'), ('deleted', u'hello')],
121
tree = b.repository.revision_tree('rev2')
122
self.assertFalse(tree.has_id('hello-id'))
172
tree = b.repository.revision_tree(b'rev2')
173
self.assertFalse(tree.has_id(b'hello-id'))
124
175
def test_partial_commit_move(self):
125
176
"""Test a partial commit where a file was renamed but not committed.
165
217
message='empty tree',
166
218
allow_pointless=False)
167
219
wt.commit(message='empty tree', allow_pointless=True)
168
self.assertEquals(b.revno(), 2)
220
self.assertEqual(b.revno(), 2)
170
222
def test_selective_delete(self):
171
223
"""Selective commit in tree with deletions"""
172
224
wt = self.make_branch_and_tree('.')
174
file('hello', 'w').write('hello')
175
file('buongia', 'w').write('buongia')
226
with open('hello', 'w') as f:
228
with open('buongia', 'w') as f:
176
230
wt.add(['hello', 'buongia'],
177
['hello-id', 'buongia-id'])
231
[b'hello-id', b'buongia-id'])
178
232
wt.commit(message='add files',
233
rev_id=b'test@rev-1')
181
235
os.remove('hello')
182
file('buongia', 'w').write('new text')
236
with open('buongia', 'w') as f:
183
238
wt.commit(message='update text',
184
specific_files=['buongia'],
185
allow_pointless=False,
239
specific_files=['buongia'],
240
allow_pointless=False,
241
rev_id=b'test@rev-2')
188
243
wt.commit(message='remove hello',
189
specific_files=['hello'],
190
allow_pointless=False,
244
specific_files=['hello'],
245
allow_pointless=False,
246
rev_id=b'test@rev-3')
193
eq = self.assertEquals
248
eq = self.assertEqual
196
tree2 = b.repository.revision_tree('test@rev-2')
251
tree2 = b.repository.revision_tree(b'test@rev-2')
197
252
tree2.lock_read()
198
253
self.addCleanup(tree2.unlock)
199
254
self.assertTrue(tree2.has_filename('hello'))
200
self.assertEquals(tree2.get_file_text('hello-id'), 'hello')
201
self.assertEquals(tree2.get_file_text('buongia-id'), 'new text')
255
self.assertEqual(tree2.get_file_text('hello'), b'hello')
256
self.assertEqual(tree2.get_file_text('buongia'), b'new text')
203
tree3 = b.repository.revision_tree('test@rev-3')
258
tree3 = b.repository.revision_tree(b'test@rev-3')
204
259
tree3.lock_read()
205
260
self.addCleanup(tree3.unlock)
206
261
self.assertFalse(tree3.has_filename('hello'))
207
self.assertEquals(tree3.get_file_text('buongia-id'), 'new text')
262
self.assertEqual(tree3.get_file_text('buongia'), b'new text')
209
264
def test_commit_rename(self):
210
265
"""Test commit of a revision where a file is renamed."""
211
266
tree = self.make_branch_and_tree('.')
213
268
self.build_tree(['hello'], line_endings='binary')
214
tree.add(['hello'], ['hello-id'])
215
tree.commit(message='one', rev_id='test@rev-1', allow_pointless=False)
269
tree.add(['hello'], [b'hello-id'])
270
tree.commit(message='one', rev_id=b'test@rev-1', allow_pointless=False)
217
272
tree.rename_one('hello', 'fruity')
218
tree.commit(message='renamed', rev_id='test@rev-2', allow_pointless=False)
273
tree.commit(message='renamed', rev_id=b'test@rev-2',
274
allow_pointless=False)
220
eq = self.assertEquals
221
tree1 = b.repository.revision_tree('test@rev-1')
276
eq = self.assertEqual
277
tree1 = b.repository.revision_tree(b'test@rev-1')
222
278
tree1.lock_read()
223
279
self.addCleanup(tree1.unlock)
224
eq(tree1.id2path('hello-id'), 'hello')
225
eq(tree1.get_file_text('hello-id'), 'contents of hello\n')
280
eq(tree1.id2path(b'hello-id'), 'hello')
281
eq(tree1.get_file_text('hello'), b'contents of hello\n')
226
282
self.assertFalse(tree1.has_filename('fruity'))
227
self.check_inventory_shape(tree1.inventory, ['hello'])
228
ie = tree1.inventory['hello-id']
229
eq(ie.revision, 'test@rev-1')
283
self.check_tree_shape(tree1, ['hello'])
284
eq(tree1.get_file_revision('hello'), b'test@rev-1')
231
tree2 = b.repository.revision_tree('test@rev-2')
286
tree2 = b.repository.revision_tree(b'test@rev-2')
232
287
tree2.lock_read()
233
288
self.addCleanup(tree2.unlock)
234
eq(tree2.id2path('hello-id'), 'fruity')
235
eq(tree2.get_file_text('hello-id'), 'contents of hello\n')
236
self.check_inventory_shape(tree2.inventory, ['fruity'])
237
ie = tree2.inventory['hello-id']
238
eq(ie.revision, 'test@rev-2')
289
eq(tree2.id2path(b'hello-id'), 'fruity')
290
eq(tree2.get_file_text('fruity'), b'contents of hello\n')
291
self.check_tree_shape(tree2, ['fruity'])
292
eq(tree2.get_file_revision('fruity'), b'test@rev-2')
240
294
def test_reused_rev_id(self):
241
295
"""Test that a revision id cannot be reused in a branch"""
242
296
wt = self.make_branch_and_tree('.')
244
wt.commit('initial', rev_id='test@rev-1', allow_pointless=True)
298
wt.commit('initial', rev_id=b'test@rev-1', allow_pointless=True)
245
299
self.assertRaises(Exception,
247
301
message='reused id',
302
rev_id=b'test@rev-1',
249
303
allow_pointless=True)
251
305
def test_commit_move(self):
252
306
"""Test commit of revisions with moved files and directories"""
253
eq = self.assertEquals
307
eq = self.assertEqual
254
308
wt = self.make_branch_and_tree('.')
257
311
self.build_tree(['hello', 'a/', 'b/'])
258
wt.add(['hello', 'a', 'b'], ['hello-id', 'a-id', 'b-id'])
312
wt.add(['hello', 'a', 'b'], [b'hello-id', b'a-id', b'b-id'])
259
313
wt.commit('initial', rev_id=r1, allow_pointless=False)
260
314
wt.move(['hello'], 'a')
262
316
wt.commit('two', rev_id=r2, allow_pointless=False)
265
self.check_inventory_shape(wt.read_working_inventory(),
266
['a/', 'a/hello', 'b/'])
319
self.check_tree_shape(wt, ['a/', 'a/hello', 'b/'])
270
323
wt.move(['b'], 'a')
272
325
wt.commit('three', rev_id=r3, allow_pointless=False)
275
self.check_inventory_shape(wt.read_working_inventory(),
276
['a/', 'a/hello', 'a/b/'])
277
self.check_inventory_shape(b.repository.get_inventory(r3),
278
['a/', 'a/hello', 'a/b/'])
328
self.check_tree_shape(wt,
329
['a/', 'a/hello', 'a/b/'])
330
self.check_tree_shape(b.repository.revision_tree(r3),
331
['a/', 'a/hello', 'a/b/'])
282
335
wt.move(['a/hello'], 'a/b')
284
337
wt.commit('four', rev_id=r4, allow_pointless=False)
287
self.check_inventory_shape(wt.read_working_inventory(),
288
['a/', 'a/b/hello', 'a/b/'])
340
self.check_tree_shape(wt, ['a/', 'a/b/hello', 'a/b/'])
292
344
inv = b.repository.get_inventory(r4)
293
eq(inv['hello-id'].revision, r4)
294
eq(inv['a-id'].revision, r1)
295
eq(inv['b-id'].revision, r3)
345
eq(inv.get_entry(b'hello-id').revision, r4)
346
eq(inv.get_entry(b'a-id').revision, r1)
347
eq(inv.get_entry(b'b-id').revision, r3)
297
349
def test_removed_commit(self):
298
350
"""Commit with a removed file"""
299
351
wt = self.make_branch_and_tree('.')
301
file('hello', 'w').write('hello world')
302
wt.add(['hello'], ['hello-id'])
353
with open('hello', 'w') as f:
354
f.write('hello world')
355
wt.add(['hello'], [b'hello-id'])
303
356
wt.commit(message='add hello')
304
357
wt.remove('hello')
305
wt.commit('removed hello', rev_id='rev2')
358
wt.commit('removed hello', rev_id=b'rev2')
307
tree = b.repository.revision_tree('rev2')
308
self.assertFalse(tree.has_id('hello-id'))
360
tree = b.repository.revision_tree(b'rev2')
361
self.assertFalse(tree.has_id(b'hello-id'))
310
363
def test_committed_ancestry(self):
311
364
"""Test commit appends revisions to ancestry."""
315
368
for i in range(4):
316
file('hello', 'w').write((str(i) * 4) + '\n')
369
with open('hello', 'w') as f:
370
f.write((str(i) * 4) + '\n')
318
wt.add(['hello'], ['hello-id'])
319
rev_id = 'test@rev-%d' % (i+1)
372
wt.add(['hello'], [b'hello-id'])
373
rev_id = b'test@rev-%d' % (i + 1)
320
374
rev_ids.append(rev_id)
321
wt.commit(message='rev %d' % (i+1),
323
eq = self.assertEquals
324
eq(b.revision_history(), rev_ids)
375
wt.commit(message='rev %d' % (i + 1),
325
377
for i in range(4):
326
anc = b.repository.get_ancestry(rev_ids[i])
327
eq(anc, [None] + rev_ids[:i+1])
378
self.assertThat(rev_ids[:i + 1],
379
MatchesAncestry(b.repository, rev_ids[i]))
329
381
def test_commit_new_subdir_child_selective(self):
330
382
wt = self.make_branch_and_tree('.')
332
384
self.build_tree(['dir/', 'dir/file1', 'dir/file2'])
333
385
wt.add(['dir', 'dir/file1', 'dir/file2'],
334
['dirid', 'file1id', 'file2id'])
335
wt.commit('dir/file1', specific_files=['dir/file1'], rev_id='1')
336
inv = b.repository.get_inventory('1')
337
self.assertEqual('1', inv['dirid'].revision)
338
self.assertEqual('1', inv['file1id'].revision)
386
[b'dirid', b'file1id', b'file2id'])
387
wt.commit('dir/file1', specific_files=['dir/file1'], rev_id=b'1')
388
inv = b.repository.get_inventory(b'1')
389
self.assertEqual(b'1', inv.get_entry(b'dirid').revision)
390
self.assertEqual(b'1', inv.get_entry(b'file1id').revision)
339
391
# FIXME: This should raise a KeyError I think, rbc20051006
340
self.assertRaises(BzrError, inv.__getitem__, 'file2id')
392
self.assertRaises(BzrError, inv.get_entry, b'file2id')
342
394
def test_strict_commit(self):
343
395
"""Try and commit with unknown files and strict = True, should fail."""
344
from bzrlib.errors import StrictCommitFailed
396
from ..errors import StrictCommitFailed
345
397
wt = self.make_branch_and_tree('.')
347
file('hello', 'w').write('hello world')
399
with open('hello', 'w') as f:
400
f.write('hello world')
349
file('goodbye', 'w').write('goodbye cruel world!')
402
with open('goodbye', 'w') as f:
403
f.write('goodbye cruel world!')
350
404
self.assertRaises(StrictCommitFailed, wt.commit,
351
message='add hello but not goodbye', strict=True)
405
message='add hello but not goodbye', strict=True)
353
407
def test_strict_commit_without_unknowns(self):
354
408
"""Try and commit with no unknown files and strict = True,
356
from bzrlib.errors import StrictCommitFailed
357
410
wt = self.make_branch_and_tree('.')
359
file('hello', 'w').write('hello world')
412
with open('hello', 'w') as f:
413
f.write('hello world')
361
415
wt.commit(message='add hello', strict=True)
375
431
wt = self.make_branch_and_tree('.')
377
file('hello', 'w').write('hello world')
433
with open('hello', 'w') as f:
434
f.write('hello world')
379
436
wt.commit(message='add hello', strict=False)
381
438
def test_signed_commit(self):
383
import bzrlib.commit as commit
384
oldstrategy = bzrlib.gpg.GPGStrategy
440
import breezy.commit as commit
441
oldstrategy = breezy.gpg.GPGStrategy
385
442
wt = self.make_branch_and_tree('.')
386
443
branch = wt.branch
387
wt.commit("base", allow_pointless=True, rev_id='A')
388
self.failIf(branch.repository.has_signature_for_revision_id('A'))
444
wt.commit("base", allow_pointless=True, rev_id=b'A')
445
self.assertFalse(branch.repository.has_signature_for_revision_id(b'A'))
390
from bzrlib.testament import Testament
447
from ..bzr.testament import Testament
391
448
# monkey patch gpg signing mechanism
392
bzrlib.gpg.GPGStrategy = bzrlib.gpg.LoopbackGPGStrategy
393
commit.Commit(config=MustSignConfig(branch)).commit(message="base",
394
allow_pointless=True,
449
breezy.gpg.GPGStrategy = breezy.gpg.LoopbackGPGStrategy
450
conf = config.MemoryStack(b'''
451
create_signatures=always
453
commit.Commit(config_stack=conf).commit(
454
message="base", allow_pointless=True, rev_id=b'B',
398
return bzrlib.gpg.LoopbackGPGStrategy(None).sign(text)
458
return breezy.gpg.LoopbackGPGStrategy(None).sign(
459
text, breezy.gpg.MODE_CLEAR)
399
460
self.assertEqual(sign(Testament.from_revision(branch.repository,
400
'B').as_short_text()),
401
branch.repository.get_signature_text('B'))
461
b'B').as_short_text()),
462
branch.repository.get_signature_text(b'B'))
403
bzrlib.gpg.GPGStrategy = oldstrategy
464
breezy.gpg.GPGStrategy = oldstrategy
405
466
def test_commit_failed_signature(self):
407
import bzrlib.commit as commit
408
oldstrategy = bzrlib.gpg.GPGStrategy
468
import breezy.commit as commit
469
oldstrategy = breezy.gpg.GPGStrategy
409
470
wt = self.make_branch_and_tree('.')
410
471
branch = wt.branch
411
wt.commit("base", allow_pointless=True, rev_id='A')
412
self.failIf(branch.repository.has_signature_for_revision_id('A'))
472
wt.commit("base", allow_pointless=True, rev_id=b'A')
473
self.assertFalse(branch.repository.has_signature_for_revision_id(b'A'))
414
from bzrlib.testament import Testament
415
475
# monkey patch gpg signing mechanism
416
bzrlib.gpg.GPGStrategy = bzrlib.gpg.DisabledGPGStrategy
417
config = MustSignConfig(branch)
418
self.assertRaises(SigningFailed,
419
commit.Commit(config=config).commit,
476
breezy.gpg.GPGStrategy = breezy.gpg.DisabledGPGStrategy
477
conf = config.MemoryStack(b'''
478
create_signatures=always
480
self.assertRaises(breezy.gpg.SigningFailed,
481
commit.Commit(config_stack=conf).commit,
421
483
allow_pointless=True,
424
486
branch = Branch.open(self.get_url('.'))
425
self.assertEqual(branch.revision_history(), ['A'])
426
self.failIf(branch.repository.has_revision('B'))
487
self.assertEqual(branch.last_revision(), b'A')
488
self.assertFalse(branch.repository.has_revision(b'B'))
428
bzrlib.gpg.GPGStrategy = oldstrategy
490
breezy.gpg.GPGStrategy = oldstrategy
430
492
def test_commit_invokes_hooks(self):
431
import bzrlib.commit as commit
493
import breezy.commit as commit
432
494
wt = self.make_branch_and_tree('.')
433
495
branch = wt.branch
435
498
def called(branch, rev_id):
436
499
calls.append('called')
437
bzrlib.ahook = called
500
breezy.ahook = called
439
config = BranchWithHooks(branch)
440
commit.Commit(config=config).commit(
442
allow_pointless=True,
443
rev_id='A', working_tree = wt)
502
conf = config.MemoryStack(b'post_commit=breezy.ahook breezy.ahook')
503
commit.Commit(config_stack=conf).commit(
504
message="base", allow_pointless=True, rev_id=b'A',
444
506
self.assertEqual(['called', 'called'], calls)
448
510
def test_commit_object_doesnt_set_nick(self):
449
511
# using the Commit object directly does not set the branch nick.
450
512
wt = self.make_branch_and_tree('.')
452
514
c.commit(working_tree=wt, message='empty tree', allow_pointless=True)
453
self.assertEquals(wt.branch.revno(), 1)
515
self.assertEqual(wt.branch.revno(), 1)
454
516
self.assertEqual({},
455
517
wt.branch.repository.get_revision(
456
wt.branch.last_revision()).properties)
518
wt.branch.last_revision()).properties)
458
520
def test_safe_master_lock(self):
459
521
os.mkdir('master')
617
680
self.requireFeature(SymlinkFeature)
618
681
tree = self.make_branch_and_tree('.')
619
682
os.symlink('target', 'name')
620
tree.add('name', 'a-file-id')
683
tree.add('name', b'a-file-id')
621
684
tree.commit('Added a symlink')
622
self.assertBasisTreeKind('symlink', tree, 'a-file-id')
685
self.assertBasisTreeKind('symlink', tree, 'name')
624
687
os.unlink('name')
625
688
self.build_tree(['name'])
626
689
tree.commit('Changed symlink to file')
627
self.assertBasisTreeKind('file', tree, 'a-file-id')
690
self.assertBasisTreeKind('file', tree, 'name')
629
692
os.unlink('name')
630
693
os.symlink('target', 'name')
631
694
tree.commit('file to symlink')
632
self.assertBasisTreeKind('symlink', tree, 'a-file-id')
695
self.assertBasisTreeKind('symlink', tree, 'name')
634
697
os.unlink('name')
636
699
tree.commit('symlink to directory')
637
self.assertBasisTreeKind('directory', tree, 'a-file-id')
700
self.assertBasisTreeKind('directory', tree, 'name')
640
703
os.symlink('target', 'name')
641
704
tree.commit('directory to symlink')
642
self.assertBasisTreeKind('symlink', tree, 'a-file-id')
705
self.assertBasisTreeKind('symlink', tree, 'name')
644
707
# prepare for directory <-> file tests
645
708
os.unlink('name')
647
710
tree.commit('symlink to directory')
648
self.assertBasisTreeKind('directory', tree, 'a-file-id')
711
self.assertBasisTreeKind('directory', tree, 'name')
651
714
self.build_tree(['name'])
652
715
tree.commit('Changed directory to file')
653
self.assertBasisTreeKind('file', tree, 'a-file-id')
716
self.assertBasisTreeKind('file', tree, 'name')
655
718
os.unlink('name')
657
720
tree.commit('file to directory')
658
self.assertBasisTreeKind('directory', tree, 'a-file-id')
721
self.assertBasisTreeKind('directory', tree, 'name')
660
723
def test_commit_unversioned_specified(self):
661
724
"""Commit should raise if specified files isn't in basis or worktree"""
774
838
def test_multiple_authors(self):
775
839
tree = self.make_branch_and_tree('foo')
776
840
rev_id = tree.commit('commit 1',
777
authors=['John Doe <jdoe@example.com>',
778
'Jane Rey <jrey@example.com>'])
841
authors=['John Doe <jdoe@example.com>',
842
'Jane Rey <jrey@example.com>'])
779
843
rev = tree.branch.repository.get_revision(rev_id)
780
844
self.assertEqual('John Doe <jdoe@example.com>\n'
781
'Jane Rey <jrey@example.com>', rev.properties['authors'])
845
'Jane Rey <jrey@example.com>', rev.properties['authors'])
782
846
self.assertFalse('author' in rev.properties)
784
def test_author_and_authors_incompatible(self):
785
tree = self.make_branch_and_tree('foo')
786
self.assertRaises(AssertionError, tree.commit, 'commit 1',
787
authors=['John Doe <jdoe@example.com>',
788
'Jane Rey <jrey@example.com>'],
789
author="Jack Me <jme@example.com>")
791
848
def test_author_with_newline_rejected(self):
792
849
tree = self.make_branch_and_tree('foo')
793
850
self.assertRaises(AssertionError, tree.commit, 'commit 1',
794
authors=['John\nDoe <jdoe@example.com>'])
851
authors=['John\nDoe <jdoe@example.com>'])
796
853
def test_commit_with_checkout_and_branch_sharing_repo(self):
797
854
repo = self.make_repository('repo', shared=True)
798
855
# make_branch_and_tree ignores shared repos
799
branch = bzrdir.BzrDir.create_branch_convenience('repo/branch')
856
branch = controldir.ControlDir.create_branch_convenience('repo/branch')
800
857
tree2 = branch.create_checkout('repo/tree2')
801
tree2.commit('message', rev_id='rev1')
802
self.assertTrue(tree2.branch.repository.has_revision('rev1'))
858
tree2.commit('message', rev_id=b'rev1')
859
self.assertTrue(tree2.branch.repository.has_revision(b'rev1'))
862
class FilterExcludedTests(TestCase):
864
def test_add_file_not_excluded(self):
866
('fid', (None, 'newpath'),
867
0, (False, False), ('pid', 'pid'), ('newpath', 'newpath'),
868
('file', 'file'), (True, True))]
869
self.assertEqual(changes, list(
870
filter_excluded(changes, ['otherpath'])))
872
def test_add_file_excluded(self):
874
('fid', (None, 'newpath'),
875
0, (False, False), ('pid', 'pid'), ('newpath', 'newpath'),
876
('file', 'file'), (True, True))]
877
self.assertEqual([], list(filter_excluded(changes, ['newpath'])))
879
def test_delete_file_excluded(self):
881
('fid', ('somepath', None),
882
0, (False, None), ('pid', None), ('newpath', None),
883
('file', None), (True, None))]
884
self.assertEqual([], list(filter_excluded(changes, ['somepath'])))
886
def test_move_from_or_to_excluded(self):
888
('fid', ('oldpath', 'newpath'),
889
0, (False, False), ('pid', 'pid'), ('oldpath', 'newpath'),
890
('file', 'file'), (True, True))]
891
self.assertEqual([], list(filter_excluded(changes, ['oldpath'])))
892
self.assertEqual([], list(filter_excluded(changes, ['newpath'])))