#! /bin/bash
# Last edited on 2022-08-19 10:48:18 by stolfi

# Usage: "${cmd} ${dir}"
# Checks whether every file in the directory ${dir} has corresponding line in
# ${dir}/00-README, and vice-versa.

dir="$1"; shift

if [[ ! ( -d ${dir} ) ]]; then 
  echo "** ${dir} not found or is not a directory" 1>&2 ; exit 1]
fi

rdm="${dir}/00-README"

if [[ ! ( -s ${rdm} ) ]]; then 
  echo "** ${rdm} not found or is empty" 1>&2 ; exit 1]
fi

files_dir="${dir}/.dir" # List of files in directory.
files_rdm="${dir}/.rdm" # List of files named in "00-README".
files_dup="${dir}/.dup" # Duplicated files named in "00-README".

(cd ${dir} && ls ) \
  | egrep -v -e '^[.]|00-README|[.]sh$|[.]gawk$' \
  | sort \
  > ${files_dir}

cat ${rdm} \
  | gawk '/^ *($|[#])/{ next; }  //{ print $1; }' \
  | sort \
  > ${files_rdm}
  
cat ${files_rdm} \
  | uniq -d \
  > ${files_dup}
  
if [[ -s ${files_dup} ]]; then
  echo "** duplicated entries in ${rdm}:" 1>&2
  cat ${files_dup}
  exit 1
fi

only_rdm="${dir}/.rdm-only"
only_dir="${dir}/.dir-only"
  
bool 1-2 ${files_rdm} ${files_dir} > ${only_rdm}
bool 1-2 ${files_dir} ${files_rdm} > ${only_dir}

if [[ -s ${only_rdm} ]]; then
  echo "# Missing files listed in ${dir}/00-README" 1>&2
  cat ${only_rdm} 1>&2
fi

if [[ -s ${only_dir} ]]; then
  echo "# Files in ${dir}/ not listed in ${dir}/00-README" 1>&2
  cat ${only_dir} 1>&2
fi


