fpf-cli 1.6.41 → 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 +1 -0
- package/fpf +123 -15
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -103,6 +103,7 @@ Installed packages are marked with `*` in the result list.
|
|
|
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
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)
|
|
106
107
|
- `FPF_ENABLE_QUERY_CACHE`: `auto` (default), `1`, or `0` (`auto` enables query cache for `apt`, `brew`, `pacman`, and `bun`)
|
|
107
108
|
- `FPF_QUERY_CACHE_TTL`: default query-cache TTL seconds for heavy manager caches (default `300`)
|
|
108
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=""
|
|
@@ -1037,6 +1037,110 @@ build_brew_catalog_entries() {
|
|
|
1037
1037
|
awk -F'\t' '!seen[$1]++'
|
|
1038
1038
|
}
|
|
1039
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
|
+
|
|
1040
1144
|
ensure_search_catalog_cache() {
|
|
1041
1145
|
local manager="$1"
|
|
1042
1146
|
local cache_fingerprint_value
|
|
@@ -1056,18 +1160,7 @@ ensure_search_catalog_cache() {
|
|
|
1056
1160
|
|
|
1057
1161
|
output_tmp="$(mktemp "${SESSION_TMP_ROOT}/search-catalog.XXXXXX")"
|
|
1058
1162
|
|
|
1059
|
-
|
|
1060
|
-
apt)
|
|
1061
|
-
build_apt_catalog_entries >"${output_tmp}" || true
|
|
1062
|
-
;;
|
|
1063
|
-
brew)
|
|
1064
|
-
build_brew_catalog_entries >"${output_tmp}" || true
|
|
1065
|
-
;;
|
|
1066
|
-
*)
|
|
1067
|
-
rm -f "${output_tmp}"
|
|
1068
|
-
return 1
|
|
1069
|
-
;;
|
|
1070
|
-
esac
|
|
1163
|
+
build_search_catalog_entries_for_manager "${manager}" >"${output_tmp}" || true
|
|
1071
1164
|
|
|
1072
1165
|
if [[ -s "${output_tmp}" ]]; then
|
|
1073
1166
|
cache_store_key_from_file "${cache_key}" "${cache_fingerprint_value}" "${output_tmp}"
|
|
@@ -2388,7 +2481,13 @@ manager_search_entries_uncached() {
|
|
|
2388
2481
|
|
|
2389
2482
|
case "${manager}" in
|
|
2390
2483
|
apt)
|
|
2391
|
-
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
|
|
2392
2491
|
search_entries_from_catalog_cache "${manager}" "${effective_query}" || true
|
|
2393
2492
|
else
|
|
2394
2493
|
apt-cache search -- "${effective_query}" 2>/dev/null |
|
|
@@ -2450,7 +2549,16 @@ manager_search_entries_uncached() {
|
|
|
2450
2549
|
'
|
|
2451
2550
|
;;
|
|
2452
2551
|
brew)
|
|
2453
|
-
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
|
|
2454
2562
|
{
|
|
2455
2563
|
search_entries_from_catalog_cache "${manager}" "${effective_query}" || true
|
|
2456
2564
|
exact_match_entry "${manager}" "${query}"
|