comparison hglib/client.py @ 10:fce3102c19e5

client: sort commands by name
author Idan Kamara <idankk86@gmail.com>
date Tue, 09 Aug 2011 23:24:40 +0300
parents 3ac38d500d68
children 0549d00a617d
comparison
equal deleted inserted replaced
9:5882a698ad5c 10:fce3102c19e5
139 self.server.wait() 139 self.server.wait()
140 ret = self.server.returncode 140 ret = self.server.returncode
141 self.server = None 141 self.server = None
142 return ret 142 return ret
143 143
144 def branch(self, name=None):
145 if not name:
146 return self.rawcommand(['branch']).rstrip()
147
148 def branches(self):
149 out = self.rawcommand(['branches'])
150 branches = {}
151 for line in out.rstrip().split('\n'):
152 branch, revnode = line.split()
153 branches[branch] = self.log(revrange=[revnode.split(':')[0]])[0]
154
155 return branches
156
157 def cat(self, files, rev=None, output=None):
158 args = cmdbuilder('cat', *files, r=rev, o=output)
159 out = self.rawcommand(args)
160
161 if not output:
162 return out
163
164 def clone(self, source='.', dest=None, branch=None, updaterev=None,
165 revrange=None):
166 args = cmdbuilder('clone', source, dest, b=branch, u=updaterev, r=revrange)
167 self.rawcommand(args)
168
169 def commit(self, message, addremove=False):
170 args = cmdbuilder('commit', m=message, A=addremove)
171
172 self.rawcommand(args)
173
174 # hope the tip hasn't changed since we committed
175 return self.tip()
176
177 def config(self, refresh=False):
178 if not self._config or refresh:
179 self._config.clear()
180
181 out = self.rawcommand(['showconfig'])
182
183 for entry in cStringIO.StringIO(out):
184 k, v = entry.rstrip().split('=', 1)
185 section, name = k.split('.', 1)
186 self._config.setdefault(section, {})[name] = v
187
188 return self._config
189
144 @property 190 @property
145 def encoding(self): 191 def encoding(self):
146 """ get the servers encoding """ 192 """ get the servers encoding """
147 if not 'getencoding' in self.capabilities: 193 if not 'getencoding' in self.capabilities:
148 raise CapabilityError('getencoding') 194 raise CapabilityError('getencoding')
150 if not self._encoding: 196 if not self._encoding:
151 self.server.stdin.write('getencoding\n') 197 self.server.stdin.write('getencoding\n')
152 self._encoding = self._readfromchannel('r') 198 self._encoding = self._readfromchannel('r')
153 199
154 return self._encoding 200 return self._encoding
155
156 def config(self, refresh=False):
157 if not self._config or refresh:
158 self._config.clear()
159
160 out = self.rawcommand(['showconfig'])
161
162 for entry in cStringIO.StringIO(out):
163 k, v = entry.rstrip().split('=', 1)
164 section, name = k.split('.', 1)
165 self._config.setdefault(section, {})[name] = v
166
167 return self._config
168
169 def status(self):
170 out = self.rawcommand(['status', '-0'])
171
172 d = dict((c, []) for c in 'MARC!?I')
173
174 for entry in out.split('\0'):
175 if entry:
176 t, f = entry.split(' ', 1)
177 d[t].append(f)
178
179 return d
180
181 def log(self, revrange=None):
182 args = cmdbuilder('log', template=templates.changeset, rev=revrange)
183
184 out = self.rawcommand(args)
185 out = out.split('\0')[:-1]
186
187 return self._parserevs(out)
188
189 def incoming(self, revrange=None, path=None):
190 args = cmdbuilder('incoming',
191 path,
192 template=templates.changeset, rev=revrange)
193
194 def eh(ret, out, err):
195 if ret != 1:
196 raise error.CommandError(args, ret, out, err)
197
198 out = self.rawcommand(args, eh=eh)
199 if not out:
200 return []
201
202 out = util.eatlines(out, 2).split('\0')[:-1]
203 return self._parserevs(out)
204
205 def outgoing(self, revrange=None, path=None):
206 args = cmdbuilder('outgoing',
207 path, template=templates.changeset, rev=revrange)
208
209 def eh(ret, out, err):
210 if ret != 1:
211 raise error.CommandError(args, ret, out, err)
212
213 out = self.rawcommand(args, eh=eh)
214 if not out:
215 return []
216
217 out = util.eatlines(out, 2).split('\0')[:-1]
218 return self._parserevs(out)
219
220 def commit(self, message, addremove=False):
221 args = cmdbuilder('commit', m=message, A=addremove)
222
223 self.rawcommand(args)
224
225 # hope the tip hasn't changed since we committed
226 return self.tip()
227 201
228 def import_(self, patch): 202 def import_(self, patch):
229 if isinstance(patch, str): 203 if isinstance(patch, str):
230 fp = open(patch) 204 fp = open(patch)
231 else: 205 else:
242 prompt=readline, input=fp.read) 216 prompt=readline, input=fp.read)
243 finally: 217 finally:
244 if fp != patch: 218 if fp != patch:
245 fp.close() 219 fp.close()
246 220
247 def root(self): 221 def incoming(self, revrange=None, path=None):
248 return self.rawcommand(['root']).rstrip() 222 args = cmdbuilder('incoming',
249 223 path,
250 def clone(self, source='.', dest=None, branch=None, updaterev=None, 224 template=templates.changeset, rev=revrange)
251 revrange=None): 225
252 args = cmdbuilder('clone', source, dest, b=branch, u=updaterev, r=revrange) 226 def eh(ret, out, err):
253 self.rawcommand(args) 227 if ret != 1:
254 228 raise error.CommandError(args, ret, out, err)
255 def tip(self): 229
256 args = cmdbuilder('tip', template=templates.changeset) 230 out = self.rawcommand(args, eh=eh)
231 if not out:
232 return []
233
234 out = util.eatlines(out, 2).split('\0')[:-1]
235 return self._parserevs(out)
236
237 def log(self, revrange=None):
238 args = cmdbuilder('log', template=templates.changeset, rev=revrange)
239
257 out = self.rawcommand(args) 240 out = self.rawcommand(args)
258 out = out.split('\0') 241 out = out.split('\0')[:-1]
259 242
260 return self._parserevs(out)[0] 243 return self._parserevs(out)
261 244
262 def branch(self, name=None): 245 def outgoing(self, revrange=None, path=None):
263 if not name: 246 args = cmdbuilder('outgoing',
264 return self.rawcommand(['branch']).rstrip() 247 path, template=templates.changeset, rev=revrange)
265 248
266 def branches(self): 249 def eh(ret, out, err):
267 out = self.rawcommand(['branches']) 250 if ret != 1:
268 branches = {} 251 raise error.CommandError(args, ret, out, err)
269 for line in out.rstrip().split('\n'): 252
270 branch, revnode = line.split() 253 out = self.rawcommand(args, eh=eh)
271 branches[branch] = self.log(revrange=[revnode.split(':')[0]])[0] 254 if not out:
272 255 return []
273 return branches 256
257 out = util.eatlines(out, 2).split('\0')[:-1]
258 return self._parserevs(out)
274 259
275 def paths(self, name=None): 260 def paths(self, name=None):
276 if not name: 261 if not name:
277 out = self.rawcommand(['paths']) 262 out = self.rawcommand(['paths'])
278 if not out: 263 if not out:
282 else: 267 else:
283 args = cmdbuilder('paths', name) 268 args = cmdbuilder('paths', name)
284 out = self.rawcommand(args) 269 out = self.rawcommand(args)
285 return out.rstrip() 270 return out.rstrip()
286 271
287 def cat(self, files, rev=None, output=None): 272 def root(self):
288 args = cmdbuilder('cat', *files, r=rev, o=output) 273 return self.rawcommand(['root']).rstrip()
274
275 def status(self):
276 out = self.rawcommand(['status', '-0'])
277
278 d = dict((c, []) for c in 'MARC!?I')
279
280 for entry in out.split('\0'):
281 if entry:
282 t, f = entry.split(' ', 1)
283 d[t].append(f)
284
285 return d
286
287 def tip(self):
288 args = cmdbuilder('tip', template=templates.changeset)
289 out = self.rawcommand(args) 289 out = self.rawcommand(args)
290 290 out = out.split('\0')
291 if not output: 291
292 return out 292 return self._parserevs(out)[0]
293