#!/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 unsourced requirements " } while getopts ":S:P" o do case "$o" in S) unsatisfied=1 shift 1 ;; P) unsourced=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 [ "$unsatisfied" == 1 ] then 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 fi if [ "$unsourced" == 1 ] then filenames=(${dir}/${type}-*${id}.md) for filename in "${filenames[@]}" do sourced="$(cat $filename | grep -E "^Sources?:")" if [ -z "$sourced" ] then echo "$(basename "$filename" | sed "s/.md$//")" fi done fi if [ "$unsatisfied" == "" ] && [ "$unsourced" == "" ] then filenames=(${dir}/${type}-*${id}.md) for filename in "${filenames[@]}" do echo "$(basename "$filename" | sed "s/.md$//")" done fi