D613: dispatch: store the command name which is going to run in ui object
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Sat Sep 2 15:38:29 UTC 2017
pulkit created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
This patch stores the command which is going to run in the ui object in
_internal.command. This will help us in checking which command we are running
where ever we need command specific logic instead of putting the logic in every
command.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D613
AFFECTED FILES
mercurial/dispatch.py
tests/test-basic.t
tests/test-commandserver.t
tests/test-dispatch.t
tests/test-hgrc.t
CHANGE DETAILS
diff --git a/tests/test-hgrc.t b/tests/test-hgrc.t
--- a/tests/test-hgrc.t
+++ b/tests/test-hgrc.t
@@ -45,6 +45,7 @@
$ hg paths
default = $TESTTMP/foo%bar (glob)
$ hg showconfig
+ _internal.command=config
bundle.mainreporoot=$TESTTMP/foobar (glob)
paths.default=$TESTTMP/foo%bar (glob)
$ cd ..
@@ -79,6 +80,7 @@
make sure global options given on the cmdline take precedence
$ hg showconfig --config ui.verbose=True --quiet
+ _internal.command=config
bundle.mainreporoot=$TESTTMP
ui.verbose=False
ui.debug=False
@@ -110,6 +112,7 @@
$ cd ..
$ hg showconfig
+ _internal.command=config
bundle.mainreporoot=$TESTTMP
ui.username=$FAKEUSER
@@ -153,6 +156,7 @@
$ hg showconfig
read config from: $TESTTMP/hgrc
+ dispatch: _internal.command=config
$TESTTMP/hgrc:13: alias.log=log -g
repo: bundle.mainreporoot=$TESTTMP
$TESTTMP/hgrc:11: defaults.identify=-n
@@ -170,6 +174,7 @@
$ HGPLAIN=; export HGPLAIN
$ hg showconfig --config ui.traceback=True --debug
read config from: $TESTTMP/hgrc
+ dispatch: _internal.command=config
repo: bundle.mainreporoot=$TESTTMP
--config: ui.traceback=True
--verbose: ui.verbose=False
@@ -183,6 +188,7 @@
set config by: $VISUAL
set config by: $PAGER
read config from: $TESTTMP/hgrc
+ dispatch: _internal.command=config
repo: bundle.mainreporoot=$TESTTMP
$PAGER: pager.pager=p1
$VISUAL: ui.editor=e2
@@ -206,6 +212,7 @@
$ hg showconfig --config ui.traceback=True --debug
plain: True
read config from: $TESTTMP/hgrc
+ dispatch: _internal.command=config
repo: bundle.mainreporoot=$TESTTMP
$TESTTMP/hgrc:15: extensions.plain=./plain.py
--config: ui.traceback=True
@@ -216,6 +223,7 @@
$ hg showconfig --config ui.traceback=True --debug
plain: True
read config from: $TESTTMP/hgrc
+ dispatch: _internal.command=config
repo: bundle.mainreporoot=$TESTTMP
$TESTTMP/hgrc:15: extensions.plain=./plain.py
--config: ui.traceback=True
@@ -226,6 +234,7 @@
$ hg showconfig --config ui.traceback=True --debug
plain: True
read config from: $TESTTMP/hgrc
+ dispatch: _internal.command=config
repo: bundle.mainreporoot=$TESTTMP
$TESTTMP/hgrc:15: extensions.plain=./plain.py
--config: ui.traceback=True
diff --git a/tests/test-dispatch.t b/tests/test-dispatch.t
--- a/tests/test-dispatch.t
+++ b/tests/test-dispatch.t
@@ -60,3 +60,44 @@
[255]
#endif
+
+Test storing of command in ui object by wrapping the dispatch.runcommand
+
+ $ cat > checkui.py <<EOF
+ > from mercurial import commands, registrar, util, extensions, dispatch
+ > cmdtable = {}
+ > command = registrar.command(cmdtable)
+ > def extsetup():
+ > extensions.wrapfunction(dispatch, '_runcommand', printcommandname)
+ > def printcommandname(orig, ui, options, cmd, cmdfunc):
+ > command = ui.config('_internal', 'command')
+ > ui.write('%s\n' % command)
+ > EOF
+
+Enable the extension after init to make sure it works
+
+ $ hg init testui
+ $ cd testui
+ $ echo '[extensions]' >> $HGRCPATH
+ $ echo "checkui = $TESTTMP/checkui.py" >> $HGRCPATH
+ $ hg log
+ log
+ $ hg diff
+ diff
+
+Testing short hand ones
+
+ $ hg exp
+ export
+ $ hg ci
+ commit
+
+Testing aliases
+
+ $ echo '[alias]' >> $HGRCPATH
+ $ echo "show = export" >> $HGRCPATH
+ $ echo "glog = log -G" >> $HGRCPATH
+ $ hg show
+ export
+ $ hg glog
+ log
diff --git a/tests/test-commandserver.t b/tests/test-commandserver.t
--- a/tests/test-commandserver.t
+++ b/tests/test-commandserver.t
@@ -188,15 +188,17 @@
... runcommand(server, ['init', 'foo'])
... runcommand(server, ['-R', 'foo', 'showconfig', 'ui', 'defaults'])
*** runcommand showconfig
+ extensions.fsmonitor= (fsmonitor !)
+ ui.usehttp2=true (?)
+ ui.usehttp2=true (?)
+ _internal.command=config
bundle.mainreporoot=$TESTTMP/repo
devel.all-warnings=true
devel.default-date=0 0
- extensions.fsmonitor= (fsmonitor !)
largefiles.usercache=$TESTTMP/.cache/largefiles
ui.slash=True
ui.interactive=False
ui.mergemarkers=detailed
- ui.usehttp2=true (?)
ui.foo=bar
ui.nontty=true
web.address=localhost
@@ -206,7 +208,6 @@
ui.slash=True
ui.interactive=False
ui.mergemarkers=detailed
- ui.usehttp2=true (?)
ui.nontty=true
$ rm -R foo
diff --git a/tests/test-basic.t b/tests/test-basic.t
--- a/tests/test-basic.t
+++ b/tests/test-basic.t
@@ -1,9 +1,10 @@
Create a repository:
$ hg config
+ extensions.fsmonitor= (fsmonitor !)
+ _internal.command=config
devel.all-warnings=true
devel.default-date=0 0
- extensions.fsmonitor= (fsmonitor !)
largefiles.usercache=$TESTTMP/.cache/largefiles (glob)
ui.slash=True
ui.interactive=False
diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
--- a/mercurial/dispatch.py
+++ b/mercurial/dispatch.py
@@ -769,6 +769,15 @@
fullargs = args
cmd, func, args, options, cmdoptions = _parse(lui, args)
+ cmdname = ''
+ # An alias is passed, func is cmdalias object
+ if util.safehasattr(func, 'cmdname'):
+ cmdname = func.cmdname
+ else:
+ cmdname = cmd
+
+ for ui_ in uis:
+ ui_.setconfig('_internal', 'command', cmdname, 'dispatch')
if options["config"]:
raise error.Abort(_("option --config may not be abbreviated!"))
To: pulkit, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list