mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-05-29 10:31:14 -03:00
Use standalone code paths by default
When users update fish by replacing files, existing shells might throw weird errors because internal functions in share/functions/ might have changed. This is easy to remedy by restarting the shell, but I guess it would be nice if old shells kept using old data. This is somewhat at odds with lazy-loading. But we can use the standalone mode. Turn that on by default. Additionally, this could simplify packaging. Some packages incorrectly put third party files into /usr/share/fish/completion/ when they ought to use /usr/share/fish/vendor_completions.d/ for that. That packaging mistake can make file conflicts randomly appearing when either fish or foo ships a completion for foo. Once we actually stop installing /usr/share/fish/completions, there will no longer be a conflict (for better or worse, things will silently not work, unless packagers notice that the directory doesn't actually exist anymore). The only advantage of having /usr/share/fish/ on the file system is discoverability. But getting the full source code is better anyway. Note that we still install (redundant) $__fish_data_dir when using CMake. This is to not unnecessarily break both 1. already running (old) shells as users upgrade to 4.2 2. plugins (as mentioned in an earlier commit), We can stop installing $__fish_data_dir once we expect 99% of users to upgrade from at least 4.2. If we end up reverting this, we should try to get rid of the embed-data knob in another way, but I'm not sure how. Closes #11921 To-do: - maybe make it a feature flag so users can turn it off without recompiling with "set -Ua no-embed-data".
This commit is contained in:
@@ -36,6 +36,13 @@ For distributors and developers
|
||||
which allows you to use `uv <https://github.com/astral-sh/uv>`__ to provide Sphinx (e.g. `uv run cargo install --path .`).
|
||||
- The minimum supported Rust version (MSRV) has been updated to 1.85.
|
||||
- Fixed saving/loading of universal variables on Cygwin (:issue:`11948`).
|
||||
- The standalone build mode has been made the default.
|
||||
This means that the files in ``$CMAKE_INSTALL_PREFIX/share/fish`` will generally not be used anymore, with minor exceptions.
|
||||
For now, they are still installed redundantly, to prevent upgrades from breaking already-running shells (:issue:`11921`).
|
||||
This change means that future upgrades will no longer break running shells when an internal function has changed.
|
||||
To turn this off (which should not be necessary),
|
||||
patch out the ``embed-data`` feature from ``cmake/Rust.cmake``.
|
||||
This option will be removed in future.
|
||||
|
||||
|
||||
fish 4.1.3 (released ???)
|
||||
|
||||
@@ -84,7 +84,9 @@ if test -z "$CI" || git -C "$workspace_root" tag | grep -q .; then {
|
||||
echo 'The file downloaded from ``Source code (tar.gz)`` will not build correctly.'
|
||||
echo 'A GPG signature using the key published at '"${FISH_GPG_PUBLIC_KEY_URL:-???}"' is available as ``fish-'"$version"'.tar.xz.asc``.'
|
||||
echo
|
||||
echo 'The files called ``fish-'"$version"'-linux-\*.tar.xz`` are experimental packages containing a single standalone ``fish`` binary for any Linux with the given CPU architecture.'
|
||||
echo 'The files called ``fish-'"$version"'-linux-\*.tar.xz`` contain'
|
||||
echo '`standalone fish binaries <https://github.com/fish-shell/fish-shell/?tab=readme-ov-file#building-fish-with-cargo>`__'
|
||||
echo 'for any Linux with the given CPU architecture.'
|
||||
} >"$relnotes_tmp/fake-workspace"/CHANGELOG.rst
|
||||
|
||||
sphinx-build >&2 -j auto \
|
||||
|
||||
@@ -3,6 +3,8 @@ find_package(Rust REQUIRED)
|
||||
|
||||
set(FISH_RUST_BUILD_DIR "${CMAKE_BINARY_DIR}/cargo/build")
|
||||
|
||||
list(APPEND FISH_CARGO_FEATURES_LIST "embed-data")
|
||||
|
||||
if(DEFINED ASAN)
|
||||
list(APPEND CARGO_FLAGS "-Z" "build-std")
|
||||
list(APPEND FISH_CARGO_FEATURES_LIST "asan")
|
||||
|
||||
@@ -381,7 +381,6 @@ By default ``$fish_function_path`` contains the following:
|
||||
- A directory for users to keep their own functions, usually ``~/.config/fish/functions`` (controlled by the ``XDG_CONFIG_HOME`` environment variable).
|
||||
- A directory for functions for all users on the system, usually ``/etc/fish/functions`` (really ``$__fish_sysconfdir/functions``).
|
||||
- Directories for other software to put their own functions. These are in the directories under ``$__fish_user_data_dir`` (usually ``~/.local/share/fish``, controlled by the ``XDG_DATA_HOME`` environment variable) and in the ``XDG_DATA_DIRS`` environment variable, in a subdirectory called ``fish/vendor_functions.d``. The default value for ``XDG_DATA_DIRS`` is usually ``/usr/share/fish/vendor_functions.d`` and ``/usr/local/share/fish/vendor_functions.d``.
|
||||
- The functions shipped with fish, usually installed in ``/usr/share/fish/functions`` (really ``$__fish_data_dir/functions``).
|
||||
|
||||
If you are unsure, your functions probably belong in ``~/.config/fish/functions``.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user