Commit Graph

21069 Commits

Author SHA1 Message Date
Daniel Rainer
e96300b08e Build man pages in separate crate
Building man pages takes significant time due to Sphinx running for several
seconds, even when no updates are required. Previously, we added custom logic to
avoid calling `sphinx-build` if the inputs to `sphinx-build` had not changed
since a cached timestamp.

By moving this into its own crate, we can tell cargo to rebuild when the input
files changed and unrelated changes will have no effect on this crate. This
allows us to get rid of the custom code for tracking whether to recompile, while
keeping the effect of only calling `sphinx-build` when appropriate.

In order to avoid code duplication, a new `build-helper` crate is added,
which contains some functionality for use in `build.rs`.

Closes #11737
2025-08-22 09:14:56 +02:00
Daniel Rainer
32e5fa0c03 Stop depending on fish_indent for man pages
This allows building man pages without having `fish_indent` available, which is
useful because building man pages can happen during compilation of the fish
binaries, including `fish_indent`, resulting in an annoying cyclic dependency.

This change does not affect the generated man pages, at least with the current
config.
2025-08-22 09:12:10 +02:00
Daniel Rainer
e895f96f8a Do not rely on fish_indent for version in Sphinx
Depending on `fish_indent` when building docs is problematic because the docs
might get built before `fish_indent` is available. Furthermore, a version of
`fish_indent` which does not correspond to the current build might be used,
which would result in incorrect version information.

Use the `git_version_gen.sh` script instead to ensure up-to-date version
information without depending on build output.
2025-08-22 09:12:10 +02:00
Johannes Altmanninger
92f7063acb Use version=0.0.0 for unpublished crates
As discussed in #11737
2025-08-22 09:12:10 +02:00
Daniel Rainer
cd71801360 Use workspace dependencies exclusively
This allows us to track all dependencies in a single place and
automatically avoids using different versions of the same dependency in
different crates.

Sort dependencies alphabetically.

Closes #11751
2025-08-22 09:12:10 +02:00
Daniel Rainer
24898c61af Sync dependency versions of crates
This is done to allow merging all dependencies into workspace
dependencies.
2025-08-21 21:39:35 +02:00
Johannes Altmanninger
62b7c81052 Merge pull request #11742 2025-08-21 20:40:33 +02:00
Daniel Rainer
d32ce89889 Remove unnecessary rebuild paths
Cargo tracks normal Rust dependencies and automatically figures out if changes
to Rust source files, `Cargo.{toml,lock}`, and `build.rs` necessitate a rebuild,
and if so of what. In some cases these checks are smarter than just comparing
file modification times, so not specifying such paths explicitly can reduce the
amount of rebuilding which happens, without skipping necessary rebuilding.

ja: this reverts b2aaf1db52 (Rebuild if src changed, 2025-03-28) and
460b93a (Rebuild on changes relevant to build artifacts, 2025-03-30)
which tried to fix #11332 ("moving Git HEAD does not invalidate cargo
build results").  But that expectation is overbearing.  It's better
to only rebuild if something else of relevance to the build output
has changed.

Closes #11736
2025-08-21 20:40:33 +02:00
Henrik Hørlück Berg
16119377c3 Document --allow-empty, specify -r is only useful w/ -m
As noted in #11744
2025-08-21 00:06:24 +02:00
Kevin F. Konrad
5a45fec730 add completions for stackit CLI 2025-08-20 11:54:57 +02:00
Johannes Altmanninger
d26fd90efd Merge pull request #11741, closes #11741 2025-08-20 10:16:19 +02:00
Daniel Rainer
1c654f23af Put local dependencies in crates directory
With an increasing number of local dependencies, the repo root is getting
somewhat bloated. This commit moves the two current local dependencies into the
newly created `crates` directory, with the intention of using it for all future
local dependencies as well.

