~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_shelf_ui.py

  • Committer: Danny van Heumen
  • Date: 2010-03-09 21:42:11 UTC
  • mto: (4634.139.5 2.0)
  • mto: This revision was merged to the branch mainline in revision 5160.
  • Revision ID: danny@dannyvanheumen.nl-20100309214211-iqh42x6qcikgd9p3
Reverted now-useless TODO list.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2008, 2009, 2010 Canonical Ltd
 
1
# Copyright (C) 2008 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
18
18
from cStringIO import StringIO
19
19
import os
20
20
import sys
21
 
from textwrap import dedent
22
21
 
23
22
from bzrlib import (
24
23
    errors,
26
25
    revision,
27
26
    tests,
28
27
)
29
 
from bzrlib.tests import script
30
28
 
31
29
 
32
30
class ExpectShelver(shelf_ui.Shelver):
78
76
        tree.lock_tree_write()
79
77
        self.addCleanup(tree.unlock)
80
78
        shelver = ExpectShelver(tree, tree.basis_tree())
81
 
        self.addCleanup(shelver.finalize)
82
79
        e = self.assertRaises(AssertionError, shelver.run)
83
80
        self.assertEqual('Unexpected prompt: Shelve? [yNfq?]', str(e))
84
81
 
87
84
        tree.lock_tree_write()
88
85
        self.addCleanup(tree.unlock)
89
86
        shelver = ExpectShelver(tree, tree.basis_tree())
90
 
        self.addCleanup(shelver.finalize)
91
87
        shelver.expect('foo', 'y')
92
88
        e = self.assertRaises(AssertionError, shelver.run)
93
89
        self.assertEqual('Wrong prompt: Shelve? [yNfq?]', str(e))
97
93
        tree.lock_tree_write()
98
94
        self.addCleanup(tree.unlock)
99
95
        shelver = ExpectShelver(tree, tree.basis_tree())
100
 
        self.addCleanup(shelver.finalize)
101
96
        shelver.expect('Shelve? [yNfq?]', 'n')
102
97
        shelver.expect('Shelve? [yNfq?]', 'n')
103
98
        # No final shelving prompt because no changes were selected
109
104
        tree.lock_tree_write()
110
105
        self.addCleanup(tree.unlock)
111
106
        shelver = ExpectShelver(tree, tree.basis_tree())
112
 
        self.addCleanup(shelver.finalize)
113
107
        shelver.expect('Shelve? [yNfq?]', 'y')
114
108
        shelver.expect('Shelve? [yNfq?]', 'y')
115
109
        shelver.expect('Shelve 2 change(s)? [yNfq?]', 'n')
121
115
        tree.lock_tree_write()
122
116
        self.addCleanup(tree.unlock)
123
117
        shelver = ExpectShelver(tree, tree.basis_tree())
124
 
        self.addCleanup(shelver.finalize)
125
118
        shelver.expect('Shelve? [yNfq?]', 'y')
126
119
        shelver.expect('Shelve? [yNfq?]', 'y')
127
120
        shelver.expect('Shelve 2 change(s)? [yNfq?]', 'y')
133
126
        tree.lock_tree_write()
134
127
        self.addCleanup(tree.unlock)
135
128
        shelver = ExpectShelver(tree, tree.basis_tree())
136
 
        self.addCleanup(shelver.finalize)
137
129
        shelver.expect('Shelve? [yNfq?]', 'y')
138
130
        shelver.expect('Shelve? [yNfq?]', 'n')
139
131
        shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
146
138
        tree.lock_tree_write()
147
139
        self.addCleanup(tree.unlock)
148
140
        shelver = ExpectShelver(tree, tree.basis_tree())
149
 
        self.addCleanup(shelver.finalize)
150
141
        shelver.expect('Shelve binary changes? [yNfq?]', 'y')
151
142
        shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
152
143
        shelver.run()
158
149
        tree.lock_tree_write()
159
150
        self.addCleanup(tree.unlock)
160
151
        shelver = ExpectShelver(tree, tree.basis_tree())
161
 
        self.addCleanup(shelver.finalize)
162
152
        shelver.expect('Shelve renaming "foo" => "bar"? [yNfq?]', 'y')
163
153
        shelver.expect('Shelve? [yNfq?]', 'y')
