changeset 31941:ac5527021097

chg: respect environment variables for pager Previously chg runs the pager command without respecting its environment variables being told to use. This patch makes it so.
author Jun Wu <quark@fb.com>
date Wed, 12 Apr 2017 16:50:23 -0700
parents 6ce09d2cc2db
children bc0579a25f82
files contrib/chg/hgclient.c contrib/chg/procutil.c contrib/chg/procutil.h
diffstat 3 files changed, 5 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/contrib/chg/hgclient.c	Mon Apr 10 17:36:40 2017 +0200
+++ b/contrib/chg/hgclient.c	Wed Apr 12 16:50:23 2017 -0700
@@ -252,7 +252,7 @@
 		ctx->datasize = sizeof(r_n);
 		writeblock(hgc);
 	} else if (strcmp(args[0], "pager") == 0) {
-		setuppager(args[1]);
+		setuppager(args[1], args + 3);
 		if (hgc->capflags & CAP_ATTACHIO)
 			attachio(hgc);
 		/* unblock the server */
--- a/contrib/chg/procutil.c	Mon Apr 10 17:36:40 2017 +0200
+++ b/contrib/chg/procutil.c	Wed Apr 12 16:50:23 2017 -0700
@@ -177,7 +177,7 @@
 
 /* This implementation is based on hgext/pager.py (post 369741ef7253)
  * Return 0 if pager is not started, or pid of the pager */
-pid_t setuppager(const char *pagercmd)
+pid_t setuppager(const char *pagercmd, const char *envp[])
 {
 	assert(pagerpid == 0);
 	if (!pagercmd)
@@ -205,7 +205,8 @@
 		close(pipefds[0]);
 		close(pipefds[1]);
 
-		int r = execlp("/bin/sh", "/bin/sh", "-c", pagercmd, NULL);
+		int r = execle("/bin/sh", "/bin/sh", "-c", pagercmd, NULL,
+				envp);
 		if (r < 0) {
 			abortmsgerrno("cannot start pager '%s'", pagercmd);
 		}
--- a/contrib/chg/procutil.h	Mon Apr 10 17:36:40 2017 +0200
+++ b/contrib/chg/procutil.h	Wed Apr 12 16:50:23 2017 -0700
@@ -15,7 +15,7 @@
 void restoresignalhandler(void);
 void setupsignalhandler(pid_t pid, pid_t pgid);
 
-pid_t setuppager(const char *pagercmd);
+pid_t setuppager(const char *pagercmd, const char *envp[]);
 void waitpager(void);
 
 #endif /* PROCUTIL_H_ */