mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-23 17:53:38 +08:00
46 lines
1.2 KiB
Fish
46 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
|