diff --git a/src/tracked_files.rs b/src/tracked_files.rs index cbbcba9..ee83e24 100644 --- a/src/tracked_files.rs +++ b/src/tracked_files.rs @@ -6,7 +6,7 @@ use std::{ pub(crate) fn find_tracked_files(base_path: &Path) -> Option> { let output = Command::new("git") - .args(["ls-files", "--full-name", "-z", "--", "."]) + .args(["ls-files", "-z", "--", "."]) .current_dir(base_path) .output() .ok()?; @@ -55,4 +55,32 @@ mod tests { assert!(tracked.len() == 1); assert!(tracked.get(&tmp_dir.path().join("test.txt")).unwrap()); } + + #[test] + fn test_tracked_files_from_subdirectory() { + let tmp_dir = tempfile::tempdir().unwrap(); + let backend_dir = tmp_dir.path().join("backend"); + let tracked_file = backend_dir.join("app/models/foo.rb"); + + std::process::Command::new("git") + .arg("init") + .current_dir(tmp_dir.path()) + .output() + .expect("failed to run git init"); + + std::fs::create_dir_all(tracked_file.parent().unwrap()).unwrap(); + std::fs::write(&tracked_file, "class Foo; end").unwrap(); + std::fs::write(tmp_dir.path().join("README.md"), "readme").unwrap(); + + std::process::Command::new("git") + .args(["add", "--all"]) + .current_dir(tmp_dir.path()) + .output() + .expect("failed to add tracked files"); + + let tracked = find_tracked_files(&backend_dir).unwrap(); + assert_eq!(tracked.len(), 1); + assert!(tracked.get(&tracked_file).unwrap()); + assert!(!tracked.contains_key(&backend_dir.join("backend/app/models/foo.rb"))); + } }