mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-04-21 17:21:14 -03:00
get_version() in build.rs duplicates some logic in
build_tools/git_version_gen.sh. There are some differences
1. When computing the Git hash, get_version() falls back to reading
.git/HEAD directly if "git describe" fails
1.1. Git is not installed
Not sure if this is a good strong reason. If you don't have
Git installed, how would you have created ".git"? If the exact
Git SHA is important, maybe we should use something like gitoxide
for this rather than implementing our own.
1.2. there is a permission problem
The case mentiond in 0083192fcb (Read git SHA ourselves if it
is unavailable, 2024-12-09) doesn't seem to happen with current
versions of Git: "sudo git describe" works fine. Something like
"sudo -u postgres git describe" doesn't. We could support that
but let's wait until we know of a use case.
1.3 there are no tags
(when doing "cargo install --git", as mentioned in 0dfc490721
(build.rs: Use Cargo_PKG_VERSION if no version could be found,
2024-06-10)).
Missing tags are no longer a problem because we read the version
from Cargo.toml now. Tweak the script to make sure that the
version is 4.3.3-g${git_sha} instead of just ${git_sha}.
2. get_version() falls back to jj too.
That was added for jj workspaces that don't have a Git worktree;
but those should be one their way out; when using jj's Git backend,
all workspaces will get an associated worktre.
23 lines
603 B
Bash
Executable File
23 lines
603 B
Bash
Executable File
#!/bin/sh
|
|
# Originally from the git sources (GIT-VERSION-GEN)
|
|
|
|
set -e
|
|
|
|
# Find the fish directory as two levels up from script directory.
|
|
FISH_BASE_DIR="$( cd "$( dirname "$( dirname "$0" )" )" && pwd )"
|
|
|
|
version=$(
|
|
awk <"$FISH_BASE_DIR/Cargo.toml" -F'"' '$1 == "version = " { print $2 }'
|
|
)
|
|
if git_version=$(
|
|
GIT_CEILING_DIRECTORIES=$FISH_BASE_DIR/.. \
|
|
git -C "$FISH_BASE_DIR" describe --always --dirty 2>/dev/null); then
|
|
if [ "$git_version" = "${git_version#"$version"}" ]; then
|
|
version=$version-g$git_version
|
|
else
|
|
version=$git_version
|
|
fi
|
|
fi
|
|
|
|
echo "$version"
|