From 265fbd4f9345eb1ef0a8d118a9e9ab2a7709501b Mon Sep 17 00:00:00 2001 From: whonore Date: Tue, 23 Jun 2020 17:38:34 -0400 Subject: [PATCH] Report when PlugClean fails to remove a directory --- plug.vim | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/plug.vim b/plug.vim index 8332537..3a5f2b1 100644 --- a/plug.vim +++ b/plug.vim @@ -2271,7 +2271,7 @@ endfunction function! s:rm_rf(dir) if isdirectory(a:dir) - call s:system(s:is_win + return s:system(s:is_win \ ? 'rmdir /S /Q '.plug#shellescape(a:dir) \ : ['rm', '-rf', a:dir]) endif @@ -2355,6 +2355,7 @@ endfunction function! s:delete(range, force) let [l1, l2] = a:range let force = a:force + let err_count = 0 while l1 <= l2 let line = getline(l1) if line =~ '^- ' && isdirectory(line[2:]) @@ -2363,11 +2364,22 @@ function! s:delete(range, force) let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1) let force = force || answer > 1 if answer - call s:rm_rf(line[2:]) + let err = s:rm_rf(line[2:]) setlocal modifiable - call setline(l1, '~'.line[1:]) - let s:clean_count += 1 - call setline(4, printf('Removed %d directories.', s:clean_count)) + if empty(err) + call setline(l1, '~'.line[1:]) + let s:clean_count += 1 + let msg = printf('Removed %d directories.', s:clean_count) + if err_count > 0 + msg .= printf('Failed to remove %d directories.', err_count) + endif + call setline(4, msg) + else + delete + call append(l1 - 1, s:format_message('x', line[1:], err)) + let l2 += len(s:lines(err)) + let err_count += 1 + endif setlocal nomodifiable endif endif