iextract-memecount.sh - bitreich-memestats - Bitreich meme statistics and graphs. Err bitreich.org 70 hgit clone git://bitreich.org/bitreich-memestats git://hg6vgqziawt5s4dj.onion/bitreich-memestats URL:git://bitreich.org/bitreich-memestats git://hg6vgqziawt5s4dj.onion/bitreich-memestats bitreich.org 70 1Log /scm/bitreich-memestats/log.gph bitreich.org 70 1Files /scm/bitreich-memestats/files.gph bitreich.org 70 1Refs /scm/bitreich-memestats/refs.gph bitreich.org 70 1Tags /scm/bitreich-memestats/tag bitreich.org 70 1LICENSE /scm/bitreich-memestats/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 iextract-memecount.sh (2470B) Err bitreich.org 70 i--- Err bitreich.org 70 i 1 #!/bin/sh Err bitreich.org 70 i 2 # generate table of hashtag numbers over time Err bitreich.org 70 i 3 Err bitreich.org 70 i 4 if [ $# -lt 1 ]; Err bitreich.org 70 i 5 then Err bitreich.org 70 i 6 printf "usage: %s annnadir [memecount.log]\n" "$(basename "$0")" >&2 Err bitreich.org 70 i 7 exit 1 Err bitreich.org 70 i 8 fi Err bitreich.org 70 i 9 Err bitreich.org 70 i 10 annnadir="${1}" Err bitreich.org 70 i 11 memefile="modules/hashtags/hashtags.txt" Err bitreich.org 70 i 12 emojidir="/br/gopher/emoji/" Err bitreich.org 70 i 13 filterdir="/br/gopher/memecache/filter/" Err bitreich.org 70 i 14 update_annna=yes Err bitreich.org 70 i 15 outputfile="${2:-memecount.log}" Err bitreich.org 70 i 16 revisionrange="" Err bitreich.org 70 i 17 datefmt="%Y-%m-%d" Err bitreich.org 70 i 18 Err bitreich.org 70 i 19 countolderfiles() { Err bitreich.org 70 i 20 find "$1" -maxdepth 1 -type f \! \( -newerct "$2" -o -name '*.orig' \) | wc -l Err bitreich.org 70 i 21 } Err bitreich.org 70 i 22 Err bitreich.org 70 i 23 if [ ! -e "${annnadir}/${memefile}" ]; then Err bitreich.org 70 i 24 printf 'error: could not open %s\n' "${annnadir}/${memefile}" Err bitreich.org 70 i 25 exit 1 Err bitreich.org 70 i 26 fi Err bitreich.org 70 i 27 Err bitreich.org 70 i 28 if [ -f "${outputfile}" ]; then Err bitreich.org 70 i 29 lastrevision="$(tail -n 1 "${outputfile}" | cut -f 2)" Err bitreich.org 70 i 30 revisionrange="${lastrevision}..HEAD" Err bitreich.org 70 i 31 if [ "$(date +"${datefmt}")" = "$(tail -n 1 "${outputfile}" | cut -f 1)" ]; then Err bitreich.org 70 i 32 exit Err bitreich.org 70 i 33 fi Err bitreich.org 70 i 34 else Err bitreich.org 70 i 35 firstrevision="$(cd "${annnadir}" && git rev-list --max-parents=0 HEAD)" Err bitreich.org 70 i 36 revisionrange="${firstrevision}..HEAD" Err bitreich.org 70 i 37 fi Err bitreich.org 70 i 38 Err bitreich.org 70 i 39 case "${outputfile}" in Err bitreich.org 70 i 40 /*) Err bitreich.org 70 i 41 ;; Err bitreich.org 70 i 42 *) Err bitreich.org 70 i 43 outputfile="$(pwd)/${outputfile}" Err bitreich.org 70 i 44 ;; Err bitreich.org 70 i 45 esac Err bitreich.org 70 i 46 Err bitreich.org 70 i 47 if [ "$update_annna" = "yes" ]; then Err bitreich.org 70 i 48 (cd "${annnadir}" && git pull >/dev/null 2>&1) Err bitreich.org 70 i 49 fi Err bitreich.org 70 i 50 Err bitreich.org 70 i 51 headcommit="$(git rev-parse HEAD)" Err bitreich.org 70 i 52 i=0 Err bitreich.org 70 i 53 # derived from Hiltjo Posthuma's loc.sh Err bitreich.org 70 i 54 (cd "${annnadir}" && git log --pretty='format:%H %cd %at' --date="format:${datefmt}" \ Err bitreich.org 70 i 55 "${revisionrange}") | \ Err bitreich.org 70 i 56 sort -k 2 | uniq -f 1 | \ Err bitreich.org 70 i 57 while read -r commit date timestamp; do Err bitreich.org 70 i 58 Err bitreich.org 70 i 59 # hashtags originally stored in annna-start-services... Err bitreich.org 70 i 60 n="$(cd "${annnadir}" && git show "$commit:annna-start-services" 2>/dev/null | \ Err bitreich.org 70 i 61 grep -E '^ #[a-z0-9]' | wc -l | awk '{print $1}')" Err bitreich.org 70 i 62 Err bitreich.org 70 i 63 # ...but are now stored in $memefile Err bitreich.org 70 i 64 if [ "$n" -le 1 ]; then Err bitreich.org 70 i 65 n="$(cd "${annnadir}" && git show "$commit:$memefile" 2>/dev/null | \ Err bitreich.org 70 i 66 wc -l | awk '{print $1}')" Err bitreich.org 70 i 67 fi Err bitreich.org 70 i 68 Err bitreich.org 70 i 69 if [ "$n" -gt 1 ]; then Err bitreich.org 70 i 70 Err bitreich.org 70 i 71 # only one row per day unless the most recent commit is newer Err bitreich.org 70 i 72 if [ "$date" != "$lastprintdate" ] || [ "$commit" = "$headcommit" ]; then Err bitreich.org 70 i 73 Err bitreich.org 70 i 74 if [ "$i" -eq 1 ]; then Err bitreich.org 70 i 75 if [ "$commit" != "$headcommit" ]; then Err bitreich.org 70 i 76 dn_dt="$(awk \ Err bitreich.org 70 i 77 -v n0="$n0" -v t0="$t0" -v n="$n" -v t="$timestamp" \ Err bitreich.org 70 i 78 'BEGIN{print (n-n0)/(t-t0)*3600.0*24.0}')" Err bitreich.org 70 i 79 fi Err bitreich.org 70 i 80 else Err bitreich.org 70 i 81 dn_dt=0 Err bitreich.org 70 i 82 i=1 Err bitreich.org 70 i 83 fi Err bitreich.org 70 i 84 n0="$n" Err bitreich.org 70 i 85 t0="$timestamp" Err bitreich.org 70 i 86 lastprintdate="$date" Err bitreich.org 70 i 87 n_emoji="$(countolderfiles "$emojidir" "$date")" Err bitreich.org 70 i 88 n_filter="$(countolderfiles "$filterdir" "$date")" Err bitreich.org 70 i 89 Err bitreich.org 70 i 90 printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \ Err bitreich.org 70 i 91 "$date" "$commit" "$n" "$timestamp" "$dn_dt" \ Err bitreich.org 70 i 92 "$n_emoji" "$n_filter" \ Err bitreich.org 70 i 93 >> "${outputfile}" Err bitreich.org 70 i 94 Err bitreich.org 70 i 95 fi Err bitreich.org 70 i 96 fi Err bitreich.org 70 i 97 done Err bitreich.org 70 i 98 Err bitreich.org 70 .