]> git.proxmox.com Git - libgit2.git/blame - src/odb.h
New upstream version 1.4.3+dfsg.1
[libgit2.git] / src / odb.h
CommitLineData
bb742ede 1/*
359fc2d2 2 * Copyright (C) the libgit2 contributors. All rights reserved.
bb742ede
VM
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 */
a7c60cfc
SP
7#ifndef INCLUDE_odb_h__
8#define INCLUDE_odb_h__
9
eae0bfdc
PP
10#include "common.h"
11
44908fe7
VM
12#include "git2/odb.h"
13#include "git2/oid.h"
72a3fe42 14#include "git2/types.h"
c25aa7cd 15#include "git2/sys/commit_graph.h"
7d7cd885 16
72a3fe42 17#include "cache.h"
c25aa7cd 18#include "commit_graph.h"
85d54812 19#include "filter.h"
c25aa7cd
PP
20#include "posix.h"
21#include "vector.h"
7d7cd885 22
ce8cd006
BR
23#define GIT_OBJECTS_DIR "objects/"
24#define GIT_OBJECT_DIR_MODE 0777
01ad7b3a 25#define GIT_OBJECT_FILE_MODE 0444
ce8cd006 26
c25aa7cd
PP
27#define GIT_ODB_DEFAULT_LOOSE_PRIORITY 1
28#define GIT_ODB_DEFAULT_PACKED_PRIORITY 2
29
35079f50
PS
30extern bool git_odb__strict_hash_verification;
31
72a3fe42
VM
32/* DO NOT EXPORT */
33typedef struct {
87d9869f
VM
34 void *data; /**< Raw, decompressed object data. */
35 size_t len; /**< Total number of bytes in data. */
ac3d33df 36 git_object_t type; /**< Type of this object. */
72a3fe42
VM
37} git_rawobj;
38
39/* EXPORT */
40struct git_odb_object {
41 git_cached_obj cached;
8842c75f 42 void *buffer;
72a3fe42
VM
43};
44
45/* EXPORT */
7d7cd885 46struct git_odb {
9462c471 47 git_refcount rc;
c25aa7cd 48 git_mutex lock; /* protects backends */
7d7cd885 49 git_vector backends;
5df18424 50 git_cache own_cache;
c25aa7cd 51 git_commit_graph *cgraph;
1c04a96b 52 unsigned int do_fsync :1;
7d7cd885
VM
53};
54
1c04a96b 55typedef enum {
e579e0f7 56 GIT_ODB_CAP_FROM_OWNER = -1
1c04a96b
ET
57} git_odb_cap_t;
58
59/*
60 * Set the capabilities for the object database.
61 */
62int git_odb__set_caps(git_odb *odb, int caps);
63
64/*
65 * Add the default loose and packed backends for a database.
66 */
67int git_odb__add_default_backends(
68 git_odb *db, const char *objects_dir,
69 bool as_alternates, int alternate_depth);
70
f19e3ca2
VM
71/*
72 * Hash a git_rawobj internally.
73 * The `git_rawobj` is supposed to be previously initialized
74 */
18e5b854 75int git_odb__hashobj(git_oid *id, git_rawobj *obj);
f19e3ca2 76
f56f8585
CMN
77/*
78 * Format the object header such as it would appear in the on-disk object
79 */
22a2d3d5
UG
80int git_odb__format_object_header(size_t *out_len, char *hdr, size_t hdr_size, git_object_size_t obj_len, git_object_t obj_type);
81
f19e3ca2
VM
82/*
83 * Hash an open file descriptor.
84 * This is a performance call when the contents of a fd need to be hashed,
85 * but the fd is already open and we have the size of the contents.
86 *
87 * Saves us some `stat` calls.
88 *
89 * The fd is never closed, not even on error. It must be opened and closed
90 * by the caller
91 */
ac3d33df 92int git_odb__hashfd(git_oid *out, git_file fd, size_t size, git_object_t type);
7d7cd885 93
f19e3ca2 94/*
60b9d3fc
RB
95 * Hash an open file descriptor applying an array of filters
96 * Acts just like git_odb__hashfd with the addition of filters...
97 */
98int git_odb__hashfd_filtered(
ac3d33df 99 git_oid *out, git_file fd, size_t len, git_object_t type, git_filter_list *fl);
60b9d3fc
RB
100
101/*
102 * Hash a `path`, assuming it could be a POSIX symlink: if the path is a
103 * symlink, then the raw contents of the symlink will be hashed. Otherwise,
104 * this will fallback to `git_odb__hashfd`.
f19e3ca2 105 *
22a2d3d5 106 * The hash type for this call is always `GIT_OBJECT_BLOB` because
ac3d33df 107 * symlinks may only point to blobs.
f19e3ca2
VM
108 */
109int git_odb__hashlink(git_oid *out, const char *path);
110
28a0741f
PS
111/**
112 * Generate a GIT_EMISMATCH error for the ODB.
113 */
114int git_odb__error_mismatch(
115 const git_oid *expected, const git_oid *actual);
116
e1de726c
RB
117/*
118 * Generate a GIT_ENOTFOUND error for the ODB.
119 */
e10144ae
ET
120int git_odb__error_notfound(
121 const char *message, const git_oid *oid, size_t oid_len);
e1de726c
RB
122
123/*
124 * Generate a GIT_EAMBIGUOUS error for the ODB.
125 */
126int git_odb__error_ambiguous(const char *message);
127
c6ac28fd
RB
128/*
129 * Attempt to read object header or just return whole object if it could
130 * not be read.
131 */
132int git_odb__read_header_or_object(
ac3d33df 133 git_odb_object **out, size_t *len_p, git_object_t *type_p,
c6ac28fd
RB
134 git_odb *db, const git_oid *id);
135
c25aa7cd
PP
136/*
137 * Attempt to get the ODB's commit-graph file. This object is still owned by
138 * the ODB. If the repository does not contain a commit-graph, it will return
139 * GIT_ENOTFOUND.
140 */
141int git_odb__get_commit_graph_file(git_commit_graph_file **out, git_odb *odb);
142
52d03f37
ET
143/* freshen an entry in the object database */
144int git_odb__freshen(git_odb *db, const git_oid *id);
145
78606263
RB
146/* fully free the object; internal method, DO NOT EXPORT */
147void git_odb_object__free(void *object);
148
a7c60cfc 149#endif