99
1010#define SUB_REPOSITORY_FOLDER_NAME "sub_repo"
1111#define SUB_REPOSITORY_FOLDER DISCOVER_FOLDER "/" SUB_REPOSITORY_FOLDER_NAME
12+ #define SUB_REPOSITORY_GITDIR SUB_REPOSITORY_FOLDER "/.git"
1213#define SUB_REPOSITORY_FOLDER_SUB SUB_REPOSITORY_FOLDER "/sub"
1314#define SUB_REPOSITORY_FOLDER_SUB_SUB SUB_REPOSITORY_FOLDER_SUB "/subsub"
1415#define SUB_REPOSITORY_FOLDER_SUB_SUB_SUB SUB_REPOSITORY_FOLDER_SUB_SUB "/subsubsub"
2425#define ALTERNATE_NOT_FOUND_FOLDER DISCOVER_FOLDER "/alternate_not_found_repo"
2526
2627static void ensure_repository_discover (const char * start_path ,
27- const char * ceiling_dirs ,
28- git_buf * expected_path )
28+ const char * ceiling_dirs ,
29+ const char * expected_path )
2930{
30- git_buf found_path = GIT_BUF_INIT ;
31+ git_buf found_path = GIT_BUF_INIT , resolved = GIT_BUF_INIT ;
32+
33+ git_buf_attach (& resolved , p_realpath (expected_path , NULL ), 0 );
34+ cl_assert (resolved .size > 0 );
35+ cl_git_pass (git_path_to_dir (& resolved ));
3136 cl_git_pass (git_repository_discover (& found_path , start_path , 0 , ceiling_dirs ));
32- //across_fs is always 0 as we can't automate the filesystem change tests
33- cl_assert_equal_s (found_path .ptr , expected_path -> ptr );
37+
38+ cl_assert_equal_s (found_path .ptr , resolved .ptr );
39+
40+ git_buf_free (& resolved );
3441 git_buf_free (& found_path );
3542}
3643
@@ -119,14 +126,14 @@ void test_repo_discover__0(void)
119126 cl_git_pass (git_repository_discover (& repository_path , DISCOVER_FOLDER , 0 , ceiling_dirs ));
120127 cl_git_pass (git_repository_discover (& sub_repository_path , SUB_REPOSITORY_FOLDER , 0 , ceiling_dirs ));
121128
122- ensure_repository_discover (SUB_REPOSITORY_FOLDER_SUB , ceiling_dirs , & sub_repository_path );
123- ensure_repository_discover (SUB_REPOSITORY_FOLDER_SUB_SUB , ceiling_dirs , & sub_repository_path );
124- ensure_repository_discover (SUB_REPOSITORY_FOLDER_SUB_SUB_SUB , ceiling_dirs , & sub_repository_path );
129+ ensure_repository_discover (SUB_REPOSITORY_FOLDER_SUB , ceiling_dirs , SUB_REPOSITORY_GITDIR );
130+ ensure_repository_discover (SUB_REPOSITORY_FOLDER_SUB_SUB , ceiling_dirs , SUB_REPOSITORY_GITDIR );
131+ ensure_repository_discover (SUB_REPOSITORY_FOLDER_SUB_SUB_SUB , ceiling_dirs , SUB_REPOSITORY_GITDIR );
125132
126- ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER , ceiling_dirs , & sub_repository_path );
127- ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB , ceiling_dirs , & sub_repository_path );
128- ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB_SUB , ceiling_dirs , & sub_repository_path );
129- ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB_SUB_SUB , ceiling_dirs , & repository_path );
133+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER , ceiling_dirs , SUB_REPOSITORY_GITDIR );
134+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB , ceiling_dirs , SUB_REPOSITORY_GITDIR );
135+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB_SUB , ceiling_dirs , SUB_REPOSITORY_GITDIR );
136+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB_SUB_SUB , ceiling_dirs , DISCOVER_FOLDER );
130137
131138 cl_git_fail (git_repository_discover (& found_path , ALTERNATE_MALFORMED_FOLDER1 , 0 , ceiling_dirs ));
132139 cl_git_fail (git_repository_discover (& found_path , ALTERNATE_MALFORMED_FOLDER2 , 0 , ceiling_dirs ));
@@ -138,8 +145,8 @@ void test_repo_discover__0(void)
138145
139146 /* this must pass as ceiling_directories cannot prevent the current
140147 * working directory to be checked */
141- ensure_repository_discover (SUB_REPOSITORY_FOLDER , ceiling_dirs , & sub_repository_path );
142- ensure_repository_discover (SUB_REPOSITORY_FOLDER_SUB , ceiling_dirs , & sub_repository_path );
148+ ensure_repository_discover (SUB_REPOSITORY_FOLDER , ceiling_dirs , SUB_REPOSITORY_GITDIR );
149+ ensure_repository_discover (SUB_REPOSITORY_FOLDER_SUB , ceiling_dirs , SUB_REPOSITORY_GITDIR );
143150 cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& found_path , SUB_REPOSITORY_FOLDER_SUB_SUB , 0 , ceiling_dirs ));
144151 cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& found_path , SUB_REPOSITORY_FOLDER_SUB_SUB_SUB , 0 , ceiling_dirs ));
145152
@@ -148,16 +155,16 @@ void test_repo_discover__0(void)
148155
149156 //this must pass as ceiling_directories cannot predent the current
150157 //working directory to be checked
151- ensure_repository_discover (SUB_REPOSITORY_FOLDER , ceiling_dirs , & sub_repository_path );
158+ ensure_repository_discover (SUB_REPOSITORY_FOLDER , ceiling_dirs , SUB_REPOSITORY_GITDIR );
152159 cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& found_path , SUB_REPOSITORY_FOLDER_SUB , 0 , ceiling_dirs ));
153160 cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& found_path , SUB_REPOSITORY_FOLDER_SUB_SUB , 0 , ceiling_dirs ));
154161 cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& found_path , SUB_REPOSITORY_FOLDER_SUB_SUB_SUB , 0 , ceiling_dirs ));
155162
156163 //.gitfile redirection should not be affected by ceiling directories
157- ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER , ceiling_dirs , & sub_repository_path );
158- ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB , ceiling_dirs , & sub_repository_path );
159- ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB_SUB , ceiling_dirs , & sub_repository_path );
160- ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB_SUB_SUB , ceiling_dirs , & repository_path );
164+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER , ceiling_dirs , SUB_REPOSITORY_GITDIR );
165+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB , ceiling_dirs , SUB_REPOSITORY_GITDIR );
166+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB_SUB , ceiling_dirs , SUB_REPOSITORY_GITDIR );
167+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB_SUB_SUB , ceiling_dirs , DISCOVER_FOLDER );
161168
162169 git_buf_free (& ceiling_dirs_buf );
163170 git_buf_free (& repository_path );
0 commit comments