From 75769dcff6d5bb33e25908bd69bc319e4e8115f4 Mon Sep 17 00:00:00 2001 From: Bryan Joshua Pedini Date: Fri, 2 Jan 2026 15:07:02 +0100 Subject: [PATCH] finally fixed the permissions thingamagic for the shit script --- update_child_repos.sh | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/update_child_repos.sh b/update_child_repos.sh index 21fc2f7..d9236d0 100755 --- a/update_child_repos.sh +++ b/update_child_repos.sh @@ -18,29 +18,20 @@ PREVIOUS_COMMIT_ID=$(git log --format="%H" -n 2 HEAD | tail -n 1) if [ "${PREVIOUS_COMMIT_ID}" = "${CURRENT_COMMIT_ID}" ]; then FILES_CHANGED="" - FILES_PERMISSION_CHANGED="" else FILES_CHANGED=$(git diff --name-only "${PREVIOUS_COMMIT_ID}" "${CURRENT_COMMIT_ID}" | tr '\n' ' ') - FILES_PERMISSION_CHANGED=$(git diff --summary "${PREVIOUS_COMMIT_ID}" "${CURRENT_COMMIT_ID}" | (grep "mode change" || true) | sed -E 's/.*mode change [0-9]+ => [0-9]+ (.*)/\1/' | tr '\n' ' ') fi is_file_changed() { local file_to_check="$1" - if [ -z "${FILES_CHANGED}" ] && [ -z "${FILES_PERMISSION_CHANGED}" ]; then + if [ -z "${FILES_CHANGED}" ]; then return 1 fi - for changed_file in ${FILES_CHANGED}; do if [ "${changed_file}" = "${file_to_check}" ]; then return 0 fi done - - for changed_file in ${FILES_PERMISSION_CHANGED}; do - if [ "${changed_file}" = "${file_to_check}" ]; then - return 0 - fi - done return 1 } @@ -109,8 +100,10 @@ while IFS= read -r clone_url; do if [ -f "${file}" ]; then current_content=$(cat "${file}" 2>/dev/null || true) + current_permissions=$(stat -c "%a" "${file}" 2>/dev/null || echo "644") + template_permissions=$(pushd "${TEMPLATE_REPO_DIR}" >/dev/null && stat -c "%a" "${file}" 2>/dev/null || echo "644" && popd >/dev/null) - if [ "${current_content}" = "${template_content}" ]; then + if [ "${current_content}" = "${template_content}" ] && [ "${current_permissions}" = "${template_permissions}" ]; then continue fi @@ -127,9 +120,7 @@ while IFS= read -r clone_url; do patched_content=$(cat "${tmp_current}") if [ "${current_content}" != "${patched_content}" ]; then - template_permissions=$(pushd "${TEMPLATE_REPO_DIR}" >/dev/null && stat -c "%a" "${file}" 2>/dev/null || echo "644" && popd >/dev/null) echo "${patched_content}" > "${file}" - chmod "${template_permissions}" "${file}" 2>/dev/null || true git add "${file}" files_changed=true echo "Merged updates for ${file} in ${repo_name}" @@ -138,12 +129,21 @@ while IFS= read -r clone_url; do echo "Merge conflict detected in ${repo_name}:${file} - preserving local changes" conflicted_files+=("${file}") fi - + rm -f "${tmp_current}" "${tmp_diff}" else echo "File ${file} has local changes in ${repo_name} - preserving local changes" conflicted_files+=("${file}") fi + + template_permissions=$(pushd "${TEMPLATE_REPO_DIR}" >/dev/null && stat -c "%a" "${file}" 2>/dev/null || echo "644" && popd >/dev/null) + current_permissions=$(stat -c "%a" "${file}" 2>/dev/null || echo "644") + if [ "${current_permissions}" != "${template_permissions}" ]; then + chmod "${template_permissions}" "${file}" 2>/dev/null || true + git add "${file}" + files_changed=true + echo "Updated permissions for ${file} in ${repo_name}" + fi else echo "Adding new file ${file} from template to ${repo_name}" mkdir -p "$(dirname "${file}")"