Hi Michael, On Sun, 25 Oct 2026, Michael Albinus wrote:
> Zach Jibben via <[email protected]> writes: > > Hi, > >> This reproduces with `emacs -Q`. >> >> A value added to a buffer-local `process-environment` is not >> propagated to a process executed through TRAMP. >> >> Steps to reproduce: >> >> 1. Start: >> >> emacs -Q >> >> 2. Visit any directory on an SSH host, for example: >> >> C-x C-f /ssh:HOST:/tmp/ RET >> >> 3. Evaluate: >> >> (let ((dir default-directory) >> (env (cons "MAGIT_TRAMP_TEST=yes" process-environment))) >> (with-temp-buffer >> (setq default-directory dir) >> (setq-local process-environment env) >> (process-file "sh" nil t nil "-c" >> "printf '%s' \"$MAGIT_TRAMP_TEST\"") >> (buffer-string))) >> >> Expected result: >> >> "yes" >> >> Actual result: >> >> "" >> >> This appears to be a regression related to commit >> 8f5b786cacbc5e85a71b1e2ec530db9feb41e73c >> ("Check buffer-local value in tramp-local-environment-variable-p"). >> >> I encountered this through Magit. Magit uses a buffer-local >> process-environment containing GIT_INDEX_FILE while constructing >> a temporary index for `magit-stash-both`. Because GIT_INDEX_FILE >> is not propagated to the remote Git process, Magit can create an >> incomplete stash and subsequently discard unstaged changes. >> >> Historically, Magit issue #4160 involved essentially the same >> failure mode when GIT_INDEX_FILE was lost across process buffers. >> >> As a test/workaround, forcing >> `tramp-local-environment-variable-p` to return nil for Magit's >> temporary GIT_INDEX_FILE causes Magit stashing over TRAMP to work >> correctly again. > > This change was triggered by bug#81175. Unfortunately, this bug report > doesn't contain a reasoning for the change. Augusto, could you, pls > provide details? The goal of bug#81175 was to make Tramp not bleed env vars to the remote host that have been set by packages such as envrc or buffer-env. The manual says: TRAMP does not use the defaults specified in process-environment for running process-file or start-file-process on remote hosts. When values from process-environment are needed for remote processes, then set them as follows: (let ((process-environment (cons "HGPLAIN=1" process-environment))) (process-file …)) We could clarify "defaults" in that paragraph, but Magit is not following the standard Tramp-compatible procedure for passing special env vars to a subprocess. I'd say it's a Magit bug. > Thanks, and best regards, Michael.
