mercurial/commands.py
changeset 2566 d8560b458f76
parent 2565 7f78ca2c7977
child 2567 2748253b49c2
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]