fpf-cli 1.6.40 → 1.6.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/fpf +149 -19
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -102,6 +102,8 @@ Installed packages are marked with `*` in the result list.
|
|
|
102
102
|
- Set `FPF_LOADING_INDICATOR=0` to disable the pre-search loading indicator.
|
|
103
103
|
- `FPF_RELOAD_MIN_CHARS`: minimum query length before live reload (default `2`)
|
|
104
104
|
- `FPF_RELOAD_DEBOUNCE`: reload debounce seconds (default `0.12`)
|
|
105
|
+
- `FPF_DYNAMIC_RELOAD_BYPASS_QUERY_CACHE=1`: force uncached reload queries (legacy behavior); default `0` uses query cache during reloads
|
|
106
|
+
- `FPF_SEARCH_CATALOG_ASYNC_PREWARM`: async warmup for `apt`/`brew` catalog caches during interactive reload/search paths (default `1`, set `0` for synchronous legacy behavior)
|
|
105
107
|
- `FPF_ENABLE_QUERY_CACHE`: `auto` (default), `1`, or `0` (`auto` enables query cache for `apt`, `brew`, `pacman`, and `bun`)
|
|
106
108
|
- `FPF_QUERY_CACHE_TTL`: default query-cache TTL seconds for heavy manager caches (default `300`)
|
|
107
109
|
- `FPF_APT_QUERY_CACHE_TTL`, `FPF_BREW_QUERY_CACHE_TTL`, `FPF_PACMAN_QUERY_CACHE_TTL`: per-manager query-cache TTL overrides
|
package/fpf
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
set -euo pipefail
|
|
4
4
|
|
|
5
5
|
SCRIPT_NAME="fpf"
|
|
6
|
-
SCRIPT_VERSION="1.6.
|
|
6
|
+
SCRIPT_VERSION="1.6.42"
|
|
7
7
|
TMP_ROOT="${TMPDIR:-/tmp}/fpf"
|
|
8
8
|
SESSION_TMP_ROOT=""
|
|
9
9
|
HELP_FILE=""
|
|
@@ -80,6 +80,22 @@ query_cache_ttl_seconds_for_manager() {
|
|
|
80
80
|
printf "%s" "${manager_ttl}"
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
+
dynamic_reload_query_cache_bypass_value() {
|
|
84
|
+
local bypass_setting="${FPF_DYNAMIC_RELOAD_BYPASS_QUERY_CACHE:-0}"
|
|
85
|
+
|
|
86
|
+
bypass_setting="$(trim_whitespace "${bypass_setting}")"
|
|
87
|
+
bypass_setting="$(printf "%s" "${bypass_setting}" | tr '[:upper:]' '[:lower:]')"
|
|
88
|
+
|
|
89
|
+
case "${bypass_setting}" in
|
|
90
|
+
1|true|yes|on)
|
|
91
|
+
printf "1"
|
|
92
|
+
;;
|
|
93
|
+
*)
|
|
94
|
+
printf "0"
|
|
95
|
+
;;
|
|
96
|
+
esac
|
|
97
|
+
}
|
|
98
|
+
|
|
83
99
|
log() {
|
|
84
100
|
printf "%s\n" "$*" >&2
|
|
85
101
|
}
|
|
@@ -1021,6 +1037,110 @@ build_brew_catalog_entries() {
|
|
|
1021
1037
|
awk -F'\t' '!seen[$1]++'
|
|
1022
1038
|
}
|
|
1023
1039
|
|
|
1040
|
+
build_search_catalog_entries_for_manager() {
|
|
1041
|
+
local manager="$1"
|
|
1042
|
+
|
|
1043
|
+
case "${manager}" in
|
|
1044
|
+
apt)
|
|
1045
|
+
build_apt_catalog_entries
|
|
1046
|
+
;;
|
|
1047
|
+
brew)
|
|
1048
|
+
build_brew_catalog_entries
|
|
1049
|
+
;;
|
|
1050
|
+
*)
|
|
1051
|
+
return 1
|
|
1052
|
+
;;
|
|
1053
|
+
esac
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
search_catalog_async_prewarm_enabled() {
|
|
1057
|
+
local setting="${FPF_SEARCH_CATALOG_ASYNC_PREWARM:-1}"
|
|
1058
|
+
|
|
1059
|
+
if [[ -z "${FPF_SEARCH_CATALOG_ASYNC_PREWARM+x}" && -n "${FPF_TEST_LOG:-}" ]]; then
|
|
1060
|
+
return 1
|
|
1061
|
+
fi
|
|
1062
|
+
|
|
1063
|
+
setting="$(trim_whitespace "${setting}")"
|
|
1064
|
+
setting="$(printf "%s" "${setting}" | tr '[:upper:]' '[:lower:]')"
|
|
1065
|
+
|
|
1066
|
+
case "${setting}" in
|
|
1067
|
+
0|false|no|off)
|
|
1068
|
+
return 1
|
|
1069
|
+
;;
|
|
1070
|
+
esac
|
|
1071
|
+
|
|
1072
|
+
case "${ACTION}" in
|
|
1073
|
+
search)
|
|
1074
|
+
return 0
|
|
1075
|
+
;;
|
|
1076
|
+
feed-search)
|
|
1077
|
+
case "${FPF_SKIP_INSTALLED_MARKERS:-0}" in
|
|
1078
|
+
1|true|yes|on)
|
|
1079
|
+
return 0
|
|
1080
|
+
;;
|
|
1081
|
+
esac
|
|
1082
|
+
;;
|
|
1083
|
+
esac
|
|
1084
|
+
|
|
1085
|
+
return 1
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
search_catalog_prewarm_lock_dir() {
|
|
1089
|
+
local manager="$1"
|
|
1090
|
+
printf "%s/state/search-catalog/%s.lock" "${CACHE_ROOT}" "${manager}"
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
run_search_catalog_prewarm_worker() {
|
|
1094
|
+
local manager="$1"
|
|
1095
|
+
local output_tmp
|
|
1096
|
+
local cache_fingerprint_value
|
|
1097
|
+
local cache_key
|
|
1098
|
+
|
|
1099
|
+
output_tmp="$(mktemp "${SESSION_TMP_ROOT}/search-catalog-prewarm.XXXXXX")"
|
|
1100
|
+
build_search_catalog_entries_for_manager "${manager}" >"${output_tmp}" || true
|
|
1101
|
+
|
|
1102
|
+
if [[ -s "${output_tmp}" ]]; then
|
|
1103
|
+
cache_fingerprint_value="$(cache_search_catalog_fingerprint "${manager}")"
|
|
1104
|
+
cache_key="$(cache_search_catalog_key "${manager}" "${cache_fingerprint_value}")"
|
|
1105
|
+
cache_store_key_from_file "${cache_key}" "${cache_fingerprint_value}" "${output_tmp}"
|
|
1106
|
+
fi
|
|
1107
|
+
|
|
1108
|
+
rm -f "${output_tmp}"
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
start_search_catalog_prewarm_async() {
|
|
1112
|
+
local manager="$1"
|
|
1113
|
+
local lock_dir
|
|
1114
|
+
|
|
1115
|
+
search_catalog_async_prewarm_enabled || return 0
|
|
1116
|
+
case "${manager}" in
|
|
1117
|
+
apt|brew)
|
|
1118
|
+
;;
|
|
1119
|
+
*)
|
|
1120
|
+
return 0
|
|
1121
|
+
;;
|
|
1122
|
+
esac
|
|
1123
|
+
|
|
1124
|
+
initialize_cache_root
|
|
1125
|
+
lock_dir="$(search_catalog_prewarm_lock_dir "${manager}")"
|
|
1126
|
+
mkdir -p "$(dirname "${lock_dir}")"
|
|
1127
|
+
|
|
1128
|
+
if ! mkdir "${lock_dir}" 2>/dev/null; then
|
|
1129
|
+
return 0
|
|
1130
|
+
fi
|
|
1131
|
+
|
|
1132
|
+
if [[ -n "${FPF_TEST_LOG:-}" ]]; then
|
|
1133
|
+
run_search_catalog_prewarm_worker "${manager}" || true
|
|
1134
|
+
rmdir "${lock_dir}" >/dev/null 2>&1 || true
|
|
1135
|
+
return 0
|
|
1136
|
+
fi
|
|
1137
|
+
|
|
1138
|
+
(
|
|
1139
|
+
run_search_catalog_prewarm_worker "${manager}" || true
|
|
1140
|
+
rmdir "${lock_dir}" >/dev/null 2>&1 || true
|
|
1141
|
+
) >/dev/null 2>&1 &
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1024
1144
|
ensure_search_catalog_cache() {
|
|
1025
1145
|
local manager="$1"
|
|
1026
1146
|
local cache_fingerprint_value
|
|
@@ -1040,18 +1160,7 @@ ensure_search_catalog_cache() {
|
|
|
1040
1160
|
|
|
1041
1161
|
output_tmp="$(mktemp "${SESSION_TMP_ROOT}/search-catalog.XXXXXX")"
|
|
1042
1162
|
|
|
1043
|
-
|
|
1044
|
-
apt)
|
|
1045
|
-
build_apt_catalog_entries >"${output_tmp}" || true
|
|
1046
|
-
;;
|
|
1047
|
-
brew)
|
|
1048
|
-
build_brew_catalog_entries >"${output_tmp}" || true
|
|
1049
|
-
;;
|
|
1050
|
-
*)
|
|
1051
|
-
rm -f "${output_tmp}"
|
|
1052
|
-
return 1
|
|
1053
|
-
;;
|
|
1054
|
-
esac
|
|
1163
|
+
build_search_catalog_entries_for_manager "${manager}" >"${output_tmp}" || true
|
|
1055
1164
|
|
|
1056
1165
|
if [[ -s "${output_tmp}" ]]; then
|
|
1057
1166
|
cache_store_key_from_file "${cache_key}" "${cache_fingerprint_value}" "${output_tmp}"
|
|
@@ -2372,7 +2481,13 @@ manager_search_entries_uncached() {
|
|
|
2372
2481
|
|
|
2373
2482
|
case "${manager}" in
|
|
2374
2483
|
apt)
|
|
2375
|
-
if
|
|
2484
|
+
if search_entries_from_catalog_cache "${manager}" "${effective_query}"; then
|
|
2485
|
+
:
|
|
2486
|
+
elif search_catalog_async_prewarm_enabled; then
|
|
2487
|
+
start_search_catalog_prewarm_async "${manager}"
|
|
2488
|
+
apt-cache search -- "${effective_query}" 2>/dev/null |
|
|
2489
|
+
awk -F' - ' '{ name=$1; desc=$2; gsub(/^[[:space:]]+|[[:space:]]+$/, "", name); if (desc == "") desc="-"; print name "\t" desc }'
|
|
2490
|
+
elif ensure_search_catalog_cache "${manager}"; then
|
|
2376
2491
|
search_entries_from_catalog_cache "${manager}" "${effective_query}" || true
|
|
2377
2492
|
else
|
|
2378
2493
|
apt-cache search -- "${effective_query}" 2>/dev/null |
|
|
@@ -2434,7 +2549,16 @@ manager_search_entries_uncached() {
|
|
|
2434
2549
|
'
|
|
2435
2550
|
;;
|
|
2436
2551
|
brew)
|
|
2437
|
-
if
|
|
2552
|
+
if search_entries_from_catalog_cache "${manager}" "${effective_query}"; then
|
|
2553
|
+
exact_match_entry "${manager}" "${query}"
|
|
2554
|
+
elif search_catalog_async_prewarm_enabled; then
|
|
2555
|
+
start_search_catalog_prewarm_async "${manager}"
|
|
2556
|
+
{
|
|
2557
|
+
brew search "${effective_query}" 2>/dev/null |
|
|
2558
|
+
awk 'NF >= 1 { print $1 "\t-" }'
|
|
2559
|
+
exact_match_entry "${manager}" "${query}"
|
|
2560
|
+
}
|
|
2561
|
+
elif ensure_search_catalog_cache "${manager}"; then
|
|
2438
2562
|
{
|
|
2439
2563
|
search_entries_from_catalog_cache "${manager}" "${effective_query}" || true
|
|
2440
2564
|
exact_match_entry "${manager}" "${query}"
|
|
@@ -3191,6 +3315,7 @@ build_dynamic_reload_command() {
|
|
|
3191
3315
|
local script_path="${BASH_SOURCE[0]}"
|
|
3192
3316
|
local min_chars="${FPF_RELOAD_MIN_CHARS:-2}"
|
|
3193
3317
|
local reload_debounce="${FPF_RELOAD_DEBOUNCE:-0.12}"
|
|
3318
|
+
local bypass_query_cache="1"
|
|
3194
3319
|
|
|
3195
3320
|
if ! [[ "${min_chars}" =~ ^[0-9]+$ ]]; then
|
|
3196
3321
|
min_chars=2
|
|
@@ -3200,14 +3325,16 @@ build_dynamic_reload_command() {
|
|
|
3200
3325
|
reload_debounce=0.12
|
|
3201
3326
|
fi
|
|
3202
3327
|
|
|
3328
|
+
bypass_query_cache="$(dynamic_reload_query_cache_bypass_value)"
|
|
3329
|
+
|
|
3203
3330
|
if [[ "${script_path}" != /* ]]; then
|
|
3204
3331
|
script_path="$(pwd)/${script_path}"
|
|
3205
3332
|
fi
|
|
3206
3333
|
|
|
3207
3334
|
if [[ -n "${manager_override}" ]]; then
|
|
3208
|
-
printf 'q={q}; if [ ${#q} -lt %s ]; then cat %q; else sleep %s; FPF_SKIP_INSTALLED_MARKERS=1 FPF_BYPASS_QUERY_CACHE
|
|
3335
|
+
printf 'q={q}; if [ ${#q} -lt %s ]; then cat %q; else sleep %s; FPF_SKIP_INSTALLED_MARKERS=1 FPF_BYPASS_QUERY_CACHE=%s FPF_IPC_MANAGER_OVERRIDE=%q FPF_IPC_FALLBACK_FILE=%q %q --feed-search --manager %q -- "$q" 2>/dev/null || cat %q; fi' "${min_chars}" "${fallback_file}" "${reload_debounce}" "${bypass_query_cache}" "${manager_override}" "${fallback_file}" "${script_path}" "${manager_override}" "${fallback_file}"
|
|
3209
3336
|
else
|
|
3210
|
-
printf 'q={q}; if [ ${#q} -lt %s ]; then cat %q; else sleep %s; FPF_SKIP_INSTALLED_MARKERS=1 FPF_BYPASS_QUERY_CACHE
|
|
3337
|
+
printf 'q={q}; if [ ${#q} -lt %s ]; then cat %q; else sleep %s; FPF_SKIP_INSTALLED_MARKERS=1 FPF_BYPASS_QUERY_CACHE=%s FPF_IPC_MANAGER_OVERRIDE= FPF_IPC_FALLBACK_FILE=%q %q --feed-search -- "$q" 2>/dev/null || cat %q; fi' "${min_chars}" "${fallback_file}" "${reload_debounce}" "${bypass_query_cache}" "${fallback_file}" "${script_path}" "${fallback_file}"
|
|
3211
3338
|
fi
|
|
3212
3339
|
}
|
|
3213
3340
|
|
|
@@ -3218,6 +3345,7 @@ build_dynamic_reload_command_for_query() {
|
|
|
3218
3345
|
local script_path="${BASH_SOURCE[0]}"
|
|
3219
3346
|
local min_chars="${FPF_RELOAD_MIN_CHARS:-2}"
|
|
3220
3347
|
local reload_debounce="${FPF_RELOAD_DEBOUNCE:-0.12}"
|
|
3348
|
+
local bypass_query_cache="1"
|
|
3221
3349
|
|
|
3222
3350
|
if ! [[ "${min_chars}" =~ ^[0-9]+$ ]]; then
|
|
3223
3351
|
min_chars=2
|
|
@@ -3227,6 +3355,8 @@ build_dynamic_reload_command_for_query() {
|
|
|
3227
3355
|
reload_debounce=0.12
|
|
3228
3356
|
fi
|
|
3229
3357
|
|
|
3358
|
+
bypass_query_cache="$(dynamic_reload_query_cache_bypass_value)"
|
|
3359
|
+
|
|
3230
3360
|
if [[ "${script_path}" != /* ]]; then
|
|
3231
3361
|
script_path="$(pwd)/${script_path}"
|
|
3232
3362
|
fi
|
|
@@ -3237,9 +3367,9 @@ build_dynamic_reload_command_for_query() {
|
|
|
3237
3367
|
fi
|
|
3238
3368
|
|
|
3239
3369
|
if [[ -n "${manager_override}" ]]; then
|
|
3240
|
-
printf 'sleep %s; FPF_SKIP_INSTALLED_MARKERS=1 FPF_BYPASS_QUERY_CACHE
|
|
3370
|
+
printf 'sleep %s; FPF_SKIP_INSTALLED_MARKERS=1 FPF_BYPASS_QUERY_CACHE=%s FPF_IPC_MANAGER_OVERRIDE=%q FPF_IPC_FALLBACK_FILE=%q %q --feed-search --manager %q -- %q 2>/dev/null || cat %q' "${reload_debounce}" "${bypass_query_cache}" "${manager_override}" "${fallback_file}" "${script_path}" "${manager_override}" "${query_value}" "${fallback_file}"
|
|
3241
3371
|
else
|
|
3242
|
-
printf 'sleep %s; FPF_SKIP_INSTALLED_MARKERS=1 FPF_BYPASS_QUERY_CACHE
|
|
3372
|
+
printf 'sleep %s; FPF_SKIP_INSTALLED_MARKERS=1 FPF_BYPASS_QUERY_CACHE=%s FPF_IPC_MANAGER_OVERRIDE= FPF_IPC_FALLBACK_FILE=%q %q --feed-search -- %q 2>/dev/null || cat %q' "${reload_debounce}" "${bypass_query_cache}" "${fallback_file}" "${script_path}" "${query_value}" "${fallback_file}"
|
|
3243
3373
|
fi
|
|
3244
3374
|
}
|
|
3245
3375
|
|