|
|
|
|
@@ -18,30 +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" | 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
|
|
|
|
|
|
|
|
|
|
# Check if file was changed (content or permissions)
|
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -83,13 +73,13 @@ while IFS= read -r clone_url; do
|
|
|
|
|
|
|
|
|
|
repo_name=$(basename "${clone_url}" .git)
|
|
|
|
|
|
|
|
|
|
git clone "${clone_url}" "${repo_name}"
|
|
|
|
|
pushd "${repo_name}"
|
|
|
|
|
git clone "${clone_url}" "${repo_name}" &>/dev/null
|
|
|
|
|
pushd "${repo_name}" >/dev/null
|
|
|
|
|
|
|
|
|
|
TEMPLATE_REMOTE_NAME="template"
|
|
|
|
|
git remote add "${TEMPLATE_REMOTE_NAME}" "${TEMPLATE_REPO_DIR}"
|
|
|
|
|
|
|
|
|
|
git fetch "${TEMPLATE_REMOTE_NAME}" "${TEMPLATE_BRANCH}"
|
|
|
|
|
git fetch "${TEMPLATE_REMOTE_NAME}" "${TEMPLATE_BRANCH}" &>/dev/null
|
|
|
|
|
|
|
|
|
|
current_branch=$(git rev-parse --abbrev-ref HEAD)
|
|
|
|
|
|
|
|
|
|
@@ -98,7 +88,7 @@ while IFS= read -r clone_url; do
|
|
|
|
|
conflicted_files=()
|
|
|
|
|
|
|
|
|
|
for file in ${FILES_TO_UPDATE}; do
|
|
|
|
|
if ! is_file_changed "${file}"; then
|
|
|
|
|
if ! is_file_changed "${file}" && [ -f "${file}" ]; then
|
|
|
|
|
continue
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
@@ -110,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
|
|
|
|
|
|
|
|
|
|
@@ -128,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}"
|
|
|
|
|
@@ -139,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}")"
|
|
|
|
|
@@ -178,13 +177,13 @@ while IFS= read -r clone_url; do
|
|
|
|
|
git push
|
|
|
|
|
else
|
|
|
|
|
echo "Warning: Merge conflicts detected in ${repo_name}"
|
|
|
|
|
popd
|
|
|
|
|
popd >/dev/null
|
|
|
|
|
rm -rf "${repo_name}"
|
|
|
|
|
continue
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
popd
|
|
|
|
|
popd >/dev/null
|
|
|
|
|
rm -rf "${repo_name}"
|
|
|
|
|
done <<< "${CLONE_URLS}"
|
|
|
|
|
|
|
|
|
|
|