A new type of shell
Go to file
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
.github/workflows Update clippy to check all features (#441) 2021-12-06 07:23:43 +13:00
crates Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
docs Move $nu.env to $env (#665) 2022-01-05 08:34:42 +11:00
src Use only $nu.env.PWD for getting the current directory (#587) 2022-01-05 09:30:34 +11:00
.gitignore ignore .DS_Store files on Mac (#622) 2021-12-29 12:42:11 -06:00
Cargo.lock Port fetch (with fixes) (#660) 2022-01-04 13:01:18 +11:00
Cargo.toml Port fetch (with fixes) (#660) 2022-01-04 13:01:18 +11:00
LICENSE Create LICENSE 2021-10-07 06:36:28 +13:00
README.md update readme 2021-10-21 20:18:51 -07:00
TODO.md Fix flattening of in-variable (#624) 2021-12-30 14:26:40 +11:00

Engine-q

Engine-q is an experimental project to replace the core functionality in Nushell (parser, engine, protocol). It's still in an alpha state, and there is still a lot to do: please see TODO.md

If you'd like to help out, come join us on the discord or propose some work in an issue or PR draft. We're currently looking to begin porting Nushell commands to engine-q.

If you are interested in porting a command from Nushell to engine-q you are welcome to comment on this issue 242 with the command name you would like to port.