@@ -6,7 +6,7 @@ use std::{
66
77pub ( crate ) fn find_tracked_files ( base_path : & Path ) -> Option < HashMap < PathBuf , bool > > {
88 let output = Command :: new ( "git" )
9- . args ( [ "ls-files" , "--full-name" , "- z", "--" , "." ] )
9+ . args ( [ "ls-files" , "-z" , "--" , "." ] )
1010 . current_dir ( base_path)
1111 . output ( )
1212 . ok ( ) ?;
@@ -55,4 +55,32 @@ mod tests {
5555 assert ! ( tracked. len( ) == 1 ) ;
5656 assert ! ( tracked. get( & tmp_dir. path( ) . join( "test.txt" ) ) . unwrap( ) ) ;
5757 }
58+
59+ #[ test]
60+ fn test_tracked_files_from_subdirectory ( ) {
61+ let tmp_dir = tempfile:: tempdir ( ) . unwrap ( ) ;
62+ let backend_dir = tmp_dir. path ( ) . join ( "backend" ) ;
63+ let tracked_file = backend_dir. join ( "app/models/foo.rb" ) ;
64+
65+ std:: process:: Command :: new ( "git" )
66+ . arg ( "init" )
67+ . current_dir ( tmp_dir. path ( ) )
68+ . output ( )
69+ . expect ( "failed to run git init" ) ;
70+
71+ std:: fs:: create_dir_all ( tracked_file. parent ( ) . unwrap ( ) ) . unwrap ( ) ;
72+ std:: fs:: write ( & tracked_file, "class Foo; end" ) . unwrap ( ) ;
73+ std:: fs:: write ( tmp_dir. path ( ) . join ( "README.md" ) , "readme" ) . unwrap ( ) ;
74+
75+ std:: process:: Command :: new ( "git" )
76+ . args ( [ "add" , "--all" ] )
77+ . current_dir ( tmp_dir. path ( ) )
78+ . output ( )
79+ . expect ( "failed to add tracked files" ) ;
80+
81+ let tracked = find_tracked_files ( & backend_dir) . unwrap ( ) ;
82+ assert_eq ! ( tracked. len( ) , 1 ) ;
83+ assert ! ( tracked. get( & tracked_file) . unwrap( ) ) ;
84+ assert ! ( !tracked. contains_key( & backend_dir. join( "backend/app/models/foo.rb" ) ) ) ;
85+ }
5886}
0 commit comments