From: Christian Heller Date: Sun, 11 May 2025 22:58:26 +0000 (+0200) Subject: Fix. X-Git-Url: https://plomlompom.com/repos/%7B%7Bdb.prefix%7D%7D/static/%7B%7B%20web_path%20%7D%7D/condition?a=commitdiff_plain;ds=inline;p=config Fix. --- diff --git a/bookworm/scripts/diff_tagged_files.sh b/bookworm/scripts/diff_tagged_files.sh new file mode 100755 index 0000000..4e3795b --- /dev/null +++ b/bookworm/scripts/diff_tagged_files.sh @@ -0,0 +1,77 @@ +#!/bin/sh +set -e +cd $(dirname "$0") +. lib/abort_if_not_user +. lib/constants_user +. lib/expect_n_args +. lib/prefixed_msg +. lib/tagdir_parsing + +prefixed_msg_init +abort_if_not_user root +expect_n_args 1 99 "TAG.." $@ + +compare_tagdir() { + _compare_stat() { + _ATTRIBUTE=$1 + _FORMAT_STR=$2 + _SHOULD_BE=$3 + _ACTUAL_VALUE=$(stat --format="${_FORMAT_STR}" ${_PATH_ABS}) + if [ "${_ACTUAL_VALUE}" != "${_SHOULD_BE}" ]; then + prefixed_msg "Bad ${_ATTRIBUTE}: ${_PATH_ABS} is ${_ACTUAL_VALUE}, should be ${_SHOULD_BE}" + false + fi + } + prefixed_msg_init "tag [${_TAG}]" + for _PATH_REL in $(tagdir_parsing__relpaths); do + _FILENAME="$(basename ${_PATH_REL})" + _PATH_REL_PARENT=$(dirname "${_PATH_REL}") + + if tagdir_parsing__is_killme "${_FILENAME}"; then + _TYPE='directory' + _PATH_ABS="/${_PATH_REL_PARENT}" + elif tagdir_parsing__is_linkme "${_FILENAME}"; then + _TYPE='symbolic link' + _PARSED=$(tagdir_parsing__parse_linkme "${_PATH_REL}") + _PATH_ABS=$(echo "${_PARSED}" | head -1) + _LINK_TARGET=$(echo "${_PARSED}" | tail -1) + else + _TYPE='regular file' + _PATH_ABS="/${_PATH_REL}" + fi + if [ -h "${_PATH_ABS}" ]; then + if [ 'symbolic link' = "${_TYPE}" ]; 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}" + continue + elif _compare_stat 'file type' '%F' "${_TYPE}" && [ 'regular file' = "${_TYPE}" ]; then + ! diff "${_PATH_ABS}" "${_PATH_REL}" > /dev/null && prefixed_msg "Regular file differs: ${_PATH_ABS}" + fi + if echo "${_PATH_ABS}" | grep "^${PATH_USER_HOME}/" > /dev/null; then + _EXPECTED_OWNERSHIP="${USERNAME}:${USERNAME}" + else + _EXPECTED_OWNERSHIP='root:root' + fi + _EXPECTED_PERMISSIONS=$(stat --format='%a' --dereference ${_PATH_REL}) + set +e + _compare_stat 'ownership' '%U:%G' "${_EXPECTED_OWNERSHIP}"; + _compare_stat 'permissions' '%a' "${_EXPECTED_PERMISSIONS}"; + set -e + done + prefixed_msg_exit +} + +tagdir_parsing__for_tagdir 'compare_tagdir' $@ diff --git a/bookworm/scripts/lib/tagdir_parsing b/bookworm/scripts/lib/tagdir_parsing new file mode 100644 index 0000000..6047e40 --- /dev/null +++ b/bookworm/scripts/lib/tagdir_parsing @@ -0,0 +1,38 @@ +tagdir_parsing__is_killme() { + test "$1" = 'KILL_ME' +} + +tagdir_parsing__for_tagdir() { + _COMMAND=$1 + shift 1 + _TAGS=$@ + for _TAG in ${_TAGS}; do + _PATH_TAG="../copy/${_TAG}" + if [ ! -d "${_PATH_TAG}" ]; then + continue + fi + cd "${_PATH_TAG}" + ${_COMMAND} + cd - > /dev/null + done +} + +tagdir_parsing__relpaths() { + find -L . -type f | cut -c 3- +} + +tagdir_parsing__is_linkme() { + echo "$1" | grep '^LINK_ME' > /dev/null +} + +tagdir_parsing__parse_linkme() { + _PATH_REL_LINKME=$1 + _PATH_REL_LINKME_PARENT=$(dirname "${_PATH_REL_LINKME}") + _LINK_TARGET=$(cat "${_PATH_REL_LINKME}" | head -1) + _LINK_NAME=$(cat "${_PATH_REL_LINKME}" | tail -1) + if [ -z "${_LINK_NAME}" ]; then + _LINK_NAME=$(basename "${_LINK_TARGET}") + fi + _PATH_ABS="/${_PATH_REL_LINKME_PARENT}/${_LINK_NAME}" + printf '%s\n%s' "${_PATH_ABS}" "${_LINK_TARGET}" +} diff --git a/testing/scripts/diff_tagged_files.sh b/testing/scripts/diff_tagged_files.sh deleted file mode 100755 index 4e3795b..0000000 --- a/testing/scripts/diff_tagged_files.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/sh -set -e -cd $(dirname "$0") -. lib/abort_if_not_user -. lib/constants_user -. lib/expect_n_args -. lib/prefixed_msg -. lib/tagdir_parsing - -prefixed_msg_init -abort_if_not_user root -expect_n_args 1 99 "TAG.." $@ - -compare_tagdir() { - _compare_stat() { - _ATTRIBUTE=$1 - _FORMAT_STR=$2 - _SHOULD_BE=$3 - _ACTUAL_VALUE=$(stat --format="${_FORMAT_STR}" ${_PATH_ABS}) - if [ "${_ACTUAL_VALUE}" != "${_SHOULD_BE}" ]; then - prefixed_msg "Bad ${_ATTRIBUTE}: ${_PATH_ABS} is ${_ACTUAL_VALUE}, should be ${_SHOULD_BE}" - false - fi - } - prefixed_msg_init "tag [${_TAG}]" - for _PATH_REL in $(tagdir_parsing__relpaths); do - _FILENAME="$(basename ${_PATH_REL})" - _PATH_REL_PARENT=$(dirname "${_PATH_REL}") - - if tagdir_parsing__is_killme "${_FILENAME}"; then - _TYPE='directory' - _PATH_ABS="/${_PATH_REL_PARENT}" - elif tagdir_parsing__is_linkme "${_FILENAME}"; then - _TYPE='symbolic link' - _PARSED=$(tagdir_parsing__parse_linkme "${_PATH_REL}") - _PATH_ABS=$(echo "${_PARSED}" | head -1) - _LINK_TARGET=$(echo "${_PARSED}" | tail -1) - else - _TYPE='regular file' - _PATH_ABS="/${_PATH_REL}" - fi - if [ -h "${_PATH_ABS}" ]; then - if [ 'symbolic link' = "${_TYPE}" ]; 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}" - continue - elif _compare_stat 'file type' '%F' "${_TYPE}" && [ 'regular file' = "${_TYPE}" ]; then - ! diff "${_PATH_ABS}" "${_PATH_REL}" > /dev/null && prefixed_msg "Regular file differs: ${_PATH_ABS}" - fi - if echo "${_PATH_ABS}" | grep "^${PATH_USER_HOME}/" > /dev/null; then - _EXPECTED_OWNERSHIP="${USERNAME}:${USERNAME}" - else - _EXPECTED_OWNERSHIP='root:root' - fi - _EXPECTED_PERMISSIONS=$(stat --format='%a' --dereference ${_PATH_REL}) - set +e - _compare_stat 'ownership' '%U:%G' "${_EXPECTED_OWNERSHIP}"; - _compare_stat 'permissions' '%a' "${_EXPECTED_PERMISSIONS}"; - set -e - done - prefixed_msg_exit -} - -tagdir_parsing__for_tagdir 'compare_tagdir' $@ diff --git a/testing/scripts/diff_tagged_files.sh b/testing/scripts/diff_tagged_files.sh new file mode 120000 index 0000000..dc4ab9c --- /dev/null +++ b/testing/scripts/diff_tagged_files.sh @@ -0,0 +1 @@ +../../trixie/scripts/diff_tagged_files.sh \ No newline at end of file diff --git a/testing/scripts/lib/tagdir_parsing b/testing/scripts/lib/tagdir_parsing new file mode 120000 index 0000000..200a36f --- /dev/null +++ b/testing/scripts/lib/tagdir_parsing @@ -0,0 +1 @@ +../../../trixie/scripts/lib/tagdir_parsing \ No newline at end of file diff --git a/trixie/scripts/diff_tagged_files.sh b/trixie/scripts/diff_tagged_files.sh new file mode 120000 index 0000000..9c3f789 --- /dev/null +++ b/trixie/scripts/diff_tagged_files.sh @@ -0,0 +1 @@ +../../bookworm/scripts/diff_tagged_files.sh \ No newline at end of file diff --git a/trixie/scripts/lib/tagdir_parsing b/trixie/scripts/lib/tagdir_parsing new file mode 120000 index 0000000..b86b7fa --- /dev/null +++ b/trixie/scripts/lib/tagdir_parsing @@ -0,0 +1 @@ +../../../bookworm/scripts/lib/tagdir_parsing \ No newline at end of file