makedate (1958B)
1 #!/bin/sh -x 2 # vim: set ft=bash: 3 FALLBACKDATE=${FALLBACKDATE:-unknown} 4 LC_ALL=C 5 export LC_ALL 6 7 die() 8 { 9 printf "%s\n" "$@" >&2 10 exit 1 11 } 12 13 exists() 14 { 15 command -v $* >/dev/null 2>&1 16 } 17 18 getent() 19 { 20 geresult='' 21 if exists getent; then 22 geresult=$(command getent "$@" 2>/dev/null) 23 return 24 fi 25 case "$1" in 26 passwd|group) 27 if [ -z "$2" ]; then 28 geresult=$(cat /etc/"$1") 29 else 30 geresult=$(awk -F: -vu="$2" '{ if ($3 == u) print }' /etc/"$1") 31 fi 32 ;; 33 *) ;; 34 esac 35 } 36 37 exists diff || die "The build script $0 requires diff(1), none found" 38 39 if [ -d .got ] && exists got; then 40 got log | 41 awk ' 42 /^date: / { 43 sub(/^date: /,"",$0) 44 # Convert to proper form for `mandoc -Tlint` 45 month_names["Jan"] = "January" 46 month_names["Feb"] = "February" 47 month_names["Mar"] = "March" 48 month_names["Apr"] = "April" 49 month_names["May"] = "May" 50 month_names["Jun"] = "June" 51 month_names["Jul"] = "July" 52 month_names["Aug"] = "August" 53 month_names["Sep"] = "September" 54 month_names["Oct"] = "October" 55 month_names["Nov"] = "November" 56 month_names["Dec"] = "December" 57 print month_names[$2] " " $3 ", " $5 58 exit 59 }' >date.new 60 elif [ -d .git ] && exists git; then 61 getent passwd "$(unalias ls >/dev/null 2>&1 || true; \ 62 command ls -nd . | awk '{print $3}')" 63 user=$(printf "%s\n" "$geresult" | awk -F: '{print $1}') 64 if [ -z "$user" ]; then 65 printf "$0: error: Cannot determine owner of %s" "$(pwd)" >&2 66 exit 1 67 fi 68 e_user=$(id -un) 69 if [ "$e_user" = "$user" ]; then 70 git log --format=format:%cd \ 71 --date=format:"%B %d, %Y" -1 @ >date.new 72 else 73 su "${user}" -c 'env LC_ALL=C git log --format=format:%cd \ 74 --date=format:"%B %d, %Y" -1 @' >date.new 75 fi 76 echo >>date.new 77 else 78 printf "%s\n" "$FALLBACKDATE" >date.new 79 fi 80 81 if [ -f date ]; then 82 if diff date date.new >/dev/null; then 83 rm date.new 84 else 85 mv date.new date 86 touch .rebuild 87 fi 88 else 89 mv date.new date 90 touch .rebuild 91 fi 92 if [ "$1" = "-l" ]; then 93 printf "DATE=\"%s\"\n" "$(cat date)" 94 fi