Some dependencies which are introduced by currently in-progress pull requests
will need modifications in order for relative paths to work correctly.
2025-08-20 10:16:19 +02:00
Johannes Altmanninger
b828822385 Merge pull request #11695 2025-08-20 10:14:34 +02:00
Johannes Altmanninger
e795ed4061 Merge pull request #11738 2025-08-20 10:14:27 +02:00
Johannes Altmanninger
3363d55ec4 staticbuild.yml: break up long line 2025-08-20 10:14:08 +02:00
Johannes Altmanninger
f8bfb7cb6b editorconfig: commit message line length is 72, not 80
This is more standard. Not sure how many people use editorconfig though.
2025-08-20 10:14:08 +02:00
Daniel Rainer
ce7733c75f Remove unnecessary parentheses
This was spotted by a lint on nightly Rust.
2025-08-19 00:26:21 +02:00
Johannes Altmanninger
feaec20de6 Run update_translations.fish 2025-08-18 14:10:46 +02:00
Daniel Rainer
514d34cc52 Add cargo feature for enabling gettext extraction
This allows having the proc macro crate as an optional dependency and speeds up
compilation in situations where `FISH_GETTEXT_EXTRACTION_FILE` changes, such as
the `build_tools/check.sh` script. Because we don't need to recompile on changes
to the environment variable when the feature is disabled, cargo can reuse
earlier compilation results instead of recompiling everything.
This speeds up the compilation work in `build_tools/check.sh` when no changes
were made which necessitate recompilation.
For such runs of `build_tools/check.sh`, these changes reduce the runtime on my
system by about 10 seconds, from 70 to 60, approximately.
The difference comes from the following two commands recompiling code without
the changes in this commit, but not with them:
- `cargo test --doc --workspace`
- `cargo doc --workspace`
2025-08-18 10:37:59 +02:00
Daniel Rainer
367696b346 Remove unnecessary into_iter call
Starting with Rust 1.90, this `into_iter` call triggers the
`clippy::useless_conversion` lint.
2025-08-17 20:20:09 -07:00
Daniel Rainer
70a9327858 Do not unwrap after checking with is_err
Doing so results in the `clippy::unnecessary_unwrap` lint starting with Rust
1.90 (in beta at the moment).
2025-08-17 20:20:09 -07:00
idealseal
a766c44a18 feat(comp): update networkctl completions 2025-08-17 20:17:00 -07:00
Peter Ammon
13d9aa0002 Changelog PR 11729 2025-08-16 11:22:45 -07:00
Bryce Berger
9273f352a0 allow psub --fifo --suffix ... 2025-08-15 15:02:44 -04:00
Johannes Altmanninger
79135c6c82 Merge pull request #11713, closes #11713 2025-08-15 18:11:07 +02:00
Daniel Rainer
5de43a4e86 Call fsync after appending to history file
This is an attempt to eliminate history file corruption as described in
https://github.com/fish-shell/fish-shell/issues/10300.
In particular, issues raised in
https://github.com/fish-shell/fish-shell/issues/10300#issuecomment-2567063654
can benefit from such synchronization.
2025-08-15 18:10:20 +02:00
Daniel Rainer
188282a27b Don't redundantly unlink() temporary file after renaming
There is an unlikely issue if two shells are concurrently rewriting the
history file:
- fish A runs rename("fish_history.DEADBEEF") (rewriting a history file with)
- fish B starts rewriting the history file; since "fish_history.DEADBEEF" no longer exists, it can in theory use that filename
- fish A runs wunlink("fish_history.DEADBEEF"), destroying fish B's work

Fix this by not calling wunlink() iff we successfully rename it.

[ja: add commit message and fix "!do_save" case]
2025-08-15 17:50:04 +02:00
Johannes Altmanninger
f59e5884bf Merge pull request #11714
Closes #11714
2025-08-15 17:37:34 +02:00
Johannes Altmanninger
51dcadf7c6 completions/makepkg: remove stale --pkg option
Closes #11724
2025-08-15 17:24:18 +02:00
Daniel Rainer
ba2500211b Call fsync and close tmpfile before rename
This is another attempt at eliminating file corruption, primarily in connection
to the history file, as observed in
https://github.com/fish-shell/fish-shell/issues/10300.

Calling `fsync` and closing the tmpfile should ensure that when the renaming
happens, the file content and metadata are already in persistent storage.

Some background can be found in the following links, which were pointed out in
https://github.com/fish-shell/fish-shell/issues/10300#issuecomment-2567063654:
https://www.comp.nus.edu.sg/~lijl/papers/ferrite-asplos16.pdf
https://archive.kernel.org/oldwiki/btrfs.wiki.kernel.org/index.php/FAQ.html#What_are_the_crash_guarantees_of_overwrite-by-rename.3F
2025-08-15 17:24:02 +02:00
Johannes Altmanninger
491ffb356b Merge pull request #11727 2025-08-15 16:48:34 +02:00
Daniel Rainer
b0ae11e769 Write only once when appending items
Building a buffer in advance and writing it once all items are serialized into
the buffer makes for simpler code, makes it easier to ensure that
`self.first_unwritten_new_item_index` is only updated if writing succeeded, and
it actually matches the previous behavior of the code in most realistic cases,
since previously there was only more than one `write_all` call if the serialized
items took up more than `HISTORY_OUTPUT_BUFFER_SIZE` bytes (64 * 1024), which
seems unlikely to occur during normal use, where mostly just a single item will
be appended.
2025-08-15 16:26:52 +02:00
Daniel Rainer
20e268a75c Clear file state earlier
This should not result in behavioral changes in the code, but it eliminates some
redundant variables and is a step in refactoring the function such that early
returns via `?` become sound.

Remove the `drop` since the lock will be dropped at this point anyway, there is
no need to be explicit about it.
2025-08-15 16:26:03 +02:00
Daniel Rainer
9c4c28da9d Use updated file id
This restores behavior from before f438e80f9b.
The file id changes when data is written to the file, so it needs to be updated
with data obtained after the updates to the file are completed.
2025-08-15 16:26:03 +02:00
Johannes Altmanninger
8219dd8af6 Merge pull request #11715 2025-08-15 16:19:03 +02:00
Johannes Altmanninger
781791c00c Revert "Add rust-toolchain.toml"
By default, we make every rustup user use our pinned version.  This might
not be ideal at this point, for a few reasons:
1. we don't have automatic Rust updates yet (see the parent commit),
   so this might unnecessarily install an old version. As a contributor,
   this feels irritating (newer versions are usually strictly better).
