/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-02-27 05:23:50 UTC
  • Revision ID: aaron@aaronbentley.com-20080227052350-afzn8ielqy12vl22
Better errors, merge directive saving

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 merge as _mod_merge, osutils, progress, workingtree
 
33
from bzrlib import (
 
34
    merge as _mod_merge,
 
35
    osutils,
 
36
    progress,
 
37
    urlutils,
 
38
    workingtree,
 
39
)
34
40
from bzrlib.diff import show_diff_trees, internal_diff
35
41
from bzrlib.errors import NoSuchFile
36
42
from bzrlib.patches import parse_patches
463
469
 
464
470
class MergeDirectiveWindow(DiffWindow):
465
471
 
466
 
    def __init__(self, directive, parent=None):
467
 
        DiffWindow.__init__(self, parent)
 
472
    def __init__(self, directive, path):
 
473
        DiffWindow.__init__(self, None)
468
474
        self._merge_target = None
469
475
        self.directive = directive
 
476
        self.path = path
470
477
 
471
478
    def _get_button_bar(self):
472
479
        """The button bar has only the Merge button"""
475
482
        merge_button.set_relief(gtk.RELIEF_NONE)
476
483
        merge_button.connect("clicked", self.perform_merge)
477
484
 
 
485
        save_button = gtk.Button('Save')
 
486
        save_button.show()
 
487
        save_button.set_relief(gtk.RELIEF_NONE)
 
488
        save_button.connect("clicked", self.perform_save)
 
489
 
478
490
        hbox = gtk.HButtonBox()
479
491
        hbox.set_layout(gtk.BUTTONBOX_START)
480
492
        hbox.pack_start(merge_button, expand=False, fill=True)
 
493
        hbox.pack_start(save_button, expand=False, fill=True)
481
494
        hbox.show()
482
495
        return hbox
483
496
 
527
540
            d.destroy()
528
541
        return workingtree.WorkingTree.open(uri)
529
542
 
 
543
    def perform_save(self, window):
 
544
        d = gtk.FileChooserDialog('Save As', self,
 
545
                                  gtk.FILE_CHOOSER_ACTION_SAVE,
 
546
                                  buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
 
547
                                           gtk.STOCK_CANCEL,
 
548
                                           gtk.RESPONSE_CANCEL,))
 
549
        d.set_current_name(osutils.basename(self.path))
 
550
        try:
 
551
            try:
 
552
                result = d.run()
 
553
                if result != gtk.RESPONSE_OK:
 
554
                    raise SelectCancelled()
 
555
                uri = d.get_uri()
 
556
            finally:
 
557
                d.destroy()
 
558
        except SelectCancelled:
 
559
            return
 
560
        source = open(self.path, 'rb')
 
561
        try:
 
562
            target = open(urlutils.local_path_from_url(uri), 'wb')
 
563
            try:
 
564
                target.write(source.read())
 
565
            finally:
 
566
                target.close()
 
567
        finally:
 
568
            source.close()
 
569
 
530
570
 
531
571
def _iter_changes_to_status(source, target):
532
572
    """Determine the differences between trees.