From c9ceba17849cb665b57c2a7b9504fa58343860bb Mon Sep 17 00:00:00 2001 From: Kim Morrison <477956+kim-em@users.noreply.github.com> Date: Mon, 16 Mar 2026 19:17:32 +1100 Subject: [PATCH] fix: use null-safe while-read loop for subverso manifest sync (#12928) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR replaces `find -print0 | xargs -0 -I{} sh -c '...'` with `find -print0 | while IFS= read -r -d '' f; do ... done` for the subverso sub-manifest sync in release_steps.py. The original xargs invocation had fragile nested shell quoting; the while-read loop is both null-delimiter safe and more readable. 🤖 Prepared with Claude Code Co-authored-by: Claude Opus 4.6 (1M context) --- script/release_steps.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/script/release_steps.py b/script/release_steps.py index 57385656d5..744f611b16 100755 --- a/script/release_steps.py +++ b/script/release_steps.py @@ -492,8 +492,9 @@ def execute_release_steps(repo, version, config): 'ROOT_REV=$(jq -r \'.packages[] | select(.name == "subverso") | .rev\' lake-manifest.json); ' 'SUBVERSO_URL=$(jq -r \'.packages[] | select(.name == "subverso") | .url\' lake-manifest.json); ' 'DEMOD_REV=$(git ls-remote "$SUBVERSO_URL" "refs/tags/no-modules/$ROOT_REV" | awk \'{print $1}\'); ' - 'find test-projects -name lake-manifest.json -print0 | ' - 'xargs -0 -I{} sh -c \'jq --arg rev "$DEMOD_REV" \'.packages |= map(if .name == "subverso" then .rev = $rev else . end)\' "{}" > /tmp/lm_tmp.json && mv /tmp/lm_tmp.json "{}"\'' + 'find test-projects -name lake-manifest.json -print0 | while IFS= read -r -d \'\' f; do ' + 'jq --arg rev "$DEMOD_REV" \'.packages |= map(if .name == "subverso" then .rev = $rev else . end)\' "$f" > /tmp/lm_tmp.json && mv /tmp/lm_tmp.json "$f"; ' + 'done' ) run_command(sync_script, cwd=repo_path) print(green("Synced de-modulized subverso rev to all test-project sub-manifests"))