mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-05-28 09:31:16 -03:00
Compare commits
6 Commits
Integratio
...
Integratio
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b1ec703ceb | ||
|
|
553612f74a | ||
|
|
861decb003 | ||
|
|
3b8780aa6c | ||
|
|
7783505bee | ||
|
|
23c25ffe43 |
15
.github/workflows/release.yml
vendored
15
.github/workflows/release.yml
vendored
@@ -50,15 +50,18 @@ jobs:
|
|||||||
mkdir "$relnotes_tmp/src" "$relnotes_tmp/out"
|
mkdir "$relnotes_tmp/src" "$relnotes_tmp/out"
|
||||||
version=$(git describe)
|
version=$(git describe)
|
||||||
minor_version=${version%.*}
|
minor_version=${version%.*}
|
||||||
# Delete notes for prior releases.
|
changelog_for_this_version=$(awk <CHANGELOG.rst '
|
||||||
# Also fix up any relative references to other documentation files.
|
|
||||||
awk <CHANGELOG.rst '
|
|
||||||
/^fish/ && $2 != "'"$version"'" { exit }
|
/^fish/ && $2 != "'"$version"'" { exit }
|
||||||
{ print }
|
{ print }
|
||||||
' |
|
')
|
||||||
|
# Also fix up any relative references to other documentation files.
|
||||||
|
# Also remove spurious transitions at the end of the document.
|
||||||
|
printf %s "$changelog_for_this_version" |
|
||||||
sed >"$relnotes_tmp/src"/index.rst \
|
sed >"$relnotes_tmp/src"/index.rst \
|
||||||
-e 's,:doc:`\(.*\) <\([^>]*\)>`,`\1 <https://fishshell.com/docs/'"$minor_version"'/\2.html>`_,g' \
|
-e 's,:doc:`\(.*\) <\([^>]*\)>`,`\1 <https://fishshell.com/docs/'"$minor_version"'/\2.html>`_,g' \
|
||||||
-e 's,:envvar:`\([^`]*\)`,``$\1``,g'
|
-e 's,:envvar:`\([^`]*\)`,``$\1``,g' \
|
||||||
|
-e '$s/^----*$//'
|
||||||
|
|
||||||
# In future, we could reuse doctree from when we made HTML docs.
|
# In future, we could reuse doctree from when we made HTML docs.
|
||||||
sphinx-build -j 1 $(: "sphinx-markdown-builder is not marked concurrency-safe") \
|
sphinx-build -j 1 $(: "sphinx-markdown-builder is not marked concurrency-safe") \
|
||||||
-W -E -b markdown -c doc_src \
|
-W -E -b markdown -c doc_src \
|
||||||
@@ -73,8 +76,6 @@ jobs:
|
|||||||
|
|
||||||
*Download links: To download the source code for fish, we suggest the file named "fish-$version.tar.xz". The file downloaded from "Source code (tar.gz)" will not build correctly.*
|
*Download links: To download the source code for fish, we suggest the file named "fish-$version.tar.xz". The file downloaded from "Source code (tar.gz)" will not build correctly.*
|
||||||
|
|
||||||
*There is no GPG signature because we haven't yet decided how to integrate signing into the new release automation.*
|
|
||||||
|
|
||||||
*The files called fish-$version-linux-\*.tar.xz are experimental packages containing a single standalone ``fish`` binary for any Linux with the given architecture.*
|
*The files called fish-$version-linux-\*.tar.xz are experimental packages containing a single standalone ``fish`` binary for any Linux with the given architecture.*
|
||||||
EOF
|
EOF
|
||||||
} >/tmp/fish-built/release-notes.md
|
} >/tmp/fish-built/release-notes.md
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
fish 4.0.8 (released September 18, 2025)
|
||||||
|
========================================
|
||||||
|
|
||||||
|
This release fixes a regression in 4.0.6 that caused user bindings to be shadowed by either fish's or a plugin's bindings (:issue:`11803`).
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
fish 4.0.6 (released September 12, 2025)
|
fish 4.0.6 (released September 12, 2025)
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
|
|||||||
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -112,7 +112,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fish"
|
name = "fish"
|
||||||
version = "4.0.6"
|
version = "4.0.8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cc",
|
"cc",
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ debug = true
|
|||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "fish"
|
name = "fish"
|
||||||
version = "4.0.6"
|
version = "4.0.8"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
default-run = "fish"
|
default-run = "fish"
|
||||||
|
|||||||
@@ -34,7 +34,8 @@ fish_site=$repo_root/../fish-site
|
|||||||
|
|
||||||
for path in . "$fish_site"
|
for path in . "$fish_site"
|
||||||
do
|
do
|
||||||
if ! git -C "$path" diff HEAD --quiet; then
|
if ! git -C "$path" diff HEAD --quiet ||
|
||||||
|
git ls-files --others --exclude-standard | grep .; then
|
||||||
echo >&2 "$0: index and worktree must be clean"
|
echo >&2 "$0: index and worktree must be clean"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -45,7 +46,14 @@ if git tag | grep -qxF "$version"; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sed -n 1p CHANGELOG.rst | grep -q '^fish .*(released ???)$'
|
integration_branch=$(
|
||||||
|
git for-each-ref --points-at=HEAD 'refs/heads/Integration_*' \
|
||||||
|
--format='%(refname:strip=2)'
|
||||||
|
)
|
||||||
|
[ -n "$integration_branch" ] ||
|
||||||
|
git merge-base --is-ancestor $remote/master HEAD
|
||||||
|
|
||||||
|
sed -n 1p CHANGELOG.rst | grep -q '^fish .*(released .*)$'
|
||||||
sed -n 2p CHANGELOG.rst | grep -q '^===*$'
|
sed -n 2p CHANGELOG.rst | grep -q '^===*$'
|
||||||
|
|
||||||
changelog_title="fish $version (released $(date +'%B %d, %Y'))"
|
changelog_title="fish $version (released $(date +'%B %d, %Y'))"
|
||||||
@@ -86,6 +94,10 @@ done
|
|||||||
# Update fishshell.com
|
# Update fishshell.com
|
||||||
tag_oid=$(git rev-parse "$version")
|
tag_oid=$(git rev-parse "$version")
|
||||||
tmpdir=$(mktemp -d)
|
tmpdir=$(mktemp -d)
|
||||||
|
# TODO This works on draft releases only if "gh" is configured to
|
||||||
|
# have write access to the fish-shell repository. Unless we are fine
|
||||||
|
# publishing the release at this point, we should at least fail if
|
||||||
|
# "gh" doesn't have write access.
|
||||||
while ! \
|
while ! \
|
||||||
gh release download "$version" --dir="$tmpdir" \
|
gh release download "$version" --dir="$tmpdir" \
|
||||||
--pattern="fish-$version.tar.xz"
|
--pattern="fish-$version.tar.xz"
|
||||||
@@ -95,13 +107,13 @@ done
|
|||||||
actual_tag_oid=$(git ls-remote "$remote" |
|
actual_tag_oid=$(git ls-remote "$remote" |
|
||||||
awk '$2 == "refs/tags/'"$version"'" { print $1 }')
|
awk '$2 == "refs/tags/'"$version"'" { print $1 }')
|
||||||
[ "$tag_oid" = "$actual_tag_oid" ]
|
[ "$tag_oid" = "$actual_tag_oid" ]
|
||||||
tar -C "$tmpdir" xf fish-$version.tar.xz
|
( cd "$tmpdir" && tar xf fish-$version.tar.xz )
|
||||||
minor_version=${version%.*}
|
|
||||||
CopyDocs() {
|
CopyDocs() {
|
||||||
rm -rf "fish-site/site/docs/$1"
|
rm -rf "$fish_site/site/docs/$1"
|
||||||
cp -r "$tmpdir/fish-$version/user_doc/html" "fish-site/site/docs/$1"
|
cp -r "$tmpdir/fish-$version/user_doc/html" "$fish_site/site/docs/$1"
|
||||||
git -C fish-site add "site/docs/$1"
|
git -C $fish_site add "site/docs/$1"
|
||||||
}
|
}
|
||||||
|
minor_version=${version%.*}
|
||||||
CopyDocs "$minor_version"
|
CopyDocs "$minor_version"
|
||||||
latest_release=$(
|
latest_release=$(
|
||||||
releases=$(git tag | grep '^[0-9]*\.[0-9]*\.[0-9]*.*' |
|
releases=$(git tag | grep '^[0-9]*\.[0-9]*\.[0-9]*.*' |
|
||||||
@@ -115,17 +127,19 @@ fi
|
|||||||
rm -rf "$tmpdir"
|
rm -rf "$tmpdir"
|
||||||
(
|
(
|
||||||
cd "$fish_site"
|
cd "$fish_site"
|
||||||
make new-release
|
make
|
||||||
git add -u
|
git add -u
|
||||||
|
! git ls-files --others --exclude-standard | grep .
|
||||||
git commit --message="$(printf %s "\
|
git commit --message="$(printf %s "\
|
||||||
| Release $version
|
| Release $version (docs)
|
||||||
|
|
|
|
||||||
| Created by ../fish-shell/build_tools/release.sh
|
| Created by ../fish-shell/build_tools/release.sh
|
||||||
" | sed 's,^\s*| ,,')"
|
" | sed 's,^\s*| \?,,')"
|
||||||
)
|
)
|
||||||
|
|
||||||
# N.B. --exit-status doesn't fail reliably.
|
# # Uncomment this to wait the full workflow run (i.e. macOS packages).
|
||||||
gh run view "$run_id" --verbose --log-failed --exit-status
|
# # Also note that --exit-status doesn't fail reliably.
|
||||||
|
# gh run view "$run_id" --verbose --log-failed --exit-status
|
||||||
|
|
||||||
while {
|
while {
|
||||||
! draft=$(gh release view "$version" --json=isDraft --jq=.isDraft) \
|
! draft=$(gh release view "$version" --json=isDraft --jq=.isDraft) \
|
||||||
@@ -137,39 +151,47 @@ done
|
|||||||
|
|
||||||
(
|
(
|
||||||
cd "$fish_site"
|
cd "$fish_site"
|
||||||
git push git@github.com:$repository_owner/fish-site
|
make new-release
|
||||||
|
git add -u
|
||||||
|
! git ls-files --others --exclude-standard | grep .
|
||||||
|
git commit --message="$(printf %s "\
|
||||||
|
| Release $version (release list update)
|
||||||
|
|
|
||||||
|
| Created by ../fish-shell/build_tools/release.sh
|
||||||
|
" | sed 's,^\s*| \?,,')"
|
||||||
|
# This takes care to support remote names that are different from
|
||||||
|
# fish-shell remote name. Also, support detached HEAD state.
|
||||||
|
git push git@github.com:$repository_owner/fish-site HEAD:master
|
||||||
)
|
)
|
||||||
|
|
||||||
if git merge-base --is-ancestor $remote/master $version
|
if [ -n "$integration_branch" ]; then
|
||||||
then
|
git push $remote "$version^{commit}":refs/heads/$integration_branch
|
||||||
git push $remote $version:master
|
|
||||||
else
|
else
|
||||||
# Probably on an integration branch.
|
changelog=$(cat - CHANGELOG.rst <<EOF
|
||||||
# TODO Maybe push when that's safe (or move this to CI).
|
|
||||||
:
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$repository_owner" = fish-shell ]; then {
|
|
||||||
mail=$(mktemp)
|
|
||||||
cat >$mail <<EOF
|
|
||||||
From: $(git var GIT_AUTHOR_IDENT | sed 's/ [0-9]* +[0-9]*$//')
|
|
||||||
To: fish-users Mailing List <fish-users@lists.sourceforge.net>
|
|
||||||
Subject: fish $version released
|
|
||||||
|
|
||||||
See https://github.com/fish-shell/fish-shell/releases/tag/$version
|
|
||||||
EOF
|
|
||||||
git send-email --suppress-cc=all $mail
|
|
||||||
rm $mail
|
|
||||||
} fi
|
|
||||||
|
|
||||||
changelog=$(cat - CHANGELOG.rst <<EOF
|
|
||||||
fish ?.?.? (released ???)
|
fish ?.?.? (released ???)
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
printf %s\\n "$changelog" >CHANGELOG.rst
|
printf %s\\n "$changelog" >CHANGELOG.rst
|
||||||
CommitVersion ${version}-snapshot "start new cycle"
|
CommitVersion ${version}-snapshot "start new cycle"
|
||||||
|
git push $remote HEAD:master
|
||||||
|
fi
|
||||||
|
|
||||||
|
# TODO This can currently require a TTY for editing and password
|
||||||
|
# prompts.
|
||||||
|
if [ "$repository_owner" = fish-shell ]; then {
|
||||||
|
mail=$(mktemp)
|
||||||
|
cat >$mail <<EOF
|
||||||
|
From: $(git var GIT_AUTHOR_IDENT | sed 's/ [0-9]* +[0-9]*$//')
|
||||||
|
Subject: fish $version released
|
||||||
|
|
||||||
|
See https://github.com/fish-shell/fish-shell/releases/tag/$version
|
||||||
|
EOF
|
||||||
|
git send-email --suppress-cc=all --confirm=always $mail \
|
||||||
|
--to="fish-users Mailing List <fish-users@lists.sourceforge.net>"
|
||||||
|
rm $mail
|
||||||
|
} fi
|
||||||
|
|
||||||
exit
|
exit
|
||||||
|
|
||||||
|
|||||||
12
src/input.rs
12
src/input.rs
@@ -589,11 +589,7 @@ fn next_is_char(
|
|||||||
actual_seq.len()
|
actual_seq.len()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
return Some(if matches!(style, KeyNameStyle::Terminfo(_)) {
|
return Some(KeyMatchQuality::Exact);
|
||||||
KeyMatchQuality::Exact
|
|
||||||
} else {
|
|
||||||
KeyMatchQuality::Legacy
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
if key.modifiers == Modifiers::ALT && seq_char == '\x1b' {
|
if key.modifiers == Modifiers::ALT && seq_char == '\x1b' {
|
||||||
if self.subidx + 1 == actual_seq.len() {
|
if self.subidx + 1 == actual_seq.len() {
|
||||||
@@ -613,11 +609,7 @@ fn next_is_char(
|
|||||||
self.subidx = 0;
|
self.subidx = 0;
|
||||||
}
|
}
|
||||||
FLOG!(reader, format!("matched {key} against raw escape sequence"));
|
FLOG!(reader, format!("matched {key} against raw escape sequence"));
|
||||||
return Some(if matches!(style, KeyNameStyle::Terminfo(_)) {
|
return Some(KeyMatchQuality::Exact);
|
||||||
KeyMatchQuality::Exact
|
|
||||||
} else {
|
|
||||||
KeyMatchQuality::Legacy
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -211,7 +211,6 @@ fn apply_shift(mut key: Key, do_ascii: bool, shifted_codepoint: char) -> Option<
|
|||||||
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
|
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
|
||||||
pub enum KeyMatchQuality {
|
pub enum KeyMatchQuality {
|
||||||
Legacy,
|
|
||||||
BaseLayoutModuloShift,
|
BaseLayoutModuloShift,
|
||||||
BaseLayout,
|
BaseLayout,
|
||||||
ModuloShift,
|
ModuloShift,
|
||||||
|
|||||||
Reference in New Issue
Block a user