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