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