Correctly inherit a virtual PWD

PWD is not set in fish vars because it is read only.
Use getenv() to fetch it, allowing fish to inherit a virtual PWD.

This cherry pick includes both:
24f251e04 Correctly remove the test directory again in cd test
91a9c9897 Correctly inherit a virtual PWD

Fixes #5525
This commit is contained in:
ridiculousfish 2019-01-22 13:07:55 -08:00
parent d88be7b5c8
commit dfa61926e8
4 changed files with 22 additions and 1 deletions

View file

@ -962,7 +962,11 @@ void env_init(const struct config_paths_t *paths /* or NULL */) {
// initialize the PWD variable if necessary
// Note we may inherit a virtual PWD that doesn't match what getcwd would return; respect that.
if (env_get(L"PWD").missing_or_empty()) {
// Note we treat PWD as read-only so it was not set in vars.
const char *incoming_pwd = getenv("PWD");
if (incoming_pwd && incoming_pwd[0]) {
env_set_one(L"PWD", ENV_EXPORT | ENV_GLOBAL, str2wcstring(incoming_pwd));
} else {
env_set_pwd_from_getcwd();
}
env_set_termsize(); // initialize the terminal size variables

View file

@ -4,3 +4,6 @@
####################
# cd symlink completion
####################
# Virtual PWD inheritance

View file

@ -38,6 +38,16 @@ complete -C'ls ../'
echo "cd:"
complete -C'cd ../'
logmsg Virtual PWD inheritance
# PWD should be imported and respected by fish
cd $oldpwd
mkdir -p $base/realhome
set fish_path $PWD/../test/root/bin/fish
ln -s $base/realhome $base/linkhome
cd $base/linkhome
env HOME=$base/linkhome $fish_path -c 'echo PWD is $PWD'
# cd back before removing the test directory again.
cd $oldpwd
rm -Rf $base

View file

@ -17,3 +17,7 @@ cd:
../a2/
../a3/
../rabbithole/
####################
# Virtual PWD inheritance
PWD is /tmp/cdcomp_test/linkhome