You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This affects the test suite only. It improves _WinBashStatus.
When bash.exe is the WSL wrapper, and it reports an error that
prevents bash in a WSL system from ever actually being run, the
message may be encoded in a narrow or multibyte encoding, or may
instead be in Windows's native UTF-16LE encoding. This was partly
handled before, by assuming the message indicating the absence of
any installed WSL distribuions could be interpreted as UTF-8, but
matching against bytes and not actually decoding it or other error
messages. That presented a few problems, which are rememedied here:
- It turns out that this "Windows Subsystem for Linux has no
installed distributions" message actually can be in UTF-16LE too.
This happens when it is part of a message that also reports a
textual error code like:
Bash/Service/CreateInstance/GetDefaultDistro/WSL_E_DEFAULT_DISTRO_NOT_FOUND
Therefore, narrow-encoding matching was not sufficient.
- Logged messages were hard to understand, because they were
printing the reprs of bytes objects, which sometimes were
UTF-16LE and thus had many "\x00" interspersed in them.
- The cases were not broken down elegantly. The ErrorWhileChecking
case could hold a CompletedProcess, a CalledProcessError, or an
OSError. This is now replaced with a WinError case for the rare
scenario where CreateProcessW fails in a completely unexpected
way, and a CheckError case for when the exit status or output of
bash.exe indicates an error other than one we want to handle.
CheckError has two attributes: `process` for the CompletedProcess
(CalledProcessError is no longer used, and CompletedProcess has
`returncode` and other attributes that provide the same info),
and `message` for the decoded output.
0 commit comments