in Sources/TSCBasic/FileSystem.swift [630:658]
func getNodeInternal(_ path: AbsolutePath) throws -> Node? {
// If this is the root node, return it.
if path.isRoot {
return root
}
// Otherwise, get the parent node.
guard let parent = try getNodeInternal(path.parentDirectory) else {
return nil
}
// If we didn't find a directory, this is an error.
guard case .directory(let contents) = parent.contents else {
throw FileSystemError(.notDirectory, path.parentDirectory)
}
// Return the directory entry.
let node = contents.entries[path.basename]
switch node?.contents {
case .directory, .file:
return node
case .symlink(let destination):
let destination = AbsolutePath(destination, relativeTo: path.parentDirectory)
return followSymlink ? try getNodeInternal(destination) : node
case .none:
return nil
}
}