#!/bin/bash requirements_dir="$(realpath "$(dirname $0)/..")" usage() { echo " Usage: req.sh list [options...] [id] type: req | dml | ass | need id: filters items for the given id options: -S lists unsatisfied requirements -p lists requirements sourced from [id] -P lists unsourced requirements " } while getopts ":S:P:p" o do case "$o" in 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" ;; *) usage exit 1 esac 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 [ "$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