changeset 29088:983353035cec

chgserver: remove _clearenvaliases Since we expand environment variables in alias lazily, the _clearenvaliases hack is no longer necessary. This resolves an issue that a non-shell alias which has environment variables in its arguments and is set to use pager will not use pager running with chg.
author Jun Wu <quark@fb.com>
date Fri, 06 May 2016 23:57:56 +0100
parents ad1bdea43965
children 3f33831a9202
files hgext/chgserver.py tests/test-chg.t
diffstat 2 files changed, 20 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/chgserver.py	Sat May 07 00:16:58 2016 +0100
+++ b/hgext/chgserver.py	Fri May 06 23:57:56 2016 +0100
@@ -213,18 +213,6 @@
         ui.setconfig('ui', 'interactive', False, 'pager')
         return p
 
-_envvarre = re.compile(r'\$[a-zA-Z_]+')
-
-def _clearenvaliases(cmdtable):
-    """Remove stale command aliases referencing env vars; variable expansion
-    is done at dispatch.addaliases()"""
-    for name, tab in cmdtable.items():
-        cmddef = tab[0]
-        if (isinstance(cmddef, dispatch.cmdalias) and
-            not cmddef.definition.startswith('!') and  # shell alias
-            _envvarre.search(cmddef.definition)):
-            del cmdtable[name]
-
 def _newchgui(srcui, csystem):
     class chgui(srcui.__class__):
         def __init__(self, src=None):
@@ -525,7 +513,6 @@
         _log('setenv: %r\n' % sorted(newenv.keys()))
         os.environ.clear()
         os.environ.update(newenv)
-        _clearenvaliases(commands.table)
 
     capabilities = commandserver.server.capabilities.copy()
     capabilities.update({'attachio': attachio,
--- a/tests/test-chg.t	Sat May 07 00:16:58 2016 +0100
+++ b/tests/test-chg.t	Fri May 06 23:57:56 2016 +0100
@@ -10,3 +10,23 @@
   $ hg status
   hg: parse error at * (glob)
   [255]
+
+alias having an environment variable and set to use pager
+
+  $ rm $HGRCPATH
+  $ cat >> $HGRCPATH <<'EOF'
+  > [ui]
+  > formatted = yes
+  > [extensions]
+  > pager =
+  > [pager]
+  > pager = sed -e 's/^/P/'
+  > attend = printa
+  > [alias]
+  > printa = log -T "$A\n" -r 0
+  > EOF
+
+  $ A=1 hg printa
+  P1
+  $ A=2 hg printa
+  P2