diff --git a/rojo-test/build-test-snapshots/end_to_end__tests__build__init_from_path.snap b/rojo-test/build-test-snapshots/end_to_end__tests__build__init_from_path.snap new file mode 100644 index 00000000..7f446250 --- /dev/null +++ b/rojo-test/build-test-snapshots/end_to_end__tests__build__init_from_path.snap @@ -0,0 +1,18 @@ +--- +source: tests/tests/build.rs +expression: contents +--- + + + + init_from_path + + + + folder + + + + + diff --git a/src/snapshot_middleware/dir.rs b/src/snapshot_middleware/dir.rs index b9f62743..2ff0b6bf 100644 --- a/src/snapshot_middleware/dir.rs +++ b/src/snapshot_middleware/dir.rs @@ -51,7 +51,7 @@ pub fn snapshot_dir_no_meta( for entry in vfs.read_dir(path)? { let entry = entry?; - if !passes_filter_rules(&entry) { + if !passes_filter_rules(&entry) || is_init_file(entry.path()).unwrap() { continue; } @@ -221,6 +221,21 @@ pub fn syncback_dir_no_meta<'sync>( }) } +fn is_init_file(path: &Path) -> anyhow::Result { + let file_name = path + .file_name() + .and_then(|n| n.to_str()) + .with_context(|| format!("file name of {} is invalid", path.display()))?; + + match file_name { + "init.server.luau" | "init.server.lua" | "init.client.luau" | "init.client.lua" + | "init.plugin.luau" | "init.plugin.lua" | "init.luau" | "init.lua" | "init.csv" => { + Ok(true) + } + _ => Ok(false), + } +} + #[cfg(test)] mod test { use super::*; diff --git a/src/snapshot_middleware/mod.rs b/src/snapshot_middleware/mod.rs index fadce5f6..b2c6faaf 100644 --- a/src/snapshot_middleware/mod.rs +++ b/src/snapshot_middleware/mod.rs @@ -72,32 +72,18 @@ pub fn snapshot_from_vfs( None => return Ok(None), }; - if meta.is_dir() { - let (middleware, dir_name, init_path) = get_dir_middleware(vfs, path)?; - // TODO: Support user defined init paths - // If and when we do, make sure to go support it in - // `Project::set_file_name`, as right now it special-cases - // `default.project.json` as an `init` path. - match middleware { - Middleware::Dir => middleware.snapshot(context, vfs, path, dir_name), - _ => middleware.snapshot(context, vfs, &init_path, dir_name), - } - } else { - let file_name = path - .file_name() - .and_then(|n| n.to_str()) - .with_context(|| format!("file name of {} is invalid", path.display()))?; + if !meta.is_dir() { + return snapshot_from_path(context, vfs, path); + } - // TODO: Is this even necessary anymore? - match file_name { - "init.server.luau" | "init.server.lua" | "init.client.luau" | "init.client.lua" - | "init.plugin.luau" | "init.plugin.lua" | "init.luau" | "init.lua" | "init.csv" => { - return Ok(None) - } - _ => {} - } - - snapshot_from_path(context, vfs, path) + let (middleware, dir_name, init_path) = get_dir_middleware(vfs, path)?; + // TODO: Support user defined init paths + // If and when we do, make sure to go support it in + // `Project::set_file_name`, as right now it special-cases + // `default.project.json` as an `init` path. + match middleware { + Middleware::Dir => middleware.snapshot(context, vfs, path, dir_name), + _ => middleware.snapshot(context, vfs, &init_path, dir_name), } }