164
154
        shelver.expect('Shelve? [yNfq?]', 'y')
172
162
        tree.lock_tree_write()
173
163
        self.addCleanup(tree.unlock)
174
164
        shelver = ExpectShelver(tree, tree.basis_tree())
175
 
        self.addCleanup(shelver.finalize)
176
165
        shelver.expect('Shelve removing file "foo"? [yNfq?]', 'y')
177
166
        shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
178
167
        shelver.run()
186
175
        tree.lock_tree_write()
187
176
        self.addCleanup(tree.unlock)
188
177
        shelver = ExpectShelver(tree, tree.basis_tree())
189
 
        self.addCleanup(shelver.finalize)
190
178
        shelver.expect('Shelve adding file "foo"? [yNfq?]', 'y')
191
179
        shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
192
180
        shelver.run()
199
187
        tree.lock_tree_write()
200
188
        self.addCleanup(tree.unlock)
201
189
        shelver = ExpectShelver(tree, tree.basis_tree())
202
 
        self.addCleanup(shelver.finalize)
203
190
        shelver.expect('Shelve changing "foo" from file to directory? [yNfq?]',
204
191
                       'y')
205
192
        shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
215
202
        tree.lock_tree_write()
216
203
        self.addCleanup(tree.unlock)
217
204
        shelver = ExpectShelver(tree, tree.basis_tree())
218
 
        self.addCleanup(shelver.finalize)
219
205
        shelver.expect('Shelve changing target of "baz" from "bar" to '
220
206
                '"vax"? [yNfq?]', 'y')
221
207
        shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
227
213
        tree.lock_tree_write()
228
214
        self.addCleanup(tree.unlock)
229
215
        shelver = ExpectShelver(tree, tree.basis_tree())
230
 
        self.addCleanup(shelver.finalize)
231
216
        shelver.expect('Shelve? [yNfq?]', 'f')
232
217
        shelver.expect('Shelve 2 change(s)? [yNfq?]', 'y')
233
218
        shelver.run()
238
223
        tree.lock_tree_write()
239
224
        self.addCleanup(tree.unlock)
240
225
        shelver = ExpectShelver(tree, tree.basis_tree())
241
 
        self.addCleanup(shelver.finalize)
242
226
        shelver.expect('Shelve? [yNfq?]', 'q')
243
227
        self.assertRaises(errors.UserAbort, shelver.run)
244
228
        self.assertFileEqual(LINES_ZY, 'tree/foo')
250
234
        try:
251
235
            shelver.run()
252
236
        finally:
253
 
            shelver.finalize()
 
237
            shelver.work_tree.unlock()
254
238
        self.assertFileEqual(LINES_AJ, 'tree/foo')
255
239
 
256
240
    def test_shelve_filename(self):
260
244
        tree.lock_tree_write()
261
245
        self.addCleanup(tree.unlock)
262
246
        shelver = ExpectShelver(tree, tree.basis_tree(), file_list=['bar'])
263
 
        self.addCleanup(shelver.finalize)
264
247
        shelver.expect('Shelve adding file "bar"? [yNfq?]', 'y')
265
248
        shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
266
249
        shelver.run()
270
253
        tree.lock_tree_write()
271
254
        self.addCleanup(tree.unlock)
272
255
        shelver = ExpectShelver(tree, tree.basis_tree())
273
 
        self.addCleanup(shelver.finalize)
274
256
        shelver.expect('Shelve? [yNfq?]', '?')
275
257
        shelver.expect('Shelve? [(y)es, (N)o, (f)inish, or (q)uit]', 'f')
276
258
        shelver.expect('Shelve 2 change(s)? [yNfq?]', 'y')
277
259
        shelver.run()
278
260
 
279
 
    def test_shelve_destroy(self):
 
261
    def test_shelve_distroy(self):
280
262
        tree = self.create_shelvable_tree()
281
263
        shelver = shelf_ui.Shelver.from_args(sys.stdout, all=True,
282
264
                                             directory='tree', destroy=True)
283
 
        self.addCleanup(shelver.finalize)
284
 
        shelver.run()
 
265
        try:
 
266
            shelver.run()
 
267
        finally:
 
268
            shelver.work_tree.unlock()
285
269
        self.assertIs(None, tree.get_shelf_manager().last_shelf())
