annotate hglib/client.py @ 79:ca5f8f43e585

branches: more robust parsing strategy The right side of output is more strictly defined than the left, so parse from right to left. This fixes issues with spaces in branch names.
author Matt Mackall <mpm@selenic.com>
date Wed, 09 Nov 2011 16:09:46 -0600
parents 15485fa4b35e
children 5661d5f7e39b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
1 import subprocess, os, struct, cStringIO, collections, re
46
ebcc5d7dd528 client: introduce merge handlers
Idan Kamara <idankk86@gmail.com>
parents: 45
diff changeset
2 import hglib, error, util, templates, merge
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
3
4
a3a9cf58801f client: use the cmdbuilder
Idan Kamara <idankk86@gmail.com>
parents: 2
diff changeset
4 from util import cmdbuilder
a3a9cf58801f client: use the cmdbuilder
Idan Kamara <idankk86@gmail.com>
parents: 2
diff changeset
5
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
6 class hgclient(object):
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
7 inputfmt = '>I'
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
8 outputfmt = '>cI'
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
9 outputfmtsize = struct.calcsize(outputfmt)
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
10 retfmt = '>i'
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
11
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
12 revision = collections.namedtuple('revision', 'rev, node, tags, '
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
13 'branch, author, desc')
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
14
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
15 def __init__(self, path, encoding, configs):
44
3a661f63107e client: tell the server we're interactive
Idan Kamara <idankk86@gmail.com>
parents: 43
diff changeset
16 args = [hglib.HGPATH, 'serve', '--cmdserver', 'pipe',
3a661f63107e client: tell the server we're interactive
Idan Kamara <idankk86@gmail.com>
parents: 43
diff changeset
17 '--config', 'ui.interactive=True']
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
18 if path:
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
19 args += ['-R', path]
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
20 if configs:
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
21 args += ['--config'] + configs
72
15485fa4b35e util: introduce popen
Idan Kamara <idankk86@gmail.com>
parents: 65
diff changeset
22 env = {}
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
23 if encoding:
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
24 env['HGENCODING'] = encoding
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
25
72
15485fa4b35e util: introduce popen
Idan Kamara <idankk86@gmail.com>
parents: 65
diff changeset
26 self.server = util.popen(args, env)
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
27 self._readhello()
41
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
28 self._version = None
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
29
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
30 def _readhello(self):
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
31 """ read the hello message the server sends when started """
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
32 ch, msg = self._readchannel()
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
33 assert ch == 'o'
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
34
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
35 msg = msg.split('\n')
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
36
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
37 self.capabilities = msg[0][len('capabilities: '):]
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
38 if not self.capabilities:
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
39 raise error.ResponseError("bad hello message: expected 'capabilities: '"
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
40 ", got %r" % msg[0])
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
41
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
42 self.capabilities = set(self.capabilities.split())
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
43
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
44 # at the very least the server should be able to run commands
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
45 assert 'runcommand' in self.capabilities
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
46
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
47 self._encoding = msg[1][len('encoding: '):]
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
48 if not self._encoding:
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
49 raise error.ResponseError("bad hello message: expected 'encoding: '"
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
50 ", got %r" % msg[1])
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
51
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
52 def _readchannel(self):
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
53 data = self.server.stdout.read(hgclient.outputfmtsize)
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
54 if not data:
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
55 raise error.ServerError()
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
56 channel, length = struct.unpack(hgclient.outputfmt, data)
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
57 if channel in 'IL':
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
58 return channel, length
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
59 else:
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
60 return channel, self.server.stdout.read(length)
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
61
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
62 def _parserevs(self, splitted):
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
63 ''' splitted is a list of fields according to our rev.style, where each 6
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
64 fields compose one revision. '''
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
65 return [self.revision._make(rev) for rev in util.grouper(6, splitted)]
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
66
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
67 def runcommand(self, args, inchannels, outchannels):
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
68 def writeblock(data):
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
69 self.server.stdin.write(struct.pack(self.inputfmt, len(data)))
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
70 self.server.stdin.write(data)
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
71 self.server.stdin.flush()
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
72
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
73 if not self.server:
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
74 raise ValueError("server not connected")
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
75
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
76 self.server.stdin.write('runcommand\n')
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
77 writeblock('\0'.join(args))
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
78
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
79 while True:
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
80 channel, data = self._readchannel()
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
81
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
82 # input channels
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
83 if channel in inchannels:
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
84 writeblock(inchannels[channel](data))
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
85 # output channels
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
86 elif channel in outchannels:
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
87 outchannels[channel](data)
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
88 # result channel, command finished
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
89 elif channel == 'r':
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
90 return struct.unpack(hgclient.retfmt, data)[0]
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
91 # a channel that we don't know and can't ignore
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
92 elif channel.isupper():
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
93 raise error.ResponseError("unexpected data on required channel '%s'"
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
94 % channel)
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
95 # optional channel
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
96 else:
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
97 pass
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
98
5
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
99 def rawcommand(self, args, eh=None, prompt=None, input=None):
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
100 """
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
101 args is the cmdline (usually built using util.cmdbuilder)
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
102
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
103 eh is an error handler that is passed the return code, stdout and stderr
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
104 If no eh is given, we raise a CommandError if ret != 0
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
105
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
106 prompt is used to reply to prompts by the server
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
107 It receives the max number of bytes to return and the contents of stdout
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
108 received so far
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
109
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
110 input is used to reply to bulk data requests by the server
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
111 It receives the max number of bytes to return
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
112 """
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
113
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
114 out, err = cStringIO.StringIO(), cStringIO.StringIO()
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
115 outchannels = {'o' : out.write, 'e' : err.write}
5
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
116
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
117 inchannels = {}
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
118 if prompt is not None:
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
119 def func(size):
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
120 reply = prompt(size, out.getvalue())
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
121 return str(reply)
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
122 inchannels['L'] = func
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
123 if input is not None:
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
124 inchannels['I'] = input
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
125
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
126 ret = self.runcommand(args, inchannels, outchannels)
5
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
127 out, err = out.getvalue(), err.getvalue()
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
128
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
129 if ret:
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
130 if eh is None:
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
131 raise error.CommandError(args, ret, out, err)
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
132 else:
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
133 return eh(ret, out, err)
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
134 return out
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
135
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
136 def close(self):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
137 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
138 Closes the command server instance and waits for it to exit, returns the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
139 exit code.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
140
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
141 Attempting to call any function afterwards that needs to communicate with
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
142 the server will raise a ValueError.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
143 """
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
144 self.server.stdin.close()
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
145 self.server.wait()
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
146 ret = self.server.returncode
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
147 self.server = None
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
148 return ret
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
149
28
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
150 def add(self, files=[], dryrun=False, subrepos=False, include=None,
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
151 exclude=None):
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
152 """
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
153 Add the specified files on the next commit.
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
154 If no files are given, add all files to the repository.
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
155
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
156 dryrun - do no perform actions
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
157 subrepos - recurse into subrepositories
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
158 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
159 exclude - exclude names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
160
28
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
161 Return whether all given files were added.
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
162 """
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
163 if not isinstance(files, list):
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
164 files = [files]
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
165
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
166 args = cmdbuilder('add', *files, n=dryrun, S=subrepos, I=include, X=exclude)
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
167
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
168 eh = util.reterrorhandler(args)
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
169 self.rawcommand(args, eh=eh)
28
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
170
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
171 return bool(eh)
28
221eeb3693f4 client: add add command
Idan Kamara <idankk86@gmail.com>
parents: 27
diff changeset
172
48
82d927ac1329 client: add addremove command
Idan Kamara <idankk86@gmail.com>
parents: 47
diff changeset
173 def addremove(self, files=[], similarity=None, dryrun=False, include=None,
82d927ac1329 client: add addremove command
Idan Kamara <idankk86@gmail.com>
parents: 47
diff changeset
174 exclude=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
175 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
176 Add all new files and remove all missing files from the repository.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
177
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
178 New files are ignored if they match any of the patterns in ".hgignore". As
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
179 with add, these changes take effect at the next commit.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
180
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
181 similarity - used to detect renamed files. With a parameter
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
182 greater than 0, this compares every removed file with every added file and
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
183 records those similar enough as renames. This option takes a percentage
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
184 between 0 (disabled) and 100 (files must be identical) as its parameter.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
185 Detecting renamed files this way can be expensive. After using this
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
186 option, "hg status -C" can be used to check which files were identified as
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
187 moved or renamed.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
188
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
189 dryrun - do no perform actions
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
190 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
191 exclude - exclude names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
192
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
193 Return True if all files are successfully added.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
194 """
48
82d927ac1329 client: add addremove command
Idan Kamara <idankk86@gmail.com>
parents: 47
diff changeset
195 if not isinstance(files, list):
82d927ac1329 client: add addremove command
Idan Kamara <idankk86@gmail.com>
parents: 47
diff changeset
196 files = [files]
82d927ac1329 client: add addremove command
Idan Kamara <idankk86@gmail.com>
parents: 47
diff changeset
197
82d927ac1329 client: add addremove command
Idan Kamara <idankk86@gmail.com>
parents: 47
diff changeset
198 args = cmdbuilder('addremove', *files, s=similarity, n=dryrun, I=include,
82d927ac1329 client: add addremove command
Idan Kamara <idankk86@gmail.com>
parents: 47
diff changeset
199 X=exclude)
82d927ac1329 client: add addremove command
Idan Kamara <idankk86@gmail.com>
parents: 47
diff changeset
200
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
201 eh = util.reterrorhandler(args)
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
202 self.rawcommand(args, eh=eh)
48
82d927ac1329 client: add addremove command
Idan Kamara <idankk86@gmail.com>
parents: 47
diff changeset
203
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
204 return bool(eh)
48
82d927ac1329 client: add addremove command
Idan Kamara <idankk86@gmail.com>
parents: 47
diff changeset
205
52
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
206 def annotate(self, files, rev=None, nofollow=False, text=False, user=False,
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
207 file=False, date=False, number=False, changeset=False,
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
208 line=False, verbose=False, include=None, exclude=None):
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
209 """
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
210 Show changeset information by line for each file in files.
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
211
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
212 rev - annotate the specified revision
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
213 nofollow - don't follow copies and renames
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
214 text - treat all files as text
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
215 user - list the author (long with -v)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
216 file - list the filename
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
217 date - list the date
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
218 number - list the revision number (default)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
219 changeset - list the changeset
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
220 line - show line number at the first appearance
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
221 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
222 exclude - exclude names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
223
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
224 Yields a (info, contents) tuple for each line in a file. Info is a space
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
225 separated string according to the given options.
52
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
226 """
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
227 if not isinstance(files, list):
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
228 files = [files]
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
229
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
230 args = cmdbuilder('annotate', *files, r=rev, no_follow=nofollow, a=text,
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
231 u=user, f=file, d=date, n=number, c=changeset, l=line,
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
232 v=verbose, I=include, X=exclude)
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
233
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
234 out = self.rawcommand(args)
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
235
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
236 for line in out.splitlines():
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
237 yield tuple(line.split(': ', 1))
18f72b255553 client: add annotate command
Idan Kamara <idankk86@gmail.com>
parents: 51
diff changeset
238
53
066dfa5c0b70 client: add archive command
Idan Kamara <idankk86@gmail.com>
parents: 52
diff changeset
239 def archive(self, dest, rev=None, nodecode=False, prefix=None, type=None,
066dfa5c0b70 client: add archive command
Idan Kamara <idankk86@gmail.com>
parents: 52
diff changeset
240 subrepos=False, include=None, exclude=None):
066dfa5c0b70 client: add archive command
Idan Kamara <idankk86@gmail.com>
parents: 52
diff changeset
241 """
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
242 Create an unversioned archive of a repository revision.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
243
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
244 The exact name of the destination archive or directory is given using a
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
245 format string; see export for details.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
246
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
247 Each member added to an archive file has a directory prefix prepended. Use
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
248 prefix to specify a format string for the prefix. The default is the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
249 basename of the archive, with suffixes removed.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
250
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
251 dest - destination path
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
252 rev - revision to distribute. The revision used is the parent of the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
253 working directory if one isn't given.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
254
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
255 nodecode - do not pass files through decoders
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
256 prefix - directory prefix for files in archive
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
257 type - type of distribution to create. The archive type is automatically
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
258 detected based on file extension if one isn't given.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
259
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
260 Valid types are:
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
261
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
262 "files" a directory full of files (default)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
263 "tar" tar archive, uncompressed
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
264 "tbz2" tar archive, compressed using bzip2
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
265 "tgz" tar archive, compressed using gzip
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
266 "uzip" zip archive, uncompressed
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
267 "zip" zip archive, compressed using deflate
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
268
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
269 subrepos - recurse into subrepositories
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
270 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
271 exclude - exclude names matching the given patterns
53
066dfa5c0b70 client: add archive command
Idan Kamara <idankk86@gmail.com>
parents: 52
diff changeset
272 """
066dfa5c0b70 client: add archive command
Idan Kamara <idankk86@gmail.com>
parents: 52
diff changeset
273 args = cmdbuilder('archive', dest, r=rev, no_decode=nodecode, p=prefix,
066dfa5c0b70 client: add archive command
Idan Kamara <idankk86@gmail.com>
parents: 52
diff changeset
274 t=type, S=subrepos, I=include, X=exclude)
066dfa5c0b70 client: add archive command
Idan Kamara <idankk86@gmail.com>
parents: 52
diff changeset
275
066dfa5c0b70 client: add archive command
Idan Kamara <idankk86@gmail.com>
parents: 52
diff changeset
276 self.rawcommand(args)
066dfa5c0b70 client: add archive command
Idan Kamara <idankk86@gmail.com>
parents: 52
diff changeset
277
22
297df22d6091 client: add backout command
Idan Kamara <idankk86@gmail.com>
parents: 21
diff changeset
278 def backout(self, rev, merge=False, parent=None, tool=None, message=None,
297df22d6091 client: add backout command
Idan Kamara <idankk86@gmail.com>
parents: 21
diff changeset
279 logfile=None, date=None, user=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
280 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
281 Prepare a new changeset with the effect of rev undone in the current
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
282 working directory.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
283
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
284 If rev is the parent of the working directory, then this new changeset is
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
285 committed automatically. Otherwise, hg needs to merge the changes and the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
286 merged result is left uncommitted.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
287
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
288 rev - revision to backout
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
289 merge - merge with old dirstate parent after backout
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
290 parent - parent to choose when backing out merge
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
291 tool - specify merge tool
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
292 message - use text as commit message
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
293 logfile - read commit message from file
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
294 date - record the specified date as commit date
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
295 user - record the specified user as committer
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
296 """
22
297df22d6091 client: add backout command
Idan Kamara <idankk86@gmail.com>
parents: 21
diff changeset
297 if message and logfile:
297df22d6091 client: add backout command
Idan Kamara <idankk86@gmail.com>
parents: 21
diff changeset
298 raise ValueError("cannot specify both a message and a logfile")
297df22d6091 client: add backout command
Idan Kamara <idankk86@gmail.com>
parents: 21
diff changeset
299
297df22d6091 client: add backout command
Idan Kamara <idankk86@gmail.com>
parents: 21
diff changeset
300 args = cmdbuilder('backout', r=rev, merge=merge, parent=parent, t=tool,
297df22d6091 client: add backout command
Idan Kamara <idankk86@gmail.com>
parents: 21
diff changeset
301 m=message, l=logfile, d=date, u=user)
297df22d6091 client: add backout command
Idan Kamara <idankk86@gmail.com>
parents: 21
diff changeset
302
297df22d6091 client: add backout command
Idan Kamara <idankk86@gmail.com>
parents: 21
diff changeset
303 self.rawcommand(args)
297df22d6091 client: add backout command
Idan Kamara <idankk86@gmail.com>
parents: 21
diff changeset
304
23
223e463c25e0 client: add bookmark command
Idan Kamara <idankk86@gmail.com>
parents: 22
diff changeset
305 def bookmark(self, name, rev=None, force=False, delete=False, inactive=False,
223e463c25e0 client: add bookmark command
Idan Kamara <idankk86@gmail.com>
parents: 22
diff changeset
306 rename=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
307 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
308 Set a bookmark on the working directory's parent revision or rev,
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
309 with the given name.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
310
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
311 name - bookmark name
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
312 rev - revision to bookmark
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
313 force - bookmark even if another bookmark with the same name exists
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
314 delete - delete the given bookmark
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
315 inactive - do not mark the new bookmark active
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
316 rename - rename the bookmark given by rename to name
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
317 """
23
223e463c25e0 client: add bookmark command
Idan Kamara <idankk86@gmail.com>
parents: 22
diff changeset
318 args = cmdbuilder('bookmark', name, r=rev, f=force, d=delete,
223e463c25e0 client: add bookmark command
Idan Kamara <idankk86@gmail.com>
parents: 22
diff changeset
319 i=inactive, m=rename)
223e463c25e0 client: add bookmark command
Idan Kamara <idankk86@gmail.com>
parents: 22
diff changeset
320
223e463c25e0 client: add bookmark command
Idan Kamara <idankk86@gmail.com>
parents: 22
diff changeset
321 self.rawcommand(args)
223e463c25e0 client: add bookmark command
Idan Kamara <idankk86@gmail.com>
parents: 22
diff changeset
322
24
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
323 def bookmarks(self):
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
324 """
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
325 Return the bookmarks as a list of (name, rev, node) and the index of the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
326 current one.
24
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
327
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
328 If there isn't a current one, -1 is returned as the index.
24
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
329 """
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
330 out = self.rawcommand(['bookmarks'])
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
331
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
332 bms = []
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
333 current = -1
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
334 if out.rstrip() != 'no bookmarks set':
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
335 for line in out.splitlines():
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
336 iscurrent, line = line[0:3], line[3:]
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
337 if '*' in iscurrent:
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
338 current = len(bms)
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
339 name, line = line.split(' ', 1)
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
340 rev, node = line.split(':')
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
341 bms.append((name, int(rev), node))
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
342 return bms, current
ca0d7e212cf8 client: add bookmarks command
Idan Kamara <idankk86@gmail.com>
parents: 23
diff changeset
343
11
0549d00a617d client: add missing options to branch()
Idan Kamara <idankk86@gmail.com>
parents: 10
diff changeset
344 def branch(self, name=None, clean=False, force=False):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
345 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
346 When name isn't given, return the current branch name. Otherwise set the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
347 working directory branch name (the branch will not exist in the repository
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
348 until the next commit). Standard practice recommends that primary
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
349 development take place on the 'default' branch.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
350
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
351 When clean is True, reset and return the working directory branch to that
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
352 of the parent of the working directory, negating a previous branch change.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
353
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
354 name - new branch name
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
355 clean - reset branch name to parent branch name
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
356 force - set branch name even if it shadows an existing branch
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
357 """
11
0549d00a617d client: add missing options to branch()
Idan Kamara <idankk86@gmail.com>
parents: 10
diff changeset
358 if name and clean:
0549d00a617d client: add missing options to branch()
Idan Kamara <idankk86@gmail.com>
parents: 10
diff changeset
359 raise ValueError('cannot use both name and clean')
0549d00a617d client: add missing options to branch()
Idan Kamara <idankk86@gmail.com>
parents: 10
diff changeset
360
0549d00a617d client: add missing options to branch()
Idan Kamara <idankk86@gmail.com>
parents: 10
diff changeset
361 args = cmdbuilder('branch', name, f=force, C=clean)
0549d00a617d client: add missing options to branch()
Idan Kamara <idankk86@gmail.com>
parents: 10
diff changeset
362 out = self.rawcommand(args).rstrip()
0549d00a617d client: add missing options to branch()
Idan Kamara <idankk86@gmail.com>
parents: 10
diff changeset
363
0549d00a617d client: add missing options to branch()
Idan Kamara <idankk86@gmail.com>
parents: 10
diff changeset
364 if name:
0549d00a617d client: add missing options to branch()
Idan Kamara <idankk86@gmail.com>
parents: 10
diff changeset
365 return name
0549d00a617d client: add missing options to branch()
Idan Kamara <idankk86@gmail.com>
parents: 10
diff changeset
366 elif not clean:
0549d00a617d client: add missing options to branch()
Idan Kamara <idankk86@gmail.com>
parents: 10
diff changeset
367 return out
0549d00a617d client: add missing options to branch()
Idan Kamara <idankk86@gmail.com>
parents: 10
diff changeset
368 else:
0549d00a617d client: add missing options to branch()
Idan Kamara <idankk86@gmail.com>
parents: 10
diff changeset
369 # len('reset working directory to branch ') == 34
0549d00a617d client: add missing options to branch()
Idan Kamara <idankk86@gmail.com>
parents: 10
diff changeset
370 return out[34:]
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
371
12
c2a9b716cd80 client: rewrite branches(), return a list of (branchname, rev, node)
Idan Kamara <idankk86@gmail.com>
parents: 11
diff changeset
372 def branches(self, active=False, closed=False):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
373 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
374 Returns the repository's named branches as a list of (name, rev, node).
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
375
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
376 active - show only branches that have unmerged heads
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
377 closed - show normal and closed branches
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
378 """
12
c2a9b716cd80 client: rewrite branches(), return a list of (branchname, rev, node)
Idan Kamara <idankk86@gmail.com>
parents: 11
diff changeset
379 args = cmdbuilder('branches', a=active, c=closed)
c2a9b716cd80 client: rewrite branches(), return a list of (branchname, rev, node)
Idan Kamara <idankk86@gmail.com>
parents: 11
diff changeset
380 out = self.rawcommand(args)
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
381
12
c2a9b716cd80 client: rewrite branches(), return a list of (branchname, rev, node)
Idan Kamara <idankk86@gmail.com>
parents: 11
diff changeset
382 branches = []
c2a9b716cd80 client: rewrite branches(), return a list of (branchname, rev, node)
Idan Kamara <idankk86@gmail.com>
parents: 11
diff changeset
383 for line in out.rstrip().splitlines():
79
ca5f8f43e585 branches: more robust parsing strategy
Matt Mackall <mpm@selenic.com>
parents: 72
diff changeset
384 namerev, node = line.rsplit(':', 1)
ca5f8f43e585 branches: more robust parsing strategy
Matt Mackall <mpm@selenic.com>
parents: 72
diff changeset
385 name, rev = namerev.rsplit(' ', 1)
ca5f8f43e585 branches: more robust parsing strategy
Matt Mackall <mpm@selenic.com>
parents: 72
diff changeset
386 name = name.rstrip()
12
c2a9b716cd80 client: rewrite branches(), return a list of (branchname, rev, node)
Idan Kamara <idankk86@gmail.com>
parents: 11
diff changeset
387 node = node.split()[0] # get rid of ' (inactive)'
c2a9b716cd80 client: rewrite branches(), return a list of (branchname, rev, node)
Idan Kamara <idankk86@gmail.com>
parents: 11
diff changeset
388 branches.append((name, int(rev), node))
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
389 return branches
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
390
54
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
391 def bundle(self, file, destrepo=None, rev=[], branch=[], base=[], all=False,
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
392 force=False, type=None, ssh=None, remotecmd=None, insecure=False):
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
393 """
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
394 Generate a compressed changegroup file collecting changesets not known to
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
395 be in another repository.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
396
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
397 If destrepo isn't given, then hg assumes the destination will have all
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
398 the nodes you specify with base. To create a bundle containing all
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
399 changesets, use all (or set base to 'null').
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
400
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
401 file - destination file name
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
402 destrepo - repository to look for changes
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
403 rev - a changeset intended to be added to the destination
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
404 branch - a specific branch you would like to bundle
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
405 base - a base changeset assumed to be available at the destination
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
406 all - bundle all changesets in the repository
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
407 type - bundle compression type to use, available compression methods are:
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
408 none, bzip2, and gzip (default: bzip2)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
409
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
410 force - run even when the destrepo is unrelated
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
411 ssh - specify ssh command to use
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
412 remotecmd - specify hg command to run on the remote side
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
413 insecure - do not verify server certificate (ignoring web.cacerts config)
54
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
414
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
415 Return True if a bundle was created, False if no changes were found.
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
416 """
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
417 args = cmdbuilder('bundle', file, destrepo, f=force, r=rev, b=branch,
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
418 base=base, a=all, t=type, e=ssh, remotecmd=remotecmd,
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
419 insecure=insecure)
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
420
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
421 eh = util.reterrorhandler(args)
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
422 self.rawcommand(args, eh=eh)
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
423
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
424 return bool(eh)
29d01b5dc38c client: add bundle command
Idan Kamara <idankk86@gmail.com>
parents: 53
diff changeset
425
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
426 def cat(self, files, rev=None, output=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
427 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
428 Return a string containing the specified files as they were at the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
429 given revision. If no revision is given, the parent of the working
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
430 directory is used, or tip if no revision is checked out.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
431
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
432 If output is given, writes the contents to the specified file.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
433 The name of the file is given using a format string. The formatting rules
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
434 are the same as for the export command, with the following additions:
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
435
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
436 "%s" basename of file being printed
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
437 "%d" dirname of file being printed, or '.' if in repository root
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
438 "%p" root-relative path name of file being printed
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
439 """
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
440 args = cmdbuilder('cat', *files, r=rev, o=output)
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
441 out = self.rawcommand(args)
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
442
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
443 if not output:
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
444 return out
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
445
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
446 def clone(self, source='.', dest=None, branch=None, updaterev=None,
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
447 revrange=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
448 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
449 Create a copy of an existing repository specified by source in a new
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
450 directory dest.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
451
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
452 If dest isn't specified, it defaults to the basename of source.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
453
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
454 branch - clone only the specified branch
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
455 updaterev - revision, tag or branch to check out
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
456 revrange - include the specified changeset
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
457 """
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
458 args = cmdbuilder('clone', source, dest, b=branch, u=updaterev, r=revrange)
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
459 self.rawcommand(args)
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
460
16
943aff89b068 client: add missing options to commit()
Idan Kamara <idankk86@gmail.com>
parents: 15
diff changeset
461 def commit(self, message=None, logfile=None, addremove=False, closebranch=False,
943aff89b068 client: add missing options to commit()
Idan Kamara <idankk86@gmail.com>
parents: 15
diff changeset
462 date=None, user=None, include=None, exclude=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
463 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
464 Commit changes reported by status into the repository.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
465
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
466 message - the commit message
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
467 logfile - read commit message from file
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
468 addremove - mark new/missing files as added/removed before committing
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
469 closebranch - mark a branch as closed, hiding it from the branch list
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
470 date - record the specified date as commit date
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
471 user - record the specified user as committer
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
472 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
473 exclude - exclude names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
474 """
16
943aff89b068 client: add missing options to commit()
Idan Kamara <idankk86@gmail.com>
parents: 15
diff changeset
475 if message is None and logfile is None:
943aff89b068 client: add missing options to commit()
Idan Kamara <idankk86@gmail.com>
parents: 15
diff changeset
476 raise ValueError("must provide at least a message or a logfile")
943aff89b068 client: add missing options to commit()
Idan Kamara <idankk86@gmail.com>
parents: 15
diff changeset
477 elif message and logfile:
943aff89b068 client: add missing options to commit()
Idan Kamara <idankk86@gmail.com>
parents: 15
diff changeset
478 raise ValueError("cannot specify both a message and a logfile")
943aff89b068 client: add missing options to commit()
Idan Kamara <idankk86@gmail.com>
parents: 15
diff changeset
479
14
e0d21c9db20b client: use --debug when committing to get the new node info
Idan Kamara <idankk86@gmail.com>
parents: 13
diff changeset
480 # --debug will print the committed cset
16
943aff89b068 client: add missing options to commit()
Idan Kamara <idankk86@gmail.com>
parents: 15
diff changeset
481 args = cmdbuilder('commit', debug=True, m=message, A=addremove,
943aff89b068 client: add missing options to commit()
Idan Kamara <idankk86@gmail.com>
parents: 15
diff changeset
482 close_branch=closebranch, d=date, u=user, l=logfile,
943aff89b068 client: add missing options to commit()
Idan Kamara <idankk86@gmail.com>
parents: 15
diff changeset
483 I=include, X=exclude)
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
484
14
e0d21c9db20b client: use --debug when committing to get the new node info
Idan Kamara <idankk86@gmail.com>
parents: 13
diff changeset
485 out = self.rawcommand(args)
e0d21c9db20b client: use --debug when committing to get the new node info
Idan Kamara <idankk86@gmail.com>
parents: 13
diff changeset
486 rev, node = out.splitlines()[-1].rsplit(':')
15
f1af31960414 client: change return value of commit() to (rev, node)
Idan Kamara <idankk86@gmail.com>
parents: 14
diff changeset
487 return int(rev.split()[-1]), node
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
488
21
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
489 def config(self, names=[], untrusted=False, showsource=False):
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
490 """
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
491 Return a list of (section, key, value) config settings from all hgrc files
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
492
21
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
493 When showsource is specified, return (source, section, key, value) where
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
494 source is of the form filename:[line]
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
495 """
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
496 def splitline(s):
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
497 k, value = s.rstrip().split('=', 1)
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
498 section, key = k.split('.', 1)
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
499 return (section, key, value)
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
500
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
501 if not isinstance(names, list):
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
502 names = [names]
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
503
21
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
504 args = cmdbuilder('showconfig', *names, u=untrusted, debug=showsource)
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
505 out = self.rawcommand(args)
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
506
21
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
507 conf = []
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
508 if showsource:
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
509 out = util.skiplines(out, 'read config from: ')
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
510 for line in out.splitlines():
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
511 m = re.match(r"(.+?:(?:\d+:)?) (.*)", line)
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
512 t = splitline(m.group(2))
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
513 conf.append((m.group(1)[:-1], t[0], t[1], t[2]))
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
514 else:
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
515 for line in out.splitlines():
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
516 conf.append(splitline(line))
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
517
ffef7df076e8 client: rewrite config()
Idan Kamara <idankk86@gmail.com>
parents: 20
diff changeset
518 return conf
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
519
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
520 @property
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
521 def encoding(self):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
522 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
523 Return the server's encoding (as reported in the hello message).
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
524 """
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
525 if not 'getencoding' in self.capabilities:
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
526 raise CapabilityError('getencoding')
5
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
527
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
528 if not self._encoding:
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
529 self.server.stdin.write('getencoding\n')
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
530 self._encoding = self._readfromchannel('r')
5
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
531
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
532 return self._encoding
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
533
29
c072f525ea3e client: add copy command
Idan Kamara <idankk86@gmail.com>
parents: 28
diff changeset
534 def copy(self, source, dest, after=False, force=False, dryrun=False,
c072f525ea3e client: add copy command
Idan Kamara <idankk86@gmail.com>
parents: 28
diff changeset
535 include=None, exclude=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
536 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
537 Mark dest as having copies of source files. If dest is a directory, copies
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
538 are put in that directory. If dest is a file, then source must be a string.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
539
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
540 Returns True on success, False if errors are encountered.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
541
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
542 source - a file or a list of files
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
543 dest - a destination file or directory
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
544 after - record a copy that has already occurred
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
545 force - forcibly copy over an existing managed file
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
546 dryrun - do not perform actions, just print output
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
547 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
548 exclude - exclude names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
549 """
29
c072f525ea3e client: add copy command
Idan Kamara <idankk86@gmail.com>
parents: 28
diff changeset
550 if not isinstance(source, list):
c072f525ea3e client: add copy command
Idan Kamara <idankk86@gmail.com>
parents: 28
diff changeset
551 source = [source]
c072f525ea3e client: add copy command
Idan Kamara <idankk86@gmail.com>
parents: 28
diff changeset
552
c072f525ea3e client: add copy command
Idan Kamara <idankk86@gmail.com>
parents: 28
diff changeset
553 source.append(dest)
c072f525ea3e client: add copy command
Idan Kamara <idankk86@gmail.com>
parents: 28
diff changeset
554 args = cmdbuilder('copy', *source, A=after, f=force, n=dryrun,
c072f525ea3e client: add copy command
Idan Kamara <idankk86@gmail.com>
parents: 28
diff changeset
555 I=include, X=exclude)
c072f525ea3e client: add copy command
Idan Kamara <idankk86@gmail.com>
parents: 28
diff changeset
556
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
557 eh = util.reterrorhandler(args)
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
558 self.rawcommand(args, eh=eh)
29
c072f525ea3e client: add copy command
Idan Kamara <idankk86@gmail.com>
parents: 28
diff changeset
559
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
560 return bool(eh)
29
c072f525ea3e client: add copy command
Idan Kamara <idankk86@gmail.com>
parents: 28
diff changeset
561
61
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
562 def diff(self, files=[], revs=[], change=None, text=False,
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
563 git=False, nodates=False, showfunction=False, reverse=False,
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
564 ignoreallspace=False, ignorespacechange=False, ignoreblanklines=False,
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
565 unified=None, stat=False, subrepos=False, include=None, exclude=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
566 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
567 Return differences between revisions for the specified files.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
568
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
569 revs - a revision or a list of two revisions to diff
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
570 change - change made by revision
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
571 text - treat all files as text
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
572 git - use git extended diff format
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
573 nodates - omit dates from diff headers
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
574 showfunction - show which function each change is in
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
575 reverse - produce a diff that undoes the changes
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
576 ignoreallspace - ignore white space when comparing lines
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
577 ignorespacechange - ignore changes in the amount of white space
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
578 ignoreblanklines - ignore changes whose lines are all blank
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
579 unified - number of lines of context to show
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
580 stat - output diffstat-style summary of changes
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
581 subrepos - recurse into subrepositories
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
582 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
583 exclude - exclude names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
584 """
61
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
585 if change and revs:
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
586 raise ValueError('cannot specify both change and rev')
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
587
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
588 args = cmdbuilder('diff', *files, r=revs, c=change,
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
589 a=text, g=git, nodates=nodates,
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
590 p=showfunction, reverse=reverse,
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
591 w=ignoreallspace, b=ignorespacechange,
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
592 B=ignoreblanklines, U=unified, stat=stat,
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
593 S=subrepos, I=include, X=exclude)
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
594
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
595 return self.rawcommand(args)
d0b9215180a4 client: fix diff indentation and position
Idan Kamara <idankk86@gmail.com>
parents: 57
diff changeset
596
55
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
597 def export(self, revs, output=None, switchparent=False, text=False, git=False,
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
598 nodates=False):
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
599 """
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
600 Return the header and diffs for one or more changesets. When output is
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
601 given, dumps to file. The name of the file is given using a format string.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
602 The formatting rules are as follows:
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
603
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
604 "%%" literal "%" character
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
605 "%H" changeset hash (40 hexadecimal digits)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
606 "%N" number of patches being generated
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
607 "%R" changeset revision number
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
608 "%b" basename of the exporting repository
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
609 "%h" short-form changeset hash (12 hexadecimal digits)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
610 "%n" zero-padded sequence number, starting at 1
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
611 "%r" zero-padded changeset revision number
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
612
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
613 output - print output to file with formatted name
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
614 switchparent - diff against the second parent
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
615 rev - a revision or list of revisions to export
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
616 text - treat all files as text
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
617 git - use git extended diff format
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
618 nodates - omit dates from diff headers
55
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
619 """
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
620 if not isinstance(revs, list):
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
621 revs = [revs]
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
622 args = cmdbuilder('export', *revs, o=output, switch_parent=switchparent,
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
623 a=text, g=git, nodates=nodates)
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
624
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
625 out = self.rawcommand(args)
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
626
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
627 if output is None:
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
628 return out
5833f6ac0929 client: add export command
Idan Kamara <idankk86@gmail.com>
parents: 54
diff changeset
629
31
ee8863882aae client: add forget command
Idan Kamara <idankk86@gmail.com>
parents: 30
diff changeset
630 def forget(self, files, include=None, exclude=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
631 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
632 Mark the specified files so they will no longer be tracked after the next
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
633 commit.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
634
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
635 This only removes files from the current branch, not from the entire
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
636 project history, and it does not delete them from the working directory.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
637
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
638 Returns True on success.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
639
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
640 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
641 exclude - exclude names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
642 """
31
ee8863882aae client: add forget command
Idan Kamara <idankk86@gmail.com>
parents: 30
diff changeset
643 if not isinstance(files, list):
ee8863882aae client: add forget command
Idan Kamara <idankk86@gmail.com>
parents: 30
diff changeset
644 files = [files]
ee8863882aae client: add forget command
Idan Kamara <idankk86@gmail.com>
parents: 30
diff changeset
645
ee8863882aae client: add forget command
Idan Kamara <idankk86@gmail.com>
parents: 30
diff changeset
646 args = cmdbuilder('forget', *files, I=include, X=exclude)
ee8863882aae client: add forget command
Idan Kamara <idankk86@gmail.com>
parents: 30
diff changeset
647
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
648 eh = util.reterrorhandler(args)
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
649 self.rawcommand(args, eh=eh)
31
ee8863882aae client: add forget command
Idan Kamara <idankk86@gmail.com>
parents: 30
diff changeset
650
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
651 return bool(eh)
31
ee8863882aae client: add forget command
Idan Kamara <idankk86@gmail.com>
parents: 30
diff changeset
652
56
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
653 def grep(self, pattern, files=[], all=False, text=False, follow=False,
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
654 ignorecase=False, fileswithmatches=False, line=False, user=False,
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
655 date=False, include=None, exclude=None):
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
656 """
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
657 Search for a pattern in specified files and revisions.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
658
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
659 This behaves differently than Unix grep. It only accepts Python/Perl
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
660 regexps. It searches repository history, not the working directory.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
661 It always prints the revision number in which a match appears.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
662
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
663 Yields (filename, revision, [line, [match status, [user, [date, [match]]]]])
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
664 per match depending on the given options.
56
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
665
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
666 all - print all revisions that match
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
667 text - treat all files as text
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
668 follow - follow changeset history, or file history across copies and renames
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
669 ignorecase - ignore case when matching
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
670 fileswithmatches - return only filenames and revisions that match
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
671 line - return line numbers in the result tuple
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
672 user - return the author in the result tuple
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
673 date - return the date in the result tuple
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
674 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
675 exclude - exclude names matching the given patterns
56
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
676 """
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
677 if not isinstance(files, list):
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
678 files = [files]
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
679
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
680 args = cmdbuilder('grep', *[pattern] + files, all=all, a=text, f=follow,
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
681 i=ignorecase, l=fileswithmatches, n=line, u=user, d=date,
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
682 I=include, X=exclude)
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
683 args.append('-0')
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
684
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
685 def eh(ret, out, err):
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
686 if ret != 1:
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
687 raise error.CommandError(args, ret, out, err)
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
688 return ''
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
689
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
690 out = self.rawcommand(args, eh=eh).split('\0')
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
691
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
692 fieldcount = 3
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
693 if user:
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
694 fieldcount += 1
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
695 if date:
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
696 fieldcount += 1
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
697 if line:
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
698 fieldcount += 1
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
699 if all:
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
700 fieldcount += 1
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
701 if fileswithmatches:
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
702 fieldcount -= 1
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
703
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
704 return util.grouper(fieldcount, out)
9bd819da245a client: add grep command
Idan Kamara <idankk86@gmail.com>
parents: 55
diff changeset
705
57
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
706 def heads(self, rev=[], startrev=[], topological=False, closed=False):
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
707 """
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
708 Return a list of current repository heads or branch heads.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
709
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
710 rev - return only branch heads on the branches associated with the specified
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
711 changesets.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
712
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
713 startrev - return only heads which are descendants of the given revs.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
714 topological - named branch mechanics will be ignored and only changesets
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
715 without children will be shown.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
716
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
717 closed - normal and closed branch heads.
57
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
718 """
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
719 if not isinstance(rev, list):
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
720 rev = [rev]
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
721
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
722 args = cmdbuilder('heads', *rev, r=startrev, t=topological, c=closed,
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
723 template=templates.changeset)
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
724
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
725 def eh(ret, out, err):
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
726 if ret != 1:
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
727 raise error.CommandError(args, ret, out, err)
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
728 return ''
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
729
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
730 out = self.rawcommand(args, eh=eh).split('\0')[:-1]
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
731 return self._parserevs(out)
2657fd6fef04 client: add heads command
Idan Kamara <idankk86@gmail.com>
parents: 56
diff changeset
732
38
32f6a2bbf63e client: add identify command
Idan Kamara <idankk86@gmail.com>
parents: 37
diff changeset
733 def identify(self, rev=None, source=None, num=False, id=False, branch=False,
32f6a2bbf63e client: add identify command
Idan Kamara <idankk86@gmail.com>
parents: 37
diff changeset
734 tags=False, bookmarks=False):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
735 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
736 Return a summary string identifying the repository state at rev using one or
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
737 two parent hash identifiers, followed by a "+" if the working directory has
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
738 uncommitted changes, the branch name (if not default), a list of tags, and
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
739 a list of bookmarks.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
740
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
741 When rev is not given, return a summary string of the current state of the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
742 repository.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
743
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
744 Specifying source as a repository root or Mercurial bundle will cause
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
745 lookup to operate on that repository/bundle.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
746
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
747 num - show local revision number
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
748 id - show global revision id
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
749 branch - show branch
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
750 tags - show tags
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
751 bookmarks - show bookmarks
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
752 """
38
32f6a2bbf63e client: add identify command
Idan Kamara <idankk86@gmail.com>
parents: 37
diff changeset
753 args = cmdbuilder('identify', source, r=rev, n=num, i=id, b=branch, t=tags,
32f6a2bbf63e client: add identify command
Idan Kamara <idankk86@gmail.com>
parents: 37
diff changeset
754 B=bookmarks)
32f6a2bbf63e client: add identify command
Idan Kamara <idankk86@gmail.com>
parents: 37
diff changeset
755
32f6a2bbf63e client: add identify command
Idan Kamara <idankk86@gmail.com>
parents: 37
diff changeset
756 return self.rawcommand(args)
32f6a2bbf63e client: add identify command
Idan Kamara <idankk86@gmail.com>
parents: 37
diff changeset
757
13
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
758 def import_(self, patches, strip=None, force=False, nocommit=False,
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
759 bypass=False, exact=False, importbranch=False, message=None,
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
760 date=None, user=None, similarity=None):
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
761 """
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
762 Import the specified patches which can be a list of file names or a
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
763 file-like object and commit them individually (unless nocommit is
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
764 specified).
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
765
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
766 strip - directory strip option for patch. This has the same meaning as the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
767 corresponding patch option (default: 1)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
768
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
769 force - skip check for outstanding uncommitted changes
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
770 nocommit - don't commit, just update the working directory
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
771 bypass - apply patch without touching the working directory
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
772 exact - apply patch to the nodes from which it was generated
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
773 importbranch - use any branch information in patch (implied by exact)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
774 message - the commit message
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
775 date - record the specified date as commit date
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
776 user - record the specified user as committer
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
777 similarity - guess renamed files by similarity (0<=s<=100)
13
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
778 """
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
779 if hasattr(patches, 'read') and hasattr(patches, 'readline'):
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
780 patch = patches
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
781
13
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
782 def readline(size, output):
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
783 return patch.readline(size)
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
784
13
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
785 stdin = True
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
786 patches = ()
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
787 prompt = readline
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
788 input = patch.read
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
789 else:
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
790 stdin = False
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
791 prompt = None
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
792 input = None
5
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
793
13
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
794 args = cmdbuilder('import', *patches, strip=strip, force=force,
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
795 nocommit=nocommit, bypass=bypass, exact=exact,
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
796 importbranch=importbranch, message=message,
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
797 date=date, user=user, similarity=similarity, _=stdin)
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
798
400cb1520834 client: add missing options to import_()
Idan Kamara <idankk86@gmail.com>
parents: 12
diff changeset
799 self.rawcommand(args, prompt=prompt, input=input)
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
800
25
85ae94b98324 client: add missing options to incoming
Idan Kamara <idankk86@gmail.com>
parents: 24
diff changeset
801 def incoming(self, revrange=None, path=None, force=False, newest=False,
85ae94b98324 client: add missing options to incoming
Idan Kamara <idankk86@gmail.com>
parents: 24
diff changeset
802 bundle=None, bookmarks=False, branch=None, limit=None,
85ae94b98324 client: add missing options to incoming
Idan Kamara <idankk86@gmail.com>
parents: 24
diff changeset
803 nomerges=False, subrepos=False):
27
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
804 """
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
805 Return new changesets found in the specified path or the default pull
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
806 location.
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
807
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
808 When bookmarks=True, return a list of (name, node) of incoming bookmarks.
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
809
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
810 revrange - a remote changeset or list of changesets intended to be added
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
811 force - run even if remote repository is unrelated
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
812 newest - show newest record first
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
813 bundle - avoid downloading the changesets twice and store the bundles into
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
814 the specified file.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
815
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
816 bookmarks - compare bookmarks (this changes the return value)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
817 branch - a specific branch you would like to pull
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
818 limit - limit number of changes returned
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
819 nomerges - do not show merges
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
820 ssh - specify ssh command to use
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
821 remotecmd - specify hg command to run on the remote side
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
822 insecure- do not verify server certificate (ignoring web.cacerts config)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
823 subrepos - recurse into subrepositories
27
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
824 """
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
825 args = cmdbuilder('incoming',
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
826 path,
25
85ae94b98324 client: add missing options to incoming
Idan Kamara <idankk86@gmail.com>
parents: 24
diff changeset
827 template=templates.changeset, r=revrange,
85ae94b98324 client: add missing options to incoming
Idan Kamara <idankk86@gmail.com>
parents: 24
diff changeset
828 f=force, n=newest, bundle=bundle,
85ae94b98324 client: add missing options to incoming
Idan Kamara <idankk86@gmail.com>
parents: 24
diff changeset
829 B=bookmarks, b=branch, l=limit, M=nomerges, S=subrepos)
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
830
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
831 def eh(ret, out, err):
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
832 if ret != 1:
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
833 raise error.CommandError(args, ret, out, err)
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
834
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
835 out = self.rawcommand(args, eh=eh)
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
836 if not out:
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
837 return []
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
838
27
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
839 out = util.eatlines(out, 2)
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
840 if bookmarks:
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
841 bms = []
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
842 for line in out.splitlines():
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
843 bms.append(tuple(line.split()))
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
844 return bms
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
845 else:
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
846 out = out.split('\0')[:-1]
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
847 return self._parserevs(out)
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
848
17
b68c444d42bb client: add missing options to log()
Idan Kamara <idankk86@gmail.com>
parents: 16
diff changeset
849 def log(self, revrange=None, files=[], follow=False, followfirst=False,
b68c444d42bb client: add missing options to log()
Idan Kamara <idankk86@gmail.com>
parents: 16
diff changeset
850 date=None, copies=False, keyword=None, removed=False, onlymerges=False,
b68c444d42bb client: add missing options to log()
Idan Kamara <idankk86@gmail.com>
parents: 16
diff changeset
851 user=None, branch=None, prune=None, hidden=False, limit=None,
b68c444d42bb client: add missing options to log()
Idan Kamara <idankk86@gmail.com>
parents: 16
diff changeset
852 nomerges=False, include=None, exclude=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
853 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
854 Return the revision history of the specified files or the entire project.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
855
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
856 File history is shown without following rename or copy history of files.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
857 Use follow with a filename to follow history across renames and copies.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
858 follow without a filename will only show ancestors or descendants of the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
859 starting revision. followfirst only follows the first parent of merge
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
860 revisions.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
861
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
862 If revrange isn't specified, the default is "tip:0" unless follow is set,
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
863 in which case the working directory parent is used as the starting
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
864 revision.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
865
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
866 The returned changeset is a named tuple with the following string fields:
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
867 - rev
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
868 - node
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
869 - tags (space delimited)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
870 - branch
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
871 - author
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
872 - desc
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
873
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
874 follow - follow changeset history, or file history across copies and renames
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
875 followfirst - only follow the first parent of merge changesets
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
876 date - show revisions matching date spec
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
877 copies - show copied files
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
878 keyword - do case-insensitive search for a given text
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
879 removed - include revisions where files were removed
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
880 onlymerges - show only merges
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
881 user - revisions committed by user
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
882 branch - show changesets within the given named branch
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
883 prune - do not display revision or any of its ancestors
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
884 hidden - show hidden changesets
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
885 limit - limit number of changes displayed
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
886 nomerges - do not show merges
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
887 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
888 exclude - exclude names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
889 """
17
b68c444d42bb client: add missing options to log()
Idan Kamara <idankk86@gmail.com>
parents: 16
diff changeset
890 args = cmdbuilder('log', *files, template=templates.changeset,
b68c444d42bb client: add missing options to log()
Idan Kamara <idankk86@gmail.com>
parents: 16
diff changeset
891 r=revrange, f=follow, follow_first=followfirst,
b68c444d42bb client: add missing options to log()
Idan Kamara <idankk86@gmail.com>
parents: 16
diff changeset
892 d=date, C=copies, k=keyword, removed=removed,
b68c444d42bb client: add missing options to log()
Idan Kamara <idankk86@gmail.com>
parents: 16
diff changeset
893 m=onlymerges, u=user, b=branch, P=prune, h=hidden,
b68c444d42bb client: add missing options to log()
Idan Kamara <idankk86@gmail.com>
parents: 16
diff changeset
894 l=limit, M=nomerges, I=include, X=exclude)
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
895
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
896 out = self.rawcommand(args)
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
897 out = out.split('\0')[:-1]
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
898
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
899 return self._parserevs(out)
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
900
64
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
901 def manifest(self, rev=None, all=False):
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
902 """
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
903 Yields (nodeid, permission, executable, symlink, file path) tuples for
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
904 version controlled files for the given revision. If no revision is given,
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
905 the first parent of the working directory is used, or the null revision if
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
906 no revision is checked out.
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
907
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
908 When all is True, all files from all revisions are yielded (just the name).
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
909 This includes deleted and renamed files.
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
910 """
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
911 args = cmdbuilder('manifest', r=rev, all=all, debug=True)
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
912
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
913 out = self.rawcommand(args)
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
914
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
915 if all:
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
916 for line in out.splitlines():
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
917 yield line
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
918 else:
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
919 for line in out.splitlines():
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
920 node = line[0:40]
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
921 perm = line[41:44]
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
922 symlink = line[45] == '@'
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
923 executable = line[45] == '*'
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
924 yield (node, perm, executable, symlink, line[47:])
a7d98dc798c5 client: add manifest command
Idan Kamara <idankk86@gmail.com>
parents: 63
diff changeset
925
46
ebcc5d7dd528 client: introduce merge handlers
Idan Kamara <idankk86@gmail.com>
parents: 45
diff changeset
926 def merge(self, rev=None, force=False, tool=None, cb=merge.handlers.abort):
ebcc5d7dd528 client: introduce merge handlers
Idan Kamara <idankk86@gmail.com>
parents: 45
diff changeset
927 """
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
928 Merge working directory with rev. If no revision is specified, the working
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
929 directory's parent is a head revision, and the current branch contains
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
930 exactly one other head, the other head is merged with by default.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
931
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
932 The current working directory is updated with all changes made in the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
933 requested revision since the last common predecessor revision.
46
ebcc5d7dd528 client: introduce merge handlers
Idan Kamara <idankk86@gmail.com>
parents: 45
diff changeset
934
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
935 Files that changed between either parent are marked as changed for the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
936 next commit and a commit must be performed before any further updates to
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
937 the repository are allowed. The next commit will have two parents.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
938
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
939 force - force a merge with outstanding changes
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
940 tool - can be used to specify the merge tool used for file merges. It
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
941 overrides the HGMERGE environment variable and your configuration files.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
942
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
943 cb - controls the behaviour when Mercurial prompts what to do with regard
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
944 to a specific file, e.g. when one parent modified a file and the other
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
945 removed it. It can be one of merge.handlers, or a function that gets a
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
946 single argument which are the contents of stdout. It should return one
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
947 of the expected choices (a single character).
46
ebcc5d7dd528 client: introduce merge handlers
Idan Kamara <idankk86@gmail.com>
parents: 45
diff changeset
948 """
45
191855a9d813 client: add merge command
Idan Kamara <idankk86@gmail.com>
parents: 44
diff changeset
949 # we can't really use --preview since merge doesn't support --template
191855a9d813 client: add merge command
Idan Kamara <idankk86@gmail.com>
parents: 44
diff changeset
950 args = cmdbuilder('merge', r=rev, f=force, t=tool)
191855a9d813 client: add merge command
Idan Kamara <idankk86@gmail.com>
parents: 44
diff changeset
951
46
ebcc5d7dd528 client: introduce merge handlers
Idan Kamara <idankk86@gmail.com>
parents: 45
diff changeset
952 prompt = None
ebcc5d7dd528 client: introduce merge handlers
Idan Kamara <idankk86@gmail.com>
parents: 45
diff changeset
953 if cb is merge.handlers.abort:
ebcc5d7dd528 client: introduce merge handlers
Idan Kamara <idankk86@gmail.com>
parents: 45
diff changeset
954 prompt = cb
ebcc5d7dd528 client: introduce merge handlers
Idan Kamara <idankk86@gmail.com>
parents: 45
diff changeset
955 elif cb is merge.handlers.noninteractive:
ebcc5d7dd528 client: introduce merge handlers
Idan Kamara <idankk86@gmail.com>
parents: 45
diff changeset
956 args.append('-y')
ebcc5d7dd528 client: introduce merge handlers
Idan Kamara <idankk86@gmail.com>
parents: 45
diff changeset
957 else:
ebcc5d7dd528 client: introduce merge handlers
Idan Kamara <idankk86@gmail.com>
parents: 45
diff changeset
958 prompt = lambda size, output: cb(output) + '\n'
ebcc5d7dd528 client: introduce merge handlers
Idan Kamara <idankk86@gmail.com>
parents: 45
diff changeset
959
ebcc5d7dd528 client: introduce merge handlers
Idan Kamara <idankk86@gmail.com>
parents: 45
diff changeset
960 self.rawcommand(args, prompt=prompt)
45
191855a9d813 client: add merge command
Idan Kamara <idankk86@gmail.com>
parents: 44
diff changeset
961
32
a2fc0a7f648e client: add move command
Idan Kamara <idankk86@gmail.com>
parents: 31
diff changeset
962 def move(self, source, dest, after=False, force=False, dryrun=False,
a2fc0a7f648e client: add move command
Idan Kamara <idankk86@gmail.com>
parents: 31
diff changeset
963 include=None, exclude=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
964 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
965 Mark dest as copies of source; mark source for deletion. If dest is a
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
966 directory, copies are put in that directory. If dest is a file, then source
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
967 must be a string.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
968
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
969 Returns True on success, False if errors are encountered.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
970
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
971 source - a file or a list of files
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
972 dest - a destination file or directory
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
973 after - record a rename that has already occurred
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
974 force - forcibly copy over an existing managed file
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
975 dryrun - do not perform actions, just print output
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
976 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
977 exclude - exclude names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
978 """
32
a2fc0a7f648e client: add move command
Idan Kamara <idankk86@gmail.com>
parents: 31
diff changeset
979 if not isinstance(source, list):
a2fc0a7f648e client: add move command
Idan Kamara <idankk86@gmail.com>
parents: 31
diff changeset
980 source = [source]
a2fc0a7f648e client: add move command
Idan Kamara <idankk86@gmail.com>
parents: 31
diff changeset
981
a2fc0a7f648e client: add move command
Idan Kamara <idankk86@gmail.com>
parents: 31
diff changeset
982 source.append(dest)
a2fc0a7f648e client: add move command
Idan Kamara <idankk86@gmail.com>
parents: 31
diff changeset
983 args = cmdbuilder('move', *source, A=after, f=force, n=dryrun,
a2fc0a7f648e client: add move command
Idan Kamara <idankk86@gmail.com>
parents: 31
diff changeset
984 I=include, X=exclude)
a2fc0a7f648e client: add move command
Idan Kamara <idankk86@gmail.com>
parents: 31
diff changeset
985
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
986 eh = util.reterrorhandler(args)
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
987 self.rawcommand(args, eh=eh)
32
a2fc0a7f648e client: add move command
Idan Kamara <idankk86@gmail.com>
parents: 31
diff changeset
988
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
989 return bool(eh)
32
a2fc0a7f648e client: add move command
Idan Kamara <idankk86@gmail.com>
parents: 31
diff changeset
990
26
b4e5c8745ef3 client: add missing options to outgoing
Idan Kamara <idankk86@gmail.com>
parents: 25
diff changeset
991 def outgoing(self, revrange=None, path=None, force=False, newest=False,
b4e5c8745ef3 client: add missing options to outgoing
Idan Kamara <idankk86@gmail.com>
parents: 25
diff changeset
992 bookmarks=False, branch=None, limit=None, nomerges=False,
b4e5c8745ef3 client: add missing options to outgoing
Idan Kamara <idankk86@gmail.com>
parents: 25
diff changeset
993 subrepos=False):
27
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
994 """
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
995 Return changesets not found in the specified path or the default push
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
996 location.
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
997
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
998 When bookmarks=True, return a list of (name, node) of bookmarks that will
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
999 be pushed.
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1000
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1001 revrange - a (list of) changeset intended to be included in the destination
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1002 force - run even when the destination is unrelated
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1003 newest - show newest record first
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1004 branch - a specific branch you would like to push
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1005 limit - limit number of changes displayed
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1006 nomerges - do not show merges
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1007 ssh - specify ssh command to use
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1008 remotecmd - specify hg command to run on the remote side
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1009 insecure - do not verify server certificate (ignoring web.cacerts config)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1010 subrepos - recurse into subrepositories
27
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
1011 """
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1012 args = cmdbuilder('outgoing',
26
b4e5c8745ef3 client: add missing options to outgoing
Idan Kamara <idankk86@gmail.com>
parents: 25
diff changeset
1013 path,
b4e5c8745ef3 client: add missing options to outgoing
Idan Kamara <idankk86@gmail.com>
parents: 25
diff changeset
1014 template=templates.changeset, r=revrange,
b4e5c8745ef3 client: add missing options to outgoing
Idan Kamara <idankk86@gmail.com>
parents: 25
diff changeset
1015 f=force, n=newest, B=bookmarks,
b4e5c8745ef3 client: add missing options to outgoing
Idan Kamara <idankk86@gmail.com>
parents: 25
diff changeset
1016 b=branch, S=subrepos)
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
1017
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1018 def eh(ret, out, err):
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1019 if ret != 1:
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1020 raise error.CommandError(args, ret, out, err)
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
1021
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1022 out = self.rawcommand(args, eh=eh)
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1023 if not out:
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1024 return []
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1025
27
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
1026 out = util.eatlines(out, 2)
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
1027 if bookmarks:
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
1028 bms = []
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
1029 for line in out.splitlines():
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
1030 bms.append(tuple(line.split()))
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
1031 return bms
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
1032 else:
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
1033 out = out.split('\0')[:-1]
46908f4b87d5 client: add bookmarks support to incoming and outgoing
Idan Kamara <idankk86@gmail.com>
parents: 26
diff changeset
1034 return self._parserevs(out)
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
1035
18
518149e32888 client: add parents command
Idan Kamara <idankk86@gmail.com>
parents: 17
diff changeset
1036 def parents(self, rev=None, file=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1037 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1038 Return the working directory's parent revisions. If rev is given, the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1039 parent of that revision will be printed. If file is given, the revision
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1040 in which the file was last changed (before the working directory revision
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1041 or the revision specified by rev) is returned.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1042 """
18
518149e32888 client: add parents command
Idan Kamara <idankk86@gmail.com>
parents: 17
diff changeset
1043 args = cmdbuilder('parents', file, template=templates.changeset, r=rev)
518149e32888 client: add parents command
Idan Kamara <idankk86@gmail.com>
parents: 17
diff changeset
1044
518149e32888 client: add parents command
Idan Kamara <idankk86@gmail.com>
parents: 17
diff changeset
1045 out = self.rawcommand(args)
518149e32888 client: add parents command
Idan Kamara <idankk86@gmail.com>
parents: 17
diff changeset
1046 if not out:
518149e32888 client: add parents command
Idan Kamara <idankk86@gmail.com>
parents: 17
diff changeset
1047 return
518149e32888 client: add parents command
Idan Kamara <idankk86@gmail.com>
parents: 17
diff changeset
1048
518149e32888 client: add parents command
Idan Kamara <idankk86@gmail.com>
parents: 17
diff changeset
1049 out = out.split('\0')[:-1]
518149e32888 client: add parents command
Idan Kamara <idankk86@gmail.com>
parents: 17
diff changeset
1050
518149e32888 client: add parents command
Idan Kamara <idankk86@gmail.com>
parents: 17
diff changeset
1051 return self._parserevs(out)
518149e32888 client: add parents command
Idan Kamara <idankk86@gmail.com>
parents: 17
diff changeset
1052
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
1053 def paths(self, name=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1054 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1055 Return the definition of given symbolic path name. If no name is given,
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1056 return a dictionary of pathname : url of all available names.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1057
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1058 Path names are defined in the [paths] section of your configuration file
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1059 and in "/etc/mercurial/hgrc". If run inside a repository, ".hg/hgrc" is
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1060 used, too.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1061 """
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
1062 if not name:
5
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
1063 out = self.rawcommand(['paths'])
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
1064 if not out:
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
1065 return {}
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
1066
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
1067 return dict([s.split(' = ') for s in out.rstrip().split('\n')])
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
1068 else:
4
a3a9cf58801f client: use the cmdbuilder
Idan Kamara <idankk86@gmail.com>
parents: 2
diff changeset
1069 args = cmdbuilder('paths', name)
5
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
1070 out = self.rawcommand(args)
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
1071 return out.rstrip()
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
1072
40
238efe4fd7db client: add pull command
Idan Kamara <idankk86@gmail.com>
parents: 39
diff changeset
1073 def pull(self, source=None, rev=None, update=False, force=False, bookmark=None,
238efe4fd7db client: add pull command
Idan Kamara <idankk86@gmail.com>
parents: 39
diff changeset
1074 branch=None, ssh=None, remotecmd=None, insecure=False, tool=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1075 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1076 Pull changes from a remote repository.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1077
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1078 This finds all changes from the repository specified by source and adds
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1079 them to this repository. If source is omitted, the 'default' path will be
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1080 used. By default, this does not update the copy of the project in the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1081 working directory.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1082
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1083 Returns True on success, False if update was given and there were
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1084 unresolved files.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1085
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1086 update - update to new branch head if changesets were pulled
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1087 force - run even when remote repository is unrelated
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1088 rev - a (list of) remote changeset intended to be added
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1089 bookmark - (list of) bookmark to pull
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1090 branch - a (list of) specific branch you would like to pull
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1091 ssh - specify ssh command to use
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1092 remotecmd - specify hg command to run on the remote side
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1093 insecure - do not verify server certificate (ignoring web.cacerts config)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1094 tool - specify merge tool for rebase
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1095 """
40
238efe4fd7db client: add pull command
Idan Kamara <idankk86@gmail.com>
parents: 39
diff changeset
1096 args = cmdbuilder('pull', source, r=rev, u=update, f=force, B=bookmark,
238efe4fd7db client: add pull command
Idan Kamara <idankk86@gmail.com>
parents: 39
diff changeset
1097 b=branch, e=ssh, remotecmd=remotecmd, insecure=insecure,
238efe4fd7db client: add pull command
Idan Kamara <idankk86@gmail.com>
parents: 39
diff changeset
1098 t=tool)
238efe4fd7db client: add pull command
Idan Kamara <idankk86@gmail.com>
parents: 39
diff changeset
1099
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
1100 eh = util.reterrorhandler(args)
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
1101 self.rawcommand(args, eh=eh)
40
238efe4fd7db client: add pull command
Idan Kamara <idankk86@gmail.com>
parents: 39
diff changeset
1102
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
1103 return bool(eh)
40
238efe4fd7db client: add pull command
Idan Kamara <idankk86@gmail.com>
parents: 39
diff changeset
1104
39
0555d58a7313 client: add push command
Idan Kamara <idankk86@gmail.com>
parents: 38
diff changeset
1105 def push(self, dest=None, rev=None, force=False, bookmark=None, branch=None,
0555d58a7313 client: add push command
Idan Kamara <idankk86@gmail.com>
parents: 38
diff changeset
1106 newbranch=False, ssh=None, remotecmd=None, insecure=False):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1107 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1108 Push changesets from this repository to the specified destination.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1109
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1110 This operation is symmetrical to pull: it is identical to a pull in the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1111 destination repository from the current one.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1112
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1113 Returns True if push was successful, False if nothing to push.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1114
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1115 rev - the (list of) specified revision and all its ancestors will be pushed
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1116 to the remote repository.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1117
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1118 force - override the default behavior and push all changesets on all
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1119 branches.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1120
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1121 bookmark - (list of) bookmark to push
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1122 branch - a (list of) specific branch you would like to push
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1123 newbranch - allows push to create a new named branch that is not present at
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1124 the destination. This allows you to only create a new branch without
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1125 forcing other changes.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1126
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1127 ssh - specify ssh command to use
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1128 remotecmd - specify hg command to run on the remote side
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1129 insecure - do not verify server certificate (ignoring web.cacerts config)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1130 """
39
0555d58a7313 client: add push command
Idan Kamara <idankk86@gmail.com>
parents: 38
diff changeset
1131 args = cmdbuilder('push', dest, r=rev, f=force, B=bookmark, b=branch,
0555d58a7313 client: add push command
Idan Kamara <idankk86@gmail.com>
parents: 38
diff changeset
1132 new_branch=newbranch, e=ssh, remotecmd=remotecmd,
0555d58a7313 client: add push command
Idan Kamara <idankk86@gmail.com>
parents: 38
diff changeset
1133 insecure=insecure)
0555d58a7313 client: add push command
Idan Kamara <idankk86@gmail.com>
parents: 38
diff changeset
1134
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
1135 eh = util.reterrorhandler(args)
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
1136 self.rawcommand(args, eh=eh)
39
0555d58a7313 client: add push command
Idan Kamara <idankk86@gmail.com>
parents: 38
diff changeset
1137
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
1138 return bool(eh)
39
0555d58a7313 client: add push command
Idan Kamara <idankk86@gmail.com>
parents: 38
diff changeset
1139
30
b7042bb3dbfd client: add remove command
Idan Kamara <idankk86@gmail.com>
parents: 29
diff changeset
1140 def remove(self, files, after=False, force=False, include=None, exclude=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1141 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1142 Schedule the indicated files for removal from the repository. This only
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1143 removes files from the current branch, not from the entire project history.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1144
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1145 Returns True on success, False if any warnings encountered.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1146
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1147 after - used to remove only files that have already been deleted
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1148 force - remove (and delete) file even if added or modified
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1149 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1150 exclude - exclude names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1151 """
30
b7042bb3dbfd client: add remove command
Idan Kamara <idankk86@gmail.com>
parents: 29
diff changeset
1152 if not isinstance(files, list):
b7042bb3dbfd client: add remove command
Idan Kamara <idankk86@gmail.com>
parents: 29
diff changeset
1153 files = [files]
b7042bb3dbfd client: add remove command
Idan Kamara <idankk86@gmail.com>
parents: 29
diff changeset
1154
b7042bb3dbfd client: add remove command
Idan Kamara <idankk86@gmail.com>
parents: 29
diff changeset
1155 args = cmdbuilder('remove', *files, A=after, f=force, I=include, X=exclude)
b7042bb3dbfd client: add remove command
Idan Kamara <idankk86@gmail.com>
parents: 29
diff changeset
1156
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
1157 eh = util.reterrorhandler(args)
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
1158 self.rawcommand(args, eh=eh)
30
b7042bb3dbfd client: add remove command
Idan Kamara <idankk86@gmail.com>
parents: 29
diff changeset
1159
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
1160 return bool(eh)
30
b7042bb3dbfd client: add remove command
Idan Kamara <idankk86@gmail.com>
parents: 29
diff changeset
1161
63
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1162 def resolve(self, file=[], all=False, listfiles=False, mark=False, unmark=False,
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1163 tool=None, include=None, exclude=None):
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1164 """
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1165 Redo merges or set/view the merge status of given files.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1166
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1167 Returns True on success, False if any files fail a resolve attempt.
63
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1168
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1169 When listfiles is True, returns a list of (code, file path) of resolved
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1170 and unresolved files. Code will be 'R' or 'U' accordingly.
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1171
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1172 all - select all unresolved files
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1173 mark - mark files as resolved
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1174 unmark - mark files as unresolved
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1175 tool - specify merge tool
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1176 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1177 exclude - exclude names matching the given patterns
63
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1178 """
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1179 if not isinstance(file, list):
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1180 file = [file]
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1181
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1182 args = cmdbuilder('resolve', *file, a=all, l=listfiles, m=mark, u=unmark,
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1183 t=tool, I=include, X=exclude)
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1184
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1185 out = self.rawcommand(args)
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1186
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1187 if listfiles:
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1188 l = []
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1189 for line in out.splitlines():
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1190 l.append(tuple(line.split(' ', 1)))
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1191 return l
939d1d763bb1 client: add resolve command
Idan Kamara <idankk86@gmail.com>
parents: 62
diff changeset
1192
47
94d2988e55b7 client: add revert command
Idan Kamara <idankk86@gmail.com>
parents: 46
diff changeset
1193 def revert(self, files, rev=None, all=False, date=None, nobackup=False,
94d2988e55b7 client: add revert command
Idan Kamara <idankk86@gmail.com>
parents: 46
diff changeset
1194 dryrun=False, include=None, exclude=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1195 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1196 With no revision specified, revert the specified files or directories to
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1197 the contents they had in the parent of the working directory. This
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1198 restores the contents of files to an unmodified state and unschedules
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1199 adds, removes, copies, and renames. If the working directory has two
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1200 parents, you must explicitly specify a revision.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1201
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1202 Specifying rev or date will revert the given files or directories to their
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1203 states as of a specific revision. Because revert does not change the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1204 working directory parents, this will cause these files to appear modified.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1205 This can be helpful to "back out" some or all of an earlier change.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1206
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1207 Modified files are saved with a .orig suffix before reverting. To disable
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1208 these backups, use nobackup.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1209
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1210 Returns True on success.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1211
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1212 all - revert all changes when no arguments given
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1213 date - tipmost revision matching date
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1214 rev - revert to the specified revision
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1215 nobackup - do not save backup copies of files
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1216 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1217 exclude - exclude names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1218 dryrun - do not perform actions, just print output
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1219 """
47
94d2988e55b7 client: add revert command
Idan Kamara <idankk86@gmail.com>
parents: 46
diff changeset
1220 if not isinstance(files, list):
94d2988e55b7 client: add revert command
Idan Kamara <idankk86@gmail.com>
parents: 46
diff changeset
1221 files = [files]
94d2988e55b7 client: add revert command
Idan Kamara <idankk86@gmail.com>
parents: 46
diff changeset
1222
94d2988e55b7 client: add revert command
Idan Kamara <idankk86@gmail.com>
parents: 46
diff changeset
1223 args = cmdbuilder('revert', *files, r=rev, a=all, d=date,
94d2988e55b7 client: add revert command
Idan Kamara <idankk86@gmail.com>
parents: 46
diff changeset
1224 no_backup=nobackup, n=dryrun, I=include, X=exclude)
94d2988e55b7 client: add revert command
Idan Kamara <idankk86@gmail.com>
parents: 46
diff changeset
1225
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
1226 eh = util.reterrorhandler(args)
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
1227 self.rawcommand(args, eh=eh)
47
94d2988e55b7 client: add revert command
Idan Kamara <idankk86@gmail.com>
parents: 46
diff changeset
1228
50
bd7dfd94b0d9 client: use util.reterrorhandler
Idan Kamara <idankk86@gmail.com>
parents: 48
diff changeset
1229 return bool(eh)
47
94d2988e55b7 client: add revert command
Idan Kamara <idankk86@gmail.com>
parents: 46
diff changeset
1230
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1231 def root(self):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1232 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1233 Return the root directory of the current repository.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1234 """
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1235 return self.rawcommand(['root']).rstrip()
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1236
33
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1237 def status(self, rev=None, change=None, all=False, modified=False, added=False,
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1238 removed=False, deleted=False, clean=False, unknown=False,
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1239 ignored=False, copies=False, subrepos=False, include=None,
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1240 exclude=None):
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1241 """
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1242 Return status of files in the repository as a list of (code, file path)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1243 where code can be:
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1244
33
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1245 M = modified
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1246 A = added
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1247 R = removed
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1248 C = clean
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1249 ! = missing (deleted by non-hg command, but still tracked)
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1250 ? = untracked
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1251 I = ignored
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1252 = origin of the previous file listed as A (added)
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1253
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1254 rev - show difference from (list of) revision
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1255 change - list the changed files of a revision
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1256 all - show status of all files
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1257 modified - show only modified files
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1258 added - show only added files
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1259 removed - show only removed files
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1260 deleted - show only deleted (but tracked) files
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1261 clean - show only files without changes
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1262 unknown - show only unknown (not tracked) files
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1263 ignored - show only ignored files
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1264 copies - show source of copied files
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1265 subrepos - recurse into subrepositories
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1266 include - include names matching the given patterns
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1267 exclude - exclude names matching the given patterns
33
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1268 """
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1269 if rev and change:
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1270 raise ValueError('cannot specify both rev and change')
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1271
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1272 args = cmdbuilder('status', rev=rev, change=change, A=all, m=modified,
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1273 a=added, r=removed, d=deleted, c=clean, u=unknown,
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1274 i=ignored, C=copies, S=subrepos, I=include, X=exclude)
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1275
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1276 args.append('-0')
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1277
d74a5891d9d1 client: add missing options to status
Idan Kamara <idankk86@gmail.com>
parents: 32
diff changeset
1278 out = self.rawcommand(args)
34
f6e1d9a6e0cd client: change return value of status() to a list of (code, file path)
Idan Kamara <idankk86@gmail.com>
parents: 33
diff changeset
1279 l = []
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1280
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1281 for entry in out.split('\0'):
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1282 if entry:
35
1e33bbea23e5 client: handle spaces correctly in status()
Idan Kamara <idankk86@gmail.com>
parents: 34
diff changeset
1283 if entry[0] == ' ':
1e33bbea23e5 client: handle spaces correctly in status()
Idan Kamara <idankk86@gmail.com>
parents: 34
diff changeset
1284 l.append((' ', entry[2:]))
1e33bbea23e5 client: handle spaces correctly in status()
Idan Kamara <idankk86@gmail.com>
parents: 34
diff changeset
1285 else:
1e33bbea23e5 client: handle spaces correctly in status()
Idan Kamara <idankk86@gmail.com>
parents: 34
diff changeset
1286 l.append(tuple(entry.split(' ', 1)))
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1287
34
f6e1d9a6e0cd client: change return value of status() to a list of (code, file path)
Idan Kamara <idankk86@gmail.com>
parents: 33
diff changeset
1288 return l
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1289
42
b6b75c71ac58 client: add tag command
Idan Kamara <idankk86@gmail.com>
parents: 41
diff changeset
1290 def tag(self, names, rev=None, message=None, force=False, local=False,
b6b75c71ac58 client: add tag command
Idan Kamara <idankk86@gmail.com>
parents: 41
diff changeset
1291 remove=False, date=None, user=None):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1292 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1293 Add one or more tags specified by names for the current or given revision.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1294
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1295 Changing an existing tag is normally disallowed; use force to override.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1296
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1297 Tag commits are usually made at the head of a branch. If the parent of the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1298 working directory is not a branch head, a CommandError will be raised.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1299 force can be specified to force the tag commit to be based on a non-head
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1300 changeset.
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1301
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1302 local - make the tag local
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1303 rev - revision to tag
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1304 remove - remove a tag
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1305 message - set commit message
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1306 date - record the specified date as commit date
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1307 user - record the specified user as committer
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1308 """
42
b6b75c71ac58 client: add tag command
Idan Kamara <idankk86@gmail.com>
parents: 41
diff changeset
1309 if not isinstance(names, list):
b6b75c71ac58 client: add tag command
Idan Kamara <idankk86@gmail.com>
parents: 41
diff changeset
1310 names = [names]
b6b75c71ac58 client: add tag command
Idan Kamara <idankk86@gmail.com>
parents: 41
diff changeset
1311
b6b75c71ac58 client: add tag command
Idan Kamara <idankk86@gmail.com>
parents: 41
diff changeset
1312 args = cmdbuilder('tag', *names, r=rev, m=message, f=force, l=local,
b6b75c71ac58 client: add tag command
Idan Kamara <idankk86@gmail.com>
parents: 41
diff changeset
1313 remove=remove, d=date, u=user)
b6b75c71ac58 client: add tag command
Idan Kamara <idankk86@gmail.com>
parents: 41
diff changeset
1314
b6b75c71ac58 client: add tag command
Idan Kamara <idankk86@gmail.com>
parents: 41
diff changeset
1315 self.rawcommand(args)
b6b75c71ac58 client: add tag command
Idan Kamara <idankk86@gmail.com>
parents: 41
diff changeset
1316
43
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1317 def tags(self):
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1318 """
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1319 Return a list of repository tags as: (name, rev, node, islocal)
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1320 """
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1321 args = cmdbuilder('tags', v=True)
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1322
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1323 out = self.rawcommand(args)
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1324
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1325 t = []
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1326 for line in out.splitlines():
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1327 taglocal = line.endswith(' local')
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1328 if taglocal:
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1329 line = line[:-6]
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1330 name, rev = line.rsplit(' ', 1)
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1331 rev, node = rev.split(':')
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1332 t.append((name.rstrip(), int(rev), node, taglocal))
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1333 return t
77ebb51f5f36 client: add tags command
Idan Kamara <idankk86@gmail.com>
parents: 42
diff changeset
1334
51
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1335 def summary(self, remote=False):
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1336 """
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1337 Return a dictionary with a brief summary of the working directory state,
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1338 including parents, branch, commit status, and available updates.
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1339
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1340 'parent' : a list of (rev, node, tags, message)
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1341 'branch' : the current branch
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1342 'commit' : True if the working directory is clean, False otherwise
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1343 'update' : number of available updates,
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1344 ['remote' : (in, in bookmarks, out, out bookmarks),]
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1345 ['mq': (applied, unapplied) mq patches,]
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1346
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1347 unparsed entries will be of them form key : value
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1348 """
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1349 args = cmdbuilder('summary', remote=remote)
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1350
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1351 out = self.rawcommand(args).splitlines()
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1352
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1353 d = {}
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1354 while out:
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1355 line = out.pop(0)
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1356 name, value = line.split(': ', 1)
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1357
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1358 if name == 'parent':
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1359 parent, tags = value.split(' ', 1)
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1360 rev, node = parent.split(':')
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1361
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1362 if tags:
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1363 tags = tags.replace(' (empty repository)', '')
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1364 else:
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1365 tags = None
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1366
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1367 value = d.get(name, [])
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1368
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1369 if rev == '-1':
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1370 value.append((int(rev), node, tags, None))
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1371 else:
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1372 message = out.pop(0)[1:]
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1373 value.append((int(rev), node, tags, message))
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1374 elif name == 'branch':
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1375 pass
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1376 elif name == 'commit':
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1377 value = value == '(clean)'
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1378 elif name == 'update':
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1379 if value == '(current)':
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1380 value = 0
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1381 else:
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1382 value = int(value.split(' ', 1)[0])
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1383 elif remote and name == 'remote':
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1384 if value == '(synced)':
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1385 value = 0, 0, 0, 0
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1386 else:
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1387 inc = incb = out_ = outb = 0
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1388
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1389 for v in value.split(', '):
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1390 count, v = v.split(' ', 1)
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1391 if v == 'outgoing':
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1392 out_ = int(count)
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1393 elif v.endswith('incoming'):
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1394 inc = int(count)
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1395 elif v == 'incoming bookmarks':
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1396 incb = int(count)
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1397 elif v == 'outgoing bookmarks':
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1398 outb = int(count)
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1399
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1400 value = inc, incb, out_, outb
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1401 elif name == 'mq':
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1402 applied = unapplied = 0
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1403 for v in value.split(', '):
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1404 count, v = v.split(' ', 1)
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1405 if v == 'applied':
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1406 applied = int(count)
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1407 elif v == 'unapplied':
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1408 unapplied = int(count)
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1409 value = applied, unapplied
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1410
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1411 d[name] = value
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1412
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1413 return d
c52383a550fb client: add summary command
Idan Kamara <idankk86@gmail.com>
parents: 50
diff changeset
1414
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1415 def tip(self):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1416 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1417 Return the tip revision (usually just called the tip) which is the
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1418 changeset most recently added to the repository (and therefore the most
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1419 recently changed head).
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1420 """
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1421 args = cmdbuilder('tip', template=templates.changeset)
5
3182303f388d client: rawcommand, more convenient helper to run commands instead of outputruncommand
Idan Kamara <idankk86@gmail.com>
parents: 4
diff changeset
1422 out = self.rawcommand(args)
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1423 out = out.split('\0')
2
5fa34c3ac9a0 turn hglib into a module and expose open (previously connect) in its __init__.py
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
1424
10
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1425 return self._parserevs(out)[0]
fce3102c19e5 client: sort commands by name
Idan Kamara <idankk86@gmail.com>
parents: 8
diff changeset
1426
20
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1427 def update(self, rev=None, clean=False, check=False, date=None):
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1428 """
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1429 Update the repository's working directory to changeset specified by rev.
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1430 If rev isn't specified, update to the tip of the current named branch.
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1431
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1432 Return the number of files (updated, merged, removed, unresolved)
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1433
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1434 clean - discard uncommitted changes (no backup)
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1435 check - update across branches if no uncommitted changes
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1436 date - tipmost revision matching date
20
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1437 """
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1438 if clean and check:
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1439 raise ValueError('clean and check cannot both be True')
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1440
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1441 args = cmdbuilder('update', r=rev, C=clean, c=check, d=date)
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1442
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1443 def eh(ret, out, err):
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1444 if ret == 1:
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1445 return out
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1446
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1447 raise error.CommandError(args, ret, out, err)
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1448
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1449
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1450 out = self.rawcommand(args, eh=eh)
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1451
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1452 # filter out 'merging ...' lines
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1453 out = util.skiplines(out, 'merging ')
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1454
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1455 counters = out.rstrip().split(', ')
6a9d16ddae31 client: add update command
Idan Kamara <idankk86@gmail.com>
parents: 18
diff changeset
1456 return tuple(int(s.split(' ', 1)[0]) for s in counters)
41
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1457
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1458 @property
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1459 def version(self):
65
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1460 """
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1461 Return hg version that runs the command server as a 4 fielded tuple: major,
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1462 minor, micro and local build info. e.g. (1, 9, 1, '+4-3095db9f5c2c')
91ffa1de398c document all commands in client.py
Idan Kamara <idankk86@gmail.com>
parents: 64
diff changeset
1463 """
41
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1464 if self._version is None:
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1465 v = self.rawcommand(cmdbuilder('version', q=True))
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1466 v = list(re.match(r'.*?(\d+)\.(\d+)\.?(\d+)?(\+[0-9a-f-]+)?',
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1467 v).groups())
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1468
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1469 for i in range(3):
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1470 try:
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1471 v[i] = int(v[i])
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1472 except TypeError:
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1473 v[i] = 0
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1474
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1475 self._version = tuple(v)
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1476
e185c3922c68 client: add version command
Idan Kamara <idankk86@gmail.com>
parents: 40
diff changeset
1477 return self._version