makeversion (1668B)
1 #!/bin/sh -x 2 # vim: set ft=bash: 3 FALLBACKVER=${FALLBACKVER:-unknown} 4 5 getent() 6 { 7 geresult='' 8 if geresult=$(command getent "$@" 2>/dev/null); then 9 return 10 fi 11 case "$1" in 12 passwd|group) 13 if [ -z "$2" ]; then 14 geresult=$(cat /etc/"$1") 15 else 16 geresult=$(awk -F: -vu="$2" '{ if ($3 == u) print }' /etc/"$1") 17 fi 18 ;; 19 *) ;; 20 esac 21 } 22 23 if [ -d .got ] && command -v got >/dev/null 2>&1; then 24 lastcommit=$(got log | 25 awk '/^commit/ {print substr($2,1,7); exit}') 26 got tag -l | 27 awk -v lastcommit="$lastcommit" ' 28 /^object: commit/ { 29 if (!lasttagcom) 30 { 31 lasttagcom = substr($3,1,7) 32 } 33 next 34 } 35 /^tag/ { 36 if (!ver) 37 { 38 sub(/^v/,"",$2) 39 ver = $2 40 } 41 next 42 } 43 END { 44 printf "%s", ver 45 if (lastcommit != lasttagcom) 46 { 47 printf "-g%s", lastcommit 48 } 49 printf "\n" 50 }' >version.new 51 elif [ -d .git ] && command -v git >/dev/null 2>&1; then 52 LC_ALL=C 53 export LC_ALL 54 getent passwd "$(unalias ls >/dev/null 2>&1 || true; \ 55 command ls -nd . | awk '{print $3}')" 56 user=$(printf "%s\n" "$geresult" | awk -F: '{print $1}') 57 if [ -z "$user" ]; then 58 printf "$0: error: Cannot determine owner of %s" "$(pwd)" >&2 59 exit 1 60 fi 61 e_user=$(id -un) 62 if [ "$e_user" = "$user" ]; then 63 git describe 2>/dev/null | sed 's/^v//' >version.new 64 else 65 su "$user" -c 'git describe' 2>/dev/null | 66 sed 's/^v//' >version.new 67 fi 68 else 69 printf "%s\n" "$FALLBACKVER" >version.new 70 fi 71 72 if [ -f version ]; then 73 if diff version version.new >/dev/null; then 74 rm version.new 75 else 76 mv version.new version 77 touch .rebuild 78 fi 79 else 80 mv version.new version 81 touch .rebuild 82 fi 83 if [ "$1" = "-l" ]; then 84 printf "VERSION=\"%s\"\n" "$(cat version)" 85 fi