Skip to content

Commit 7d5db51

Browse files
committed
Revert FS Stream Filtering Changes
1 parent a5e2510 commit 7d5db51

File tree

6 files changed

+14
-59
lines changed

6 files changed

+14
-59
lines changed

CodeEdit/Features/CEWorkspace/Models/CEWorkspaceFileManager+DirectoryEvents.swift

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,35 +9,24 @@ import Foundation
99

1010
/// This extension handles the file system events triggered by changes in the root folder.
1111
extension CEWorkspaceFileManager {
12-
struct ResolvedFSEvent: Hashable {
13-
let file: CEWorkspaceFile
14-
let eventType: FSEvent
15-
}
16-
1712
/// Called by `fsEventStream` when an event occurs.
1813
///
1914
/// This method may be called on a background thread, but all work done by this function will be queued on the main
2015
/// thread.
2116
/// - Parameter events: An array of events that occurred.
2217
func fileSystemEventReceived(events: [DirectoryEventStream.Event]) {
2318
DispatchQueue.main.async {
24-
var files: Set<ResolvedFSEvent> = []
19+
var files: Set<CEWorkspaceFile> = []
2520
for event in events {
2621
// Event returns file/folder that was changed, but in tree we need to update it's parent
27-
guard let eventFileUrl = URL(string: event.path, relativeTo: self.folderUrl) else {
28-
continue
29-
}
30-
let parentUrl = eventFileUrl.deletingLastPathComponent()
31-
guard let parentFileItem = self.flattenedFileItems[parentUrl.path] else {
22+
guard let parentUrl = URL(string: event.path, relativeTo: self.folderUrl)?.deletingLastPathComponent(),
23+
let parentFileItem = self.flattenedFileItems[parentUrl.path] else {
3224
continue
3325
}
3426

3527
switch event.eventType {
3628
case .changeInDirectory, .itemChangedOwner, .itemModified:
3729
continue
38-
// if let fileItem = self.flattenedFileItems[eventFileUrl.path] {
39-
// files.insert(ResolvedFSEvent(file: fileItem, eventType: event.eventType))
40-
// }
4130
case .rootChanged:
4231
// TODO: #1880 - Handle workspace root changing.
4332
continue
@@ -48,7 +37,7 @@ extension CEWorkspaceFileManager {
4837
// swiftlint:disable:next line_length
4938
self.logger.error("Failed to rebuild files for event: \(event.eventType.rawValue), path: \(event.path, privacy: .sensitive)")
5039
}
51-
files.insert(ResolvedFSEvent(file: parentFileItem, eventType: event.eventType))
40+
files.insert(parentFileItem)
5241
}
5342
}
5443
if !files.isEmpty {
@@ -192,17 +181,13 @@ extension CEWorkspaceFileManager {
192181
}
193182

194183
/// Notify observers that an update occurred in the watched files.
195-
func notifyObservers(updatedItems: Set<ResolvedFSEvent>) {
184+
func notifyObservers(updatedItems: Set<CEWorkspaceFile>) {
196185
observers.allObjects.reversed().forEach { delegate in
197186
guard let delegate = delegate as? CEWorkspaceFileManagerObserver else {
198187
observers.remove(delegate)
199188
return
200189
}
201-
let eventsFilter = delegate.fileManagerEventsFilter()
202-
let events = updatedItems.compactMap({ eventsFilter.contains($0.eventType) ? $0.file : nil })
203-
if !events.isEmpty {
204-
delegate.fileManagerUpdated(updatedItems: Set(events))
205-
}
190+
delegate.fileManagerUpdated(updatedItems: updatedItems)
206191
}
207192
}
208193

CodeEdit/Features/CEWorkspace/Models/CEWorkspaceFileManager+FileManagement.swift

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,7 @@ extension CEWorkspaceFileManager {
3838
)
3939

4040
try rebuildFiles(fromItem: file.isFolder ? file : file.parent ?? file)
41-
notifyObservers(updatedItems: [ResolvedFSEvent(
42-
file: file.isFolder ? file : file.parent ?? file,
43-
eventType: .itemCreated
44-
)])
41+
notifyObservers(updatedItems: [file.isFolder ? file : file.parent ?? file])
4542

4643
guard let newFolder = getFile(folderUrl.path(), createIfNotFound: true) else {
4744
throw FileManagerError.fileNotFound
@@ -106,10 +103,7 @@ extension CEWorkspaceFileManager {
106103
}
107104

108105
try rebuildFiles(fromItem: file.isFolder ? file : file.parent ?? file)
109-
notifyObservers(updatedItems: [ResolvedFSEvent(
110-
file: file.isFolder ? file : file.parent ?? file,
111-
eventType: .itemCreated
112-
)])
106+
notifyObservers(updatedItems: [file.isFolder ? file : file.parent ?? file])
113107

114108
// Create if not found here because this should be indexed if we're creating it.
115109
// It's not often a user makes a file and then doesn't use it.
@@ -290,13 +284,13 @@ extension CEWorkspaceFileManager {
290284

291285
if let parent = file.parent {
292286
try rebuildFiles(fromItem: parent)
293-
notifyObservers(updatedItems: [ResolvedFSEvent(file: parent, eventType: .changeInDirectory)])
287+
notifyObservers(updatedItems: [parent])
294288
}
295289

296290
// If we have the new parent file, let's rebuild that directory too
297291
if let newFileParent = getFile(newLocation.deletingLastPathComponent().path) {
298292
try rebuildFiles(fromItem: newFileParent)
299-
notifyObservers(updatedItems: [ResolvedFSEvent(file: newFileParent, eventType: .changeInDirectory)])
293+
notifyObservers(updatedItems: [newFileParent])
300294
}
301295

302296
return getFile(newLocation.absoluteURL.path)

CodeEdit/Features/CEWorkspace/Models/CEWorkspaceFileManager.swift

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,9 @@ import AppKit
1111
import OSLog
1212

1313
protocol CEWorkspaceFileManagerObserver: AnyObject {
14-
func fileManagerEventsFilter() -> Set<FSEvent>
1514
func fileManagerUpdated(updatedItems: Set<CEWorkspaceFile>)
1615
}
1716

18-
extension CEWorkspaceFileManagerObserver {
19-
func fileManagerEventsFilter() -> Set<FSEvent> {
20-
FSEvent.all()
21-
}
22-
}
23-
2417
/// This class is used to load, modify, and listen to files on a user's machine.
2518
///
2619
/// The workspace file manager provides an API for:

CodeEdit/Features/CEWorkspace/Models/DirectoryEventStream.swift

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,6 @@ enum FSEvent: String {
1616
case itemModified
1717
case itemRemoved
1818
case itemRenamed
19-
20-
static func all() -> Set<FSEvent> {
21-
[
22-
.changeInDirectory,
23-
.rootChanged,
24-
.itemChangedOwner,
25-
.itemCreated,
26-
.itemCloned,
27-
.itemModified,
28-
.itemRemoved,
29-
.itemRenamed
30-
]
31-
}
3219
}
3320

3421
/// Creates a stream of events using the File System Events API.

CodeEdit/Features/Editor/Models/Restoration/UndoManagerRegistration.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,6 @@ final class UndoManagerRegistration: ObservableObject {
4949
}
5050

5151
extension UndoManagerRegistration: CEWorkspaceFileManagerObserver {
52-
func fileManagerEventsFilter() -> Set<FSEvent> {
53-
[.itemModified, .itemRemoved]
54-
}
55-
5652
/// Managers need to be cleared when the following is true:
5753
/// - The file is not open in any editors
5854
/// - The file is updated externally

CodeEdit/Features/SourceControl/SourceControlManager+GitClient.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ extension SourceControlManager {
135135
return
136136
}
137137

138-
var updatedStatusFor: Set<CEWorkspaceFileManager.ResolvedFSEvent> = []
138+
var updatedStatusFor: Set<CEWorkspaceFile> = []
139139
// Refresh status of file manager files
140140
for changedFile in changedFiles {
141141
guard let file = fileManager.getFile(changedFile.ceFileKey) else {
@@ -144,13 +144,13 @@ extension SourceControlManager {
144144
if file.gitStatus != changedFile.anyStatus() {
145145
file.gitStatus = changedFile.anyStatus()
146146
}
147-
updatedStatusFor.insert(.init(file: file, eventType: .itemModified))
147+
updatedStatusFor.insert(file)
148148
}
149149

150150
for (_, file) in fileManager.flattenedFileItems
151-
where !updatedStatusFor.contains(.init(file: file, eventType: .itemModified)) && file.gitStatus != nil {
151+
where !updatedStatusFor.contains(file) && file.gitStatus != nil {
152152
file.gitStatus = nil
153-
updatedStatusFor.insert(.init(file: file, eventType: .itemModified))
153+
updatedStatusFor.insert(file)
154154
}
155155

156156
if updatedStatusFor.isEmpty {

0 commit comments

Comments
 (0)