hggtk/history: call merge dialog to do merge
authorTK Soh <teekaysoh@yahoo.com>
Sun, 13 Jan 2008 02:41:29 +0000
changeset 626 4a7578a9b0c2
parent 625 e4550fdcdf25
child 627 0fab69ebff34
hggtk/history: call merge dialog to do merge
hggtk/history.py
--- a/hggtk/history.py	Sun Jan 13 02:41:04 2008 +0000
+++ b/hggtk/history.py	Sun Jan 13 02:41:29 2008 +0000
@@ -23,7 +23,7 @@
 from shlib import shell_notify
 from gdialog import *
 from hgcmd import CmdDialog
-
+from merge import MergeDialog
 
 class GLog(GDialog):
     """GTK+ based dialog for displaying repository logs
@@ -636,40 +636,23 @@
     def _merge(self, menuitem):
         row = self.model[self.tree.get_selection().get_selected()[1]]
         rev = long(row[2])
-        self.repo.invalidate()
-        wc = self.repo.workingctx()
-        pl = wc.parents()
-        if len(pl) > 1:
-            Prompt("Unable to merge",
-                    "Outstanding uncommitted merge", self).run()
-            return
-        elif wc.files():
-            Prompt("Unable to merge",
-                    "Outstanding uncommitted changes", self).run()
-            return
-        elif pl[0] == self.repo.changectx(rev):
-            Prompt("Unable to merge",
-                    "Cannot merge a revision with itself", self).run()
-            return
-
-        desc = []
-        log = self.repo.changelog
-        for crev in (pl[0].rev(), rev):
-            changenode = log.node(crev)
-            change = log.read(changenode)
-            description = change[4].strip()
-            summary = description.splitlines()[0]
-            desc.append('%d : %s' % (crev, summary))
-        msg = desc[0] + '\n  and\n' + desc[1]
-        if Confirm('Merge', [], self, msg).run() != gtk.RESPONSE_YES:
-            return
-
-        cmdline = ['hg', 'merge', '-R', self.repo.root, str(rev)]
-        dialog = CmdDialog(cmdline)
+        parents0 = [x.node() for x in self.repo.workingctx().parents()]
+        node = short(self.repo.changelog.node(rev))
+        dialog = MergeDialog(self.repo.root, self.cwd, node)
         dialog.set_transient_for(self)
+        dialog.show_all()
         dialog.run()
         dialog.hide()
-        if dialog.returncode == 0:
+        del dialog
+        
+        # FIXME: re-open repo to retrieve the new parent data
+        root = self.repo.root
+        del self.repo
+        self.repo = hg.repository(ui.ui(), path=root)
+        
+        # if parents data has changed...
+        parents1 = [x.node() for x in self.repo.workingctx().parents()]
+        if not parents0 == parents1:
             msg = 'Launch commit tool for merge results?'
             if Confirm('Commit', [], self, msg).run() == gtk.RESPONSE_YES:
                 # Spawn commit tool if merge was successful
@@ -680,10 +663,7 @@
                 else:
                     args = [self.hgpath, '--repository', self.repo.root, ct]
                     subprocess.Popen(args, shell=False)
-
-        shell_notify([self.repo.root])
-        self.repo.dirstate.invalidate()
-        self.reload_log()
+            self.reload_log()
 
     def _tree_selection_changed(self, selection):
         ''' Update the details text '''