From 7302e7c9e0175adc73a37c345b27e86aa56bc582 Mon Sep 17 00:00:00 2001 From: Niklas Eicker Date: Wed, 1 Jan 2025 01:42:56 +0100 Subject: [PATCH] Do not lowercase asset file extensions (#17065) # Objective Resolves #17064 ## Solution - Bevy no longer converts asset file extensions to lowercase before trying to resolve an asset loader ## Testing - I adapted the `custom_asset` example (see comment in #17064) - The changes were tested on Linux As far as I know, Windows has a case-insensitive file system by default, so case-sensitive asset file extensions are probably bad practice in a game. But we should be case-sensitive everywhere or handle asset paths completely case-insensitive. Before this PR: * asset loader extensions are case-sensitive * asset file names are case-sensitive * asset file extensions are converted to lowercase :zap: Now everything should be case-sensitive --- crates/bevy_asset/src/path.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/bevy_asset/src/path.rs b/crates/bevy_asset/src/path.rs index 3bbb643650..c88e624635 100644 --- a/crates/bevy_asset/src/path.rs +++ b/crates/bevy_asset/src/path.rs @@ -454,7 +454,7 @@ impl<'a> AssetPath<'a> { pub fn get_full_extension(&self) -> Option { let file_name = self.path().file_name()?.to_str()?; let index = file_name.find('.')?; - let mut extension = file_name[index + 1..].to_lowercase(); + let mut extension = file_name[index + 1..].to_owned(); // Strip off any query parameters let query = extension.find('?'); @@ -972,5 +972,8 @@ mod tests { let result = AssetPath::from("http://a.tar.bz2?foo=bar#Baz"); assert_eq!(result.get_full_extension(), Some("tar.bz2".to_string())); + + let result = AssetPath::from("asset.Custom"); + assert_eq!(result.get_full_extension(), Some("Custom".to_string())); } }