Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/commands.py @ 14358:bf93e78f2638
annotate: fix alignment of columns in front of line numbers (issue2807)
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Wed, 18 May 2011 15:41:03 +0200 |
parents | 3b9a896af09c |
children | ea7081645987 |
comparison
equal
deleted
inserted
replaced
14357:cb4ff8ef466b | 14358:bf93e78f2638 |
---|---|
236 getdate = util.cachefunc(lambda x: datefunc(x[0].date())) | 236 getdate = util.cachefunc(lambda x: datefunc(x[0].date())) |
237 | 237 |
238 if not pats: | 238 if not pats: |
239 raise util.Abort(_('at least one filename or pattern is required')) | 239 raise util.Abort(_('at least one filename or pattern is required')) |
240 | 240 |
241 opmap = [('user', lambda x: ui.shortuser(x[0].user())), | 241 opmap = [('user', ' ', lambda x: ui.shortuser(x[0].user())), |
242 ('number', lambda x: str(x[0].rev())), | 242 ('number', ' ', lambda x: str(x[0].rev())), |
243 ('changeset', lambda x: short(x[0].node())), | 243 ('changeset', ' ', lambda x: short(x[0].node())), |
244 ('date', getdate), | 244 ('date', ' ', getdate), |
245 ('file', lambda x: x[0].path()), | 245 ('file', ' ', lambda x: x[0].path()), |
246 ('line_number', ':', lambda x: str(x[1])), | |
246 ] | 247 ] |
247 | 248 |
248 if (not opts.get('user') and not opts.get('changeset') | 249 if (not opts.get('user') and not opts.get('changeset') |
249 and not opts.get('date') and not opts.get('file')): | 250 and not opts.get('date') and not opts.get('file')): |
250 opts['number'] = True | 251 opts['number'] = True |
251 | 252 |
252 linenumber = opts.get('line_number') is not None | 253 linenumber = opts.get('line_number') is not None |
253 if linenumber and (not opts.get('changeset')) and (not opts.get('number')): | 254 if linenumber and (not opts.get('changeset')) and (not opts.get('number')): |
254 raise util.Abort(_('at least one of -n/-c is required for -l')) | 255 raise util.Abort(_('at least one of -n/-c is required for -l')) |
255 | 256 |
256 funcmap = [func for op, func in opmap if opts.get(op)] | 257 funcmap = [(func, sep) for op, sep, func in opmap if opts.get(op)] |
257 if linenumber: | 258 funcmap[0] = (funcmap[0][0], '') # no separator in front of first column |
258 lastfunc = funcmap[-1] | |
259 funcmap[-1] = lambda x: "%s:%s" % (lastfunc(x), x[1]) | |
260 | 259 |
261 def bad(x, y): | 260 def bad(x, y): |
262 raise util.Abort("%s: %s" % (x, y)) | 261 raise util.Abort("%s: %s" % (x, y)) |
263 | 262 |
264 ctx = scmutil.revsingle(repo, opts.get('rev')) | 263 ctx = scmutil.revsingle(repo, opts.get('rev')) |
272 continue | 271 continue |
273 | 272 |
274 lines = fctx.annotate(follow=follow, linenumber=linenumber) | 273 lines = fctx.annotate(follow=follow, linenumber=linenumber) |
275 pieces = [] | 274 pieces = [] |
276 | 275 |
277 for f in funcmap: | 276 for f, sep in funcmap: |
278 l = [f(n) for n, dummy in lines] | 277 l = [f(n) for n, dummy in lines] |
279 if l: | 278 if l: |
280 sized = [(x, encoding.colwidth(x)) for x in l] | 279 sized = [(x, encoding.colwidth(x)) for x in l] |
281 ml = max([w for x, w in sized]) | 280 ml = max([w for x, w in sized]) |
282 pieces.append(["%s%s" % (' ' * (ml - w), x) for x, w in sized]) | 281 pieces.append(["%s%s%s" % (sep, ' ' * (ml - w), x) |
282 for x, w in sized]) | |
283 | 283 |
284 if pieces: | 284 if pieces: |
285 for p, l in zip(zip(*pieces), lines): | 285 for p, l in zip(zip(*pieces), lines): |
286 ui.write("%s: %s" % (" ".join(p), l[1])) | 286 ui.write("%s: %s" % ("".join(p), l[1])) |
287 | 287 |
288 @command('archive', | 288 @command('archive', |
289 [('', 'no-decode', None, _('do not pass files through decoders')), | 289 [('', 'no-decode', None, _('do not pass files through decoders')), |
290 ('p', 'prefix', '', _('directory prefix for files in archive'), | 290 ('p', 'prefix', '', _('directory prefix for files in archive'), |
291 _('PREFIX')), | 291 _('PREFIX')), |