Skip to content

Fix Linux watcher cleanup for recreated directories - #50412

Merged
probably-neb merged 1 commit into
zed-industries:mainfrom
Chriss4123:fix/linux-watcher-path-reuse-46709
Mar 3, 2026
Merged

Fix Linux watcher cleanup for recreated directories#50412
probably-neb merged 1 commit into
zed-industries:mainfrom
Chriss4123:fix/linux-watcher-path-reuse-46709

Conversation

@Chriss4123

Copy link
Copy Markdown
Contributor

Problem

  • On Linux, non-recursive watcher registrations remained path-cached after deleting and recreating a directory in the same session.
  • The recreated directory was not re-watched, so newly created child entries under that path could be missing.

Summary

  • Remove directory watcher registrations when worktree paths are removed from snapshot state.
  • Ensure recreated directories can be watched again on Linux by allowing scan_dir to re-add fresh watches.
  • Add a Linux integration regression test for directory delete/recreate path reuse and child file creation.

Testing

  • cargo test -p project --features test-support --test integration test_recreated_directory_receives_child_events -- --exact
  • cargo test -p project --features test-support --test integration test_rescan_and_remote_updates -- --exact

Related

Release Notes:

  • Fixed Linux worktree file watching so child entries appear after deleting and recreating a directory at the same path.

@cla-bot cla-bot Bot added the cla-signed The user has signed the Contributor License Agreement label Feb 28, 2026
@zed-community-bot zed-community-bot Bot added the first contribution the author's first pull request to Zed. NOTE: the label application is automated via github actions label Feb 28, 2026
@Chriss4123

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Delightful!

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@probably-neb
probably-neb merged commit c19cc4c into zed-industries:main Mar 3, 2026
38 checks passed
@probably-neb

Copy link
Copy Markdown
Collaborator

Thanks for fixing this @Chriss4123! Although there were 4 separate PRs to fix this issue, I found your solution the simplest. Nice work!

@Chriss4123
Chriss4123 deleted the fix/linux-watcher-path-reuse-46709 branch March 3, 2026 17:40
tahayvr pushed a commit to tahayvr/zed that referenced this pull request Mar 4, 2026
…0412)

## Problem
- On Linux, non-recursive watcher registrations remained path-cached
after deleting and recreating a directory in the same session.
- The recreated directory was not re-watched, so newly created child
entries under that path could be missing.

## Summary
- Remove directory watcher registrations when worktree paths are removed
from snapshot state.
- Ensure recreated directories can be watched again on Linux by allowing
`scan_dir` to re-add fresh watches.
- Add a Linux integration regression test for directory delete/recreate
path reuse and child file creation.

## Testing
- `cargo test -p project --features test-support --test integration
test_recreated_directory_receives_child_events -- --exact`
- `cargo test -p project --features test-support --test integration
test_rescan_and_remote_updates -- --exact`

## Related
- zed-industries#46709

Release Notes:

- Fixed Linux worktree file watching so child entries appear after
deleting and recreating a directory at the same path.
wzulfikar pushed a commit to wzulfikar/zed that referenced this pull request Mar 4, 2026
…0412)

## Problem
- On Linux, non-recursive watcher registrations remained path-cached
after deleting and recreating a directory in the same session.
- The recreated directory was not re-watched, so newly created child
entries under that path could be missing.

## Summary
- Remove directory watcher registrations when worktree paths are removed
from snapshot state.
- Ensure recreated directories can be watched again on Linux by allowing
`scan_dir` to re-add fresh watches.
- Add a Linux integration regression test for directory delete/recreate
path reuse and child file creation.

## Testing
- `cargo test -p project --features test-support --test integration
test_recreated_directory_receives_child_events -- --exact`
- `cargo test -p project --features test-support --test integration
test_rescan_and_remote_updates -- --exact`

## Related
- zed-industries#46709

Release Notes:

