[PATCH 1 of 9 hglib] util: introduce commandlinebuilder

Idan Kamara idankk86 at gmail.com
Thu Jul 28 14:58:54 CDT 2011


# HG changeset patch
# User Idan Kamara <idankk86 at gmail.com>
# Date 1311450939 -10800
# Node ID 57d4ca59a051b4104cb1a6bdd65885c36d924337
# Parent  f1981745ff6e7ba99133e26e36cd1ea4c136912b
util: introduce commandlinebuilder

diff -r f1981745ff6e -r 57d4ca59a051 hglib/hglib.py
--- a/hglib/hglib.py	Sat Jul 23 22:55:39 2011 +0300
+++ b/hglib/hglib.py	Sat Jul 23 22:55:39 2011 +0300
@@ -158,25 +158,21 @@
 
         return d
 
-    def log(self, revrange=None):
-        args = ['log'] + templates.changeset
-        if revrange:
-            args.append('-r')
-            args += revrange
+    def log(self, revrange=[]):
+        args = util.commandlinebuilder('log')
+        args.arg('--template', [templates.changeset])
+        args.arg('-r', revrange)
 
         out = self.outputruncommand(args)[1]
         out = out.split('\0')[:-1]
 
         return self._parsechangesets(out)
 
-    def incoming(self, revrange=None, path=None):
-        args = ['incoming'] + templates.changeset
-        if revrange:
-            args.append('-r')
-            args += revrange
-
-        if path:
-            args.append(path)
+    def incoming(self, revrange=[], path=None):
+        args = util.commandlinebuilder('incoming')
+        args.arg('--template', [templates.changeset])
+        args.arg('-r', revrange)
+        args.argif(path, path)
 
         ret, out, err = self.outputruncommand(args, raiseonerror=False)
         if not ret:
@@ -187,14 +183,11 @@
         else:
             raise error.CommandError(args, ret, out, err)
 
-    def outgoing(self, revrange=None, path=None):
-        args = ['outgoing'] + templates.changeset
-        if revrange:
-            args.append('-r')
-            args += revrange
-
-        if path:
-            args.append(path)
+    def outgoing(self, revrange=[], path=None):
+        args = util.commandlinebuilder('outgoing')
+        args.arg('--template', [templates.changeset])
+        args.arg('-r', revrange)
+        args.argif(path, path)
 
         ret, out, err = self.outputruncommand(args, raiseonerror=False)
         if not ret:
@@ -206,50 +199,43 @@
             raise error.CommandError(args, ret, out, err)
 
     def commit(self, message, addremove=False):
-        # --debug will print the committed cset
-        args = ['commit', '--debug', '-m', message]
-
-        if addremove:
-            args.append('-A')
+        args = util.commandlinebuilder('commit')
+        args.arg('--debug') # --debug will print the committed cset
+        args.arg('-m', message)
+        args.argif(addremove, '-A')
 
         out = self.outputruncommand(args)[1]
         rev = out.split(':')[1]
         return self.log(revrange=[rev])[0]
 
     def import_(self, patch):
+        args = util.commandlinebuilder('import')
+        inchannels={}
+
         if isinstance(patch, str):
-            fp = open(patch)
+            args.arg(patch)
         else:
             assert hasattr(patch, 'read')
             assert hasattr(patch, 'readline')
 
-            fp = patch
+            inchannels['I'] = patch.read
+            inchannels['L'] = patch.readline
+            args.arg('-')
 
-        try:
-            inchannels = {'I' : fp.read, 'L' : fp.readline}
-            self.outputruncommand(['import', '-'], inchannels)
-        finally:
-            if fp != patch:
-                fp.close()
+        self.outputruncommand(args, inchannels)
 
     def root(self):
         return self.outputruncommand(['root'])[1].rstrip()
 
     def clone(self, source='.', dest=None, branch=None, updaterev=None,
-              revrange=None):
-        args = ['clone']
+              revrange=[]):
+        args = util.commandlinebuilder('clone')
+        args.argif(branch, '-b', branch)
+        args.argif(updaterev, '-u', updaterev)
+        args.arg('-r', revrange)
 
-        if branch:
-            args += ['-b', branch]
-        if updaterev:
-            args += ['-u', updaterev]
-        if revrange:
-            args.append('-r')
-            args += revrange
-        args.append(source)
-
-        if dest:
-            args.append(dest)
+        args.arg(source)
+        args.argif(dest, dest)
 
         self.outputruncommand(args)
 
@@ -287,11 +273,9 @@
             return out.rstrip()
 
     def cat(self, files, rev=None, output=None):
-        args = ['cat']
-        if rev:
-            args += ['-r', rev]
-        if output:
-            args += ['-o', output]
+        args = util.commandlinebuilder('cat')
+        args.argif(rev, '-r', rev)
+        args.argif(output, '-o', output)
 
         args += files
         ret, out, err = self.outputruncommand(args)
diff -r f1981745ff6e -r 57d4ca59a051 hglib/templates.py
--- a/hglib/templates.py	Sat Jul 23 22:55:39 2011 +0300
+++ b/hglib/templates.py	Sat Jul 23 22:55:39 2011 +0300
@@ -1,2 +1,1 @@
-changeset = ['--template',
-             '{rev}\\0{node}\\0{tags}\\0{branch}\\0{author}\\0{desc}\\0']
+changeset = '{rev}\\0{node}\\0{tags}\\0{branch}\\0{author}\\0{desc}\\0'
diff -r f1981745ff6e -r 57d4ca59a051 hglib/util.py
--- a/hglib/util.py	Sat Jul 23 22:55:39 2011 +0300
+++ b/hglib/util.py	Sat Jul 23 22:55:39 2011 +0300
@@ -12,3 +12,27 @@
         n -= 1
         if n == 0:
             return cs.read()
+
+class commandlinebuilder(list):
+    def __init__(self, command):
+        list.__init__(self)
+
+        self.append(command)
+
+    def arg(self, name, values=None):
+        if values is None:
+            self.append(name)
+        else:
+            for v in values:
+                self.append(name)
+                self.append(str(v))
+
+        return self
+
+    def argif(self, cond, name, value=None):
+        if cond:
+            self.append(name)
+            if value:
+                self.append(str(value))
+
+        return self


More information about the Mercurial-devel mailing list