56 lines
2.1 KiB
Bash
Executable file
56 lines
2.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Refresh the ephemeral llvm-mos checkout to the latest upstream main,
|
|
# then re-apply our backend (symlinks + patches).
|
|
#
|
|
# This is the ONLY script that is allowed to destructively reset the
|
|
# clone. installLlvmMos.sh intentionally refuses to do so because a
|
|
# reset would destroy any applied patches.
|
|
|
|
set -euo pipefail
|
|
source "$(dirname "$0")/common.sh"
|
|
|
|
LLVM_SRC="$TOOLS_DIR/llvm-mos"
|
|
|
|
[ -d "$LLVM_SRC/.git" ] || die "llvm-mos checkout not found; run setup.sh first"
|
|
|
|
currentBranch="$(git -C "$LLVM_SRC" rev-parse --abbrev-ref HEAD)"
|
|
if [ "$currentBranch" != "main" ]; then
|
|
die "llvm-mos is on branch '$currentBranch', expected main. Refusing to reset."
|
|
fi
|
|
|
|
# First un-apply our patches so the reset only discards upstream drift,
|
|
# not our work. Symlinks are unaffected by git reset since untracked
|
|
# directories are left alone (our symlinks live inside tracked dirs but
|
|
# are untracked files themselves).
|
|
log "reverting any applied patches"
|
|
for patch in "$PROJECT_ROOT"/patches/*.patch; do
|
|
[ -f "$patch" ] || continue
|
|
if git -C "$LLVM_SRC" apply --reverse --check "$patch" >/dev/null 2>&1; then
|
|
git -C "$LLVM_SRC" apply --reverse "$patch"
|
|
log " reverted: $(basename "$patch")"
|
|
fi
|
|
done
|
|
|
|
# Symlinks from applyBackend.sh are untracked files inside tracked
|
|
# directories. git reset --hard leaves them in place, but we clean
|
|
# them proactively so the fast-forward sees a truly clean tree.
|
|
log "removing symlinks under $LLVM_SRC pointing into $PROJECT_ROOT/src"
|
|
find "$LLVM_SRC" -type l | while read -r link; do
|
|
target="$(readlink -f "$link" || true)"
|
|
case "$target" in
|
|
"$PROJECT_ROOT"/src/*) rm "$link" ;;
|
|
esac
|
|
done
|
|
|
|
if ! git -C "$LLVM_SRC" diff --quiet || ! git -C "$LLVM_SRC" diff --cached --quiet; then
|
|
die "llvm-mos checkout still has local changes after cleanup. Inspect with: git -C $LLVM_SRC status"
|
|
fi
|
|
|
|
log "fetching and resetting to origin/main"
|
|
git -C "$LLVM_SRC" fetch --depth=1 origin main
|
|
git -C "$LLVM_SRC" reset --hard FETCH_HEAD
|
|
|
|
log "re-applying backend"
|
|
"$PROJECT_ROOT/scripts/applyBackend.sh"
|
|
|
|
log "update complete"
|