Skip to content

Commit b411ed6

Browse files
pks-tgitster
authored andcommitted
repo-settings: introduce function to clear struct
We don't provide a way to clear a `struct repo_settings`, and instead open-code this in `repo_clear()`. This is mixing up concerns and means that developers have to touch multiple files whenever they add a new field to the structure in case the associated resources need to be released. Provide a new `repo_settings_clear()` function to improve this. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 88dd321 commit b411ed6

File tree

3 files changed

+10
-3
lines changed

3 files changed

+10
-3
lines changed

repo-settings.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ static void repo_cfg_int(struct repository *r, const char *key, int *dest,
2121

2222
void prepare_repo_settings(struct repository *r)
2323
{
24-
const struct repo_settings defaults = REPO_SETTINGS_INIT;
2524
int experimental;
2625
int value;
2726
const char *strval;
@@ -35,7 +34,7 @@ void prepare_repo_settings(struct repository *r)
3534
if (r->settings.initialized)
3635
return;
3736

38-
memcpy(&r->settings, &defaults, sizeof(defaults));
37+
repo_settings_clear(r);
3938
r->settings.initialized++;
4039

4140
/* Booleans config or default, cascades to other settings */
@@ -143,6 +142,13 @@ void prepare_repo_settings(struct repository *r)
143142
r->settings.packed_git_limit = ulongval;
144143
}
145144

145+
void repo_settings_clear(struct repository *r)
146+
{
147+
struct repo_settings empty = REPO_SETTINGS_INIT;
148+
FREE_AND_NULL(r->settings.fsmonitor);
149+
r->settings = empty;
150+
}
151+
146152
enum log_refs_config repo_settings_get_log_all_ref_updates(struct repository *repo)
147153
{
148154
const char *value;

repo-settings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ struct repo_settings {
7373
}
7474

7575
void prepare_repo_settings(struct repository *r);
76+
void repo_settings_clear(struct repository *r);
7677

7778
/* Read the value for "core.logAllRefUpdates". */
7879
enum log_refs_config repo_settings_get_log_all_ref_updates(struct repository *repo);

repository.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ void repo_clear(struct repository *repo)
380380
parsed_object_pool_clear(repo->parsed_objects);
381381
FREE_AND_NULL(repo->parsed_objects);
382382

383-
FREE_AND_NULL(repo->settings.fsmonitor);
383+
repo_settings_clear(repo);
384384

385385
if (repo->config) {
386386
git_configset_clear(repo->config);

0 commit comments

Comments
 (0)