[Pkg-bazaar-commits] ./bzr-gtk/unstable r428: Get merging working

Aaron Bentley aaron at aaronbentley.com
Fri Apr 10 07:50:17 UTC 2009


------------------------------------------------------------
revno: 428
committer: Aaron Bentley <aaron at aaronbentley.com>
branch nick: bzr-gtk-meld
timestamp: Tue 2008-01-15 02:18:53 -0500
message:
  Get merging working
modified:
  __init__.py
  diff.py
-------------- next part --------------
=== modified file '__init__.py'
--- a/__init__.py	2008-01-15 05:34:43 +0000
+++ b/__init__.py	2008-01-15 07:18:53 +0000
@@ -686,7 +686,7 @@
             window = DiffWindow()
             window.set_diff_text(path, lines)
         else:
-            window = MergeDirectiveWindow()
+            window = MergeDirectiveWindow(directive)
             window.set_diff_text(path, directive.patch.splitlines(True))
         window.show()
         gtk = self.open_display()

=== modified file 'diff.py'
--- a/diff.py	2008-01-15 05:34:43 +0000
+++ b/diff.py	2008-01-15 07:18:53 +0000
@@ -30,12 +30,18 @@
 except ImportError:
     have_gconf = False
 
-from bzrlib import osutils
+from bzrlib import merge as _mod_merge, osutils, progress, workingtree
 from bzrlib.diff import show_diff_trees, internal_diff
 from bzrlib.errors import NoSuchFile
 from bzrlib.patches import parse_patches
 from bzrlib.trace import warning
 from bzrlib.plugins.gtk.window import Window
+from dialog import error_dialog
+
+
+class SelectCancelled(Exception):
+
+    pass
 
 
 class DiffFileView(gtk.ScrolledWindow):
@@ -424,16 +430,61 @@
 
 class MergeDirectiveWindow(DiffWindow):
 
+    def __init__(self, directive, parent=None):
+        DiffWindow.__init__(self, parent)
+        self._merge_target = None
+        self.directive = directive
+
     def _get_button_bar(self):
         merge_button = gtk.Button('Merge')
         merge_button.show()
         merge_button.set_relief(gtk.RELIEF_NONE)
+        merge_button.connect("clicked", self.perform_merge)
+
         hbox = gtk.HButtonBox()
         hbox.set_layout(gtk.BUTTONBOX_START)
         hbox.pack_start(merge_button, expand=False, fill=True)
         hbox.show()
         return hbox
 
+    def perform_merge(self, window):
+        try:
+            tree = self._get_merge_target()
+        except SelectCancelled:
+            return
+        tree.lock_write()
+        try:
+            try:
+                merger, verified = _mod_merge.Merger.from_mergeable(tree,
+                    self.directive, progress.DummyProgress())
+                merger.check_basis(True)
+                merger.merge_type = _mod_merge.Merge3Merger
+                merger.set_pending()
+                conflict_count = merger.do_merge()
+                self.destroy()
+            except Exception, e:
+                error_dialog('Error', str(e))
+        finally:
+            tree.unlock()
+
+    def _get_merge_target(self):
+        if self._merge_target is not None:
+            return self._merge_target
+        d = gtk.FileChooserDialog('Merge branch', self,
+                                  gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
+                                  buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK,
+                                           gtk.STOCK_CANCEL,
+                                           gtk.RESPONSE_CANCEL,))
+        try:
+            result = d.run()
+            if result == gtk.RESPONSE_OK:
+                uri = d.get_current_folder_uri()
+                return workingtree.WorkingTree.open(uri)
+            else:
+                raise SelectCancelled()
+        finally:
+            d.destroy()
+
 
 def _iter_changes_to_status(source, target):
     """Determine the differences between trees.



More information about the Pkg-bazaar-commits mailing list