Git fork
at reftables-rust 106 lines 2.5 kB view raw
1#!/bin/sh 2 3DEF_VER=v2.51.GIT 4 5LF=' 6' 7 8if test "$#" -lt 2 || test "$#" -gt 3 9then 10 echo >&2 "USAGE: $0 <SOURCE_DIR> (--format=<STRING>|<INPUT>) [<OUTPUT>]" 11 exit 1 12fi 13 14SOURCE_DIR="$1" 15 16case "$2" in 17--format=*) 18 INPUT="${2#--format=}" 19 ;; 20*) 21 if ! test -f "$2" 22 then 23 echo >&2 "Input is not a file: $2" 24 exit 1 25 fi 26 INPUT=$(cat "$2") 27 ;; 28esac 29 30OUTPUT="$3" 31 32# Protect us from reading Git version information outside of the Git directory 33# in case it is not a repository itself, but embedded in an unrelated 34# repository. 35GIT_CEILING_DIRECTORIES="$SOURCE_DIR/.." 36export GIT_CEILING_DIRECTORIES 37 38if test -z "$GIT_VERSION" 39then 40 # First see if there is a version file (included in release tarballs), 41 # then try git-describe, then default. 42 if test -f "$SOURCE_DIR"/version 43 then 44 VN=$(cat "$SOURCE_DIR"/version) || VN="$DEF_VER" 45 elif { 46 test -d "$SOURCE_DIR/.git" || 47 test -d "${GIT_DIR:-.git}" || 48 test -f "$SOURCE_DIR"/.git; 49 } && 50 VN=$(git -C "$SOURCE_DIR" describe --dirty --match="v[0-9]*" 2>/dev/null) && 51 case "$VN" in 52 *$LF*) (exit 1) ;; 53 esac 54 then 55 VN=$(echo "$VN" | sed -e 's/-/./g'); 56 else 57 VN="$DEF_VER" 58 fi 59 60 GIT_VERSION=$(expr "$VN" : v*'\(.*\)') 61fi 62 63if test -z "$GIT_BUILT_FROM_COMMIT" 64then 65 GIT_BUILT_FROM_COMMIT=$(git -C "$SOURCE_DIR" rev-parse -q --verify HEAD 2>/dev/null) 66fi 67 68if test -z "$GIT_DATE" 69then 70 GIT_DATE=$(git -C "$SOURCE_DIR" show --quiet --format='%as' 2>/dev/null) 71fi 72 73if test -z "$GIT_USER_AGENT" 74then 75 GIT_USER_AGENT="git/$GIT_VERSION" 76fi 77 78# While released Git versions only have three numbers, development builds also 79# have a fourth number that corresponds to the number of patches since the last 80# release. 81read GIT_MAJOR_VERSION GIT_MINOR_VERSION GIT_MICRO_VERSION GIT_PATCH_LEVEL trailing <<EOF 82$(echo "$GIT_VERSION" 0 0 0 0 | tr '.a-zA-Z-' ' ') 83EOF 84 85REPLACED=$(printf "%s\n" "$INPUT" | sed -e "s|@GIT_VERSION@|$GIT_VERSION|" \ 86 -e "s|@GIT_MAJOR_VERSION@|$GIT_MAJOR_VERSION|" \ 87 -e "s|@GIT_MINOR_VERSION@|$GIT_MINOR_VERSION|" \ 88 -e "s|@GIT_MICRO_VERSION@|$GIT_MICRO_VERSION|" \ 89 -e "s|@GIT_PATCH_LEVEL@|$GIT_PATCH_LEVEL|" \ 90 -e "s|@GIT_BUILT_FROM_COMMIT@|$GIT_BUILT_FROM_COMMIT|" \ 91 -e "s|@GIT_USER_AGENT@|$GIT_USER_AGENT|" \ 92 -e "s|@GIT_DATE@|$GIT_DATE|" 93) 94 95if test -z "$OUTPUT" 96then 97 printf "%s\n" "$REPLACED" 98else 99 printf "%s\n" "$REPLACED" >"$OUTPUT".$$+ 100 if ! test -f "$OUTPUT" || ! cmp "$OUTPUT".$$+ "$OUTPUT" >/dev/null 101 then 102 mv "$OUTPUT".$$+ "$OUTPUT" 103 else 104 rm "$OUTPUT".$$+ 105 fi 106fi