diff --git a/hgext/show.py b/hgext/show.py --- a/hgext/show.py +++ b/hgext/show.py @@ -10,6 +10,19 @@ This extension provides the :hg:`show` command, which provides a central command for displaying commonly-accessed repository data and views of that data. + +The following config options can influence operation. + +``commands`` +------------ + +``show.aliasprefix`` + List of strings that will register aliases for views. e.g. ``s`` will + effectively set config options ``alias.s = show `` for all + views. i.e. `hg swork` would execute `hg show work`. + + Aliases that would conflict with existing registrations will not be + performed. """ from __future__ import absolute_import @@ -18,6 +31,7 @@ from mercurial.i18n import _ from mercurial.node import nullrev from mercurial import ( cmdutil, + commands, error, formatter, graphmod, @@ -218,6 +232,25 @@ def showwork(ui, repo, displayer): ui.setconfig('experimental', 'graphshorten', True) cmdutil.displaygraph(ui, repo, revdag, displayer, graphmod.asciiedges) +def extsetup(ui): + # Alias `hg ` to `hg show `. + for prefix in ui.configlist('commands', 'show.aliasprefix'): + for view in showview._table: + name = '%s%s' % (prefix, view) + + choice, allcommands = cmdutil.findpossible(name, commands.table, + strict=True) + + # This alias is already a command name. Don't set it. + if name in choice: + continue + + # Same for aliases. + if ui.config('alias', name): + continue + + ui.setconfig('alias', name, 'show %s' % view, source='show') + # Adjust the docstring of the show command so it shows all registered views. # This is a bit hacky because it runs at the end of module load. When moved # into core or when another extension wants to provide a view, we'll need diff --git a/tests/test-show.t b/tests/test-show.t --- a/tests/test-show.t +++ b/tests/test-show.t @@ -127,4 +127,42 @@ JSON works with no bookmarks [ ] +commands.show.aliasprefix aliases values to `show ` + + $ hg --config commands.show.aliasprefix=s sbookmarks + (no bookmarks set) + + $ hg --config commands.show.aliasprefix=sh shwork + @ 7b570 commit for book2 + o b757f commit for book1 + o ba592 initial + + $ hg --config commands.show.aliasprefix='s sh' swork + @ 7b570 commit for book2 + o b757f commit for book1 + o ba592 initial + + $ hg --config commands.show.aliasprefix='s sh' shwork + @ 7b570 commit for book2 + o b757f commit for book1 + o ba592 initial + +The aliases don't appear in `hg config` + + $ hg --config commands.show.aliasprefix=s config alias + [1] + +Doesn't overwrite existing alias + + $ hg --config alias.swork='log -r .' --config commands.show.aliasprefix=s swork + changeset: 2:7b5709ab64cb + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: commit for book2 + + + $ hg --config alias.swork='log -r .' --config commands.show.aliasprefix=s config alias + alias.swork=log -r . + $ cd ..