зеркало из https://github.com/microsoft/git.git
repository.c: free the "path cache" in repo_clear()
The "struct path_cache" added in 102de880d2
(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 <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
2d102c2bca
Коммит
759f340738
14
path.h
14
path.h
|
@ -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);
|
||||
|
|
16
repository.c
16
repository.c
|
@ -240,6 +240,20 @@ out:
|
|||
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);
|
||||
|
@ -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)
|
||||
|
|
14
repository.h
14
repository.h
|
@ -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 */
|
||||
/*
|
||||
|
@ -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.
|
||||
|
|
Загрузка…
Ссылка в новой задаче