diff --git a/functions/fisher.fish b/functions/fisher.fish index 4f5be4ff..ea744c46 100644 --- a/functions/fisher.fish +++ b/functions/fisher.fish @@ -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 diff --git a/tests/fisher.fish b/tests/fisher.fish index 1e352b67..87cd0e85 100644 --- a/tests/fisher.fish +++ b/tests/fisher.fish @@ -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 " "