1import subprocess
2from hglib import client, util, error
3
4HGPATH = 'hg'
5
6def open(path=None, encoding=None, configs=None):
7    '''starts a cmdserver for the given path (or for a repository found
8    in the cwd). HGENCODING is set to the given encoding. configs is a
9    list of key, value, similar to those passed to hg --config.
10    '''
11    return client.hgclient(path, encoding, configs)
12
13def init(dest=None, ssh=None, remotecmd=None, insecure=False,
14         encoding=None, configs=None):
15    args = util.cmdbuilder('init', dest, e=ssh, remotecmd=remotecmd,
16                           insecure=insecure)
17
18    args.insert(0, HGPATH)
19    proc = util.popen(args)
20    out, err = proc.communicate()
21    if proc.returncode:
22        raise error.CommandError(args, proc.returncode, out, err)
23
24    return client.hgclient(dest, encoding, configs, connect=False)
25
26def clone(source=None, dest=None, noupdate=False, updaterev=None, rev=None,
27          branch=None, pull=False, uncompressed=False, ssh=None, remotecmd=None,
28          insecure=False, encoding=None, configs=None):
29    args = util.cmdbuilder('clone', source, dest, noupdate=noupdate,
30                           updaterev=updaterev, rev=rev, branch=branch,
31                           pull=pull, uncompressed=uncompressed,
32                           e=ssh, remotecmd=remotecmd, insecure=insecure)
33
34    args.insert(0, HGPATH)
35    proc = util.popen(args)
36    out, err = proc.communicate()
37    if proc.returncode:
38        raise error.CommandError(args, proc.returncode, out, err)
39
40    return client.hgclient(dest, encoding, configs, connect=False)
41