Watch directories moved into the tree and report their content
Automatic subtree watching only reacted to `CREATE`, so a directory moved in from elsewhere stayed unwatched. It is now handled like a created one. Items that already exist in such a directory never produce kernel events; they are reported with the same event kind and `synthesized` set to `true`, so consumers can treat them as newly appeared.
This commit is contained in:
@@ -23,6 +23,19 @@ public struct DirectoryResolver {
|
||||
return resolved
|
||||
}
|
||||
|
||||
/// The direct children of `directory`, without the excluded names.
|
||||
static func entries(of directory: FilePath, excluding itemNames: Set<String> = []) async throws -> [(name: String, isDirectory: Bool)] {
|
||||
let directoryHandle = try await fileManager.openDirectory(atPath: directory)
|
||||
var entries: [(name: String, isDirectory: Bool)] = []
|
||||
for try await childContent in directoryHandle.listContents() {
|
||||
guard let name = childContent.path.lastComponent?.string else { continue }
|
||||
guard !itemNames.contains(name) else { continue }
|
||||
entries.append((name: name, isDirectory: childContent.type == .directory))
|
||||
}
|
||||
try await directoryHandle.close()
|
||||
return entries
|
||||
}
|
||||
|
||||
private static func withSubdirectories(at path: FilePath, recursive: Bool = false, body: (FilePath) async throws -> Void) async throws {
|
||||
let directoryHandle = try await fileManager.openDirectory(atPath: path)
|
||||
for try await childContent in directoryHandle.listContents() {
|
||||
|
||||
Reference in New Issue
Block a user