[PATCH hglib] [mq]: imp

Idan Kamara idankk86 at gmail.com
Tue Aug 9 16:37:28 CDT 2011


# HG changeset patch
# User Idan Kamara <idankk86 at gmail.com>
# Date 1312925841 -10800
# Node ID 4c551f5c71ccdc1a5635cea4c8c761e232517574
# Parent  2d8e3d357ca5ba83edea254a6d3d03999082244c
[mq]: imp

diff -r 2d8e3d357ca5 -r 4c551f5c71cc hglib/client.py
--- a/hglib/client.py	Wed Aug 10 00:34:00 2011 +0300
+++ b/hglib/client.py	Wed Aug 10 00:37:21 2011 +0300
@@ -213,24 +213,34 @@
 
         return self._encoding
 
-    def import_(self, patch):
-        if isinstance(patch, str):
-            fp = open(patch)
+    def import_(self, patches, strip=None, force=False, nocommit=False,
+                bypass=False, exact=False, importbranch=False, message=None,
+                date=None, user=None, similarity=None):
+        """
+        patches can be a list of file names with patches to apply
+        or a file-like object that contains a patch (needs read and readline)
+        """
+        if hasattr(patches, 'read') and hasattr(patches, 'readline'):
+            patch = patches
+
+            def readline(size, output):
+                return patch.readline(size)
+
+            stdin = True
+            patches = ()
+            prompt = readline
+            input = patch.read
         else:
-            assert hasattr(patch, 'read')
-            assert hasattr(patch, 'readline')
+            stdin = False
+            prompt = None
+            input = None
 
-            fp = patch
+        args = cmdbuilder('import', *patches, strip=strip, force=force,
+                          nocommit=nocommit, bypass=bypass, exact=exact,
+                          importbranch=importbranch, message=message,
+                          date=date, user=user, similarity=similarity, _=stdin)
 
-        try:
-            def readline(size, output):
-                return fp.readline(size)
-
-            self.rawcommand(cmdbuilder('import', _=True),
-                            prompt=readline, input=fp.read)
-        finally:
-            if fp != patch:
-                fp.close()
+        self.rawcommand(args, prompt=prompt, input=input)
 
     def incoming(self, revrange=None, path=None):
         args = cmdbuilder('incoming',
diff -r 2d8e3d357ca5 -r 4c551f5c71cc tests/test-import.py
--- a/tests/test-import.py	Wed Aug 10 00:34:00 2011 +0300
+++ b/tests/test-import.py	Wed Aug 10 00:37:21 2011 +0300
@@ -1,9 +1,7 @@
 import common, cStringIO
 import hglib
 
-class test_import(common.basetest):
-    def test_basic(self):
-        patch = """
+patch = """
 # HG changeset patch
 # User test
 # Date 0 0
@@ -17,5 +15,13 @@
 @@ -0,0 +1,1 @@
 +1
 """
+
+class test_import(common.basetest):
+    def test_basic_cstringio(self):
         self.client.import_(cStringIO.StringIO(patch))
         self.assertEquals(self.client.cat(['a']), '1\n')
+
+    def test_basic_file(self):
+        open('patch', 'w').write(patch)
+        self.client.import_(['patch'])
+        self.assertEquals(self.client.cat(['a']), '1\n')


More information about the Mercurial-devel mailing list