Subject: bug#23779: 25.0.95; consing "SHELLVAR" onto process-environment doesn't remove it from subprocess env

From: Dmitry Gutov <[email-masked]>
Date: Fri, 17 Jun 2016 17:47:49 +0300

On 06/17/2016 05:19 PM, Eli Zaretskii wrote:

>> I wonder if we should make setenv work non-destructively now.
>
> Why should we do that?  We have initial-environment if we need the
> original value.

Normally, we only want to change the environment for the duration of a 
command. So, what are the downsides?

One the plus side:

- setenv-internal will become simpler.
- We won't have to cons manually anymore. The code will become a bit 
nicer, like:

diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index f35c84d..5315e0a 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -1450,7 +1450,8 @@ vc-git--call
           (or coding-system-for-read vc-git-log-output-coding-system))
  	(coding-system-for-write
           (or coding-system-for-write vc-git-commits-coding-system))
-	(process-environment (cons "PAGER=" process-environment)))
+	(process-environment process-environment))
+    (setenv "PAGER")
      (apply 'process-file vc-git-program nil buffer nil command args)))

  (defun vc-git--out-ok (command &rest args)