Skip to content

Commit d2f05e8

Browse files
committed
fix(shell): harden project_open TTL parsing, error output, and scan streaming
1 parent 4016bea commit d2f05e8

1 file changed

Lines changed: 9 additions & 5 deletions

File tree

shell/aliases

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,10 @@ _project_open_build_cache() {
293293
cache="$(_project_open_cache_file)"
294294
stamp="${cache}.ts"
295295
ttl="${PROJECT_OPEN_CACHE_TTL:-3}"
296+
case "${ttl}" in '' | *[!0-9]*) ttl=3 ;; esac
296297
now="$(date +%s)"
297298
last="$(cat "${stamp}" 2>/dev/null || echo 0)"
299+
case "${last}" in '' | *[!0-9]*) last=0 ;; esac
298300
(( now - last < ttl )) && return 0
299301

300302
dir="${cache%/*}"
@@ -325,7 +327,7 @@ po_refresh() {
325327
}
326328

327329
_project_open_resolve() {
328-
local name="${1}" cache_only="${2}" cache line scanned
330+
local name="${1}" cache_only="${2}" cache line tmp
329331
[[ -n "${name}" ]] || return 1
330332
cache="$(_project_open_cache_file)"
331333
if [[ -f "${cache}" ]]; then
@@ -334,10 +336,12 @@ _project_open_resolve() {
334336
done < "${cache}"
335337
fi
336338
[[ -n "${cache_only}" ]] && return 1
337-
scanned="$(_project_open_scan)"
339+
tmp="$(mktemp "${TMPDIR:-/tmp}/project_open_scan.XXXXXX")" || return 1
340+
_project_open_scan >"${tmp}"
338341
while IFS= read -r line || [[ -n "${line}" ]]; do
339-
[[ "${line##*/}" == "${name}" ]] && { printf '%s\n' "${line}"; return 0; }
340-
done <<< "${scanned}"
342+
[[ "${line##*/}" == "${name}" ]] && { printf '%s\n' "${line}"; rm -f "${tmp}"; return 0; }
343+
done < "${tmp}"
344+
rm -f "${tmp}"
341345
return 1
342346
}
343347

@@ -351,7 +355,7 @@ project_open() {
351355
else
352356
NEW_PATH="$(_project_open_resolve "${1}")"
353357
if [ -z "${NEW_PATH}" ]; then
354-
echo "No project named ${1} under ${CODE_PATH}" >&2
358+
printf 'No project named %s under %s\n' "${1}" "${CODE_PATH}" >&2
355359
return 1
356360
fi
357361
tmux rename-window "${1}"

0 commit comments

Comments
 (0)