286
270
        self.assertFileEqual(LINES_AJ, 'tree/foo')
287
271
 
292
276
            target = tree.branch.repository.revision_tree(target_revision_id)
293
277
            shelver = shelf_ui.Shelver(tree, target, auto=True,
294
278
                                       auto_apply=True)
295
 
            try:
296
 
                shelver.run()
297
 
            finally:
298
 
                shelver.finalize()
 
279
            shelver.run()
299
280
        finally:
300
281
            tree.unlock()
301
282
 
335
316
        self.addCleanup(tree.unlock)
336
317
        shelver = ExpectShelver(tree, tree.basis_tree(),
337
318
                                reporter=shelf_ui.ApplyReporter())
338
 
        self.addCleanup(shelver.finalize)
339
319
        shelver.expect('Apply change? [yNfq?]', 'n')
340
320
        shelver.expect('Apply change? [yNfq?]', 'n')
341
321
        # No final shelving prompt because no changes were selected
348
328
        self.addCleanup(tree.unlock)
349
329
        shelver = ExpectShelver(tree, tree.basis_tree(),
350
330
                                reporter=shelf_ui.ApplyReporter())
351
 
        self.addCleanup(shelver.finalize)
352
331
        shelver.expect('Apply change? [yNfq?]', 'y')
353
332
        shelver.expect('Apply change? [yNfq?]', 'y')
354
333
        shelver.expect('Apply 2 change(s)? [yNfq?]', 'n')
361
340
        self.addCleanup(tree.unlock)
362
341
        shelver = ExpectShelver(tree, tree.basis_tree(),
363
342
                                reporter=shelf_ui.ApplyReporter())
364
 
        self.addCleanup(shelver.finalize)
365
343
        shelver.expect('Apply change? [yNfq?]', 'y')
366
344
        shelver.expect('Apply change? [yNfq?]', 'y')
367
345
        shelver.expect('Apply 2 change(s)? [yNfq?]', 'y')
375
353
        self.addCleanup(tree.unlock)
376
354
        shelver = ExpectShelver(tree, tree.basis_tree(),
377
355
                                reporter=shelf_ui.ApplyReporter())
378
 
        self.addCleanup(shelver.finalize)
379
356
        shelver.expect('Apply binary changes? [yNfq?]', 'y')
380
357
        shelver.expect('Apply 1 change(s)? [yNfq?]', 'y')
381
358
        shelver.run()
388
365
        self.addCleanup(tree.unlock)
389
366
        shelver = ExpectShelver(tree, tree.basis_tree(),
390
367
                                reporter=shelf_ui.ApplyReporter())
391
 
        self.addCleanup(shelver.finalize)
392
368
        shelver.expect('Rename "bar" => "foo"? [yNfq?]', 'y')
393
369
        shelver.expect('Apply change? [yNfq?]', 'y')
394
370
        shelver.expect('Apply change? [yNfq?]', 'y')
403
379
        self.addCleanup(tree.unlock)
404
380
        shelver = ExpectShelver(tree, tree.basis_tree(),
405
381
                                reporter=shelf_ui.ApplyReporter())
406
 
        self.addCleanup(shelver.finalize)
407
382
        shelver.expect('Add file "foo"? [yNfq?]', 'y')
408
383
        shelver.expect('Apply 1 change(s)? [yNfq?]', 'y')
409
384
        shelver.run()
418
393
        self.addCleanup(tree.unlock)
419
394
        shelver = ExpectShelver(tree, tree.basis_tree(),
420
395
                                reporter=shelf_ui.ApplyReporter())
421
 
        self.addCleanup(shelver.finalize)
422
396
        shelver.expect('Delete file "foo"? [yNfq?]', 'y')
423
397
        shelver.expect('Apply 1 change(s)? [yNfq?]', 'y')
424
398
        shelver.run()
432
406
        self.addCleanup(tree.unlock)
433
407
        shelver = ExpectShelver(tree, tree.basis_tree(),
434
408
                               reporter=shelf_ui.ApplyReporter())
435
 
        self.addCleanup(shelver.finalize)
436
409
        shelver.expect('Change "foo" from directory to a file? [yNfq?]', 'y')
437
410
        shelver.expect('Apply 1 change(s)? [yNfq?]', 'y')
438
411
 
448
421
        self.addCleanup(tree.unlock)
