fpf-cli 1.6.37 → 1.6.38

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.
Files changed (2) hide show
  1. package/fpf +58 -8
  2. package/package.json +1 -1
package/fpf CHANGED
@@ -3,7 +3,7 @@
3
3
  set -euo pipefail
4
4
 
5
5
  SCRIPT_NAME="fpf"
6
- SCRIPT_VERSION="1.6.37"
6
+ SCRIPT_VERSION="1.6.38"
7
7
  TMP_ROOT="${TMPDIR:-/tmp}/fpf"
8
8
  SESSION_TMP_ROOT=""
9
9
  HELP_FILE=""
@@ -2853,9 +2853,23 @@ manager_installed_names_cached() {
2853
2853
  mark_installed_packages() {
2854
2854
  local source_file="$1"
2855
2855
  local output_file="$2"
2856
+ local unique_managers_file
2857
+ local manager_counts_file
2856
2858
  local installed_file
2857
2859
  local installed_map_file
2860
+ local installed_part_file
2861
+ local manager_match_count
2862
+ local installed_match_count
2863
+ local installed_part_files=()
2864
+ local gather_pids=()
2858
2865
  local manager
2866
+ local gather_pid
2867
+
2868
+ unique_managers_file="$(mktemp "${SESSION_TMP_ROOT}/installed-managers.XXXXXX")"
2869
+ awk -F'\t' 'NF >= 1 && $1 != "" { print $1 }' "${source_file}" | awk '!seen[$0]++' >"${unique_managers_file}"
2870
+
2871
+ manager_counts_file="$(mktemp "${SESSION_TMP_ROOT}/installed-counts.XXXXXX")"
2872
+ awk -F'\t' 'NF >= 1 && $1 != "" { counts[$1]++ } END { for (mgr in counts) print mgr "\t" counts[mgr] }' "${source_file}" >"${manager_counts_file}"
2859
2873
 
2860
2874
  if [[ "${FPF_SKIP_INSTALLED_MARKERS:-0}" == "1" ]]; then
2861
2875
  awk -F'\t' '
@@ -2865,6 +2879,11 @@ mark_installed_packages() {
2865
2879
  print $1 "\t" $2 "\t " desc
2866
2880
  }
2867
2881
  ' "${source_file}" >"${output_file}"
2882
+ while IFS= read -r manager; do
2883
+ [[ -n "${manager}" ]] || continue
2884
+ loading_progress_mark_done "${manager}" "installed marker check skipped"
2885
+ done <"${unique_managers_file}"
2886
+ rm -f "${unique_managers_file}" "${manager_counts_file}"
2868
2887
  return
2869
2888
  fi
2870
2889
 
@@ -2873,13 +2892,39 @@ mark_installed_packages() {
2873
2892
 
2874
2893
  while IFS= read -r manager; do
2875
2894
  [[ -n "${manager}" ]] || continue
2876
- installed_file="$(mktemp "${SESSION_TMP_ROOT}/installed.${manager}.XXXXXX")"
2877
- manager_installed_names_cached "${manager}" "${installed_file}"
2878
- if [[ -s "${installed_file}" ]]; then
2879
- awk -F'\t' -v mgr="${manager}" 'NF > 0 && $1 != "" { print mgr "\t" $1 }' "${installed_file}" >>"${installed_map_file}"
2895
+ installed_part_file="$(mktemp "${SESSION_TMP_ROOT}/installed-map.${manager}.XXXXXX")"
2896
+ installed_part_files+=("${installed_part_file}")
2897
+
2898
+ (
2899
+ manager_match_count="$(awk -F'\t' -v mgr="${manager}" '$1 == mgr { print $2; found=1; exit } END { if (!found) print 0 }' "${manager_counts_file}")"
2900
+ if ! [[ "${manager_match_count}" =~ ^[0-9]+$ ]]; then
2901
+ manager_match_count=0
2902
+ fi
2903
+
2904
+ loading_progress_mark_running "${manager}" "marking installed status for ${manager_match_count} matches"
2905
+ installed_file="$(mktemp "${SESSION_TMP_ROOT}/installed.${manager}.XXXXXX")"
2906
+ manager_installed_names_cached "${manager}" "${installed_file}" || true
2907
+ installed_match_count=0
2908
+ if [[ -s "${installed_file}" ]]; then
2909
+ awk -F'\t' -v mgr="${manager}" 'NF > 0 && $1 != "" { print mgr "\t" $1 }' "${installed_file}" >"${installed_part_file}"
2910
+ installed_match_count="$(awk 'END { print NR + 0 }' "${installed_part_file}")"
2911
+ fi
2912
+ rm -f "${installed_file}"
2913
+ loading_progress_mark_done "${manager}" "${manager_match_count} matches, ${installed_match_count} installed"
2914
+ ) &
2915
+ gather_pids+=("$!")
2916
+ done <"${unique_managers_file}"
2917
+
2918
+ for gather_pid in "${gather_pids[@]-}"; do
2919
+ wait "${gather_pid}" || true
2920
+ done
2921
+
2922
+ for installed_part_file in "${installed_part_files[@]-}"; do
2923
+ if [[ -s "${installed_part_file}" ]]; then
2924
+ cat "${installed_part_file}" >>"${installed_map_file}"
2880
2925
  fi
2881
- rm -f "${installed_file}"
2882
- done < <(awk -F'\t' 'NF >= 1 && $1 != "" { print $1 }' "${source_file}" | awk '!seen[$0]++')
2926
+ rm -f "${installed_part_file}"
2927
+ done
2883
2928
 
2884
2929
  awk -F'\t' '
2885
2930
  FILENAME == ARGV[1] {
@@ -2898,6 +2943,7 @@ mark_installed_packages() {
2898
2943
  }
2899
2944
  ' "${installed_map_file}" "${source_file}" >"${output_file}"
2900
2945
 
2946
+ rm -f "${unique_managers_file}" "${manager_counts_file}"
2901
2947
  rm -f "${installed_map_file}"
2902
2948
  }
2903
2949
 
@@ -2966,7 +3012,7 @@ collect_search_display_rows() {
2966
3012
  if [[ -s "${part_file}" ]]; then
2967
3013
  result_count="$(awk 'END { print NR + 0 }' "${part_file}")"
2968
3014
  fi
2969
- loading_progress_mark_done "${manager}" "${result_count} packages matched"
3015
+ loading_progress_mark_running "${manager}" "${result_count} matches indexed; waiting for installed check"
2970
3016
  ) &
2971
3017
  gather_pids+=("$!")
2972
3018
  done
@@ -2994,6 +3040,10 @@ collect_search_display_rows() {
2994
3040
  awk -v limit="${query_limit}" 'NR <= limit' "${output_file}" >"${output_file}.limited"
2995
3041
  mv "${output_file}.limited" "${output_file}"
2996
3042
  fi
3043
+ else
3044
+ for manager in "${managers[@]-}"; do
3045
+ loading_progress_mark_done "${manager}" "0 packages matched"
3046
+ done
2997
3047
  fi
2998
3048
 
2999
3049
  rm -f "${merged_source_file}" "${merged_marked_file}"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fpf-cli",
3
- "version": "1.6.37",
3
+ "version": "1.6.38",
4
4
  "description": "Cross-platform fuzzy package finder powered by fzf",
5
5
  "bin": {
6
6
  "fpf": "fpf"