- Fixed Linux worktree file watching so child entries appear after
deleting and recreating a directory at the same path.
pull Bot pushed a commit to Superoldman96/zed that referenced this pull request Jun 16, 2026
…a `file_scan_exclusions` (zed-industries#57895)

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes zed-industries#57888 

Commit `c19cc4c51e0f64eec42168943050f2deeccaa076` introduced the bug on
zed-industries#50412 . This change modified the `remove_path` function to also remove
the path from the watcher:


https://github.com/zed-industries/zed/blob/f0341c96a17630e5dfb441701441945dbb2a605a/crates/worktree/src/worktree.rs#L3218-L3220

And when a user modified the global setting and doesn't include `.git`
in it, like:

```jsonc
// ~/.config/zed/settings.json
{
  "file_scan_exclusions": ["foo"]
}
```

But then includes it on their local project settings: 

```jsonc
// ~/my/local/project/.zed/settings.json
{
  "file_scan_exclusions": ["**/.git"]
}
```

It causes zed to stop watching for changes on `.git` 

Release Notes:

- Fixed bug where zed stopped watching change on `.git` directory if it
was added to the project local `file_scan_exclusions`
jonx pushed a commit to jonx/zed-aros that referenced this pull request Jul 17, 2026
…0412)

## Problem
- On Linux, non-recursive watcher registrations remained path-cached
after deleting and recreating a directory in the same session.
- The recreated directory was not re-watched, so newly created child
entries under that path could be missing.

## Summary
- Remove directory watcher registrations when worktree paths are removed
from snapshot state.
- Ensure recreated directories can be watched again on Linux by allowing
`scan_dir` to re-add fresh watches.
- Add a Linux integration regression test for directory delete/recreate
path reuse and child file creation.

## Testing
- `cargo test -p project --features test-support --test integration
test_recreated_directory_receives_child_events -- --exact`
- `cargo test -p project --features test-support --test integration
test_rescan_and_remote_updates -- --exact`

## Related
- zed-industries#46709

Release Notes:

- Fixed Linux worktree file watching so child entries appear after
deleting and recreating a directory at the same path.
jolutz pushed a commit to jolutz/zed that referenced this pull request Aug 8, 2026
…0412)

## Problem
- On Linux, non-recursive watcher registrations remained path-cached
after deleting and recreating a directory in the same session.
- The recreated directory was not re-watched, so newly created child
entries under that path could be missing.

## Summary
- Remove directory watcher registrations when worktree paths are removed
from snapshot state.
- Ensure recreated directories can be watched again on Linux by allowing
`scan_dir` to re-add fresh watches.
- Add a Linux integration regression test for directory delete/recreate
path reuse and child file creation.

## Testing
- `cargo test -p project --features test-support --test integration
test_recreated_directory_receives_child_events -- --exact`
- `cargo test -p project --features test-support --test integration
test_rescan_and_remote_updates -- --exact`

## Related
- zed-industries#46709

Release Notes:

- Fixed Linux worktree file watching so child entries appear after
deleting and recreating a directory at the same path.
jolutz pushed a commit to jolutz/zed that referenced this pull request Aug 8, 2026
…a `file_scan_exclusions` (zed-industries#57895)

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Closes zed-industries#57888 

Commit `1c7166dccc0ce3c5bee06e61c40813c0bd33173a` introduced the bug on
zed-industries#50412 . This change modified the `remove_path` function to also remove
the path from the watcher:


https://github.com/zed-industries/zed/blob/9d532abd422e5e00ba7bb48ffbcb343ae0bf2be2/crates/worktree/src/worktree.rs#L3218-L3220

And when a user modified the global setting and doesn't include `.git`
in it, like:

```jsonc
// ~/.config/zed/settings.json
{
  "file_scan_exclusions": ["foo"]
}
```

But then includes it on their local project settings: 

```jsonc
// ~/my/local/project/.zed/settings.json
{
  "file_scan_exclusions": ["**/.git"]
}
```

It causes zed to stop watching for changes on `.git` 

Release Notes:

- Fixed bug where zed stopped watching change on `.git` directory if it
was added to the project local `file_scan_exclusions`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed The user has signed the Contributor License Agreement first contribution the author's first pull request to Zed. NOTE: the label application is automated via github actions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants