Commit Graph

20736 Commits

Author SHA1 Message Date
Daniel Rainer
98df97d317 Add CI check for outdated translations 2025-05-27 16:48:33 +02:00
Daniel Rainer
7ca57894cc Update translations via script
No actual translations are added.
2025-05-27 16:48:20 +02:00
Johannes Altmanninger
c7391d1026 Fix some invalid assertions parsing keys
For example the terminal sending « CSI 55296 ; 5 u » would crash fish.
2025-05-27 14:33:09 +02:00
Johannes Altmanninger
1963b0830d Merge pull request #11517 2025-05-27 13:15:34 +02:00
Johannes Altmanninger
74ce965f32 Merge pull request #11522 2025-05-27 13:15:34 +02:00
Johannes Altmanninger
27420aaf8b Merge pull request #11528 2025-05-27 13:15:34 +02:00
Johannes Altmanninger
52cdb7fd62 functions/history: error out immediately if "builtin read" failed
Didn't test all of them..

Closes #11532
2025-05-27 13:15:33 +02:00
exploide
18c4debbc0 __fish_complete_man: cope with gzipped man pages 2025-05-25 11:48:28 +02:00
Johannes Altmanninger
8617964d4d Fix uvar file mtime force-update (Rust port regression)
When two fish processes rewrite the uvar file concurrent, they rely on the
uvar file's mtime (queried after taking a lock, if locking is supported) to
tell us whether their view of the uvar file is still up-to-date.  If it is,
they proceed to move it into place atomically via rename().

Since the observable mtime only updates on every OS clock tick, we call
futimens() manually to force-update that, to make sure that -- unless both
fish conincide on the same *nanosecond* -- other fish will notice that the
file changed.

Unfortunately, commit 77aeb6a2a8 (Port execution, 2023-10-08) accidentally
made us call futimens() only if clock_gettime() failed, instead of when
it succeeded. This means that we need to wait for the next clock tick to
observe a change in mtime.
Any resulting false negatives might have caused us to drop universal variable updates.

Reported in https://github.com/fish-shell/fish-shell/pull/11492#discussion_r2098948362

See #10300
2025-05-23 08:49:41 +02:00
wcbing
0d99859add completions/apt & apt-get: Let autoremove and autopurge take packages
- add complete for apt-get's autopurge
- continue #7095, add complete for apt/apt-get's autoremove and autopurge
2025-05-21 12:11:24 +08:00
nicole
0b8e0b8835 Add more completions to aptitude 2025-05-20 16:39:38 -03:00
Johannes Altmanninger
3867163193 Fixup history file EINTR loop to actually loop
Fixes d84e68dd4f (Retry history file flock() on EINTR, 2025-05-20).
2025-05-20 17:17:12 +02:00
Johannes Altmanninger
4d84e68dd4 Retry history file flock() on EINTR
When locking the uvar file, we retry whenever flock() fails with EINTR
(e.g. due to ctrl-c).

But not when locking the history file.  This seems wrong; all other libc
functions in the "history_file" code path do retry.

Fix that. In future we should extract a function.

Note that there are other inconsistencies; flock_uvar_file() does not
shy away from remote file systems and does not respect ABANDONED_LOCKING.
This means that empirically probably neither are necessary; let's make things
consistent in future.

See https://github.com/fish-shell/fish-shell/pull/11492#discussion_r2095096200
Might help #10300
2025-05-20 15:31:33 +02:00
Johannes Altmanninger
285a810814 Revert "Temporarily enable history_file debug category by default"
Commit f906a949cf (Temporarily enable history_file debug category by default,
2024-10-09) enabled the "history_file" debug category by default to gather
more data.

Judging from
https://github.com/fish-shell/fish-shell/issues/10300#issuecomment-2876718382
the logs didn't help, or were at least not visible when logging to stderr
(due to reboot).

Let's disable "history_file" logs again to remove potential
noise if the file system is read-only, disk is full etc., see
https://github.com/fish-shell/fish-shell/pull/11492#discussion_r2094781120

See #10300
2025-05-20 15:31:33 +02:00
Johannes Altmanninger
541a069a91 CI: fix detection of path to llvm-symbolizer
clang --version here outputs "clang version 19.1.7"
but it looks like that changed on GHA's Ubuntu runner:

	++ clang --version
	++ awk 'NR==1 { split($NF, version, "."); print version[1] }'
	+ llvm_version='(1ubuntu1)'

which leads to

	  The CHECK on line 7 wants:
	    abbr -a -- cuckoo somevalue # imported from a universal variable, see `help abbr`

	  but there was no remaining output to match.

	  additional output on stderr:1:111:
	    =================================================================
	    ==4680==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7bc287a5d402 at pc 0x55e597fa96b6 bp 0x7ffd2bc00700 sp 0x7ffd2bbffea8
	    READ of size 18 at 0x7bc287a5d402 thread T0
	    ==4680==WARNING: invalid path to external symbolizer!
	    ==4680==WARNING: Failed to use and restart external symbolizer!

