/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/shelf_ui.py

  • Committer: John Arbash Meinel
  • Date: 2009-12-02 23:09:40 UTC
  • mfrom: (4853.1.1 whitespace)
  • mto: This revision was merged to the branch mainline in revision 4856.
  • Revision ID: john@arbash-meinel.com-20091202230940-7n2aydoxngdqxzld
Strip trailing whitespace from doc files by Patrick Regan.

Resolve one small conflict with another doc edit.
Also, revert the changes to all the .pdf and .png files. We shouldn't
be touching them as they are pure-binary files.

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
22
22
 
23
23
from bzrlib import (
24
24
    builtins,
 
25
    commands,
25
26
    delta,
26
27
    diff,
27
28
    errors,
382
383
    """Unshelve changes into a working tree."""
383
384
 
384
385
    @classmethod
385
 
    def from_args(klass, shelf_id=None, action='apply', directory='.',
386
 
                  write_diff_to=None):
 
386
    def from_args(klass, shelf_id=None, action='apply', directory='.'):
387
387
        """Create an unshelver from commandline arguments.
388
388
 
389
 
        The returned shelver will have a tree that is locked and should
 
389
        The returned shelver wil have a tree that is locked and should
390
390
        be unlocked.
391
391
 
392
392
        :param shelf_id: Integer id of the shelf, as a string.
393
393
        :param action: action to perform.  May be 'apply', 'dry-run',
394
 
            'delete', 'preview'.
 
394
            'delete'.
395
395
        :param directory: The directory to unshelve changes into.
396
 
        :param write_diff_to: See Unshelver.__init__().
397
396
        """
398
397
        tree, path = workingtree.WorkingTree.open_containing(directory)
399
398
        tree.lock_tree_write()
408
407
                shelf_id = manager.last_shelf()
409
408
                if shelf_id is None:
410
409
                    raise errors.BzrCommandError('No changes are shelved.')
 
410
                trace.note('Unshelving changes with id "%d".' % shelf_id)
411
411
            apply_changes = True
412
412
            delete_shelf = True
413
413
            read_shelf = True
414
 
            show_diff = False
415
414
            if action == 'dry-run':
416
415
                apply_changes = False
417
416
                delete_shelf = False
418
 
            elif action == 'preview':
419
 
                apply_changes = False
420
 
                delete_shelf = False
421
 
                show_diff = True
422
 
            elif action == 'delete-only':
 
417
            if action == 'delete-only':
423
418
                apply_changes = False
424
419
                read_shelf = False
425
 
            elif action == 'keep':
426
 
                apply_changes = True
427
 
                delete_shelf = False
428
420
        except:
429
421
            tree.unlock()
430
422
            raise
431
423
        return klass(tree, manager, shelf_id, apply_changes, delete_shelf,
432
 
                     read_shelf, show_diff, write_diff_to)
 
424
                     read_shelf)
433
425
 
434
426
    def __init__(self, tree, manager, shelf_id, apply_changes=True,
435
 
                 delete_shelf=True, read_shelf=True, show_diff=False,
436
 
                 write_diff_to=None):
 
427
                 delete_shelf=True, read_shelf=True):
437
428
        """Constructor.
438
429
 
439
430
        :param tree: The working tree to unshelve into.
443
434
            working tree.
444
435
        :param delete_shelf: If True, delete the changes from the shelf.
445
436
        :param read_shelf: If True, read the changes from the shelf.
446
 
        :param show_diff: If True, show the diff that would result from
447
 
            unshelving the changes.
448
 
        :param write_diff_to: A file-like object where the diff will be
449
 
            written to. If None, ui.ui_factory.make_output_stream() will
450
 
            be used.
451
437
        """
452
438
        self.tree = tree
453
439
        manager = tree.get_shelf_manager()
456
442
        self.apply_changes = apply_changes
457
443
        self.delete_shelf = delete_shelf
458
444
        self.read_shelf = read_shelf
459
 
        self.show_diff = show_diff
460
 
        self.write_diff_to = write_diff_to
461
445
 
462
446
    def run(self):
463
447
        """Perform the unshelving operation."""
465
449
        cleanups = [self.tree.unlock]
466
450
        try:
467
451
            if self.read_shelf:
468
 
                trace.note('Using changes with id "%d".' % self.shelf_id)
469
452
                unshelver = self.manager.get_unshelver(self.shelf_id)
470
453
                cleanups.append(unshelver.finalize)
471
454
                if unshelver.message is not None:
472
455
                    trace.note('Message: %s' % unshelver.message)
473
456
                change_reporter = delta._ChangeReporter()
474
 
                merger = unshelver.make_merger(None)
475
 
                merger.change_reporter = change_reporter
476
 
                if self.apply_changes:
477
 
                    merger.do_merge()
478
 
                elif self.show_diff:
479
 
                    self.write_diff(merger)
480
 
                else:
481
 
                    self.show_changes(merger)
 
457
                task = ui.ui_factory.nested_progress_bar()
 
458
                try:
 
459
                    merger = unshelver.make_merger(task)
 
460
                    merger.change_reporter = change_reporter
 
461
                    if self.apply_changes:
 
462
                        merger.do_merge()
 
463
                    else:
 
464
                        self.show_changes(merger)
 
465
                finally:
 
466
                    task.finished()
482
467
            if self.delete_shelf:
483
468
                self.manager.delete_shelf(self.shelf_id)
484
 
                trace.note('Deleted changes with id "%d".' % self.shelf_id)
485
469
        finally:
486
470
            for cleanup in reversed(cleanups):
487
471
                cleanup()
488
472
 
489
 
    def write_diff(self, merger):
490
 
        """Write this operation's diff to self.write_diff_to."""
491
 
        tree_merger = merger.make_merger()
492
 
        tt = tree_merger.make_preview_transform()
493
 
        new_tree = tt.get_preview_tree()
494
 
        if self.write_diff_to is None:
495
 
            self.write_diff_to = ui.ui_factory.make_output_stream()
496
 
        diff.show_diff_trees(merger.this_tree, new_tree, self.write_diff_to)
497
 
        tt.finalize()
498
 
 
499
473
    def show_changes(self, merger):
500
474
        """Show the changes that this operation specifies."""
501
475
        tree_merger = merger.make_merger()