[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