Skip to content

Commit a15da66

Browse files
committed
fix: guard empty arrays in bash 3.2 set -u and declare local loop vars
1 parent 54995b4 commit a15da66

1 file changed

Lines changed: 11 additions & 4 deletions

File tree

scripts/sync-payload.sh

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ ROOT="$(cd "$(dirname "$0")/.." && pwd)"
77
MANIFEST="$ROOT/scripts/payload-manifest.json"
88
PAYLOAD_DIR="$ROOT/skills/python-project-workflow"
99
CI_MODE=false
10-
declare -a MANIFEST_FILES MANIFEST_SCRIPTS
10+
MANIFEST_FILES=()
11+
MANIFEST_SCRIPTS=()
1112

1213
[ "${1:-}" = "--ci" ] && CI_MODE=true
1314

@@ -48,9 +49,10 @@ sys.stdout.write(value if isinstance(value, str) else "")
4849
PY
4950
}
5051

51-
# Portable newline-delimited read (compatible with bash 3.2 on macOS)
52-
while IFS= read -r item; do MANIFEST_FILES+=("$item"); done < <(manifest_entries files)
53-
while IFS= read -r item; do MANIFEST_SCRIPTS+=("$item"); done < <(manifest_entries scripts)
52+
# Portable newline-delimited read (compatible with bash 3.2 on macOS).
53+
# The ;echo guarantees at least one line so arrays are never empty under set -u.
54+
while IFS= read -r item; do MANIFEST_FILES+=("$item"); done < <(manifest_entries files; echo)
55+
while IFS= read -r item; do MANIFEST_SCRIPTS+=("$item"); done < <(manifest_entries scripts; echo)
5456
REF_MODE="$(manifest_scalar references)"
5557

5658
mode_matches() {
@@ -94,14 +96,17 @@ sync_file() {
9496

9597
is_covered() {
9698
local rel="$1"
99+
local f s
97100
# Authored-in-place files (written directly in payload, not copied)
98101
case "$rel" in
99102
SKILL.md) return 0 ;;
100103
esac
101104
for f in "${MANIFEST_FILES[@]}"; do
105+
[ -z "$f" ] && continue
102106
[ "$rel" = "$f" ] && return 0
103107
done
104108
for s in "${MANIFEST_SCRIPTS[@]}"; do
109+
[ -z "$s" ] && continue
105110
[ "$rel" = "scripts/$s" ] && return 0
106111
done
107112
if [ "$REF_MODE" = "*" ]; then
@@ -114,13 +119,15 @@ is_covered() {
114119

115120
# Files
116121
for f in "${MANIFEST_FILES[@]}"; do
122+
[ -z "$f" ] && continue
117123
source="$ROOT/$f"
118124
target="$PAYLOAD_DIR/$f"
119125
sync_file "$source" "$target" "$f"
120126
done
121127

122128
# Scripts
123129
for s in "${MANIFEST_SCRIPTS[@]}"; do
130+
[ -z "$s" ] && continue
124131
source="$ROOT/scripts/$s"
125132
target="$PAYLOAD_DIR/scripts/$s"
126133
mode=644

0 commit comments

Comments
 (0)