mercurial/commands.py
changeset 1913 74cf2b2f43d4
parent 1910 e2fe1953f417
child 1914 a5bf0030df5f
equal deleted inserted replaced
1912:b288b4bb8448 1913:74cf2b2f43d4
   339 
   339 
   340 class changeset_templater(object):
   340 class changeset_templater(object):
   341     '''use templater module to format changeset information.'''
   341     '''use templater module to format changeset information.'''
   342 
   342 
   343     def __init__(self, ui, repo, mapfile):
   343     def __init__(self, ui, repo, mapfile):
   344         self.t = templater.templater(mapfile, templater.common_filters)
   344         self.t = templater.templater(mapfile, templater.common_filters,
       
   345                                      cache={'parent': '{rev}:{node|short} ',
       
   346                                             'manifest': '{rev}:{node|short}'})
   345         self.ui = ui
   347         self.ui = ui
   346         self.repo = repo
   348         self.repo = repo
   347 
   349 
   348     def use_template(self, t):
   350     def use_template(self, t):
   349         '''set template string to use'''
   351         '''set template string to use'''
   350         self.t.cache['template'] = t
   352         self.t.cache['changelog'] = t
   351 
   353 
   352     def write(self, thing):
   354     def write(self, thing):
   353         '''write expanded template.
   355         '''write expanded template.
   354         uses in-order recursive traverse of iterators.'''
   356         uses in-order recursive traverse of iterators.'''
   355         for t in thing:
   357         for t in thing:
   394                 noname = 'no_' + names
   396                 noname = 'no_' + names
   395                 if noname in self.t:
   397                 if noname in self.t:
   396                     yield self.t(noname, **args)
   398                     yield self.t(noname, **args)
   397                 return
   399                 return
   398             if name not in self.t:
   400             if name not in self.t:
   399                 yield ' '.join(values)
   401                 if isinstance(values[0], str):
       
   402                     yield ' '.join(values)
       
   403                 else:
       
   404                     for v in values:
       
   405                         yield dict(v, **args)
   400                 return
   406                 return
   401             startname = 'start_' + names
   407             startname = 'start_' + names
   402             if startname in self.t:
   408             if startname in self.t:
   403                 yield self.t(startname, **args)
   409                 yield self.t(startname, **args)
   404             vargs = args.copy()
   410             vargs = args.copy()
   481             'rev': rev,
   487             'rev': rev,
   482             'tags': showtags,
   488             'tags': showtags,
   483             }
   489             }
   484 
   490 
   485         try:
   491         try:
   486             self.write(self.t('template', **props))
   492             if self.ui.verbose and 'changelog_verbose' in self.t:
       
   493                 key = 'changelog_verbose'
       
   494             else:
       
   495                 key = 'changelog'
       
   496             self.write(self.t(key, **props))
   487         except KeyError, inst:
   497         except KeyError, inst:
   488             raise util.Abort(_("%s: no key named '%s'") % (self.t.mapfile,
   498             raise util.Abort(_("%s: no key named '%s'") % (self.t.mapfile,
   489                                                            inst.args[0]))
   499                                                            inst.args[0]))
   490         except SyntaxError, inst:
   500         except SyntaxError, inst:
   491             raise util.Abort(_('%s: %s') % (self.t.mapfile, inst.args[0]))
   501             raise util.Abort(_('%s: %s') % (self.t.mapfile, inst.args[0]))
   558                                description.splitlines()[0])
   568                                description.splitlines()[0])
   559         self.ui.status("\n")
   569         self.ui.status("\n")
   560 
   570 
   561 def show_changeset(ui, repo, opts):
   571 def show_changeset(ui, repo, opts):
   562     '''show one changeset.  uses template or regular display.  caller
   572     '''show one changeset.  uses template or regular display.  caller
   563     can pass in 'map_file' and 'template' options in opts.'''
   573     can pass in 'style' and 'template' options in opts.'''
   564 
   574 
   565     tmpl = opts.get('template')
   575     tmpl = opts.get('template')
   566     if tmpl:
   576     if tmpl:
   567         tmpl = templater.parsestring(tmpl, quoted=False)
   577         tmpl = templater.parsestring(tmpl, quoted=False)
   568     else:
   578     else:
   569         tmpl = ui.config('ui', 'logtemplate')
   579         tmpl = ui.config('ui', 'logtemplate')
   570         if tmpl: tmpl = templater.parsestring(tmpl)
   580         if tmpl: tmpl = templater.parsestring(tmpl)
   571     mapfile = opts.get('map_file') or ui.config('ui', 'logmap')
   581     mapfile = opts.get('style') or ui.config('ui', 'logmap')
   572     if tmpl or mapfile:
   582     if tmpl or mapfile:
   573         if mapfile:
   583         if mapfile:
   574             if not os.path.isfile(mapfile):
   584             if not os.path.isfile(mapfile):
   575                 mapname = templater.templatepath(mapfile)
   585                 mapname = templater.templatepath(mapfile)
   576                 if mapname: mapfile = mapname
   586                 if mapname: mapfile = mapname
  2653           ('u', 'user', None, _('print user who committed change'))],
  2663           ('u', 'user', None, _('print user who committed change'))],
  2654          _('hg grep [OPTION]... PATTERN [FILE]...')),
  2664          _('hg grep [OPTION]... PATTERN [FILE]...')),
  2655     "heads":
  2665     "heads":
  2656         (heads,
  2666         (heads,
  2657          [('b', 'branches', None, _('show branches')),
  2667          [('b', 'branches', None, _('show branches')),
  2658           ('', 'map-file', '', _('display using template map file')),
  2668           ('', 'style', '', _('display using template map file')),
  2659           ('r', 'rev', '', _('show only heads which are descendants of rev')),
  2669           ('r', 'rev', '', _('show only heads which are descendants of rev')),
  2660           ('t', 'template', '', _('display with template'))],
  2670           ('', 'template', '', _('display with template'))],
  2661          _('hg heads [-b] [-r <rev>]')),
  2671          _('hg heads [-b] [-r <rev>]')),
  2662     "help": (help_, [], _('hg help [COMMAND]')),
  2672     "help": (help_, [], _('hg help [COMMAND]')),
  2663     "identify|id": (identify, [], _('hg identify')),
  2673     "identify|id": (identify, [], _('hg identify')),
  2664     "import|patch":
  2674     "import|patch":
  2665         (import_,
  2675         (import_,
  2670            _('skip check for outstanding uncommitted changes')),
  2680            _('skip check for outstanding uncommitted changes')),
  2671           ('b', 'base', '', _('base path'))],
  2681           ('b', 'base', '', _('base path'))],
  2672          _('hg import [-f] [-p NUM] [-b BASE] PATCH...')),
  2682          _('hg import [-f] [-p NUM] [-b BASE] PATCH...')),
  2673     "incoming|in": (incoming,
  2683     "incoming|in": (incoming,
  2674          [('M', 'no-merges', None, _('do not show merges')),
  2684          [('M', 'no-merges', None, _('do not show merges')),
  2675           ('', 'map-file', '', _('display using template map file')),
  2685           ('', 'style', '', _('display using template map file')),
  2676           ('n', 'newest-first', None, _('show newest record first')),
  2686           ('n', 'newest-first', None, _('show newest record first')),
  2677           ('p', 'patch', None, _('show patch')),
  2687           ('p', 'patch', None, _('show patch')),
  2678           ('t', 'template', '', _('display with template'))],
  2688           ('', 'template', '', _('display with template'))],
  2679          _('hg incoming [-p] [-n] [-M] [SOURCE]')),
  2689          _('hg incoming [-p] [-n] [-M] [SOURCE]')),
  2680     "^init": (init, [], _('hg init [DEST]')),
  2690     "^init": (init, [], _('hg init [DEST]')),
  2681     "locate":
  2691     "locate":
  2682         (locate,
  2692         (locate,
  2683          [('r', 'rev', '', _('search the repository as it stood at rev')),
  2693          [('r', 'rev', '', _('search the repository as it stood at rev')),
  2695           ('b', 'branches', None, _('show branches')),
  2705           ('b', 'branches', None, _('show branches')),
  2696           ('k', 'keyword', [], _('search for a keyword')),
  2706           ('k', 'keyword', [], _('search for a keyword')),
  2697           ('l', 'limit', '', _('limit number of changes displayed')),
  2707           ('l', 'limit', '', _('limit number of changes displayed')),
  2698           ('r', 'rev', [], _('show the specified revision or range')),
  2708           ('r', 'rev', [], _('show the specified revision or range')),
  2699           ('M', 'no-merges', None, _('do not show merges')),
  2709           ('M', 'no-merges', None, _('do not show merges')),
  2700           ('', 'map-file', '', _('display using template map file')),
  2710           ('', 'style', '', _('display using template map file')),
  2701           ('m', 'only-merges', None, _('show only merges')),
  2711           ('m', 'only-merges', None, _('show only merges')),
  2702           ('p', 'patch', None, _('show patch')),
  2712           ('p', 'patch', None, _('show patch')),
  2703           ('t', 'template', '', _('display with template'))],
  2713           ('', 'template', '', _('display with template'))],
  2704          _('hg log [-I] [-X] [-r REV]... [-p] [FILE]')),
  2714          _('hg log [-I] [-X] [-r REV]... [-p] [FILE]')),
  2705     "manifest": (manifest, [], _('hg manifest [REV]')),
  2715     "manifest": (manifest, [], _('hg manifest [REV]')),
  2706     "outgoing|out": (outgoing,
  2716     "outgoing|out": (outgoing,
  2707          [('M', 'no-merges', None, _('do not show merges')),
  2717          [('M', 'no-merges', None, _('do not show merges')),
  2708           ('p', 'patch', None, _('show patch')),
  2718           ('p', 'patch', None, _('show patch')),
  2709           ('', 'map-file', '', _('display using template map file')),
  2719           ('', 'style', '', _('display using template map file')),
  2710           ('n', 'newest-first', None, _('show newest record first')),
  2720           ('n', 'newest-first', None, _('show newest record first')),
  2711           ('t', 'template', '', _('display with template'))],
  2721           ('', 'template', '', _('display with template'))],
  2712          _('hg outgoing [-p] [-n] [-M] [DEST]')),
  2722          _('hg outgoing [-p] [-n] [-M] [DEST]')),
  2713     "^parents":
  2723     "^parents":
  2714         (parents,
  2724         (parents,
  2715          [('b', 'branches', None, _('show branches')),
  2725          [('b', 'branches', None, _('show branches')),
  2716           ('', 'map-file', '', _('display using template map file')),
  2726           ('', 'style', '', _('display using template map file')),
  2717           ('t', 'template', '', _('display with template'))],
  2727           ('', 'template', '', _('display with template'))],
  2718          _('hg parents [-b] [REV]')),
  2728          _('hg parents [-b] [REV]')),
  2719     "paths": (paths, [], _('hg paths [NAME]')),
  2729     "paths": (paths, [], _('hg paths [NAME]')),
  2720     "^pull":
  2730     "^pull":
  2721         (pull,
  2731         (pull,
  2722          [('u', 'update', None,
  2732          [('u', 'update', None,
  2774           ('a', 'address', '', _('address to use')),
  2784           ('a', 'address', '', _('address to use')),
  2775           ('n', 'name', '',
  2785           ('n', 'name', '',
  2776            _('name to show in web pages (default: working dir)')),
  2786            _('name to show in web pages (default: working dir)')),
  2777           ('', 'pid-file', '', _('name of file to write process ID to')),
  2787           ('', 'pid-file', '', _('name of file to write process ID to')),
  2778           ('', 'stdio', None, _('for remote clients')),
  2788           ('', 'stdio', None, _('for remote clients')),
  2779           ('t', 'templates', '', _('web templates to use')),
  2789           ('', 'templates', '', _('web templates to use')),
  2780           ('', 'style', '', _('template style to use')),
  2790           ('', 'style', '', _('template style to use')),
  2781           ('6', 'ipv6', None, _('use IPv6 in addition to IPv4'))],
  2791           ('6', 'ipv6', None, _('use IPv6 in addition to IPv4'))],
  2782          _('hg serve [OPTION]...')),
  2792          _('hg serve [OPTION]...')),
  2783     "^status|st":
  2793     "^status|st":
  2784         (status,
  2794         (status,
  2803          _('hg tag [-r REV] [OPTION]... NAME')),
  2813          _('hg tag [-r REV] [OPTION]... NAME')),
  2804     "tags": (tags, [], _('hg tags')),
  2814     "tags": (tags, [], _('hg tags')),
  2805     "tip":
  2815     "tip":
  2806         (tip,
  2816         (tip,
  2807          [('b', 'branches', None, _('show branches')),
  2817          [('b', 'branches', None, _('show branches')),
  2808           ('', 'map-file', '', _('display using template map file')),
  2818           ('', 'style', '', _('display using template map file')),
  2809           ('p', 'patch', None, _('show patch')),
  2819           ('p', 'patch', None, _('show patch')),
  2810           ('t', 'template', '', _('display with template'))],
  2820           ('', 'template', '', _('display with template'))],
  2811          _('hg [-b] [-p] tip')),
  2821          _('hg [-b] [-p] tip')),
  2812     "unbundle":
  2822     "unbundle":
  2813         (unbundle,
  2823         (unbundle,
  2814          [('u', 'update', None,
  2824          [('u', 'update', None,
  2815            _('update the working directory to tip after unbundle'))],
  2825            _('update the working directory to tip after unbundle'))],
  2816          _('hg unbundle [-u] FILE')),
  2826          _('hg unbundle [-u] FILE')),
  2817     "undo": (undo, [], _('hg undo')),
  2827     "undo": (undo, [], _('hg undo')),
  2818     "^update|up|checkout|co":
  2828     "^update|up|checkout|co":
  2819         (update,
  2829         (update,
  2820          [('b', 'branch', '', _('checkout the head of a specific branch')),
  2830          [('b', 'branch', '', _('checkout the head of a specific branch')),
  2821           ('', 'map-file', '', _('display using template map file')),
  2831           ('', 'style', '', _('display using template map file')),
  2822           ('m', 'merge', None, _('allow merging of branches')),
  2832           ('m', 'merge', None, _('allow merging of branches')),
  2823           ('C', 'clean', None, _('overwrite locally modified files')),
  2833           ('C', 'clean', None, _('overwrite locally modified files')),
  2824           ('f', 'force', None, _('force a merge with outstanding changes')),
  2834           ('f', 'force', None, _('force a merge with outstanding changes')),
  2825           ('t', 'template', '', _('display with template'))],
  2835           ('', 'template', '', _('display with template'))],
  2826          _('hg update [-b TAG] [-m] [-C] [-f] [REV]')),
  2836          _('hg update [-b TAG] [-m] [-C] [-f] [REV]')),
  2827     "verify": (verify, [], _('hg verify')),
  2837     "verify": (verify, [], _('hg verify')),
  2828     "version": (show_version, [], _('hg version')),
  2838     "version": (show_version, [], _('hg version')),
  2829 }
  2839 }
  2830 
  2840