aboutsummaryrefslogtreecommitdiff
path: root/scripts/assert-todos.sh
blob: ac720578e9e00725573fb4bd61da252037d06be8 (about) (plain) (blame)
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
#!/bin/sh
set -eu

if git grep FIXME | grep -Ev '^(vendor/|scripts/assert-todos.sh|locale/)'; then
  echo "Found dangling FIXME markers on the project."
  echo "You should write them down properly on TODOs.org."
  exit 1
fi

KNOWN_IDS=''
has_error=0
# shellcheck disable=2013
for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | grep -nE '^\*\* .*$' | cut -d: -f1); do
  if sed "${todo}q;d" TODOs.org | grep -qE '^\*\* (CANCELLED|DONE)'; then
    ID_OFFSET=3
  else
    ID_OFFSET=2
  fi
  line_n="$((todo+ID_OFFSET))"
  ID_LINE="$(sed "${line_n}q;d" TODOs.org)"
  if echo "$ID_LINE" | grep -q '^:CUSTOM_ID: .*$'; then
    ID="$(echo "$ID_LINE" | awk '{print $2}')"
    if echo "$KNOWN_IDS" | grep -q "$ID"; then
      echo "Duplicated ID: $ID"
      has_error=1
    else
      if [ -z "$KNOWN_IDS" ]; then
        KNOWN_IDS="$ID"
      else
        KNOWN_IDS="$KNOWN_IDS:$ID"
      fi
    fi
  else
    echo "Missing ID for TODO in line $line_n"
    has_error=1
  fi
done

exit "$has_error"