Fix detection of when refreshed paths are outside of worktree root
This commit is contained in:
parent
205c758e4e
commit
6fe74602ac
1 changed files with 15 additions and 3 deletions
|
@ -3338,7 +3338,19 @@ impl BackgroundScanner {
|
||||||
let metadata = futures::future::join_all(
|
let metadata = futures::future::join_all(
|
||||||
abs_paths
|
abs_paths
|
||||||
.iter()
|
.iter()
|
||||||
.map(|abs_path| self.fs.metadata(&abs_path))
|
.map(|abs_path| async move {
|
||||||
|
let metadata = self.fs.metadata(&abs_path).await?;
|
||||||
|
anyhow::Ok(if let Some(metadata) = metadata {
|
||||||
|
let canonical_path = if metadata.is_symlink {
|
||||||
|
self.fs.canonicalize(&abs_path).await?
|
||||||
|
} else {
|
||||||
|
abs_path.clone()
|
||||||
|
};
|
||||||
|
Some((metadata, canonical_path))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
})
|
||||||
|
})
|
||||||
.collect::<Vec<_>>(),
|
.collect::<Vec<_>>(),
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
@ -3376,7 +3388,7 @@ impl BackgroundScanner {
|
||||||
let abs_path: Arc<Path> = root_abs_path.join(&path).into();
|
let abs_path: Arc<Path> = root_abs_path.join(&path).into();
|
||||||
|
|
||||||
match metadata {
|
match metadata {
|
||||||
Ok(Some(metadata)) => {
|
Ok(Some((metadata, canonical_path))) => {
|
||||||
let ignore_stack = state
|
let ignore_stack = state
|
||||||
.snapshot
|
.snapshot
|
||||||
.ignore_stack_for_abs_path(&abs_path, metadata.is_dir);
|
.ignore_stack_for_abs_path(&abs_path, metadata.is_dir);
|
||||||
|
@ -3411,7 +3423,7 @@ impl BackgroundScanner {
|
||||||
if let Some(scan_queue_tx) = &scan_queue_tx {
|
if let Some(scan_queue_tx) = &scan_queue_tx {
|
||||||
let mut ancestor_inodes = state.snapshot.ancestor_inodes_for_path(&path);
|
let mut ancestor_inodes = state.snapshot.ancestor_inodes_for_path(&path);
|
||||||
if metadata.is_dir && !ancestor_inodes.contains(&metadata.inode) {
|
if metadata.is_dir && !ancestor_inodes.contains(&metadata.inode) {
|
||||||
let is_outside_root = !abs_path.starts_with(&root_canonical_path);
|
let is_outside_root = !canonical_path.starts_with(&root_canonical_path);
|
||||||
ancestor_inodes.insert(metadata.inode);
|
ancestor_inodes.insert(metadata.inode);
|
||||||
smol::block_on(scan_queue_tx.send(ScanJob {
|
smol::block_on(scan_queue_tx.send(ScanJob {
|
||||||
abs_path,
|
abs_path,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue