Files
vscodium/dev/patch.sh
2026-04-22 16:05:34 +02:00

119 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
normalize_file() {
if [[ "${1}" == *patch ]]; then
FILE="${1}"
else
FILE="${1}.patch"
fi
if [[ "${FILE}" == patches/* ]]; then
FILE="../${FILE}"
else
FILE="../patches/${FILE}"
fi
}
cd vscode || { echo "'vscode' dir not found"; exit 1; }
git add .
git reset -q --hard HEAD
while [[ -n "$( git log -1 | grep "VSCODIUM HELPER" )" ]]; do
git reset -q --hard HEAD~
done
normalize_file "${1}"
if [[ "${FILE}" != "../patches/helper/settings.patch" ]]; then
git apply --reject "../patches/helper/settings.patch"
if [[ $# -gt 1 ]]; then
while [ $# -gt 1 ]; do
echo "Parameter: $1"
normalize_file "${1}"
git apply --reject "${FILE}"
shift
done
git add .
git commit --no-verify -q -m "VSCODIUM HELPER"
normalize_file "${1}"
else
normalize_file "${1}"
BASENAME=$(basename "${FILE}")
DIRNAME=$(dirname "${FILE}")
if [[ "${BASENAME}" =~ ^([0-9])([1-9])(-.*)\.patch$ ]]; then
GROUP_ID="${BASH_REMATCH[1]}"
INDEX="${BASH_REMATCH[2]}"
ENDNAME="${BASH_REMATCH[3]}"
for ((I = 0; I < INDEX; I++)); do
NOT_FOUND=1
for CANDIDATE in "${DIRNAME}/${GROUP_ID}${I}-"*.patch; do
if [[ -f "$CANDIDATE" ]]; then
echo "Candidate: ${CANDIDATE}"
normalize_file "${CANDIDATE}"
git apply --reject "${FILE}"
NOT_FOUND=0
fi
done
if (( $NOT_FOUND )); then
for CANDIDATE in "${DIRNAME}/../${GROUP_ID}${I}-"*.patch; do
if [[ -f "$CANDIDATE" ]]; then
echo "Candidate: ${CANDIDATE}"
normalize_file "${CANDIDATE}"
git apply --reject "${FILE}"
fi
done
fi
done
git add .
git commit --no-verify -q -m "VSCODIUM HELPER"
normalize_file "${1}"
fi
fi
fi
echo "FILE: ${FILE}"
if [[ -f "${FILE}" ]]; then
if [[ -f "${FILE}.bak" ]]; then
mv -f $FILE{.bak,}
fi
git apply --reject "${FILE}" || true
fi
read -rp "Press any key when the conflict have been resolved..." -n1 -s
while [[ -n "$( find . -name '*.rej' -print )" ]]; do
echo
read -rp "Press any key when the conflict have been resolved..." -n1 -s
done
git add .
git diff --staged -U1 > "${FILE}"
if [[ "${FILE}" != "../patches/helper/settings.patch" ]]; then
git reset -q --hard HEAD
else
git reset -q --hard HEAD~
fi
echo "The patch has been generated."