@@ -5,6 +5,7 @@ _ = require 'underscore-plus'
55{BufferedProcess , CompositeDisposable , Emitter } = require ' atom'
66{repoForPath , getStyleObject , getFullExtension } = require " ./helpers"
77fs = require ' fs-plus'
8+ del = require ' del'
89
910AddDialog = require ' ./add-dialog'
1011MoveDialog = require ' ./move-dialog'
@@ -649,25 +650,42 @@ class TreeView
649650 if shell .moveItemToTrash (selectedPath, shouldDeletePermanently)
650651 @emitter .emit ' entry-deleted' , {pathToDelete : selectedPath}
651652 else
652- @emitter .emit ' delete-entry-failed' , {pathToDelete : selectedPath}
653+ if not shouldDeletePermanently
654+ @emitter .emit ' delete-entry-failed' , {pathToDelete : selectedPath}
653655 failedDeletions .push selectedPath
654656
655657 if repo = repoForPath (selectedPath)
656658 repo .getPathStatus (selectedPath)
657659
658660 if failedDeletions .length > 0
659- atom .notifications .addError @ formatTrashFailureMessage (failedDeletions),
660- description : @ formatTrashEnabledMessage ()
661- detail : " #{ failedDeletions .join (' \n ' )} "
662- dismissable : true
661+ if shouldDeletePermanently
662+ del (selectedPaths, {force : true })
663+ .then ( deletedPaths ->
664+ for deletedPath in deletedPaths
665+ @emitter .emit ' entry-deleted' , {pathToDelete : deletedPath}
666+ )
667+ .catch (err ->
668+ atom .notifications .addError @ formatTrashFailureMessage (failedDeletions, true ),
669+ description : err
670+ dismissable : true
671+ for selectedPath in selectedPaths
672+ @emitter .emit ' delete-entry-failed' , {pathToDelete : selectedPath}
673+ )
674+ .finally ( -> finishRemoval (selectedEntries[0 ]))
675+ else
676+ atom .notifications .addError @ formatTrashFailureMessage (failedDeletions, false ),
677+ description : @ formatTrashEnabledMessage ()
678+ detail : " #{ failedDeletions .join (' \n ' )} "
679+ dismissable : true
663680
664- finishRemoval (selectedEntries[0 ])
681+ if not shouldDeletePermanently
682+ finishRemoval (selectedEntries[0 ])
665683 )
666684
667- formatTrashFailureMessage : (failedDeletions ) ->
685+ formatTrashFailureMessage : (failedDeletions , shouldDeletePermanently = false ) ->
668686 fileText = if failedDeletions .length > 1 then ' files' else ' file'
669687
670- " The following #{ fileText} couldn't be moved to the trash."
688+ " The following #{ fileText} couldn't be #{ if shouldDeletePermanently then " deleted permanently " else " moved to the trash." } "
671689
672690 formatTrashEnabledMessage : ->
673691 switch process .platform
0 commit comments