From c8091b3dee86b669c03b9f457c72c6a2c8b1c485 Mon Sep 17 00:00:00 2001 From: Jorge Bucaran Date: Fri, 15 Jan 2021 15:25:59 +0900 Subject: [PATCH] Abort install, don't clobber user files (#624) Don't install plugins that would overwrite existing user files, stop and tell the user to deal with it. Close #624. --- fisher.fish | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/fisher.fish b/fisher.fish index c951129..1c74604 100644 --- a/fisher.fish +++ b/fisher.fish @@ -145,13 +145,28 @@ function fisher --argument-names cmd --description "A plugin manager for Fish" for plugin in $update_plugins $install_plugins set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)] set --local files $source/{functions,conf.d,completions}/* - set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files - set --query files[1] && set --universal $plugin_files_var (string replace -- $source $fisher_path $files) - for file in (string replace -- $source "" $files) + if set --local index (contains --index -- $plugin $install_plugins) + set --local user_files $fisher_path/{functions,conf.d,completions}/* + set --local conflict_files + + for file in (string replace -- $source/ $fisher_path/ $files) + contains -- $file $user_files && set --append conflict_files $file + end + + if set --query conflict_files[1] && set --erase install_plugins[$index] + echo -es "fisher: Cannot install \"$plugin\": please remove or move conflicting files elsewhere:\x1b[22m" \n" "$conflict_files >&2 + continue + end + end + + for file in (string replace -- $source/ "" $files) command cp -Rf $source/$file $fisher_path/$file end + set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files + set --query files[1] && set --universal $plugin_files_var (string replace -- $source $fisher_path $files) + contains -- $plugin $_fisher_plugins || set --universal --append _fisher_plugins $plugin contains -- $plugin $install_plugins && set --local event install || set --local event update echo -es "Installing \x1b[1m$plugin\x1b[22m" \n" "$$plugin_files_var