+#!/bin/sh
+set -e
+cd $(dirname "$0")
+. lib/abort_if_not_user
+. lib/expect_n_args
+. lib/prefixed_msg
+
+prefixed_msg_init
+abort_if_not_user root
+expect_n_args 1 99 "TAG.." $@
+TAGS="$@"
+for _TAG in ${TAGS}; do
+ _PATH_TAG="../copy/${_TAG}"
+ if [ ! -d "${_PATH_TAG}" ]; then
+ continue
+ fi
+ prefixed_msg_init "tag [${_TAG}]"
+ cd "${_PATH_TAG}"
+ for _PATH_REL in $(find -L . -type f | cut -c 3-); do
+ _FILENAME="$(basename ${_PATH_REL})"
+ _PATH_REL_PARENT=$(dirname "${_PATH_REL}")
+ if [ "${_FILENAME}" = 'KILL_ME' ]; then
+ _TYPE='directory'
+ _PATH_ABS="/${_PATH_REL_PARENT}"
+ elif [ $(echo "${_FILENAME}" | grep -E '^LINK_ME' | wc -l) -gt 0 ]; then
+ _TYPE='symbolic link'
+ _LINK_TARGET=$(cat "${_PATH_REL}" | head -1)
+ _LINK_NAME=$(cat "${_PATH_REL}" | tail -1)
+ if [ -z "${_LINK_NAME}" ]; then
+ _LINK_NAME=$(basename "${_LINK_TARGET}")
+ fi
+ _PATH_ABS="/${_PATH_REL_PARENT}/${_LINK_NAME}"
+ else
+ _TYPE='regular file'
+ _PATH_ABS="/${_PATH_REL}"
+ fi
+ if [ -h "${_PATH_ABS}" ]; then
+ if [ "${_TYPE}" = 'symbolic link' ]; then
+ _LOCAL_TARGET=$(stat "${_PATH_ABS}" | head -1 | sed -E 's/^ File: [[:print:]]+ -> //g')
+ if [ "$(echo ${_LOCAL_TARGET} | cut -c1)" != "/" ]; then
+ _LOCAL_TARGET=$(realpath --canonicalize-missing "/${_PATH_REL_PARENT}/${_LOCAL_TARGET}")
+ fi
+ if [ "$(echo ${_LINK_TARGET} | cut -c1)" != "/" ]; then
+ _LINK_TARGET=$(realpath --canonicalize-missing "/${_PATH_REL_PARENT}/${_LINK_TARGET}")
+ fi
+ if [ "${_LOCAL_TARGET}" != "${_LINK_TARGET}" ]; then
+ prefixed_msg "${_TYPE} targeting ${_LOCAL_TARGET} != ${_LINK_TARGET}"
+ fi
+ else
+ prefixed_msg "Not a ${_TYPE}: ${_PATH_ABS}"
+ fi
+ elif [ ! -e "${_PATH_ABS}" ]; then
+ prefixed_msg "Missing ${_TYPE}: ${_PATH_ABS}"
+ elif [ "${_TYPE}" != "$(stat --format=%F ${_PATH_ABS})" ]; then
+ prefixed_msg "Not a ${_TYPE}: ${_PATH_ABS}"
+ elif [ "${_TYPE}" = 'regular file' ]; then
+ ! diff "${_PATH_ABS}" "${_PATH_REL}" > /dev/null && prefixed_msg "Regular file differs: ${_PATH_ABS}"
+ fi
+ done
+ cd - > /dev/null
+ prefixed_msg_exit
+done
+prefixed_msg_exit