]> git.proxmox.com Git - libgit2.git/blob - include/git2/types.h
New upstream version 1.4.3+dfsg.1
[libgit2.git] / include / git2 / types.h
1 /*
2 * Copyright (C) the libgit2 contributors. All rights reserved.
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_git_types_h__
8 #define INCLUDE_git_types_h__
9
10 #include "common.h"
11
12 /**
13 * @file git2/types.h
14 * @brief libgit2 base & compatibility types
15 * @ingroup Git
16 * @{
17 */
18 GIT_BEGIN_DECL
19
20 /**
21 * Cross-platform compatibility types for off_t / time_t
22 *
23 * NOTE: This needs to be in a public header so that both the library
24 * implementation and client applications both agree on the same types.
25 * Otherwise we get undefined behavior.
26 *
27 * Use the "best" types that each platform provides. Currently we truncate
28 * these intermediate representations for compatibility with the git ABI, but
29 * if and when it changes to support 64 bit types, our code will naturally
30 * adapt.
31 * NOTE: These types should match those that are returned by our internal
32 * stat() functions, for all platforms.
33 */
34 #include <sys/types.h>
35 #ifdef __amigaos4__
36 #include <stdint.h>
37 #endif
38
39 #if defined(_MSC_VER)
40
41 typedef __int64 git_off_t;
42 typedef __time64_t git_time_t;
43
44 #elif defined(__MINGW32__)
45
46 typedef off64_t git_off_t;
47 typedef __time64_t git_time_t;
48
49 #elif defined(__HAIKU__)
50
51 typedef __haiku_std_int64 git_off_t;
52 typedef __haiku_std_int64 git_time_t;
53
54 #else /* POSIX */
55
56 /*
57 * Note: Can't use off_t since if a client program includes <sys/types.h>
58 * before us (directly or indirectly), they'll get 32 bit off_t in their client
59 * app, even though /we/ define _FILE_OFFSET_BITS=64.
60 */
61 typedef int64_t git_off_t;
62 typedef int64_t git_time_t; /**< time in seconds from epoch */
63
64 #endif
65
66 /** The maximum size of an object */
67 typedef uint64_t git_object_size_t;
68
69 #include "buffer.h"
70 #include "oid.h"
71
72 /** Basic type (loose or packed) of any Git object. */
73 typedef enum {
74 GIT_OBJECT_ANY = -2, /**< Object can be any of the following */
75 GIT_OBJECT_INVALID = -1, /**< Object is invalid. */
76 GIT_OBJECT_COMMIT = 1, /**< A commit object. */
77 GIT_OBJECT_TREE = 2, /**< A tree (directory listing) object. */
78 GIT_OBJECT_BLOB = 3, /**< A file revision object. */
79 GIT_OBJECT_TAG = 4, /**< An annotated tag object. */
80 GIT_OBJECT_OFS_DELTA = 6, /**< A delta, base is given by an offset. */
81 GIT_OBJECT_REF_DELTA = 7 /**< A delta, base is given by object id. */
82 } git_object_t;
83
84 /** An open object database handle. */
85 typedef struct git_odb git_odb;
86
87 /** A custom backend in an ODB */
88 typedef struct git_odb_backend git_odb_backend;
89
90 /** An object read from the ODB */
91 typedef struct git_odb_object git_odb_object;
92
93 /** A stream to read/write from the ODB */
94 typedef struct git_odb_stream git_odb_stream;
95
96 /** A stream to write a packfile to the ODB */
97 typedef struct git_odb_writepack git_odb_writepack;
98
99 /** a writer for multi-pack-index files. */
100 typedef struct git_midx_writer git_midx_writer;
101
102 /** An open refs database handle. */
103 typedef struct git_refdb git_refdb;
104
105 /** A custom backend for refs */
106 typedef struct git_refdb_backend git_refdb_backend;
107
108 /** A git commit-graph */
109 typedef struct git_commit_graph git_commit_graph;
110
111 /** a writer for commit-graph files. */
112 typedef struct git_commit_graph_writer git_commit_graph_writer;
113
114 /**
115 * Representation of an existing git repository,
116 * including all its object contents
117 */
118 typedef struct git_repository git_repository;
119
120 /** Representation of a working tree */
121 typedef struct git_worktree git_worktree;
122
123 /** Representation of a generic object in a repository */
124 typedef struct git_object git_object;
125
126 /** Representation of an in-progress walk through the commits in a repo */
127 typedef struct git_revwalk git_revwalk;
128
129 /** Parsed representation of a tag object. */
130 typedef struct git_tag git_tag;
131
132 /** In-memory representation of a blob object. */
133 typedef struct git_blob git_blob;
134
135 /** Parsed representation of a commit object. */
136 typedef struct git_commit git_commit;
137
138 /** Representation of each one of the entries in a tree object. */
139 typedef struct git_tree_entry git_tree_entry;
140
141 /** Representation of a tree object. */
142 typedef struct git_tree git_tree;
143
144 /** Constructor for in-memory trees */
145 typedef struct git_treebuilder git_treebuilder;
146
147 /** Memory representation of an index file. */
148 typedef struct git_index git_index;
149
150 /** An iterator for entries in the index. */
151 typedef struct git_index_iterator git_index_iterator;
152
153 /** An iterator for conflicts in the index. */
154 typedef struct git_index_conflict_iterator git_index_conflict_iterator;
155
156 /** Memory representation of a set of config files */
157 typedef struct git_config git_config;
158
159 /** Interface to access a configuration file */
160 typedef struct git_config_backend git_config_backend;
161
162 /** Representation of a reference log entry */
163 typedef struct git_reflog_entry git_reflog_entry;
164
165 /** Representation of a reference log */
166 typedef struct git_reflog git_reflog;
167
168 /** Representation of a git note */
169 typedef struct git_note git_note;
170
171 /** Representation of a git packbuilder */
172 typedef struct git_packbuilder git_packbuilder;
173
174 /** Time in a signature */
175 typedef struct git_time {
176 git_time_t time; /**< time in seconds from epoch */
177 int offset; /**< timezone offset, in minutes */
178 char sign; /**< indicator for questionable '-0000' offsets in signature */
179 } git_time;
180
181 /** An action signature (e.g. for committers, taggers, etc) */
182 typedef struct git_signature {
183 char *name; /**< full name of the author */
184 char *email; /**< email of the author */
185 git_time when; /**< time when the action happened */
186 } git_signature;
187
188 /** In-memory representation of a reference. */
189 typedef struct git_reference git_reference;
190
191 /** Iterator for references */
192 typedef struct git_reference_iterator git_reference_iterator;
193
194 /** Transactional interface to references */
195 typedef struct git_transaction git_transaction;
196
197 /** Annotated commits, the input to merge and rebase. */
198 typedef struct git_annotated_commit git_annotated_commit;
199
200 /** Representation of a status collection */
201 typedef struct git_status_list git_status_list;
202
203 /** Representation of a rebase */
204 typedef struct git_rebase git_rebase;
205
206 /** Basic type of any Git reference. */
207 typedef enum {
208 GIT_REFERENCE_INVALID = 0, /**< Invalid reference */
209 GIT_REFERENCE_DIRECT = 1, /**< A reference that points at an object id */
210 GIT_REFERENCE_SYMBOLIC = 2, /**< A reference that points at another reference */
211 GIT_REFERENCE_ALL = GIT_REFERENCE_DIRECT | GIT_REFERENCE_SYMBOLIC
212 } git_reference_t;
213
214 /** Basic type of any Git branch. */
215 typedef enum {
216 GIT_BRANCH_LOCAL = 1,
217 GIT_BRANCH_REMOTE = 2,
218 GIT_BRANCH_ALL = GIT_BRANCH_LOCAL|GIT_BRANCH_REMOTE
219 } git_branch_t;
220
221 /** Valid modes for index and tree entries. */
222 typedef enum {
223 GIT_FILEMODE_UNREADABLE = 0000000,
224 GIT_FILEMODE_TREE = 0040000,
225 GIT_FILEMODE_BLOB = 0100644,
226 GIT_FILEMODE_BLOB_EXECUTABLE = 0100755,
227 GIT_FILEMODE_LINK = 0120000,
228 GIT_FILEMODE_COMMIT = 0160000
229 } git_filemode_t;
230
231 /**
232 * A refspec specifies the mapping between remote and local reference
233 * names when fetch or pushing.
234 */
235 typedef struct git_refspec git_refspec;
236
237 /**
238 * Git's idea of a remote repository. A remote can be anonymous (in
239 * which case it does not have backing configuration entries).
240 */
241 typedef struct git_remote git_remote;
242
243 /**
244 * Interface which represents a transport to communicate with a
245 * remote.
246 */
247 typedef struct git_transport git_transport;
248
249 /**
250 * Preparation for a push operation. Can be used to configure what to
251 * push and the level of parallelism of the packfile builder.
252 */
253 typedef struct git_push git_push;
254
255 /* documentation in the definition */
256 typedef struct git_remote_head git_remote_head;
257 typedef struct git_remote_callbacks git_remote_callbacks;
258
259 /**
260 * Parent type for `git_cert_hostkey` and `git_cert_x509`.
261 */
262 typedef struct git_cert git_cert;
263
264 /**
265 * Opaque structure representing a submodule.
266 */
267 typedef struct git_submodule git_submodule;
268
269 /**
270 * Submodule update values
271 *
272 * These values represent settings for the `submodule.$name.update`
273 * configuration value which says how to handle `git submodule update` for
274 * this submodule. The value is usually set in the ".gitmodules" file and
275 * copied to ".git/config" when the submodule is initialized.
276 *
277 * You can override this setting on a per-submodule basis with
278 * `git_submodule_set_update()` and write the changed value to disk using
279 * `git_submodule_save()`. If you have overwritten the value, you can
280 * revert it by passing `GIT_SUBMODULE_UPDATE_RESET` to the set function.
281 *
282 * The values are:
283 *
284 * - GIT_SUBMODULE_UPDATE_CHECKOUT: the default; when a submodule is
285 * updated, checkout the new detached HEAD to the submodule directory.
286 * - GIT_SUBMODULE_UPDATE_REBASE: update by rebasing the current checked
287 * out branch onto the commit from the superproject.
288 * - GIT_SUBMODULE_UPDATE_MERGE: update by merging the commit in the
289 * superproject into the current checkout out branch of the submodule.
290 * - GIT_SUBMODULE_UPDATE_NONE: do not update this submodule even when
291 * the commit in the superproject is updated.
292 * - GIT_SUBMODULE_UPDATE_DEFAULT: not used except as static initializer
293 * when we don't want any particular update rule to be specified.
294 */
295 typedef enum {
296 GIT_SUBMODULE_UPDATE_CHECKOUT = 1,
297 GIT_SUBMODULE_UPDATE_REBASE = 2,
298 GIT_SUBMODULE_UPDATE_MERGE = 3,
299 GIT_SUBMODULE_UPDATE_NONE = 4,
300
301 GIT_SUBMODULE_UPDATE_DEFAULT = 0
302 } git_submodule_update_t;
303
304 /**
305 * Submodule ignore values
306 *
307 * These values represent settings for the `submodule.$name.ignore`
308 * configuration value which says how deeply to look at the working
309 * directory when getting submodule status.
310 *
311 * You can override this value in memory on a per-submodule basis with
312 * `git_submodule_set_ignore()` and can write the changed value to disk
313 * with `git_submodule_save()`. If you have overwritten the value, you
314 * can revert to the on disk value by using `GIT_SUBMODULE_IGNORE_RESET`.
315 *
316 * The values are:
317 *
318 * - GIT_SUBMODULE_IGNORE_UNSPECIFIED: use the submodule's configuration
319 * - GIT_SUBMODULE_IGNORE_NONE: don't ignore any change - i.e. even an
320 * untracked file, will mark the submodule as dirty. Ignored files are
321 * still ignored, of course.
322 * - GIT_SUBMODULE_IGNORE_UNTRACKED: ignore untracked files; only changes
323 * to tracked files, or the index or the HEAD commit will matter.
324 * - GIT_SUBMODULE_IGNORE_DIRTY: ignore changes in the working directory,
325 * only considering changes if the HEAD of submodule has moved from the
326 * value in the superproject.
327 * - GIT_SUBMODULE_IGNORE_ALL: never check if the submodule is dirty
328 * - GIT_SUBMODULE_IGNORE_DEFAULT: not used except as static initializer
329 * when we don't want any particular ignore rule to be specified.
330 */
331 typedef enum {
332 GIT_SUBMODULE_IGNORE_UNSPECIFIED = -1, /**< use the submodule's configuration */
333
334 GIT_SUBMODULE_IGNORE_NONE = 1, /**< any change or untracked == dirty */
335 GIT_SUBMODULE_IGNORE_UNTRACKED = 2, /**< dirty if tracked files change */
336 GIT_SUBMODULE_IGNORE_DIRTY = 3, /**< only dirty if HEAD moved */
337 GIT_SUBMODULE_IGNORE_ALL = 4 /**< never dirty */
338 } git_submodule_ignore_t;
339
340 /**
341 * Options for submodule recurse.
342 *
343 * Represent the value of `submodule.$name.fetchRecurseSubmodules`
344 *
345 * * GIT_SUBMODULE_RECURSE_NO - do no recurse into submodules
346 * * GIT_SUBMODULE_RECURSE_YES - recurse into submodules
347 * * GIT_SUBMODULE_RECURSE_ONDEMAND - recurse into submodules only when
348 * commit not already in local clone
349 */
350 typedef enum {
351 GIT_SUBMODULE_RECURSE_NO = 0,
352 GIT_SUBMODULE_RECURSE_YES = 1,
353 GIT_SUBMODULE_RECURSE_ONDEMAND = 2
354 } git_submodule_recurse_t;
355
356 typedef struct git_writestream git_writestream;
357
358 /** A type to write in a streaming fashion, for example, for filters. */
359 struct git_writestream {
360 int GIT_CALLBACK(write)(git_writestream *stream, const char *buffer, size_t len);
361 int GIT_CALLBACK(close)(git_writestream *stream);
362 void GIT_CALLBACK(free)(git_writestream *stream);
363 };
364
365 /** Representation of .mailmap file state. */
366 typedef struct git_mailmap git_mailmap;
367
368 /** @} */
369 GIT_END_DECL
370
371 #endif