diff options
| author | David Czihak <git@dcz.at> | 2026-05-07 14:33:19 +0200 |
|---|---|---|
| committer | David Czihak <git@dcz.at> | 2026-05-07 14:33:19 +0200 |
| commit | ddf2de739068b5ff0866ccb1d067f3cb53a4fc55 (patch) | |
| tree | 1a77efe9d73a6172be3c37d29b321eadd4efe379 /Scripts/update-parser.sh | |
Initial commitv0.1.7
Diffstat (limited to 'Scripts/update-parser.sh')
| -rwxr-xr-x | Scripts/update-parser.sh | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/Scripts/update-parser.sh b/Scripts/update-parser.sh new file mode 100755 index 0000000..f4fab95 --- /dev/null +++ b/Scripts/update-parser.sh @@ -0,0 +1,64 @@ +#!/bin/sh +# +# update-parser.sh — Bump vendored tree-sitter-zig and rebuild the dylib. +# +# Purpose: +# Refresh the vendored snapshot under vendor/tree-sitter-zig/ to a newer +# upstream commit, update VENDORING.md, and rebuild the parser dylib. +# +# What it does: +# - clones tree-sitter-grammars/tree-sitter-zig into a temp dir +# - checks out the requested ref (default: HEAD of the default branch) +# - exits early if the upstream SHA matches the pinned SHA +# - replaces src/, queries/, grammar.js, tree-sitter.json, LICENSE +# with the upstream copies; leaves VENDORING.md and README.upstream.md +# untouched +# - rewrites the "Pinned commit:" line in VENDORING.md +# - invokes build-parser.sh to rebuild Syntaxes/libtree-sitter-zig.dylib +# - prints a GitHub compare link for the diff +# +# Usage: +# ./Scripts/update-parser.sh # bump to upstream HEAD +# ./Scripts/update-parser.sh <ref> # bump to a tag, branch, or SHA +# +# Caveats: +# - any local edits inside the listed paths are overwritten — review +# `git diff vendor/` afterwards before committing +# - parses VENDORING.md by an exact "Pinned commit: <sha>" line prefix; +# keep that line format intact +# +# Requirements: +# git, plus everything build-parser.sh needs. + +set -eu + +ROOT="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)" +VENDOR_DIR="$ROOT/vendor/tree-sitter-zig" +UPSTREAM="https://github.com/tree-sitter-grammars/tree-sitter-zig.git" +REF="${1:-HEAD}" + +TMP="$(mktemp -d)" +trap 'rm -rf "$TMP"' EXIT + +git clone --quiet "$UPSTREAM" "$TMP/repo" +git -C "$TMP/repo" checkout --quiet "$REF" +SHA="$(git -C "$TMP/repo" rev-parse HEAD)" + +OLD_SHA="$(awk '/^Pinned commit:/ {print $3}' "$VENDOR_DIR/VENDORING.md")" +if [ "$SHA" = "$OLD_SHA" ]; then + echo "Already at $SHA — nothing to do." + exit 0 +fi + +for path in src queries grammar.js tree-sitter.json LICENSE; do + rm -rf "$VENDOR_DIR/$path" + cp -R "$TMP/repo/$path" "$VENDOR_DIR/$path" +done + +sed -i.bak "s/^Pinned commit: .*/Pinned commit: $SHA/" "$VENDOR_DIR/VENDORING.md" +rm "$VENDOR_DIR/VENDORING.md.bak" + +"$ROOT/Scripts/build-parser.sh" + +echo "Updated $OLD_SHA -> $SHA" +echo "Compare: https://github.com/tree-sitter-grammars/tree-sitter-zig/compare/$OLD_SHA...$SHA" |
