git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: encoding bug in git.el

From
Karl Hasselström <kha@treskal.com>
Date
May 25, 2008, 13:42 UTC
Message-ID
<20080525134200.GA31990@diana.vm.bytemark.co.uk>
In-Reply-To
<1f748ec60805210708q34a26bebh915037713caa9a87@mail.gmail.com>
On 2008-05-21 23:08:09 +0900, Clifford Caoile wrote:
Show 33 quoted lines
> Here is a proposed fix. I suggest that process-environment should be
> given these envvars already encoded as shown in this code sample:
>
> ------------------ git.el ------------------
> [not a proper git-diff]
> @@ -216,6 +216,11 @@ and `git-diff-setup-hook'."
>    "Build a list of NAME=VALUE strings from a list of environment strings."
>    (mapcar (lambda (entry) (concat (car entry) "=" (cdr entry))) env))
>
> +(defun git-get-env-strings-encoded (env encoding)
> +  "Build a list of NAME=VALUE strings from a list of environment strings,
> +converting from mule-encoding to ENCODING (e.g. mule-utf-8, latin-1, etc)."
> +  (mapcar (lambda (entry) (concat (car entry) "="
> (encode-coding-string (cdr entry) encoding))) env))
> +
>  (defun git-call-process-env (buffer env &rest args)
>    "Wrapper for call-process that sets environment strings."
>    (let ((process-environment (append (git-get-env-strings env)
> @@ -265,7 +270,7 @@ and returns the process output as a string, or nil
> if the git failed."
>
>  (defun git-run-command-region (buffer start end env &rest args)
>    "Run a git command with specified buffer region as input."
> -  (unless (eq 0 (let ((process-environment (append (git-get-env-strings env)
> +  (unless (eq 0 (let ((process-environment (append
> (git-get-env-strings-encoded env coding-system-for-write)
>                                                     process-environment)))
>                    (git-run-process-region
>                     buffer start end "git" args)))
>
> The buffer text is saved with the encoding coding-system-for-write,
> while the GIT_* envvars were not encoded, so when appending to
> process-environment variable, use the same encoding.

I don't claim to understand any of the design issues around this, but your patch certainly fixes my problem (once I managed to apply it, which involved working around the lack of headers, non-matching offsets, and whitespace damage -- luckily it was just two hunks). So:

Tested-by: Karl Hasselström <kha@treskal.com>
Thanks for taking the time.
-- 
Karl Hasselström, kha@treskal.com
      www.treskal.com/kalle
Previous: Karl HasselströmNext: Karl Hasselström
Message 6 of 10 in “encoding bug in git.el”
  1. Karl HasselströmMay 20, 2008
  2. Clifford CaoileMay 21, 2008
  3. Karl HasselströmMay 21, 2008
  4. Clifford CaoileMay 21, 2008
  5. Karl HasselströmMay 23, 2008
  6. Karl HasselströmMay 25, 2008
  7. Karl HasselströmMay 30, 2008
  8. Junio C HamanoMay 30, 2008
  9. Revert "git.el: Set process-environment instead of invoking env"Karl Hasselström, Jun 2, 2008
  10. David ChristensenJun 3, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.