home · contact · privacy
Fix. master
authorChristian Heller <c.heller@plomlompom.de>
Sun, 11 May 2025 22:58:26 +0000 (00:58 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Sun, 11 May 2025 22:58:26 +0000 (00:58 +0200)
bookworm/scripts/diff_tagged_files.sh [new file with mode: 0755]
bookworm/scripts/lib/tagdir_parsing [new file with mode: 0644]
testing/scripts/diff_tagged_files.sh [changed from file to symlink]
testing/scripts/lib/tagdir_parsing [new symlink]
trixie/scripts/diff_tagged_files.sh [new symlink]
trixie/scripts/lib/tagdir_parsing [new symlink]

diff --git a/bookworm/scripts/diff_tagged_files.sh b/bookworm/scripts/diff_tagged_files.sh
new file mode 100755 (executable)
index 0000000..4e3795b
--- /dev/null
@@ -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 (file)
index 0000000..6047e40
--- /dev/null
@@ -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}"
+}
deleted file mode 100755 (executable)
index 4e3795bc36bf4ffe4d58b5cd7ba48bcc83dab446..0000000000000000000000000000000000000000
+++ /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' $@
new file mode 120000 (symlink)
index 0000000000000000000000000000000000000000..dc4ab9cf0a584b650f60ef9b0cc08343e0841625
--- /dev/null
@@ -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 (symlink)
index 0000000..200a36f
--- /dev/null
@@ -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 (symlink)
index 0000000..9c3f789
--- /dev/null
@@ -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 (symlink)
index 0000000..b86b7fa
--- /dev/null
@@ -0,0 +1 @@
+../../../bookworm/scripts/lib/tagdir_parsing
\ No newline at end of file