1#ifndef REPOSITORY_H
2#define REPOSITORY_H
34
struct config_set;
5struct index_state;
6struct submodule_cache;
7struct git_hash_algo;
89
struct repository {
10/* Environment */
11/*
12* Path to the git directory.
13* Cannot be NULL after initialization.
14*/
15char *gitdir;
1617
/*
18* Path to the common git directory.
19* Cannot be NULL after initialization.
20*/
21char *commondir;
2223
/*
24* Path to the repository's object store.
25* Cannot be NULL after initialization.
26*/
27char *objectdir;
2829
/* Path to extra alternate object database if not NULL */
30char *alternate_db;
3132
/*
33* Path to the repository's graft file.
34* Cannot be NULL after initialization.
35*/
36char *graft_file;
3738
/*
39* Path to the current worktree's index file.
40* Cannot be NULL after initialization.
41*/
42char *index_file;
4344
/*
45* Path to the working directory.
46* A NULL value indicates that there is no working directory.
47*/
48char *worktree;
4950
/*
51* Path from the root of the top-level superproject down to this
52* repository. This is only non-NULL if the repository is initialized
53* as a submodule of another repository.
54*/
55char *submodule_prefix;
5657
/* Subsystems */
58/*
59* Repository's config which contains key-value pairs from the usual
60* set of config files (i.e. repo specific .git/config, user wide
61* ~/.gitconfig, XDG config file and the global /etc/gitconfig)
62*/
63struct config_set *config;
6465
/* Repository's submodule config as defined by '.gitmodules' */
66struct submodule_cache *submodule_cache;
6768
/*
69* Repository's in-memory index.
70* 'repo_read_index()' can be used to populate 'index'.
71*/
72struct index_state *index;
7374
/* Repository's current hash algorithm, as serialized on disk. */
75const struct git_hash_algo *hash_algo;
7677
/* Configurations */
7879
/* Indicate if a repository has a different 'commondir' from 'gitdir' */
80unsigned different_commondir:1;
81};
8283
extern struct repository *the_repository;
8485
/*
86* Define a custom repository layout. Any field can be NULL, which
87* will default back to the path according to the default layout.
88*/
89struct set_gitdir_args {
90const char *commondir;
91const char *object_dir;
92const char *graft_file;
93const char *index_file;
94const char *alternate_db;
95};
9697
extern void repo_set_gitdir(struct repository *repo,
98const char *root,
99const struct set_gitdir_args *extra_args);
100extern void repo_set_worktree(struct repository *repo, const char *path);
101extern void repo_set_hash_algo(struct repository *repo, int algo);
102extern void initialize_the_repository(void);
103extern int repo_submodule_init(struct repository *submodule,
104struct repository *superproject,
105const char *path);
106extern void repo_clear(struct repository *repo);
107108
/*
109* Populates the repository's index from its index_file, an index struct will
110* be allocated if needed.
111*
112* Return the number of index entries in the populated index or a value less
113* than zero if an error occured. If the repository's index has already been
114* populated then the number of entries will simply be returned.
115*/
116extern int repo_read_index(struct repository *repo);
117118
#endif /* REPOSITORY_H */