The documentation we generate embeds information for the exact Git version used as well as the date of the commit. This information is injected by injecting attributes into the build process via command line argument. Refactor the logic so that we write the information into "asciidoc.conf" and "asciidoctor-extensions.rb" via `GIT-VERSION-GEN` for AsciiDoc and AsciiDoctor, respectively. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
85 lines
2.2 KiB
Bash
Executable File
85 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
DEF_VER=v2.47.GIT
|
|
|
|
LF='
|
|
'
|
|
|
|
if test "$#" -ne 3
|
|
then
|
|
echo >&2 "USAGE: $0 <SOURCE_DIR> <INPUT> <OUTPUT>"
|
|
exit 1
|
|
fi
|
|
|
|
SOURCE_DIR="$1"
|
|
INPUT="$2"
|
|
OUTPUT="$3"
|
|
|
|
if ! test -f "$INPUT"
|
|
then
|
|
echo >&2 "Input is not a file: $INPUT"
|
|
exit 1
|
|
fi
|
|
|
|
# Protect us from reading Git version information outside of the Git directory
|
|
# in case it is not a repository itself, but embedded in an unrelated
|
|
# repository.
|
|
GIT_CEILING_DIRECTORIES="$SOURCE_DIR/.."
|
|
export GIT_CEILING_DIRECTORIES
|
|
|
|
# First see if there is a version file (included in release tarballs),
|
|
# then try git-describe, then default.
|
|
if test -f "$SOURCE_DIR"/version
|
|
then
|
|
VN=$(cat "$SOURCE_DIR"/version) || VN="$DEF_VER"
|
|
elif {
|
|
test -d "$SOURCE_DIR/.git" ||
|
|
test -d "${GIT_DIR:-.git}" ||
|
|
test -f "$SOURCE_DIR"/.git;
|
|
} &&
|
|
VN=$(git -C "$SOURCE_DIR" describe --match "v[0-9]*" HEAD 2>/dev/null) &&
|
|
case "$VN" in
|
|
*$LF*) (exit 1) ;;
|
|
v[0-9]*)
|
|
git -C "$SOURCE_DIR" update-index -q --refresh
|
|
test -z "$(git -C "$SOURCE_DIR" diff-index --name-only HEAD --)" ||
|
|
VN="$VN-dirty" ;;
|
|
esac
|
|
then
|
|
VN=$(echo "$VN" | sed -e 's/-/./g');
|
|
else
|
|
VN="$DEF_VER"
|
|
fi
|
|
|
|
GIT_VERSION=$(expr "$VN" : v*'\(.*\)')
|
|
GIT_BUILT_FROM_COMMIT=$(git -C "$SOURCE_DIR" rev-parse -q --verify HEAD 2>/dev/null)
|
|
GIT_DATE=$(git -C "$SOURCE_DIR" show --quiet --format='%as' 2>/dev/null)
|
|
if test -z "$GIT_USER_AGENT"
|
|
then
|
|
GIT_USER_AGENT="git/$GIT_VERSION"
|
|
fi
|
|
|
|
# While released Git versions only have three numbers, development builds also
|
|
# have a fourth number that corresponds to the number of patches since the last
|
|
# release.
|
|
read GIT_MAJOR_VERSION GIT_MINOR_VERSION GIT_MICRO_VERSION GIT_PATCH_LEVEL trailing <<EOF
|
|
$(echo "$GIT_VERSION" 0 0 0 0 | tr '.a-zA-Z-' ' ')
|
|
EOF
|
|
|
|
sed -e "s|@GIT_VERSION@|$GIT_VERSION|" \
|
|
-e "s|@GIT_MAJOR_VERSION@|$GIT_MAJOR_VERSION|" \
|
|
-e "s|@GIT_MINOR_VERSION@|$GIT_MINOR_VERSION|" \
|
|
-e "s|@GIT_MICRO_VERSION@|$GIT_MICRO_VERSION|" \
|
|
-e "s|@GIT_PATCH_LEVEL@|$GIT_PATCH_LEVEL|" \
|
|
-e "s|@GIT_BUILT_FROM_COMMIT@|$GIT_BUILT_FROM_COMMIT|" \
|
|
-e "s|@GIT_USER_AGENT@|$GIT_USER_AGENT|" \
|
|
-e "s|@GIT_DATE@|$GIT_DATE|" \
|
|
"$INPUT" >"$OUTPUT"+
|
|
|
|
if ! test -f "$OUTPUT" || ! cmp "$OUTPUT"+ "$OUTPUT" >/dev/null
|
|
then
|
|
mv "$OUTPUT"+ "$OUTPUT"
|
|
else
|
|
rm "$OUTPUT"+
|
|
fi
|