Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/commands.py @ 22479:5d9e46d93c1d
annotate: split functions to get data without applying text formatting
This prepares for porting to generic templater API, where raw data should
be passed to the formatter.
makefunc() is necessary to build closure in list comprehension.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Tue, 16 Sep 2014 23:40:24 +0900 |
parents | a6b1413511f1 |
children | dff638170c48 |
comparison
equal
deleted
inserted
replaced
22478:a6b1413511f1 | 22479:5d9e46d93c1d |
---|---|
273 # --follow is deprecated and now just an alias for -f/--file | 273 # --follow is deprecated and now just an alias for -f/--file |
274 # to mimic the behavior of Mercurial before version 1.5 | 274 # to mimic the behavior of Mercurial before version 1.5 |
275 opts['file'] = True | 275 opts['file'] = True |
276 | 276 |
277 datefunc = ui.quiet and util.shortdate or util.datestr | 277 datefunc = ui.quiet and util.shortdate or util.datestr |
278 getdate = util.cachefunc(lambda x: datefunc(x[0].date())) | |
279 hexfn = ui.debugflag and hex or short | 278 hexfn = ui.debugflag and hex or short |
280 | 279 |
281 opmap = [('user', ' ', lambda x: ui.shortuser(x[0].user())), | 280 opmap = [('user', ' ', lambda x: x[0].user(), ui.shortuser), |
282 ('number', ' ', lambda x: str(x[0].rev())), | 281 ('number', ' ', lambda x: x[0].rev(), str), |
283 ('changeset', ' ', lambda x: hexfn(x[0].node())), | 282 ('changeset', ' ', lambda x: hexfn(x[0].node()), str), |
284 ('date', ' ', getdate), | 283 ('date', ' ', lambda x: x[0].date(), util.cachefunc(datefunc)), |
285 ('file', ' ', lambda x: x[0].path()), | 284 ('file', ' ', lambda x: x[0].path(), str), |
286 ('line_number', ':', lambda x: str(x[1])), | 285 ('line_number', ':', lambda x: x[1], str), |
287 ] | 286 ] |
288 | 287 |
289 if (not opts.get('user') and not opts.get('changeset') | 288 if (not opts.get('user') and not opts.get('changeset') |
290 and not opts.get('date') and not opts.get('file')): | 289 and not opts.get('date') and not opts.get('file')): |
291 opts['number'] = True | 290 opts['number'] = True |
292 | 291 |
293 linenumber = opts.get('line_number') is not None | 292 linenumber = opts.get('line_number') is not None |
294 if linenumber and (not opts.get('changeset')) and (not opts.get('number')): | 293 if linenumber and (not opts.get('changeset')) and (not opts.get('number')): |
295 raise util.Abort(_('at least one of -n/-c is required for -l')) | 294 raise util.Abort(_('at least one of -n/-c is required for -l')) |
296 | 295 |
297 funcmap = [(func, sep) for op, sep, func in opmap if opts.get(op)] | 296 def makefunc(get, fmt): |
297 return lambda x: fmt(get(x)) | |
298 funcmap = [(makefunc(get, fmt), sep) for op, sep, get, fmt in opmap | |
299 if opts.get(op)] | |
298 funcmap[0] = (funcmap[0][0], '') # no separator in front of first column | 300 funcmap[0] = (funcmap[0][0], '') # no separator in front of first column |
299 | 301 |
300 def bad(x, y): | 302 def bad(x, y): |
301 raise util.Abort("%s: %s" % (x, y)) | 303 raise util.Abort("%s: %s" % (x, y)) |
302 | 304 |