aboutsummaryrefslogblamecommitdiff
path: root/aux/workflow/assert-todos.sh
blob: c21ebb9dd238384eb715a71750c88398f5af53a4 (plain) (tree)
1
2
3
4
5
6
7
8


         

                                                             


                                                               



            





                      
 
             









                                                                  

 

                                                                         











                                                        
 



                         
 

 
               
                       

          
#!/bin/sh
set -eu

if git grep FIXME | grep -v '^TODOs.md' |
		grep -v '^aux/workflow/assert-todos.sh'; then
	echo "Found dangling FIXME markers on the project."
	echo "You should write them down properly on TODOs.md."
	exit 1
fi

awk -F'{#' '
BEGIN {
	exitstatus = 0
	h2flag = 0
	h2status = ""
	prevline = ""
	idx = 0
	delete ids[0]
}
h2flag == 1 {
	split($0, l, " ")
	timelinestatus = l[2]
	if (h2status != timelinestatus) {
		print "h2/timeline status mismatch for line " NR-1
		print prevline
		print $0
		exitstatus = 1
	}
	h2status = ""
	h2flag = 0
}

/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE|WONTFIX)/ {
	if (match($0, / \{#.*?\}.*$/) == 0) {
		print "Missing ID for line " NR ":\n" $0
		exitstatus = 1
	}
	id_with_prefix = substr($2, 0, length($2) - 1)
	match(id_with_prefix, /^\w+-/)
	id = substr(id_with_prefix, RLENGTH + 1)
	if (id in arr) {
		print "Duplicate ID: " id
		exitstatus = 1
	} else {
		arr[id] = 1
	}

	split($0, l, " ")
	h2status = l[2]
	h2flag = 1
	prevline = $0
}


/^# Scratch$/ {
	exit exitstatus
}
' TODOs.md