2. it will use more bandwidth and perhaps other resources during "git-bisect"
   scenarios
3. somehow rustup will download things redundantly; it will download "1.89.0"
   and "stable" even if they are identical. The user will need to clean
   those up at some point, even if they didn't add them explicitly.

See also
https://github.com/fish-shell/fish-shell/pull/11712#issuecomment-3165388330

Part of the motivation for rust-toolchain.toml is probably the regular
(every 6 weeks) failures due to the update check, but that failure has been
removed in the parent commit.

The other motivation ("fix the issue of local compiles running into lint
warnings from newer compilers") is a fair point but I think we should rather
fix warnings quickly.

Let's remove rust-toolchain.toml again until we have more agreement on what
we should do.

This reverts commits
* f806d35af8 (Ignore rust-toolchain.toml in CI, 2025-08-07)
* 9714b98262 (Explicitly use fully qualified rust version numbers, 2025-08-07)
* 921aaa0786 (Add rust-toolchain.toml, 2025-08-07)

Closes #11718
2025-08-15 16:10:18 +02:00
Johannes Altmanninger
d93fc5eded Revert "build_tools/check.sh: check that stable rust is up-to-date"
As reported in #11711 and #11712, the update-checks make check.sh automatically
fail every 6 weeks, so it pressures people into updating Rust, and (what's
worse), updating fish's pinned Rust version, even when that's not relevant
to their intent (which is to run `clippy -Dwarnings` and all other checks).

The update-checks were added as a "temporary" solution to make sure that
our pinned version doesn't lag too far behind stable, which gives us an
opportunity to fix new warnings before most contributors see them.

As suggested in #11584, reasonable solutions might be either of:
1. stop pinning stable Rust and rely on beta-nightlies to fix CI failures early
2. use renovatebot or similar to automate Rust updates

Until then, remove the update check to reduce friction.
I'll still run it on my machine.

This reverts commit 6d061daa91.
2025-08-15 15:08:48 +02:00
Daniel Rainer
b2dfb3fd6e Add completions for single-letter cargo aliases 2025-08-15 03:09:28 +02:00
Daniel Rainer
55122b127c Wrap renaming code in function
These changes are not intended to change any behavior. They are done to
facilitate closing the tmpfile before renaming, which is required for
correctness on some filesystems (at least btrfs). Using a `ScopeGuard` which
unlinks when the file is closed/dropped does not work in this context, so the
relevant code is wrapped in a function and the tmpfile is unlinked after the
function returns.
2025-08-12 19:50:53 +02:00
brennenputh
0adcbfa2ac Resolve review comments 2025-08-11 20:32:16 -04:00
Johannes Altmanninger
51fd00c98f Merge pull request #11717 2025-08-10 18:59:30 +02:00
Johannes Altmanninger
c123c4e866 Merge pull request #11691 2025-08-10 18:40:01 +02:00
Johannes Altmanninger
9003835452 Merge pull request #11701 2025-08-10 17:12:50 +02:00
Trevor Bender
cf044038e0 fix typo in completions.rst 2025-08-10 07:49:10 -04:00
brennenputh
6561a1d6ba Add distrobox completion script 2025-08-08 20:48:20 -04:00
Xiretza
894d4ecc53 Update to Rust 1.89, address newly added lints 2025-08-07 21:48:17 +00:00
Xiretza
f806d35af8 Ignore rust-toolchain.toml in CI
We set a specific default toolchain with dtolnay/rust-toolchain, we don't want
it to be overridden by the config intended for devs.
2025-08-07 21:47:36 +00:00
Xiretza
9714b98262 Explicitly use fully qualified rust version numbers
The action expands these internally, but then rust-toolchain.toml is interpreted
literally, and 1.88 is technically a different toolchain from 1.88.0.
2025-08-07 21:28:34 +00:00
Xiretza
921aaa0786 Add rust-toolchain.toml
This ensures that, by default, developers use the toolchain that is also tested
in CI, avoiding spurious warnings from lints added in new compiler versions.
2025-08-07 21:13:32 +00:00
Saeed M Rad
45bb8f535b funced: pretend copied functions are defined interactively
After #9542, the format for `functions -Dv` was changed for copied
functions.

```diff
-stdin
-n/a
+[path to copy location]
+[path to original definition]
 [and a few more lines]
```

Some components were (and perhaps are) still expecting the old format,
however. After a search, it looks like `funced` and `fish_config` are
the only two functions using `functions -D` and `functions -Dv` in this
repo (none are using `type -p`).

As noted in issue #11614, `funced` currently edits the file which
copies the given copied function. Another option was to make `funced`
edit the file which originally defined the function. Since the copied
function would not have been updated either way, I modified `funced` so
it would pretend that the copied function was defined interactively,
like it was before.

I did not modify `fish_config`, since it was only used for preset
prompts in the web config, none of which used `functions --copy`.
(Moreover, I believe it would have behaved correctly, since the preset
would not have had to define the function, only copy it.)

Fixes issue #11614
2025-08-07 10:19:42 +00:00