sync: auto-sync from GURU-BEAST-ROG at 2026-05-25 13:17:49
Author: Mike Swanson Machine: GURU-BEAST-ROG Timestamp: 2026-05-25 13:17:49
This commit is contained in:
@@ -21,12 +21,19 @@ NC='\033[0m'
|
|||||||
# content is never auto-deleted (use `git rm` for that, deliberately).
|
# content is never auto-deleted (use `git rm` for that, deliberately).
|
||||||
purge_garbled_paths() {
|
purge_garbled_paths() {
|
||||||
local rec st p removed=0
|
local rec st p removed=0
|
||||||
|
# POSIX ERE (not PCRE): `grep -P` refuses to run under non-UTF-8/unibyte locales on
|
||||||
|
# some platforms (Git Bash printed "grep: -P supports only unibyte and UTF-8 locales",
|
||||||
|
# silently disabling this guard). ERE has no such restriction; LC_ALL=C makes the match
|
||||||
|
# byte-wise. Same byte set as before: control chars / backslash / colon, plus the MSYS2
|
||||||
|
# Private-Use-Area substitutes (0xEE 0x80-0xBF = U+E0xx, 0xEF 0x80-0xA3 = U+F0xx) that
|
||||||
|
# stand in for : \ newline etc. in Windows path-as-filename cruft.
|
||||||
|
local garble_re=$'[\001-\037\\:]|\356[\200-\277]|\357[\200-\243]'
|
||||||
while IFS= read -r -d '' rec; do
|
while IFS= read -r -d '' rec; do
|
||||||
st="${rec:0:2}"
|
st="${rec:0:2}"
|
||||||
p="${rec:3}"
|
p="${rec:3}"
|
||||||
[ -z "$p" ] && continue
|
[ -z "$p" ] && continue
|
||||||
[ "$st" = "??" ] || continue # untracked only
|
[ "$st" = "??" ] || continue # untracked only
|
||||||
if printf '%s' "$p" | LC_ALL=C grep -qaP '[\x00-\x1f\\:]|\xee[\x80-\xbf]|\xef[\x80-\xa3]'; then
|
if printf '%s' "$p" | LC_ALL=C grep -qaE "$garble_re"; then
|
||||||
echo -e "${YELLOW}[WARNING]${NC} Removing garbled untracked path before staging: $(printf '%s' "$p" | cat -v)"
|
echo -e "${YELLOW}[WARNING]${NC} Removing garbled untracked path before staging: $(printf '%s' "$p" | cat -v)"
|
||||||
rm -f -- "$p" 2>/dev/null || true
|
rm -f -- "$p" 2>/dev/null || true
|
||||||
removed=1
|
removed=1
|
||||||
|
|||||||
@@ -125,3 +125,22 @@ another machine has a hyphenated `git config user.name`.
|
|||||||
("Web Research / Bot-Blocked Sites").
|
("Web Research / Bot-Blocked Sites").
|
||||||
- Coord reply id: `ac1e3767-f085-4c83-8d74-fbd9cc821d63` (to GURU-5070/claude-main).
|
- Coord reply id: `ac1e3767-f085-4c83-8d74-fbd9cc821d63` (to GURU-5070/claude-main).
|
||||||
- Extension id `fcoeoabgfenejglbffodgkkbkcdhcgfn`; native host `com.anthropic.claude_browser_extension`.
|
- Extension id `fcoeoabgfenejglbffodgkkbkcdhcgfn`; native host `com.anthropic.claude_browser_extension`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Update: 13:17 PT — harden sync.sh purge_garbled_paths (locale fix)
|
||||||
|
|
||||||
|
During the prior save's sync, `purge_garbled_paths()` printed `grep: -P supports only unibyte and
|
||||||
|
UTF-8 locales` — its `grep -P` (PCRE) guard refuses to run on BEAST's Git Bash locale, so the
|
||||||
|
garbled-path protection was a silent no-op here.
|
||||||
|
|
||||||
|
**Fix:** switched the detector from PCRE (`grep -qaP`) to POSIX ERE (`grep -qaE`), which has no
|
||||||
|
such locale restriction, keeping `LC_ALL=C` for byte-wise matching and the **exact same byte set**
|
||||||
|
(control chars / `\` / `:` plus the MSYS2 PUA substitutes `0xEE 0x80-0xBF` and `0xEF 0x80-0xA3`).
|
||||||
|
Pattern built via `$'...'`. No behavior change other than that it now actually runs.
|
||||||
|
|
||||||
|
Verified on BEAST: `bash -n` clean; PUA-garbled name (U+F03A) detected; literal `:` detected;
|
||||||
|
normal repo paths not flagged; no `-P` locale error. Applies to all machines on next sync (sync.sh
|
||||||
|
is shared).
|
||||||
|
|
||||||
|
- File: `.claude/scripts/sync.sh` — `purge_garbled_paths()` grep line + comment.
|
||||||
|
|||||||
Reference in New Issue
Block a user