~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/shelf_ui.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2011-08-17 18:13:57 UTC
  • mfrom: (5268.7.29 transport-segments)
  • Revision ID: pqm@pqm.ubuntu.com-20110817181357-y5q5eth1hk8bl3om
(jelmer) Allow specifying the colocated branch to use in the branch URL,
 and retrieving the branch name using ControlDir._get_selected_branch.
 (Jelmer Vernooij)

Show diffs side-by-side

added added

removed removed

Lines of Context:
154
154
 
155
155
    @classmethod
156
156
    def from_args(klass, diff_writer, revision=None, all=False, file_list=None,
157
 
                  message=None, directory='.', destroy=False):
 
157
                  message=None, directory=None, destroy=False):
158
158
        """Create a shelver from commandline arguments.
159
159
 
160
160
        The returned shelver wil have a work_tree that is locked and should
168
168
        :param destroy: Change the working tree without storing the shelved
169
169
            changes.
170
170
        """
 
171
        if directory is None:
 
172
            directory = u'.'
 
173
        elif file_list:
 
174
            file_list = [osutils.pathjoin(directory, f) for f in file_list]
171
175
        tree, path = workingtree.WorkingTree.open_containing(directory)
172
176
        # Ensure that tree is locked for the lifetime of target_tree, as
173
177
        # target tree may be reading from the same dirstate.
175
179
        try:
176
180
            target_tree = builtins._get_one_revision_tree('shelf2', revision,
177
181
                tree.branch, tree)
178
 
            files = builtins.safe_relpath_files(tree, file_list)
 
182
            files = tree.safe_relpath_files(file_list)
179
183
            return klass(tree, target_tree, diff_writer, all, all, files,
180
184
                         message, destroy)
181
185
        finally:
241
245
            new_tree = self.work_tree
242
246
        old_path = old_tree.id2path(file_id)
243
247
        new_path = new_tree.id2path(file_id)
244
 
        text_differ = diff.DiffText(old_tree, new_tree, diff_file)
 
248
        text_differ = diff.DiffText(old_tree, new_tree, diff_file,
 
249
            path_encoding=osutils.get_terminal_encoding())
245
250
        patch = text_differ.diff(file_id, old_path, new_path, 'file', 'file')
246
251
        diff_file.seek(0)
247
252
        return patches.parse_patch(diff_file)
471
476
                if unshelver.message is not None:
472
477
                    trace.note('Message: %s' % unshelver.message)
473
478
                change_reporter = delta._ChangeReporter()
474
 
                task = ui.ui_factory.nested_progress_bar()
475
 
                try:
476
 
                    merger = unshelver.make_merger(task)
477
 
                    merger.change_reporter = change_reporter
478
 
                    if self.apply_changes:
479
 
                        merger.do_merge()
480
 
                    elif self.show_diff:
481
 
                        self.write_diff(merger)
482
 
                    else:
483
 
                        self.show_changes(merger)
484
 
                finally:
485
 
                    task.finished()
 
479
                merger = unshelver.make_merger(None)
 
480
                merger.change_reporter = change_reporter
 
481
                if self.apply_changes:
 
482
                    merger.do_merge()
 
483
                elif self.show_diff:
 
484
                    self.write_diff(merger)
 
485
                else:
 
486
                    self.show_changes(merger)
486
487
            if self.delete_shelf:
487
488
                self.manager.delete_shelf(self.shelf_id)
488
489
                trace.note('Deleted changes with id "%d".' % self.shelf_id)
496
497
        tt = tree_merger.make_preview_transform()
497
498
        new_tree = tt.get_preview_tree()
498
499
        if self.write_diff_to is None:
499
 
            self.write_diff_to = ui.ui_factory.make_output_stream()
500
 
        diff.show_diff_trees(merger.this_tree, new_tree, self.write_diff_to)
 
500
            self.write_diff_to = ui.ui_factory.make_output_stream(encoding_type='exact')
 
501
        path_encoding = osutils.get_diff_header_encoding()
 
502
        diff.show_diff_trees(merger.this_tree, new_tree, self.write_diff_to,
 
503
            path_encoding=path_encoding)
501
504
        tt.finalize()
502
505
 
503
506
    def show_changes(self, merger):