Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions functions/fisher.fish
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,28 @@ function fisher --argument-names cmd --description "A plugin manager for Fish"
end
end

for plugin in $update_plugins
set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)]
set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files
set --local installed_files (string replace -- \~ ~ $$plugin_files_var)
set --local source_files $source/{functions,themes,conf.d,completions}/*
set --local changed

for relative_path in (
printf "%s\n" \
(string replace -- "$fisher_path/" "" $installed_files) \
(string replace -- "$source/" "" $source_files) |
sort --unique
)
if not command diff -qrN $source/$relative_path $fisher_path/$relative_path &>/dev/null
set changed 1
break
end
end

set --query changed[1] || set --erase update_plugins[(contains --index -- "$plugin" $update_plugins)]
end

for plugin in $update_plugins $remove_plugins
if set --local index (contains --index -- "$plugin" $_fisher_plugins)
set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files
Expand Down
25 changes: 24 additions & 1 deletion tests/fisher.fish
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,30 @@ set --local BASENAME --regex -- '[^/]+$'

@test "fisher update" (
fisher update tests/ponyo >/dev/null
) "$ponyo" = "pyon pyon pyon"
) "$ponyo" = "pyon pyon"

@test "fisher update unchanged output is quiet" (
set --local plugin (command mktemp -d)
command mkdir -p $plugin/functions
printf "function test_plugin\n echo unchanged\nend\n" >$plugin/functions/test_plugin.fish
fisher install $plugin >/dev/null
set --local output (fisher update $plugin)
fisher remove $plugin >/dev/null
string match --quiet --entire -- "Updated" $output
or echo ok
) = ok

@test "fisher update changed output" (
set --local plugin (command mktemp -d)
command mkdir -p $plugin/functions
printf "function test_plugin\n echo before\nend\n" >$plugin/functions/test_plugin.fish
fisher install $plugin >/dev/null
printf "function test_plugin\n echo after\nend\n" >$plugin/functions/test_plugin.fish
set --local output (fisher update $plugin)
fisher remove $plugin >/dev/null
string match --quiet --regex "(^|\\n)Updated 1 plugin/s\$" -- $output
and echo ok
) = ok

@test fish_plugins (
string match --regex -- "[^/]+\$" <$__fish_config_dir/fish_plugins | string join " "
Expand Down