]> git.proxmox.com Git - libgit2.git/blob - src/odb.h
Add callback to git_objects_table
[libgit2.git] / src / odb.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_odb_h__
8 #define INCLUDE_odb_h__
9
10 #include "git2/odb.h"
11 #include "git2/oid.h"
12 #include "git2/types.h"
13
14 #include "vector.h"
15 #include "cache.h"
16 #include "posix.h"
17
18 #define GIT_OBJECTS_DIR "objects/"
19 #define GIT_OBJECT_DIR_MODE 0777
20 #define GIT_OBJECT_FILE_MODE 0444
21
22 /* DO NOT EXPORT */
23 typedef struct {
24 void *data; /**< Raw, decompressed object data. */
25 size_t len; /**< Total number of bytes in data. */
26 git_otype type; /**< Type of this object. */
27 } git_rawobj;
28
29 /* EXPORT */
30 struct git_odb_object {
31 git_cached_obj cached;
32 void *buffer;
33 };
34
35 /* EXPORT */
36 struct git_odb {
37 git_refcount rc;
38 git_vector backends;
39 git_cache own_cache;
40 };
41
42 /*
43 * Hash a git_rawobj internally.
44 * The `git_rawobj` is supposed to be previously initialized
45 */
46 int git_odb__hashobj(git_oid *id, git_rawobj *obj);
47
48 /*
49 * Format the object header such as it would appear in the on-disk object
50 */
51 int git_odb__format_object_header(char *hdr, size_t n, size_t obj_len, git_otype obj_type);
52 /*
53 * Hash an open file descriptor.
54 * This is a performance call when the contents of a fd need to be hashed,
55 * but the fd is already open and we have the size of the contents.
56 *
57 * Saves us some `stat` calls.
58 *
59 * The fd is never closed, not even on error. It must be opened and closed
60 * by the caller
61 */
62 int git_odb__hashfd(git_oid *out, git_file fd, size_t size, git_otype type);
63
64 /*
65 * Hash an open file descriptor applying an array of filters
66 * Acts just like git_odb__hashfd with the addition of filters...
67 */
68 int git_odb__hashfd_filtered(
69 git_oid *out, git_file fd, size_t len, git_otype type, git_vector *filters);
70
71 /*
72 * Hash a `path`, assuming it could be a POSIX symlink: if the path is a
73 * symlink, then the raw contents of the symlink will be hashed. Otherwise,
74 * this will fallback to `git_odb__hashfd`.
75 *
76 * The hash type for this call is always `GIT_OBJ_BLOB` because symlinks may
77 * only point to blobs.
78 */
79 int git_odb__hashlink(git_oid *out, const char *path);
80
81 /*
82 * Generate a GIT_ENOTFOUND error for the ODB.
83 */
84 int git_odb__error_notfound(const char *message, const git_oid *oid);
85
86 /*
87 * Generate a GIT_EAMBIGUOUS error for the ODB.
88 */
89 int git_odb__error_ambiguous(const char *message);
90
91 /*
92 * Attempt to read object header or just return whole object if it could
93 * not be read.
94 */
95 int git_odb__read_header_or_object(
96 git_odb_object **out, size_t *len_p, git_otype *type_p,
97 git_odb *db, const git_oid *id);
98
99 /* fully free the object; internal method, DO NOT EXPORT */
100 void git_odb_object__free(void *object);
101
102 #endif