nushell/crates
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
..
nu-cli Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
nu-color-config Highlight block and record (#653) 2022-01-03 16:21:26 +11:00
nu-command Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
nu-engine Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
nu-json fix issue #559: to json -r serializes datetime without spaces (#596) 2021-12-27 21:51:38 +11:00
nu-parser Move $nu.env to $env (#665) 2022-01-05 08:34:42 +11:00
nu-path Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
nu-plugin Add support for 'open' (#573) 2021-12-25 06:24:55 +11:00
nu-pretty-hex Fix build breakage - bump ansi term (#651) 2022-01-03 09:36:32 +11:00
nu-protocol Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
nu-table Fix build breakage - bump ansi term (#651) 2022-01-03 09:36:32 +11:00
nu-term-grid clean up some todo comments in grid 2021-10-14 08:03:20 -05:00
nu_plugin_example Plugin json (#474) 2021-12-12 11:50:35 +00:00
nu_plugin_gstat Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
nu_plugin_inc Remove Span::unknown (#525) 2021-12-19 18:46:13 +11:00
nu_plugin_python name change (#526) 2021-12-19 10:00:31 +00:00