Fix: Replace slow custom trash implementation with native trashItemAtURL: API#2779
Closed
delacrixmorgan wants to merge 1 commit into
Closed
Fix: Replace slow custom trash implementation with native trashItemAtURL: API#2779delacrixmorgan wants to merge 1 commit into
trashItemAtURL: API#2779delacrixmorgan wants to merge 1 commit into
Conversation
Collaborator
|
Was there a reason you didn't want to integrate this change, seemed decent. |
Contributor
Author
|
It broke the Undo and Redo function with my changes, let me test more. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Discarding working directory changes in GitUp causes a noticeable lag before files are removed from the list. The
moveItemAtPathToTrash:method inGCFoundation.mused a custom implementation that:NSSearchPathForDirectoriesInDomainsmoveItemAtPath:toPath:for each fileThis approach is slow because:
whileloop checks for existing files in Trash one-by-one usingfileExistsAtPath:— O(n) per conflictmoveItemAtPath:toPath:across volumes (e.g., external drives) has no optimizationSolution
Replaced the 14-line custom implementation with Apple's native
NSFileManagerAPI:trashItemAtURL:resultingItemURL:error:(available since macOS 10.8) is Apple's optimized system API that:.Trashesfolder when appropriate)