From 5215b6ffab916481ac79d7c72d8fbf758cf6d6d4 Mon Sep 17 00:00:00 2001 From: "Joey@macstudio" Date: Sat, 11 Jul 2026 21:31:07 +0800 Subject: [PATCH] fix: ignore hidden include files --- data/include/.DS_Store | 1 + src/main.rs | 3 ++- tests/test.rs | 23 +++++++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 data/include/.DS_Store diff --git a/data/include/.DS_Store b/data/include/.DS_Store new file mode 100644 index 0000000..cf88343 --- /dev/null +++ b/data/include/.DS_Store @@ -0,0 +1 @@ +{% invalid %} diff --git a/src/main.rs b/src/main.rs index 9040a14..c19b562 100644 --- a/src/main.rs +++ b/src/main.rs @@ -58,7 +58,8 @@ fn main() -> Result<()> { let dir = if path.is_file() { path.parent().context("failed to get parent directory")?.to_path_buf() } else { path }; - let glob = dir.join("**").join("*"); + // Ignore hidden files such as .DS_Store. + let glob = dir.join("**").join("[!.]*"); Tera::new(glob.to_str().context("invalid UTF8 string")?)? } else { diff --git a/tests/test.rs b/tests/test.rs index a35ebb0..9eb6587 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -65,6 +65,29 @@ mod cli_tests { } } + #[cfg(test)] + mod include { + use assert_cmd::Command; + use predicates::prelude::*; + + #[test] + fn it_ignores_hidden_files() { + let mut cmd = Command::cargo_bin("tera").unwrap(); + let assert = cmd + .arg("--template") + .arg("data/include/hello.txt") + .arg("--include-path") + .arg("data/include") + .arg("--env-only") + .env("USER", "Tester") + .assert(); + assert + .success() + .stdout(predicate::str::contains("Hello Tester")) + .stdout(predicate::str::contains("This is the world template")); + } + } + #[cfg(test)] mod stdin { use std::fs;