]> git.proxmox.com Git - libgit2.git/blob - src/repository.h
Merge pull request #610 from arrbee/status-rewrite
[libgit2.git] / src / repository.h
1 /*
2 * Copyright (C) 2009-2012 the libgit2 contributors
3 *
4 * This file is part of libgit2, distributed under the GNU GPL v2 with
5 * a Linking Exception. For full terms see the included COPYING file.
6 */
7 #ifndef INCLUDE_repository_h__
8 #define INCLUDE_repository_h__
9
10 #include "git2/common.h"
11 #include "git2/oid.h"
12 #include "git2/odb.h"
13 #include "git2/repository.h"
14 #include "git2/object.h"
15
16 #include "hashtable.h"
17 #include "index.h"
18 #include "cache.h"
19 #include "refs.h"
20 #include "buffer.h"
21 #include "odb.h"
22 #include "attr.h"
23
24 #define DOT_GIT ".git"
25 #define GIT_DIR DOT_GIT "/"
26 #define GIT_DIR_MODE 0755
27 #define GIT_BARE_DIR_MODE 0777
28
29 /** Cvar cache identifiers */
30 typedef enum {
31 GIT_CVAR_AUTO_CRLF = 0, /* core.autocrlf */
32 GIT_CVAR_EOL, /* core.eol */
33 GIT_CVAR_CACHE_MAX
34 } git_cvar_cached;
35
36 /**
37 * CVAR value enumerations
38 *
39 * These are the values that are actually stored in the cvar cache, instead
40 * of their string equivalents. These values are internal and symbolic;
41 * make sure that none of them is set to `-1`, since that is the unique
42 * identifier for "not cached"
43 */
44 typedef enum {
45 /* The value hasn't been loaded from the cache yet */
46 GIT_CVAR_NOT_CACHED = -1,
47
48 /* core.safecrlf: false, 'fail', 'warn' */
49 GIT_SAFE_CRLF_FALSE = 0,
50 GIT_SAFE_CRLF_FAIL = 1,
51 GIT_SAFE_CRLF_WARN = 2,
52
53 /* core.autocrlf: false, true, 'input; */
54 GIT_AUTO_CRLF_FALSE = 0,
55 GIT_AUTO_CRLF_TRUE = 1,
56 GIT_AUTO_CRLF_INPUT = 2,
57 GIT_AUTO_CRLF_DEFAULT = GIT_AUTO_CRLF_FALSE,
58
59 /* core.eol: unset, 'crlf', 'lf', 'native' */
60 GIT_EOL_UNSET = 0,
61 GIT_EOL_CRLF = 1,
62 GIT_EOL_LF = 2,
63 #ifdef GIT_WIN32
64 GIT_EOL_NATIVE = GIT_EOL_CRLF,
65 #else
66 GIT_EOL_NATIVE = GIT_EOL_LF,
67 #endif
68 GIT_EOL_DEFAULT = GIT_EOL_NATIVE
69 } git_cvar_value;
70
71 /** Base git object for inheritance */
72 struct git_object {
73 git_cached_obj cached;
74 git_repository *repo;
75 git_otype type;
76 };
77
78 struct git_repository {
79 git_odb *_odb;
80 git_config *_config;
81 git_index *_index;
82
83 git_cache objects;
84 git_refcache references;
85 git_attr_cache attrcache;
86 git_hashtable *submodules;
87
88 char *path_repository;
89 char *workdir;
90
91 unsigned is_bare:1;
92 unsigned int lru_counter;
93
94 git_cvar_value cvar_cache[GIT_CVAR_CACHE_MAX];
95 };
96
97 /* fully free the object; internal method, do not
98 * export */
99 void git_object__free(void *object);
100
101 int git_oid__parse(git_oid *oid, const char **buffer_out, const char *buffer_end, const char *header);
102 void git_oid__writebuf(git_buf *buf, const char *header, const git_oid *oid);
103
104 GIT_INLINE(git_attr_cache *) git_repository_attr_cache(git_repository *repo)
105 {
106 return &repo->attrcache;
107 }
108
109 /*
110 * Weak pointers to repository internals.
111 *
112 * The returned pointers do not need to be freed. Do not keep
113 * permanent references to these (i.e. between API calls), since they may
114 * become invalidated if the user replaces a repository internal.
115 */
116 int git_repository_config__weakptr(git_config **out, git_repository *repo);
117 int git_repository_odb__weakptr(git_odb **out, git_repository *repo);
118 int git_repository_index__weakptr(git_index **out, git_repository *repo);
119
120 /*
121 * CVAR cache
122 *
123 * Efficient access to the most used config variables of a repository.
124 * The cache is cleared everytime the config backend is replaced.
125 */
126 int git_repository__cvar(int *out, git_repository *repo, git_cvar_cached cvar);
127 void git_repository__cvar_cache_clear(git_repository *repo);
128
129 /*
130 * Submodule cache
131 */
132 extern void git_submodule_config_free(git_repository *repo);
133
134 #endif