@@ -75,12 +75,19 @@ static void append_ceiling_dir(git_buf *ceiling_dirs, const char *path)
7575 cl_assert (git_buf_oom (ceiling_dirs ) == 0 );
7676}
7777
78+ static git_buf discovered ;
79+ static git_buf ceiling_dirs ;
80+
7881void test_repo_discover__initialize (void )
7982{
8083 git_repository * repo ;
8184 const mode_t mode = 0777 ;
8285 git_futils_mkdir_r (DISCOVER_FOLDER , mode );
8386
87+ git_buf_init (& discovered , 0 );
88+ git_buf_init (& ceiling_dirs , 0 );
89+ append_ceiling_dir (& ceiling_dirs , TEMP_REPO_FOLDER );
90+
8491 cl_git_pass (git_repository_init (& repo , DISCOVER_FOLDER , 1 ));
8592 git_repository_free (repo );
8693
@@ -107,67 +114,78 @@ void test_repo_discover__initialize(void)
107114
108115void test_repo_discover__cleanup (void )
109116{
117+ git_buf_free (& discovered );
118+ git_buf_free (& ceiling_dirs );
110119 cl_git_pass (git_futils_rmdir_r (TEMP_REPO_FOLDER , NULL , GIT_RMDIR_REMOVE_FILES ));
111120}
112121
113- void test_repo_discover__0 (void )
122+ void test_repo_discover__discovering_repo_with_exact_path_succeeds (void )
114123{
115- // test discover
116- git_buf ceiling_dirs_buf = GIT_BUF_INIT , repository_path = GIT_BUF_INIT ,
117- sub_repository_path = GIT_BUF_INIT , found_path = GIT_BUF_INIT ;
118- const char * ceiling_dirs ;
124+ cl_git_pass (git_repository_discover (& discovered , DISCOVER_FOLDER , 0 , ceiling_dirs .ptr ));
125+ cl_git_pass (git_repository_discover (& discovered , SUB_REPOSITORY_FOLDER , 0 , ceiling_dirs .ptr ));
126+ }
119127
120- append_ceiling_dir (& ceiling_dirs_buf , TEMP_REPO_FOLDER );
121- ceiling_dirs = git_buf_cstr (& ceiling_dirs_buf );
128+ void test_repo_discover__discovering_nonexistent_dir_fails (void )
129+ {
130+ cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& discovered , DISCOVER_FOLDER "-nonexistent" , 0 , NULL ));
131+ }
122132
123- /* Nonexistent */
124- cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& repository_path , DISCOVER_FOLDER "-nonexistent" , 0 , ceiling_dirs ));
133+ void test_repo_discover__discovering_repo_with_subdirectory_succeeds (void )
134+ {
135+ ensure_repository_discover (SUB_REPOSITORY_FOLDER_SUB , ceiling_dirs .ptr , SUB_REPOSITORY_GITDIR );
136+ ensure_repository_discover (SUB_REPOSITORY_FOLDER_SUB_SUB , ceiling_dirs .ptr , SUB_REPOSITORY_GITDIR );
137+ ensure_repository_discover (SUB_REPOSITORY_FOLDER_SUB_SUB_SUB , ceiling_dirs .ptr , SUB_REPOSITORY_GITDIR );
138+ }
125139
126- cl_git_pass (git_repository_discover (& repository_path , DISCOVER_FOLDER , 0 , ceiling_dirs ));
127- cl_git_pass (git_repository_discover (& sub_repository_path , SUB_REPOSITORY_FOLDER , 0 , ceiling_dirs ));
140+ void test_repo_discover__discovering_repository_with_alternative_gitdir_succeeds (void )
141+ {
142+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER , ceiling_dirs .ptr , SUB_REPOSITORY_GITDIR );
143+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB , ceiling_dirs .ptr , SUB_REPOSITORY_GITDIR );
144+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB_SUB , ceiling_dirs .ptr , SUB_REPOSITORY_GITDIR );
145+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB_SUB_SUB , ceiling_dirs .ptr , DISCOVER_FOLDER );
146+ }
147+
148+ void test_repo_discover__discovering_repository_with_malformed_alternative_gitdir_fails (void )
149+ {
150+ cl_git_fail (git_repository_discover (& discovered , ALTERNATE_MALFORMED_FOLDER1 , 0 , ceiling_dirs .ptr ));
151+ cl_git_fail (git_repository_discover (& discovered , ALTERNATE_MALFORMED_FOLDER2 , 0 , ceiling_dirs .ptr ));
152+ cl_git_fail (git_repository_discover (& discovered , ALTERNATE_MALFORMED_FOLDER3 , 0 , ceiling_dirs .ptr ));
153+ cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& discovered , ALTERNATE_NOT_FOUND_FOLDER , 0 , ceiling_dirs .ptr ));
154+ }
128155
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 );
156+ void test_repo_discover__discovering_repository_with_ceiling ( void )
157+ {
158+ append_ceiling_dir ( & ceiling_dirs , SUB_REPOSITORY_FOLDER_SUB );
132159
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 );
160+ /* this must pass as ceiling_directories cannot prevent the current
161+ * working directory to be checked */
162+ ensure_repository_discover (SUB_REPOSITORY_FOLDER , ceiling_dirs .ptr , SUB_REPOSITORY_GITDIR );
137163
138- cl_git_fail ( git_repository_discover ( & found_path , ALTERNATE_MALFORMED_FOLDER1 , 0 , ceiling_dirs ) );
139- cl_git_fail ( git_repository_discover (& found_path , ALTERNATE_MALFORMED_FOLDER2 , 0 , ceiling_dirs ));
140- cl_git_fail ( git_repository_discover (& found_path , ALTERNATE_MALFORMED_FOLDER3 , 0 , ceiling_dirs ));
141- cl_assert_equal_i ( GIT_ENOTFOUND , git_repository_discover ( & found_path , ALTERNATE_NOT_FOUND_FOLDER , 0 , ceiling_dirs ));
164+ ensure_repository_discover ( SUB_REPOSITORY_FOLDER_SUB , ceiling_dirs . ptr , SUB_REPOSITORY_GITDIR );
165+ cl_assert_equal_i ( GIT_ENOTFOUND , git_repository_discover (& discovered , SUB_REPOSITORY_FOLDER_SUB_SUB , 0 , ceiling_dirs . ptr ));
166+ cl_assert_equal_i ( GIT_ENOTFOUND , git_repository_discover (& discovered , SUB_REPOSITORY_FOLDER_SUB_SUB_SUB , 0 , ceiling_dirs . ptr ));
167+ }
142168
143- append_ceiling_dir (& ceiling_dirs_buf , SUB_REPOSITORY_FOLDER_SUB );
144- ceiling_dirs = git_buf_cstr (& ceiling_dirs_buf );
169+ void test_repo_discover__other_ceiling (void )
170+ {
171+ append_ceiling_dir (& ceiling_dirs , SUB_REPOSITORY_FOLDER );
145172
146- /* this must pass as ceiling_directories cannot prevent the current
173+ /* this must pass as ceiling_directories cannot predent the current
147174 * working directory to be checked */
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 );
150- cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& found_path , SUB_REPOSITORY_FOLDER_SUB_SUB , 0 , ceiling_dirs ));
151- cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& found_path , SUB_REPOSITORY_FOLDER_SUB_SUB_SUB , 0 , ceiling_dirs ));
152-
153- append_ceiling_dir (& ceiling_dirs_buf , SUB_REPOSITORY_FOLDER );
154- ceiling_dirs = git_buf_cstr (& ceiling_dirs_buf );
155-
156- //this must pass as ceiling_directories cannot predent the current
157- //working directory to be checked
158- ensure_repository_discover (SUB_REPOSITORY_FOLDER , ceiling_dirs , SUB_REPOSITORY_GITDIR );
159- cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& found_path , SUB_REPOSITORY_FOLDER_SUB , 0 , ceiling_dirs ));
160- cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& found_path , SUB_REPOSITORY_FOLDER_SUB_SUB , 0 , ceiling_dirs ));
161- cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& found_path , SUB_REPOSITORY_FOLDER_SUB_SUB_SUB , 0 , ceiling_dirs ));
162-
163- //.gitfile redirection should not be affected by ceiling directories
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 );
168-
169- git_buf_free (& ceiling_dirs_buf );
170- git_buf_free (& repository_path );
171- git_buf_free (& sub_repository_path );
175+ ensure_repository_discover (SUB_REPOSITORY_FOLDER , ceiling_dirs .ptr , SUB_REPOSITORY_GITDIR );
176+
177+ cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& discovered , SUB_REPOSITORY_FOLDER_SUB , 0 , ceiling_dirs .ptr ));
178+ cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& discovered , SUB_REPOSITORY_FOLDER_SUB_SUB , 0 , ceiling_dirs .ptr ));
179+ cl_assert_equal_i (GIT_ENOTFOUND , git_repository_discover (& discovered , SUB_REPOSITORY_FOLDER_SUB_SUB_SUB , 0 , ceiling_dirs .ptr ));
172180}
173181
182+ void test_repo_discover__ceiling_should_not_affect_gitdir_redirection (void )
183+ {
184+ append_ceiling_dir (& ceiling_dirs , SUB_REPOSITORY_FOLDER );
185+
186+ /* gitfile redirection should not be affected by ceiling directories */
187+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER , ceiling_dirs .ptr , SUB_REPOSITORY_GITDIR );
188+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB , ceiling_dirs .ptr , SUB_REPOSITORY_GITDIR );
189+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB_SUB , ceiling_dirs .ptr , SUB_REPOSITORY_GITDIR );
190+ ensure_repository_discover (REPOSITORY_ALTERNATE_FOLDER_SUB_SUB_SUB , ceiling_dirs .ptr , DISCOVER_FOLDER );
191+ }
0 commit comments