summaryrefslogtreecommitdiff
path: root/.scripts/commits_by_hour
blob: 1bfb29367dabb4c0131d8b42af5a8b581b0e4b66 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env bash

VERBOSE=0
NO_HOUR=0
P='.'

POSITIONAL=()
while [[ $# -gt 0 ]]; do
  key="$1"
  case $key in
    -v|--verbose)
      VERBOSE=1
      shift
      ;;
    -n|--no-hour)
      NO_HOUR=1
      shift
      ;;
    -h|--help)
      echo "Usage: commits_by_hour [-v] [-n] [path]"
      echo "   -v,--verbose   Be more verbose, print all hours"
      echo "   -n,--no-hour   Don\'t print hours"
      echo "   -h,--help      Show this help message"
      echo "   path           Path to git repository (Default: .)"
      exit 0
      ;;
    *)
      P=$1
      shift
      ;;
  esac
done

cd $P

# Writes number of commits categorized by hour of the day
LOG=$(git log --format="%ad" | \
  sed -Ee 's/.*([0-9]{2})(:[0-9]{2}){2}.*/\1/g' | \
  sort | \
  uniq -c | \
  sed -Ee 's/^ +([0-9]+) ([0-9]+)/\2 \1/g')

HOURS=({00..23})

for h in ${HOURS[*]}; do
   l=$(echo "$LOG" | grep -Eo "^$h [0-9]+")
   RES=$?

   if [ $RES -gt 0 ]; then # No commits in this hour
     if [ $VERBOSE -gt 0 ]; then
       if [ $NO_HOUR -gt 0 ]; then
         echo 0
       else
         echo $h 0
       fi
     fi
   else
     if [ $NO_HOUR -gt 0 ]; then
       echo `echo $l | sed -E 's/^[0-9]{2} ([0-9]+)$/\1/g'`
     else
       echo $l
     fi
   fi
done