Mercurial > hg
changeset 29087:ad1bdea43965
dispatch: defer environment variable resolution in alias commands (BC)
Before this patch, if there are environment variables in an alias command,
they will be expanded immediately when we first see the alias.
This will cause issues with chg, because environment variable updates will
not propagate to expanded arguments.
This patch makes "args" of "cmdalias" a property that will be calculated
every time when accessed.
author | Jun Wu <quark@fb.com> |
---|---|
date | Sat, 07 May 2016 00:16:58 +0100 |
parents | fe50341de1ff |
children | 983353035cec |
files | mercurial/dispatch.py tests/test-alias.t |
diffstat | 2 files changed, 25 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/dispatch.py Tue May 03 16:33:25 2016 -0400 +++ b/mercurial/dispatch.py Sat May 07 00:16:58 2016 +0100 @@ -384,7 +384,7 @@ self.cmdname = '' self.definition = definition self.fn = None - self.args = [] + self.givenargs = [] self.opts = [] self.help = '' self.badalias = None @@ -432,7 +432,7 @@ % (self.name, inst)) return self.cmdname = cmd = args.pop(0) - args = map(util.expandpath, args) + self.givenargs = args for invalidarg in ("--cwd", "-R", "--repository", "--repo", "--config"): if _earlygetopt([invalidarg], args): @@ -448,7 +448,6 @@ else: self.fn, self.opts = tableentry - self.args = aliasargs(self.fn, args) if self.help.startswith("hg " + cmd): # drop prefix in old-style help lines so hg shows the alias self.help = self.help[4 + len(cmd):] @@ -462,6 +461,11 @@ self.badalias = (_("alias '%s' resolves to ambiguous command '%s'") % (self.name, cmd)) + @property + def args(self): + args = map(util.expandpath, self.givenargs) + return aliasargs(self.fn, args) + def __getattr__(self, name): adefaults = {'norepo': True, 'optionalrepo': False, 'inferrepo': False} if name not in adefaults:
--- a/tests/test-alias.t Tue May 03 16:33:25 2016 -0400 +++ b/tests/test-alias.t Sat May 07 00:16:58 2016 +0100 @@ -525,6 +525,24 @@ (use "hg help" for the full list of commands or "hg -v" for details) [255] +environment variable changes in alias commands + + $ cat > $TESTTMP/setcount.py <<EOF + > import os + > def uisetup(ui): + > os.environ['COUNT'] = '2' + > EOF + + $ cat >> $HGRCPATH <<'EOF' + > [extensions] + > setcount = $TESTTMP/setcount.py + > [alias] + > showcount = log -T "$COUNT\n" -r . + > EOF + + $ COUNT=1 hg showcount + 2 + This should show id: $ hg --config alias.log='id' log