[PATCH stable] pager: exec pager using /bin/sh -c
Brodie Rao
brodie at bitheap.org
Wed May 19 09:58:16 CDT 2010
# HG changeset patch
# User Brodie Rao <brodie at bitheap.org>
# Date 1274280852 18000
# Branch stable
# Node ID 9c655d72da80c45a843e213c247003860cb25f8b
# Parent b5c0f6a1143066c453032ab6dc4163ef52e932ee
pager: exec pager using /bin/sh -c
This mimics the behavior of popen() and ensures setting the pager to something
like "LESS=FSRX less" will work.
diff --git a/hgext/pager.py b/hgext/pager.py
--- a/hgext/pager.py
+++ b/hgext/pager.py
@@ -49,7 +49,7 @@ To ignore global commands like "hg versi
specify them in the global .hgrc
'''
-import sys, os, signal, shlex
+import sys, os, signal, shlex, errno
from mercurial import dispatch, util, extensions
def _runpager(p):
@@ -67,8 +67,15 @@ def _runpager(p):
os.dup2(fdin, sys.stdin.fileno())
os.close(fdin)
os.close(fdout)
- args = shlex.split(p)
- os.execvp(args[0], args)
+ try:
+ os.execvp('/bin/sh', ['/bin/sh', '-c', p])
+ except OSError, e:
+ if e.errno == errno.ENOENT:
+ # no /bin/sh, try executing the pager directly
+ args = shlex.split(p)
+ os.execvp(args[0], args)
+ else:
+ raise
def uisetup(ui):
def pagecmd(orig, ui, options, cmd, cmdfunc):
More information about the Mercurial-devel
mailing list