449
422
        shelver = ExpectShelver(tree, tree.basis_tree(),
450
423
                                reporter=shelf_ui.ApplyReporter())
451
 
        self.addCleanup(shelver.finalize)
452
424
        shelver.expect('Change target of "baz" from "vax" to "bar"? [yNfq?]',
453
425
                       'y')
454
426
        shelver.expect('Apply 1 change(s)? [yNfq?]', 'y')
466
438
            tree.add('foo', 'foo-id')
467
439
            tree.commit('added foo')
468
440
            self.build_tree_contents([('tree/foo', LINES_ZY)])
469
 
            shelver = shelf_ui.Shelver(tree, tree.basis_tree(),
470
 
                                       auto_apply=True, auto=True)
471
 
            try:
472
 
                shelver.run()
473
 
            finally:
474
 
                shelver.finalize()
 
441
            shelf_ui.Shelver(tree, tree.basis_tree(), auto_apply=True,
 
442
                             auto=True).run()
475
443
        finally:
476
444
            tree.unlock()
477
445
        return tree
505
473
        self.assertFileEqual(LINES_AJ, 'tree/foo')
506
474
        self.assertEqual(1, tree.get_shelf_manager().last_shelf())
507
475
 
508
 
    def test_unshelve_args_preview(self):
509
 
        tree = self.create_tree_with_shelf()
510
 
        write_diff_to = StringIO()
511
 
        unshelver = shelf_ui.Unshelver.from_args(
512
 
            directory='tree', action='preview', write_diff_to=write_diff_to)
513
 
        try:
514
 
            unshelver.run()
515
 
        finally:
516
 
            unshelver.tree.unlock()
517
 
        # The changes were not unshelved.
518
 
        self.assertFileEqual(LINES_AJ, 'tree/foo')
519
 
        self.assertEqual(1, tree.get_shelf_manager().last_shelf())
520
 
 
521
 
        # But the diff was written to write_diff_to.
522
 
        diff = write_diff_to.getvalue()
523
 
        expected = dedent("""\
524
 
            @@ -1,4 +1,4 @@
525
 
            -a
526
 
            +z
527
 
             b
528
 
             c
529
 
             d
530
 
            @@ -7,4 +7,4 @@
531
 
             g
532
 
             h
533
 
             i
534
 
            -j
535
 
            +y
536
 
 
537
 
            """)
538
 
        self.assertEqualDiff(expected, diff[-len(expected):])
539
 
 
540
476
    def test_unshelve_args_delete_only(self):
541
477
        tree = self.make_branch_and_tree('tree')
542
478
        manager = tree.get_shelf_manager()
564
500
        self.assertRaises(errors.InvalidShelfId,
565
501
            shelf_ui.Unshelver.from_args, directory='tree',
566
502
            action='delete-only', shelf_id='foo')
567
 
 
568
 
 
569
 
class TestUnshelveScripts(TestUnshelver, 
570
 
                          script.TestCaseWithTransportAndScript): 
571
 
 
572
 
    def test_unshelve_messages_keep(self):
573
 
        self.create_tree_with_shelf()
574
 
        self.run_script("""
575
 
$ cd tree
576
 
$ bzr unshelve --keep
577
 
2>Using changes with id "1".
578
 
2> M  foo
579
 
2>All changes applied successfully.
580
 
""")
581
 
 
582
 
    def test_unshelve_messages_delete(self):
583
 
        self.create_tree_with_shelf()
584
 
        self.run_script("""
585
 
$ cd tree
586
 
$ bzr unshelve --delete-only
587
 
2>Deleted changes with id "1".
588
 
""")
589
 
 
590
 
    def test_unshelve_messages_apply(self):
591
 
        self.create_tree_with_shelf()
592
 
        self.run_script("""
593
 
$ cd tree
594
 
$ bzr unshelve --apply
595
 
2>Using changes with id "1".
596
 
2> M  foo
597
 
2>All changes applied successfully.
598
 
2>Deleted changes with id "1".
599
 
""")
600
 
 
601
 
    def test_unshelve_messages_dry_run(self):
602
 
        self.create_tree_with_shelf()
603
 
        self.run_script("""
604
 
$ cd tree
605
 
$ bzr unshelve --dry-run
606
 
2>Using changes with id "1".
607
 
2> M  foo
608
 
""")