comparison mercurial/commands.py @ 2566:d8560b458f76

Convert hg annotate to context api
author Matt Mackall <mpm@selenic.com>
date Wed, 28 Jun 2006 17:42:17 -0500
parents 7f78ca2c7977
children 2748253b49c2
comparison
equal deleted inserted replaced
2565:7f78ca2c7977 2566:d8560b458f76
699 def getnode(rev): 699 def getnode(rev):
700 return short(repo.changelog.node(rev)) 700 return short(repo.changelog.node(rev))
701 701
702 ucache = {} 702 ucache = {}
703 def getname(rev): 703 def getname(rev):
704 cl = repo.changelog.read(repo.changelog.node(rev)) 704 try:
705 return trimuser(ui, cl[1], rev, ucache) 705 return ucache[rev]
706 except:
707 u = trimuser(ui, repo.changectx(rev).user(), rev, ucache)
708 ucache[rev] = u
709 return u
706 710
707 dcache = {} 711 dcache = {}
708 def getdate(rev): 712 def getdate(rev):
709 datestr = dcache.get(rev) 713 datestr = dcache.get(rev)
710 if datestr is None: 714 if datestr is None:
711 cl = repo.changelog.read(repo.changelog.node(rev)) 715 datestr = dcache[rev] = util.datestr(repo.changectx(rev).date())
712 datestr = dcache[rev] = util.datestr(cl[2])
713 return datestr 716 return datestr
714 717
715 if not pats: 718 if not pats:
716 raise util.Abort(_('at least one file name or pattern required')) 719 raise util.Abort(_('at least one file name or pattern required'))
717 720
718 opmap = [['user', getname], ['number', str], ['changeset', getnode], 721 opmap = [['user', getname], ['number', str], ['changeset', getnode],
719 ['date', getdate]] 722 ['date', getdate]]
720 if not opts['user'] and not opts['changeset'] and not opts['date']: 723 if not opts['user'] and not opts['changeset'] and not opts['date']:
721 opts['number'] = 1 724 opts['number'] = 1
722 725
723 if opts['rev']: 726 ctx = repo.changectx(opts['rev'] or repo.dirstate.parents()[0])
724 node = repo.changelog.lookup(opts['rev'])
725 else:
726 node = repo.dirstate.parents()[0]
727 change = repo.changelog.read(node)
728 mmap = repo.manifest.read(change[0])
729 727
730 for src, abs, rel, exact in walk(repo, pats, opts, node=node): 728 for src, abs, rel, exact in walk(repo, pats, opts, node=node):
731 f = repo.file(abs) 729 fctx = ctx.filectx(abs)
732 if not opts['text'] and util.binary(f.read(mmap[abs])): 730 if not opts['text'] and util.binary(fctx.data()):
733 ui.write(_("%s: binary file\n") % ((pats and rel) or abs)) 731 ui.write(_("%s: binary file\n") % ((pats and rel) or abs))
734 continue 732 continue
735 733
736 lines = f.annotate(mmap[abs]) 734 lines = fctx.annotate()
737 pieces = [] 735 pieces = []
738 736
739 for o, f in opmap: 737 for o, f in opmap:
740 if opts[o]: 738 if opts[o]:
741 l = [f(n) for n, dummy in lines] 739 l = [f(n) for n, dummy in lines]