Unverified Commit c80577e0 authored by Nicola Soranzo's avatar Nicola Soranzo
Browse files

Fix setting ``LC_CTYPE`` variable in clean environment on macOS

Fix some older tools (not using `profile` or `stdio`) failing because
of the following warning printed on stderr when run locally on macOS:

```
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = (unset),
LC_CTYPE = "C.UTF-8",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
```
parent df771292
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -164,7 +164,7 @@ def new_clean_env():
    Returns a minimal environment to use when invoking a subprocess
    """
    env = {}
    for k in ("HOME", "PATH", "TMPDIR"):
    for k in ("HOME", "LC_CTYPE", "PATH", "TMPDIR"):
        if k in os.environ:
            env[k] = os.environ[k]
    if "TMPDIR" not in env:
@@ -173,6 +173,7 @@ def new_clean_env():
    # This is needed e.g. for Python < 3.7 where
    # `locale.getpreferredencoding()` (also used by open() to determine the
    # default file encoding) would return `ANSI_X3.4-1968` without this.
    if not env.get("LC_CTYPE", "").endswith("UTF-8"):
        env["LC_CTYPE"] = "C.UTF-8"
    return env

+20 −0
Original line number Diff line number Diff line
import os

from galaxy.util.commands import new_clean_env


def test_new_clean_env() -> None:
    saved_environ = os.environ.copy()
    os.environ["FOO"] = "foo"
    os.environ.pop("TMPDIR", None)
    try:
        clean_env = new_clean_env()
    finally:
        os.environ.clear()
        os.environ.update(saved_environ)
    assert "FOO" not in clean_env
    for k in ("HOME", "PATH"):
        if k in saved_environ:
            assert clean_env[k] == saved_environ[k]
    assert clean_env["LC_CTYPE"].endswith("UTF-8")
    assert clean_env["TMPDIR"]