-
Notifications
You must be signed in to change notification settings - Fork 400
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: will watch same folder multiple times #3831
Conversation
Walkthrough此更新改进了 Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant FileSystemWatcherServer
participant FileUri
participant fs
Client->>FileSystemWatcherServer: watchFileChanges(uri, options)
FileSystemWatcherServer->>FileUri: fsPath(uri)
FileUri-->>FileSystemWatcherServer: basePath
FileSystemWatcherServer->>fs: pathExists(basePath)
fs-->>FileSystemWatcherServer: exist
alt exist
FileSystemWatcherServer->>Client: watcherId
FileSystemWatcherServer->>WATCHER_HANDLERS: set(watcherId, handler)
else exist not
FileSystemWatcherServer->>Client: Error
end
Tip AI model upgrade
|
🚅 Previously deployed to Railway in the core project. Environment has been deleted. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (1)
- packages/file-service/src/node/recursive/file-service-watcher.ts (3 hunks)
Additional comments not posted (6)
packages/file-service/src/node/recursive/file-service-watcher.ts (6)
31-37
: 引入watcherPlaceHolder
常量对象。这个对象用于在路径被异步检查期间临时占位,防止重复监听相同路径。
106-107
: 使用watcherPlaceHolder
占位。在路径异步检查期间使用
watcherPlaceHolder
占位,防止重复监听相同路径。
109-111
: 异步检查路径是否存在。使用
fs.pathExists
和fs.lstat
进行异步检查,提高性能并避免阻塞。
130-139
: 使用switch-case处理事件。将事件处理逻辑整合到switch-case块中,提高代码的可读性和可维护性。
Line range hint
190-191
: 增强start
方法的鲁棒性。通过处理异步操作和重试机制,增强文件监视的鲁棒性。
Line range hint
334-339
: 优化handleNSFWEvents
方法。通过过滤和合并事件,提高事件处理的效率,特别是在大量事件的场景下。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (1)
- packages/file-service/src/node/recursive/file-service-watcher.ts (3 hunks)
Additional comments not posted (4)
packages/file-service/src/node/recursive/file-service-watcher.ts (4)
31-36
: 确保占位符watcherPlaceHolder
的定义符合预期。占位符
watcherPlaceHolder
定义了一个包含disposable
和handlers
的对象。请确保这些属性在使用时符合预期。
105-108
: 将watcherPlaceHolder
用作初始值。在这里将
watcherPlaceHolder
作为初始值传递给WATCHER_HANDLERS
。这确保了每个新的观察者都有一个初始的disposable
和handlers
。
111-112
: 定义watchPath
变量。定义了
watchPath
变量,用于存储实际的观察路径。确保在后续代码中正确使用该变量。
132-141
: 处理文件变化事件。根据事件类型(创建、删除、更新)调用相应的处理函数。确保这些处理函数能够正确处理事件。
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #3831 +/- ##
==========================================
- Coverage 55.05% 55.04% -0.02%
==========================================
Files 1553 1553
Lines 94640 94650 +10
Branches 19368 19378 +10
==========================================
- Hits 52108 52101 -7
- Misses 35334 35349 +15
- Partials 7198 7200 +2
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
Types
Background or solution
之前的逻辑有判断要 watch 的路径是否已经被 watch 了,但是因为 async await 的原因,前端同时请求过来三四个一样的路径,后端会同时 watch 这些路径。
Changelog
fix file service will watch same folder multiple times
Summary by CodeRabbit