bevy/crates/bevy_asset/src/io
Ian Forsey 14042b1e34
Normalise root path in file_watcher (#12102)
# Objective

- I hit an issue using the `file_watcher` feature to hot reload assets
for my game. The change in this PR allows me to now hot reload assets.
- The issue stemmed from my project being a multi crate workspace
project structured like so:
```
└── my_game
    ├── my_game_core
    │   ├── src
    │   └── assets
    ├── my_game_editor
    │   └── src/main.rs
    └── my_game
        └── src/main.rs
```

 - `my_game_core` is a crate that holds all my game logic and assets
- `my_game` is the crate that creates the binary for my game (depends on
the game logic and assets in `my_game_core`)
- `my_game_editor` is an editor tool for my game (it also depends on the
game logic and assets in `my_game_core`)

Whilst running `my_game` and `my_game_editor` from cargo during
development I would use `AssetPlugin` like so:

```rust
default_plugins.set(AssetPlugin {
  watch_for_changes_override: Some(true),
  file_path: "../my_game_core/assets".to_string(),
  ..Default::default()
})
```

This works fine; bevy picks up the assets. However on saving an asset I
would get the following panic from `file_watcher`. It wouldn't kill the
app, but I wouldn't see the asset hot reload:

```
thread 'notify-rs debouncer loop' panicked at /Users/ian/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_asset-0.12.1/src/io/file/file_watcher.rs:48:58:
called `Result::unwrap()` on an `Err` value: StripPrefixError(())
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```

## Solution

- The solution is to collapse dot segments in the root asset path
`FileWatcher` is using
- There was already bevy code to do this in `AssetPath`, so I extracted
that code so it could be reused in `FileWatcher`
2024-02-25 15:21:06 +00:00
..
embedded Fix example docs on embedded_asset macro (#12003) 2024-02-20 16:13:30 +00:00
file Normalise root path in file_watcher (#12102) 2024-02-25 15:21:06 +00:00
android.rs Update winit dependency to 0.29 (#10702) 2023-12-21 07:40:47 +00:00
gated.rs Remove unnecessary path prefixes (#10749) 2023-11-28 23:43:40 +00:00
memory.rs Remove unnecessary path prefixes (#10749) 2023-11-28 23:43:40 +00:00
mod.rs Added Support for Extension-less Assets (#10153) 2024-01-31 14:58:08 +00:00
processor_gated.rs Remove unnecessary path prefixes (#10749) 2023-11-28 23:43:40 +00:00
source.rs Improve file watcher error msg (#12060) 2024-02-23 17:39:33 +00:00
wasm.rs Added AssetLoadFailedEvent, UntypedAssetLoadFailedEvent (#11369) 2024-01-17 21:12:00 +00:00