diff --git a/hgext/logtoprocess.py b/hgext/logtoprocess.py --- a/hgext/logtoprocess.py +++ b/hgext/logtoprocess.py @@ -40,6 +40,9 @@ import sys from mercurial import ( + dispatch, + encoding, + extensions, pycompat, ) @@ -110,6 +113,12 @@ script = self.config('logtoprocess', event) if script: if msg: + + # extract the canonical command from the passed opts + canonical_command = opts.pop("canonical_command", None) + if canonical_command is None: + canonical_command = "" + # try to format the log message given the remaining # arguments try: @@ -134,7 +143,8 @@ for key, value in opts.iteritems()) env = dict(itertools.chain(procutil.shellenviron().items(), msgpairs, optpairs), - EVENT=event, HGPID=str(os.getpid())) + EVENT=event, HGPID=str(os.getpid()), + LTP_COMMAND=canonical_command) runshellcommand(script, env) return super(logtoprocessui, self).log(event, *msg, **opts) diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py --- a/mercurial/dispatch.py +++ b/mercurial/dispatch.py @@ -66,6 +66,9 @@ # low-level repo state (for example, changelog) before extensions. self.prereposetups = prereposetups or [] + # store the parsed and canonical command + self.canonical_command = None + def _runexithandlers(self): exc = None handlers = self.ui._exithandlers @@ -243,7 +246,8 @@ req.ui.log('uiblocked', 'ui blocked ms', **pycompat.strkwargs(req.ui._blockedtimes)) req.ui.log("commandfinish", "%s exited %d after %0.2f seconds\n", - msg, ret & 255, duration) + msg, ret & 255, duration, + canonical_command=req.canonical_command) try: req._runexithandlers() except: # exiting, so no re-raises @@ -853,6 +857,9 @@ fullargs = args cmd, func, args, options, cmdoptions = _parse(lui, args) + # store the canonical command name in request object for later access + req.canonical_command = cmd + if options["config"] != req.earlyoptions["config"]: raise error.Abort(_("option --config may not be abbreviated!")) if options["cwd"] != req.earlyoptions["cwd"]: