[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