Harden auth/vault path sanitization and clean WeKnora docs
This commit is contained in:
@@ -297,6 +297,26 @@ impl BufferStore {
|
||||
}
|
||||
}
|
||||
|
||||
/// 本地文件 restore 后清除已打开 Markdown buffer 的 deleted 标记。
|
||||
pub fn clear_local_folder_markdown_deleted(
|
||||
&self,
|
||||
workspace_id: &str,
|
||||
root_uri: &str,
|
||||
relative_path: &str,
|
||||
document_id: &str,
|
||||
) -> Option<DocumentBuffer> {
|
||||
let path =
|
||||
build_local_folder_workspace_path(workspace_id, root_uri, relative_path, document_id);
|
||||
let key = BufferKey::from_workspace_path(&path);
|
||||
let mut inner = self.inner.write().expect("BufferStore lock");
|
||||
if let Some(buf) = inner.buffers.get_mut(&key) {
|
||||
buf.clear_deleted();
|
||||
Some(buf.clone())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
/// 获取或创建 buffer 时设置 file_version 和 base_content_hash(从 aggregate 加载后调用)。
|
||||
pub fn init_buffer(
|
||||
&self,
|
||||
@@ -738,5 +758,15 @@ mod tests {
|
||||
.expect("buffer should be marked deleted");
|
||||
|
||||
assert_eq!(deleted.dirty_state, DocBufferDirtyState::Deleted);
|
||||
|
||||
let restored = store
|
||||
.clear_local_folder_markdown_deleted(
|
||||
"local:test",
|
||||
root_uri,
|
||||
"docs/Delete.md",
|
||||
"local-md:docs~2FDelete.md",
|
||||
)
|
||||
.expect("buffer should clear deleted after restore");
|
||||
assert_eq!(restored.dirty_state, DocBufferDirtyState::Clean);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user