Skip to content

Commit

Permalink
repository.c: free the "path cache" in repo_clear()
Browse files Browse the repository at this point in the history
The "struct path_cache" added in 102de88 (path.c: migrate global
git_path_* to take a repository argument, 2018-05-17) is only used
directly by code in repository.[ch] (but populated in path.[ch]).

Let's move this code to repository.[ch], and stop leaking this memory
when we run repo_clear(). To avoid the cast change it from a "const
char *" to a "char *".

This also removes the "PATH_CACHE_INIT" macro, which has never been
used for anything. For the "struct repository" we already make a hard
assumption that it (and "the_repository") can be identically
initialized by making it a "static" variable, so making use of a
"PATH_CACHE_INIT" somewhere would have been confusing.

Signed-off-by: Ævar Arnfjörð Bjarmason <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
avar authored and gitster committed Mar 4, 2022
1 parent 2d102c2 commit 759f340
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 15 deletions.
14 changes: 0 additions & 14 deletions path.h
Original file line number Diff line number Diff line change
Expand Up @@ -169,20 +169,6 @@ void report_linked_checkout_garbage(void);
return r->cached_paths.var; \
}

struct path_cache {
const char *squash_msg;
const char *merge_msg;
const char *merge_rr;
const char *merge_mode;
const char *merge_head;
const char *merge_autostash;
const char *auto_merge;
const char *fetch_head;
const char *shallow;
};

#define PATH_CACHE_INIT { 0 }

const char *git_path_squash_msg(struct repository *r);
const char *git_path_merge_msg(struct repository *r);
const char *git_path_merge_rr(struct repository *r);
Expand Down
16 changes: 16 additions & 0 deletions repository.c
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,20 @@ int repo_submodule_init(struct repository *subrepo,
return ret;
}

static void repo_clear_path_cache(struct repo_path_cache *cache)
{
FREE_AND_NULL(cache->squash_msg);
FREE_AND_NULL(cache->squash_msg);
FREE_AND_NULL(cache->merge_msg);
FREE_AND_NULL(cache->merge_rr);
FREE_AND_NULL(cache->merge_mode);
FREE_AND_NULL(cache->merge_head);
FREE_AND_NULL(cache->merge_autostash);
FREE_AND_NULL(cache->auto_merge);
FREE_AND_NULL(cache->fetch_head);
FREE_AND_NULL(cache->shallow);
}

void repo_clear(struct repository *repo)
{
FREE_AND_NULL(repo->gitdir);
Expand Down Expand Up @@ -280,6 +294,8 @@ void repo_clear(struct repository *repo)
remote_state_clear(repo->remote_state);
FREE_AND_NULL(repo->remote_state);
}

repo_clear_path_cache(&repo->cached_paths);
}

int repo_read_index(struct repository *repo)
Expand Down
14 changes: 13 additions & 1 deletion repository.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,18 @@ struct repo_settings {
int core_multi_pack_index;
};

struct repo_path_cache {
char *squash_msg;
char *merge_msg;
char *merge_rr;
char *merge_mode;
char *merge_head;
char *merge_autostash;
char *auto_merge;
char *fetch_head;
char *shallow;
};

struct repository {
/* Environment */
/*
Expand Down Expand Up @@ -82,7 +94,7 @@ struct repository {
/*
* Contains path to often used file names.
*/
struct path_cache cached_paths;
struct repo_path_cache cached_paths;

/*
* Path to the repository's graft file.
Expand Down

0 comments on commit 759f340

Please sign in to comment.