#!/bin/bash requirements_dir="$(realpath "$(dirname $0)/..")" usage() { echo " Usage: req.sh list [options...] [id] type: req | dml | ass | need | task | epic id: filters items for the given id options: -D lists incomplete tasks or epics -S lists unsatisfied requirements -p lists requirements sourced from [id] -P lists unsourced requirements " } while getopts ":D:S:P:p" o do case "$o" in D) incomplete=1 shift 1 ;; S) unsatisfied=1 shift 1 ;; P) unsourced=1 shift 1 ;; p) sourced=1 shift 1 ;; *) echo "ERROR: ${o} is not a valid option!" usage exit 1 ;; esac done type="$1" id="$2" if [ "$type" == "" ] then echo "ERROR: you didn't provide a type!" usage exit 1 fi case "$type" in req) dir="${requirements_dir}/catalogue" ;; dml) dir="${requirements_dir}/data_models" ;; ass) dir="${requirements_dir}/assumptions" ;; need) dir="${requirements_dir}/needs" ;; task | epic) dir="${requirements_dir}/tasks" ;; *) usage exit 1 esac if [ "$incomplete" == 1 ] then echo " incomplete ${type} items matching id ${type}-*${id} --------------------------------------------------------------------------- " filenames=(${dir}/${type}-*.md) for filename in "${filenames[@]}" do is_complete="$(cat $filename | grep -E "^Status: (done|complete|completed)$")" if [ -z "$is_complete" ] then echo "$(basename "$filename" | sed "s/.md$//")" fi done echo "" fi if [ "$sourced" == 1 ] then echo " ${type} items sourced from id ${type}-*${id} --------------------------------------------------------------------------- " filenames=(${dir}/${type}-*.md) for filename in "${filenames[@]}" do is_sourced="$(cat $filename | grep -E "^Sources?:.*\b${type}-[0-9]*${id}\b")" if [ -n "$is_sourced" ] then echo "$(basename "$filename" | sed "s/.md$//")" fi done echo "" fi if [ "$unsatisfied" == 1 ] then echo " Unsatisfied ${type} items matching id *${id} --------------------------------------------------------------------------- " filenames=(${dir}/${type}-*${id}.md) for filename in "${filenames[@]}" do satisfied="$(cat $filename | grep -E "^Satisfied by:")" if [ -z "$satisfied" ] then echo "$(basename "$filename" | sed "s/.md$//")" fi done echo "" fi if [ "$unsourced" == 1 ] then echo " Unsourced ${type} items matching id *${id} --------------------------------------------------------------------------- " filenames=(${dir}/${type}-*${id}.md) for filename in "${filenames[@]}" do is_sourced="$(cat $filename | grep -E "^Sources?:")" if [ -z "$is_sourced" ] then echo "$(basename "$filename" | sed "s/.md$//")" fi done echo "" fi if \ [ "$incomplete" == "" ] \ && [ "$sourced" == "" ] \ && [ "$unsatisfied" == "" ] \ && [ "$unsourced" == "" ] then echo " All ${type} items matching id *${id} --------------------------------------------------------------------------- " filenames=(${dir}/${type}-*${id}.md) for filename in "${filenames[@]}" do echo "$(basename "$filename" | sed "s/.md$//")" done echo "" fi