Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added support of NixOS core tools in
predict_threadable
(#5440)
### Motivation Closes #5003 ### The case Core utils in Nix are symlinks to one binary file that contains all utils: ```xsh docker run --rm -it nixos/nix bash which echo # /nix/store/k6h0vjh342kqlkq69sxjj8i5y50l6jfr-coreutils-9.3/bin/echo ls -la /nix/store/k6h0vjh342kqlkq69sxjj8i5y50l6jfr-coreutils-9.3/bin/ # b2sum -> coreutils # base32 -> coreutils # ... # All tools are symlinks to one binary file - `coreutils`. ``` When [`default_predictor_readbin`](https://github.com/xonsh/xonsh/blob/61bda708c992a300eab212f877718cf0050a5e3a/xonsh/commands_cache.py#L392) read `coreutils` it catches `(b'isatty', b'tcgetattr', b'tcsetattr')` and return `threadable=False` forever. The list of Nix coreutils tools are exactly the same as in [brew coreutils](https://formulae.brew.sh/formula/coreutils). So I can check the real predicts on distinct binaries and see that only 2 tools among 106 are unthreadable and they already covered by `default_threadable_predictors` (If it's wrong please add unthreadable tools to the [default_threadable_predictors](https://github.com/xonsh/xonsh/blob/61bda708c992a300eab212f877718cf0050a5e3a/xonsh/commands_cache.py#L518)): ```xsh brew install coreutils ls /opt/homebrew/opt/coreutils/libexec/gnubin/ | wc -l # 106 for t in p`/opt/homebrew/opt/coreutils/libexec/gnubin/.*`: if not (th := __xonsh__.commands_cache.predict_threadable([t.name])): print($(which @(t.name)), th) # /opt/homebrew/opt/coreutils/libexec/gnubin/cat False # /opt/homebrew/opt/coreutils/libexec/gnubin/yes False defaults = __import__('xonsh').commands_cache.default_threadable_predictors().keys() defaults['cat'] # <function xonsh.commands_cache.predict_false> defaults['yes'] # <function xonsh.commands_cache.predict_false> ``` So the rest of we need is to check the symlink and apply default prediction if the tools is the symlink to coreutils. This implements this PR. Test included. ## For community ⬇️ **Please click the 👍 reaction instead of leaving a `+1` or 👍 comment** --------- Co-authored-by: a <1@1.1> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
- Loading branch information