mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-25 07:06:12 +00:00
feat: optimize name handling for leaf scripts with invalid names
Prefer slugified filenames + adjacent meta files for scripts without children instead of forcing directory creation
This commit is contained in:
@@ -7,8 +7,7 @@ Writing default.project.json
|
|||||||
Writing src/Camera.rbxm
|
Writing src/Camera.rbxm
|
||||||
Writing src/Terrain.rbxm
|
Writing src/Terrain.rbxm
|
||||||
Writing src/_Folder/init.meta.json
|
Writing src/_Folder/init.meta.json
|
||||||
Writing src/_Script/init.meta.json
|
Writing src/_Script.meta.json
|
||||||
Writing src/_Script/init.server.luau
|
Writing src/_Script.server.luau
|
||||||
Writing src
|
Writing src
|
||||||
Writing src/_Folder
|
Writing src/_Folder
|
||||||
Writing src/_Script
|
|
||||||
|
|||||||
@@ -360,16 +360,25 @@ pub fn get_best_middleware(snapshot: &SyncbackSnapshot) -> Middleware {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the instance name is invalid for the filesystem, use directory middleware
|
// If the name is invalid but the instance has no descendants and isn't a
|
||||||
// to allow preserving the name in meta.json
|
// folder/config/tool, prefer slugified files over creating a directory.
|
||||||
|
// Only promote to directory when there are children (or dir-like classes).
|
||||||
if crate::syncback::file_names::validate_file_name(&inst.name).is_err() {
|
if crate::syncback::file_names::validate_file_name(&inst.name).is_err() {
|
||||||
middleware = match middleware {
|
middleware = match middleware {
|
||||||
Middleware::ServerScript => Middleware::ServerScriptDir,
|
Middleware::ServerScript | Middleware::ClientScript | Middleware::ModuleScript
|
||||||
Middleware::ClientScript => Middleware::ClientScriptDir,
|
if inst.children().is_empty() =>
|
||||||
Middleware::ModuleScript => Middleware::ModuleScriptDir,
|
{
|
||||||
Middleware::Csv => Middleware::CsvDir,
|
middleware
|
||||||
Middleware::JsonModel | Middleware::Text => Middleware::Dir,
|
}
|
||||||
_ => middleware,
|
Middleware::JsonModel | Middleware::Text if inst.children().is_empty() => middleware,
|
||||||
|
_ => match middleware {
|
||||||
|
Middleware::ServerScript => Middleware::ServerScriptDir,
|
||||||
|
Middleware::ClientScript => Middleware::ClientScriptDir,
|
||||||
|
Middleware::ModuleScript => Middleware::ModuleScriptDir,
|
||||||
|
Middleware::Csv => Middleware::CsvDir,
|
||||||
|
Middleware::JsonModel | Middleware::Text => Middleware::Dir,
|
||||||
|
_ => middleware,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,8 +87,8 @@ syncback_tests! {
|
|||||||
// Ensures that the `syncUnscriptable` setting works
|
// Ensures that the `syncUnscriptable` setting works
|
||||||
unscriptable_properties => ["default.project.json"],
|
unscriptable_properties => ["default.project.json"],
|
||||||
// Ensures that instances with names containing illegal characters get slugified filenames
|
// Ensures that instances with names containing illegal characters get slugified filenames
|
||||||
// and preserve their original names in meta.json
|
// and preserve their original names in meta.json without forcing directories for leaf scripts
|
||||||
slugified_name => ["src/_Script/init.meta.json", "src/_Script/init.server.luau", "src/_Folder/init.meta.json"],
|
slugified_name => ["src/_Script.meta.json", "src/_Script.server.luau", "src/_Folder/init.meta.json"],
|
||||||
// Ensures that .model.json files preserve the name property
|
// Ensures that .model.json files preserve the name property
|
||||||
model_json_name => ["src/foo.model.json"],
|
model_json_name => ["src/foo.model.json"],
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user