mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-24 15:02:37 +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
|