nushell/crates/nu-command/src
Jakub Žádník 74dcd91cc3
Use only $nu.env.PWD for getting the current directory (#587)
* Use only $nu.env.PWD for getting current directory

Because setting and reading to/from std::env changes the global state
shich is problematic if we call `cd` from multiple threads (e.g., in a
`par-each` block).

With this change, when engine-q starts, it will either inherit existing
PWD env var, or create a new one from `std::env::current_dir()`.
Otherwise, everything that needs the current directory will get it from
`$nu.env.PWD`. Each spawned external command will get its current
directory per-process which should be thread-safe.

One thing left to do is to patch nu-path for this as well since it uses
`std::env::current_dir()` in its expansions.

* Rename nu-path functions

*_with is not *_relative which should be more descriptive and frees
"with" for use in a followup commit.

* Clone stack every each iter; Fix some commands

Cloning the stack each iteration of `each` makes sure we're not reusing
PWD between iterations.

Some fixes in commands to make them use the new PWD.

* Post-rebase cleanup, fmt, clippy

* Change back _relative to _with in nu-path funcs

Didn't use the idea I had for the new "_with".

* Remove leftover current_dir from rebase

* Add cwd sync at merge_delta()

This makes sure the parser and completer always have up-to-date cwd.

* Always pass absolute path to glob in ls

* Do not allow PWD a relative path; Allow recovery

Makes it possible to recover PWD by proceeding with the REPL cycle.

* Clone stack in each also for byte/string stream

* (WIP) Start moving env variables to engine state

* (WIP) Move env vars to engine state (ugly)

Quick and dirty code.

* (WIP) Remove unused mut and args; Fmt

* (WIP) Fix dataframe tests

* (WIP) Fix missing args after rebase

* (WIP) Clone only env vars, not the whole stack

* (WIP) Add env var clone to `for` loop as well

* Minor edits

* Refactor merge_delta() to include stack merging.

Less error-prone than doing it manually.

* Clone env for each `update` command iteration

* Mark env var hidden only when found in eng. state

* Fix clippt warnings

* Add TODO about env var reading

* Do not clone empty environment in loops

* Remove extra cwd collection

* Split current_dir() into str and path; Fix autocd

* Make completions respect PWD env var
2022-01-05 09:30:34 +11:00
..
calendar Sort default context items categorically (#465) 2021-12-10 21:07:39 -06:00
conversions Wire hex viewing into a few more places (#572) 2021-12-25 05:15:01 +11:00
core_commands Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
dataframe Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
date Remove Span::unknown (#525) 2021-12-19 18:46:13 +11:00
env Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
experimental Category option for signature (#343) 2021-11-17 17:22:37 +13:00
filesystem Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
filters Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
formats type-o in signature (#633) 2021-12-31 09:54:30 -06:00
hash Remove Span::unknown (#525) 2021-12-19 18:46:13 +11:00
math Add string stream and binary stream, add text decoding (#570) 2021-12-24 18:22:11 +11:00
network Port fetch (with fixes) (#660) 2022-01-04 13:01:18 +11:00
path Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
platform add ability to specify an ansi style (#595) 2021-12-27 08:59:55 -06:00
random Add string stream and binary stream, add text decoding (#570) 2021-12-24 18:22:11 +11:00
shells Add better exit command (#369) 2021-11-26 21:00:57 +13:00
strings Add support for 'open' (#573) 2021-12-25 06:24:55 +11:00
system Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
viewers Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
default_context.rs Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
example_test.rs Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
lib.rs Remove Span::unknown (#525) 2021-12-19 18:46:13 +11:00