mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
![Brandon Williams](/assets/img/avatar_default.png)
Teach the config machinery to read config information from a repository object. This involves storing a 'struct config_set' inside the repository object and adding a number of functions (repo_config*) to be able to query a repository's config. The current config API enables lazy-loading of the config. This means that when 'git_config_get_int()' is called, if the_config_set hasn't been populated yet, then it will be populated and properly initialized by reading the necessary config files (system wide .gitconfig, user's home .gitconfig, and the repository's config). To maintain this paradigm, the new API to read from a repository object's config will also perform this lazy-initialization. Since both APIs (git_config_get* and repo_config_get*) have the same semantics we can migrate the default config to be stored within 'the_repository' and just have the 'git_config_get*' family of functions redirect to the 'repo_config_get*' functions. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
75 lines
1.9 KiB
C
75 lines
1.9 KiB
C
#ifndef REPOSITORY_H
|
|
#define REPOSITORY_H
|
|
|
|
struct config_set;
|
|
|
|
struct repository {
|
|
/* Environment */
|
|
/*
|
|
* Path to the git directory.
|
|
* Cannot be NULL after initialization.
|
|
*/
|
|
char *gitdir;
|
|
|
|
/*
|
|
* Path to the common git directory.
|
|
* Cannot be NULL after initialization.
|
|
*/
|
|
char *commondir;
|
|
|
|
/*
|
|
* Path to the repository's object store.
|
|
* Cannot be NULL after initialization.
|
|
*/
|
|
char *objectdir;
|
|
|
|
/*
|
|
* Path to the repository's graft file.
|
|
* Cannot be NULL after initialization.
|
|
*/
|
|
char *graft_file;
|
|
|
|
/*
|
|
* Path to the current worktree's index file.
|
|
* Cannot be NULL after initialization.
|
|
*/
|
|
char *index_file;
|
|
|
|
/*
|
|
* Path to the working directory.
|
|
* A NULL value indicates that there is no working directory.
|
|
*/
|
|
char *worktree;
|
|
|
|
/* Subsystems */
|
|
/*
|
|
* Repository's config which contains key-value pairs from the usual
|
|
* set of config files (i.e. repo specific .git/config, user wide
|
|
* ~/.gitconfig, XDG config file and the global /etc/gitconfig)
|
|
*/
|
|
struct config_set *config;
|
|
|
|
/* Configurations */
|
|
/*
|
|
* Bit used during initialization to indicate if repository state (like
|
|
* the location of the 'objectdir') should be read from the
|
|
* environment. By default this bit will be set at the begining of
|
|
* 'repo_init()' so that all repositories will ignore the environment.
|
|
* The exception to this is 'the_repository', which doesn't go through
|
|
* the normal 'repo_init()' process.
|
|
*/
|
|
unsigned ignore_env:1;
|
|
|
|
/* Indicate if a repository has a different 'commondir' from 'gitdir' */
|
|
unsigned different_commondir:1;
|
|
};
|
|
|
|
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 int repo_init(struct repository *repo, const char *gitdir, const char *worktree);
|
|
extern void repo_clear(struct repository *repo);
|
|
|
|
#endif /* REPOSITORY_H */
|