Fix that, assuming that "clang --version" always matches the latest symbolizer
that is installed.  While at it, leave a "set -x" (which should be the
default for CI), and install llvm explicitly.
2025-05-20 14:28:38 +02:00
Johannes Altmanninger
e8864ef441 Fix stack-use-after-scope
I missed this in 7c2c7f5874 (Use uninit instead of zeroed, 2025-05-19).
See #11515
2025-05-20 14:18:04 +02:00
Johannes Altmanninger
2f708a7c0b Fix unused import 2025-05-20 12:49:25 +02:00
Johannes Altmanninger
b7a73710e2 Merge pull request #11515 2025-05-20 12:49:04 +02:00
Johannes Altmanninger
7a54ed66fb Merge pull request #11514 2025-05-20 12:39:04 +02:00
Johannes Altmanninger
99f4c09ed3 Merge pull request #11513 2025-05-20 12:39:04 +02:00
Johannes Altmanninger
e26b585ce5 builtin status: remove spurious newline from current-command (Rust port regression)
WHen "status current-command" is called outside a function it always returns
"fish". An extra newline crept in, fix that.

Fixes 77aeb6a2a8 (Port execution, 2023-10-08).
Fixes #11503
2025-05-20 12:32:22 +02:00
王宇逸
7c2c7f5874 Use uninit instead of zeroed 2025-05-19 20:54:12 +08:00
Yuyi Wang
7b3a2900e9 Refactor *NullTerminatedArray
* Remove `strlen_safe` & `null_terminated_array_length` and use the provided method of `OwningNullTerminatedArray`.
* Remove unneeded traits and make `NullTerminatedArray` private.
2025-05-19 17:24:24 +08:00
Yuyi Wang
7a79366f91 Use CStr instead of strlen to improve readability 2025-05-19 16:47:09 +08:00
Yuyi Wang
223b98f2ff Fix build.rs to support cross-compiling to cygwin (#11512)
2719ae4 adds a special cfg for cygwin to avoid annoying warnings. As cygwin target is usually cross-compiled, cfg! is not enough to detect the correct target. This PR uses CARGO_CFG_TARGET_OS env var instead.
2025-05-19 10:27:04 +02:00
Yuyi Wang
01560bf195 Remove libc sem completely on non-linux (#11511)
As it's only used on Linux, we can cfg it out completely on other platforms. It also enables test_topic_monitor_torture on NetBSD & Cygwin.
2025-05-19 10:26:47 +02:00
Daniel Rainer
7fe34ea401 Move and rename messages template file
There is no reason to have this file clutter the repo root.
Move it into the `po` directory, and give it a more descriptive name.

Inspired by this discussion:
https://github.com/fish-shell/fish-shell/pull/11463#discussion_r2083453275

I use `template.po` instead of `message.po-template` to be more compatible with
automatic filetype detection. (e.g. vim/nvim detect the former as a po file, but
the latter as a conf file)
2025-05-18 21:31:00 -07:00
Johannes Altmanninger
36f035b52c Merge pull request #11501 2025-05-16 07:36:03 +02:00
Johannes Altmanninger
0e8edab872 Fix typo 2025-05-16 07:35:43 +02:00
Johannes Altmanninger
448d630d0c Merge pull request #11500 2025-05-16 07:35:34 +02:00
Johannes Altmanninger
38fb2cfd6d Merge pull request #11499 2025-05-16 07:32:45 +02:00
Johannes Altmanninger
d68f8bdd3b Include sys/statvfs.h for the definition of ST_LOCAL (Rust port regression)
See https://man.netbsd.org/statvfs.5.
According to https://github.com/NetBSD/src/blob/trunk/sys/sys/statvfs.h#L135,
NetBSD has "#define ST_LOCAL MNT_LOCAL".  So this commit likely makes no
difference on existing systems.

While at it
- comment include statements
- remove a code clone

See #11486
2025-05-16 07:31:26 +02:00
Johannes Altmanninger
80bafd5a22 Merge pull request #11486 2025-05-16 07:12:47 +02:00
Daniel Rainer
ae8c5eaab7 Fix rst formatting issues 2025-05-16 00:30:34 +02:00
Daniel Rainer
329d190fbf Update translation docs
This is done in accordance with the recent changes to our translation pipeline.
2025-05-15 22:35:05 +02:00
Daniel Rainer
e5fa047412 Mark format strings in po files
This allows msgfmt to detect issues with translations of format strings.
The detection used here is very simple. It just checks if a string contains '%',
and if it does, the entry in the po file is preceded by '#, c-format'.
Any entries with this marker are checked by msgfmt in our tests, so if an issue
arises, we will notice before it is merged.
2025-05-15 22:09:57 +02:00
Daniel Rainer
cb31887941 Do not hardcode xgettext output path
Instead output on stdout, which lets the caller decide what to do with it.
2025-05-13 21:18:39 +02:00
Johannes Altmanninger
04fd697ac9 CONTRIBUTING: update docs on how to create a new translation 2025-05-13 00:29:05 +02:00
Johannes Altmanninger
2558d13361 Merge pull request #11488 2025-05-13 00:21:49 +02:00
Daniel Rainer
02ccf25443 Prettify profiling for multi-line commands
The old version just prints the entire command being profiled as-is.
If such a command consists of more than one line, these lines do not have any
padding, and thus visually interfere with the timings.

This commit adds padding, such that all lines but the first one have padding
prepended, such that the original line content starts at the column in which the
first line starts.

This does not work perfectly for subcommands (in the profiling sense,
where the command starts with (regex) '-+>' instead of just '>').
In such cases, even if the command string is indented in the source, the command
will not start with whitespace. However, subsequent lines are not trimmed, so
the might be indented farther than they should be relative to the first line of
the command.
2025-05-13 00:11:33 +02:00
Johannes Altmanninger
a88acb9715 Merge pull request #11487 2025-05-13 00:01:11 +02:00
Johannes Altmanninger
8d3ad0c3c3 Merge pull request #11485 2025-05-13 00:01:11 +02:00
Johannes Altmanninger
660f52ee4f Merge pull request #11463 2025-05-13 00:01:11 +02:00
Johannes Altmanninger
594b8730d8 completions/git: fix regression causing wrong remote-branch completions
Fixes 54971621de (completions/git: show url as description for remote
completion, 2025-04-13).
Fixes #11482
2025-05-13 00:01:11 +02:00
Johannes Altmanninger
107e4d11de Fix Vi mode glitch when replacing at last character
Another regression from d51f669647 (Vi mode: avoid placing cursor beyond last
character, 2024-02-14) "Unfortunately Vi mode sometimes needs to temporarily
select past end". So do the replace_one mode bindings which were forgotten.

Fix this.

This surfaces a tricky problem: when we use something like

	bind '' self-insert some-command

When key event "x" matches this generic binding, we insert both "self-insert"
and "some-command" at the front of the queue, and do *not* consume "x",
since the binding is empty.

Since there is a command (that might call "exit"), we insert a check-exit
event too, after "self-insert some-command" but _before_ "x".

The check-exit event makes "self-insert" do nothing. I don't think there's a
good reason for this; self-insert can only be triggered by a key event that
maps to self-insert; so there must always be a real key available for it to
consume. A "commandline -f self-insert" is a nop. Skip check-exit here.

Fixes #11484
2025-05-13 00:01:11 +02:00
Johannes Altmanninger
50500ec5b9 Fix typo causing wrong cursor position after Vi mode paste
Regressed in d51f669647 (Vi mode: avoid placing cursor beyond last character,
2024-02-14).
2025-05-12 22:57:20 +02:00
Daniel Rainer
3ccce609f0 Add script for updating translations
The purpose of this script is to simplify the translation-related workflow for
both developers and translators. It runs the xgettext, msgmerge, msgfmt pipeline
(or only parts of it, depending on the arguments), either for all languages, or
for one specific one.

Developers can use the script with the `--no-mo` flag to update the PO files for
all languages after changes to the Rust/fish sources, to keep the translations
up to date. Ideally, this would run automatically for all changes, such that
translations are always up to date, but for now, it would already be an
improvement to run this script before releasing a new version of fish.

Translators can use the script in the same way as developers, to get up to date
PO files. To see their translations in action, the script can be called with
`--only-mo`, which takes the current version of the PO files and generates MO
files from them, which get placed in a location which fish (built with `cargo
build`) can detect.
Translators might also find it useful to specify the language they want to work
on as a non-option argument. This argument should be the path to the po file
they want to work on. Specifying non-existing files to work on a new language is
allowed, but the files must be in the po directory and follow the naming
convention.
2025-05-12 22:49:30 +02:00
Alan Somers
bd26d4b61b Fix use of deprecated symbols in Nix 2025-05-12 13:28:56 -06:00
Alan Somers
7f4998ad9b Fix remote filesystem detection on FreeBSD
Need an extra include to get the definition of MNT_LOCAL

Fixes #11483
2025-05-12 13:18:21 -06:00
Daniel Rainer
122f39de66 Replace loop by pipeline
This simplifies the logic a bit and performs a better.

Performance improvements for extract_fish_script_messages (time in
microseconds):
- explicit regex: from 128241 to 83471 (speedup 1.5)
- implicit regex: from 682203 to 463635 (speedup 1.5)
2025-05-12 20:54:32 +02:00