fish-shell/share/functions/__fish_cache_sourced_completions.fish
2024-02-26 16:17:47 +01:00

45 lines
1.2 KiB
Fish

function __fish_cache_sourced_completions
# Allow a `--name=foo` option which ends up in the filename.
argparse -s name= -- $argv
or return
set -q argv[1]
or return 1
set -l cmd (command -s $argv[1])
or begin
# If we have no command, we can't get an mtime
# and so we can't cache
# The caller can more easily retry
return 127
end
set -l cachedir (__fish_make_cache_dir completions)
or return
set -l stampfile $cachedir/$argv[1].stamp
set -l compfile $cachedir/$argv[1].fish
set -l mtime (path mtime -- $cmd)
set -l cmtime 0
path is -rf -- $stampfile
and read cmtime <$stampfile
# If either the timestamp or the completion file don't exist,
# or the mtime differs, we rerun.
#
# That means we'll rerun if the command was up- or downgraded.
if path is -vrf -- $stampfile $compfile || test "$cmtime" -ne "$mtime" 2>/dev/null
$argv >$compfile
# If the command exited unsuccessfully, we assume it didn't work.
or return 2
echo -- $mtime >$stampfile
end
if path is -rf -- $compfile
source $compfile
return 0
end
return 3
end