@@ -5,6 +5,7 @@ _ = require 'underscore-plus'
5
5
{BufferedProcess , CompositeDisposable , Emitter } = require ' atom'
6
6
{repoForPath , getStyleObject , getFullExtension } = require " ./helpers"
7
7
fs = require ' fs-plus'
8
+ del = require ' del'
8
9
9
10
AddDialog = require ' ./add-dialog'
10
11
MoveDialog = require ' ./move-dialog'
@@ -649,25 +650,42 @@ class TreeView
649
650
if shell .moveItemToTrash (selectedPath, shouldDeletePermanently)
650
651
@emitter .emit ' entry-deleted' , {pathToDelete : selectedPath}
651
652
else
652
- @emitter .emit ' delete-entry-failed' , {pathToDelete : selectedPath}
653
+ if not shouldDeletePermanently
654
+ @emitter .emit ' delete-entry-failed' , {pathToDelete : selectedPath}
653
655
failedDeletions .push selectedPath
654
656
655
657
if repo = repoForPath (selectedPath)
656
658
repo .getPathStatus (selectedPath)
657
659
658
660
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
663
680
664
- finishRemoval (selectedEntries[0 ])
681
+ if not shouldDeletePermanently
682
+ @ finishRemoval (selectedEntries[0 ])
665
683
)
666
684
667
- formatTrashFailureMessage : (failedDeletions ) ->
685
+ formatTrashFailureMessage : (failedDeletions , shouldDeletePermanently = false ) ->
668
686
fileText = if failedDeletions .length > 1 then ' files' else ' file'
669
687
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." } "
671
689
672
690
formatTrashEnabledMessage : ->
673
691
switch process .platform
0 commit comments