@@ -164,23 +164,27 @@ static int config_file_is_modified(int *modified, config_file *file)
164164 return error ;
165165}
166166
167+ static void config_file_clear_includes (config_file_backend * cfg )
168+ {
169+ config_file * include ;
170+ uint32_t i ;
171+
172+ git_array_foreach (cfg -> file .includes , i , include )
173+ config_file_clear (include );
174+ git_array_clear (cfg -> file .includes );
175+ }
176+
167177static int config_file_set_entries (git_config_backend * cfg , git_config_entries * entries )
168178{
169179 config_file_backend * b = GIT_CONTAINER_OF (cfg , config_file_backend , parent );
170180 git_config_entries * old = NULL ;
171- config_file * include ;
172181 int error ;
173- uint32_t i ;
174182
175183 if (b -> parent .readonly ) {
176184 git_error_set (GIT_ERROR_CONFIG , "this backend is read-only" );
177185 return -1 ;
178186 }
179187
180- git_array_foreach (b -> file .includes , i , include )
181- config_file_clear (include );
182- git_array_clear (b -> file .includes );
183-
184188 if ((error = git_mutex_lock (& b -> values_mutex )) < 0 ) {
185189 git_error_set (GIT_ERROR_OS , "failed to lock config backend" );
186190 goto out ;
@@ -202,6 +206,8 @@ static int config_file_refresh_from_buffer(git_config_backend *cfg, const char *
202206 git_config_entries * entries = NULL ;
203207 int error ;
204208
209+ config_file_clear_includes (b );
210+
205211 if ((error = git_config_entries_new (& entries )) < 0 ||
206212 (error = config_file_read_buffer (entries , b -> repo , & b -> file ,
207213 b -> level , 0 , buf , buflen )) < 0 ||
@@ -229,6 +235,8 @@ static int config_file_refresh(git_config_backend *cfg)
229235 if (!modified )
230236 return 0 ;
231237
238+ config_file_clear_includes (b );
239+
232240 if ((error = git_config_entries_new (& entries )) < 0 ||
233241 (error = config_file_read (entries , b -> repo , & b -> file , b -> level , 0 )) < 0 ||
234242 (error = config_file_set_entries (cfg , entries )) < 0 )
0 commit comments