diff hglib/client.py @ 46:ebcc5d7dd528

client: introduce merge handlers These can control the behaviour when Mercurial prompts what to do with regard to a specific file
author Idan Kamara <idankk86@gmail.com>
date Tue, 16 Aug 2011 23:58:24 +0300
parents 191855a9d813
children 94d2988e55b7
line wrap: on
line diff
--- a/hglib/client.py	Tue Aug 16 23:57:21 2011 +0300
+++ b/hglib/client.py	Tue Aug 16 23:58:24 2011 +0300
@@ -1,5 +1,5 @@
 import subprocess, os, struct, cStringIO, collections, re
-import hglib, error, util, templates
+import hglib, error, util, templates, merge
 
 from util import cmdbuilder
 
@@ -442,11 +442,26 @@
 
         return self._parserevs(out)
 
-    def merge(self, rev=None, force=False, tool=None, cb=None):
+    def merge(self, rev=None, force=False, tool=None, cb=merge.handlers.abort):
+        """
+        merge working directory with another revision
+
+        cb can one of merge.handlers, or a function that gets a single argument
+        which are the contents of stdout. It should return one of the expected
+        choices (a single character).
+        """
         # we can't really use --preview since merge doesn't support --template
         args = cmdbuilder('merge', r=rev, f=force, t=tool)
 
-        self.rawcommand(args, prompt=cb)
+        prompt = None
+        if cb is merge.handlers.abort:
+            prompt = cb
+        elif cb is merge.handlers.noninteractive:
+            args.append('-y')
+        else:
+            prompt = lambda size, output: cb(output) + '\n'
+
+        self.rawcommand(args, prompt=prompt)
 
     def move(self, source, dest, after=False, force=False, dryrun=False,
              include=None, exclude=None):