On 03/03, Nguyễn Thái Ngọc Duy wrote: > This simplifies initialization of struct repository and anything > inside. Easier to read. Easier to add/remove fields. > > Everything will go through main() common-main.c so this should cover all > programs, including t/helper. > > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> > --- > common-main.c | 2 ++ > repository.c | 18 +++++++++++++----- > repository.h | 2 +- > 3 files changed, 16 insertions(+), 6 deletions(-) > > diff --git a/common-main.c b/common-main.c > index 6a689007e7..7d716d5a54 100644 > --- a/common-main.c > +++ b/common-main.c > @@ -34,6 +34,8 @@ int main(int argc, const char **argv) > > git_setup_gettext(); > > + initialize_the_repository(); > + > attr_start(); > > git_extract_argv0_path(argv[0]); > diff --git a/repository.c b/repository.c > index 4ffbe9bc94..0eddf28fcd 100644 > --- a/repository.c > +++ b/repository.c > @@ -4,10 +4,16 @@ > #include "submodule-config.h" > > /* The main repository */ > -static struct repository the_repo = { > - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &the_index, &hash_algos[GIT_HASH_SHA1], 0, 0 > -}; > -struct repository *the_repository = &the_repo; > +static struct repository the_repo; > +struct repository *the_repository; > + > +void initialize_the_repository(void) > +{ > + the_repository = &the_repo; > + > + the_repo.index = &the_index; > + repo_set_hash_algo(&the_repo, GIT_HASH_SHA1); > +} Nice, one place to do all the crazy initialization for the_repo. I wanted to do something like this when I introduced the repository but I shied away from it because it didn't seem like the right thing to do at the time. Now that its grown a bit, its definitely the right move until using the repository object is ubiquitous enough that the setup code can produce a repository struct instead of relying on a global one. > > static char *git_path_from_env(const char *envvar, const char *git_dir, > const char *path, int fromenv) > @@ -128,7 +134,9 @@ static int read_and_verify_repository_format(struct repository_format *format, > * Initialize 'repo' based on the provided 'gitdir'. > * Return 0 upon success and a non-zero value upon failure. > */ > -int repo_init(struct repository *repo, const char *gitdir, const char *worktree) > +static int repo_init(struct repository *repo, > + const char *gitdir, > + const char *worktree) > { > struct repository_format format; > memset(repo, 0, sizeof(*repo)); > diff --git a/repository.h b/repository.h > index 0329e40c7f..40c1c81bdc 100644 > --- a/repository.h > +++ b/repository.h > @@ -91,7 +91,7 @@ extern struct repository *the_repository; > extern void repo_set_gitdir(struct repository *repo, const char *path); > extern void repo_set_worktree(struct repository *repo, const char *path); > extern void repo_set_hash_algo(struct repository *repo, int algo); > -extern int repo_init(struct repository *repo, const char *gitdir, const char *worktree); I had to double check that this was ok, it indeed is as repo_init is only used in repository.c. > +extern void initialize_the_repository(void); > extern int repo_submodule_init(struct repository *submodule, > struct repository *superproject, > const char *path); > -- > 2.16.1.435.g8f24da2e1a > -- Brandon Williams