/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to diff.py

  • Committer: Aaron Bentley
  • Date: 2008-01-15 07:18:53 UTC
  • Revision ID: aaron@aaronbentley.com-20080115071853-eb9ky0iq99prhssk
Get merging working

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
except ImportError:
31
31
    have_gconf = False
32
32
 
33
 
from bzrlib import osutils
 
33
from bzrlib import merge as _mod_merge, osutils, progress, workingtree
34
34
from bzrlib.diff import show_diff_trees, internal_diff
35
35
from bzrlib.errors import NoSuchFile
36
36
from bzrlib.patches import parse_patches
37
37
from bzrlib.trace import warning
38
38
from bzrlib.plugins.gtk.window import Window
 
39
from dialog import error_dialog
 
40
 
 
41
 
 
42
class SelectCancelled(Exception):
 
43
 
 
44
    pass
39
45
 
40
46
 
41
47
class DiffFileView(gtk.ScrolledWindow):
424
430
 
425
431
class MergeDirectiveWindow(DiffWindow):
426
432
 
 
433
    def __init__(self, directive, parent=None):
 
434
        DiffWindow.__init__(self, parent)
 
435
        self._merge_target = None
 
436
        self.directive = directive
 
437
 
427
438
    def _get_button_bar(self):
428
439
        merge_button = gtk.Button('Merge')
429
440
        merge_button.show()
430
441
        merge_button.set_relief(gtk.RELIEF_NONE)
 
442
        merge_button.connect("clicked", self.perform_merge)
 
443
 
431
444
        hbox = gtk.HButtonBox()
432
445
        hbox.set_layout(gtk.BUTTONBOX_START)
433
446
        hbox.pack_start(merge_button, expand=False, fill=True)
434
447
        hbox.show()
435
448
        return hbox
436
449
 
 
450
    def perform_merge(self, window):
 
451
        try:
 
452
            tree = self._get_merge_target()
 
453
        except SelectCancelled:
 
454
            return
 
455
        tree.lock_write()
 
456
        try:
 
457
            try:
 
458
                merger, verified = _mod_merge.Merger.from_mergeable(tree,
 
459
                    self.directive, progress.DummyProgress())
 
460
                merger.check_basis(True)
 
461
                merger.merge_type = _mod_merge.Merge3Merger
 
462
                merger.set_pending()
 
463
                conflict_count = merger.do_merge()
 
464
                self.destroy()
 
465
            except Exception, e:
 
466
                error_dialog('Error', str(e))
 
467
        finally:
 
468
            tree.unlock()
 
469
 
 
470
    def _get_merge_target(self):
 
471
        if self._merge_target is not None:
 
472
            return self._merge_target
 
473
        d = gtk.FileChooserDialog('Merge branch', self,
 
474
                                  gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
 
475
                                  buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
 
476
                                           gtk.STOCK_CANCEL,
 
477
                                           gtk.RESPONSE_CANCEL,))
 
478
        try:
 
479
            result = d.run()
 
480
            if result == gtk.RESPONSE_OK:
 
481
                uri = d.get_current_folder_uri()
 
482
                return workingtree.WorkingTree.open(uri)
 
483
            else:
 
484
                raise SelectCancelled()
 
485
        finally:
 
486
            d.destroy()
 
487
 
437
488
 
438
489
def _iter_changes_to_status(source, target):
439
490
    """Determine the differences between trees.