]>
git.proxmox.com Git - libgit2.git/blob - src/odb.h
2 * Copyright (C) the libgit2 contributors. All rights reserved.
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.
7 #ifndef INCLUDE_odb_h__
8 #define INCLUDE_odb_h__
12 #include "git2/types.h"
18 #define GIT_OBJECTS_DIR "objects/"
19 #define GIT_OBJECT_DIR_MODE 0777
20 #define GIT_OBJECT_FILE_MODE 0444
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. */
30 struct git_odb_object
{
31 git_cached_obj cached
;
43 * Hash a git_rawobj internally.
44 * The `git_rawobj` is supposed to be previously initialized
46 int git_odb__hashobj(git_oid
*id
, git_rawobj
*obj
);
49 * Format the object header such as it would appear in the on-disk object
51 int git_odb__format_object_header(char *hdr
, size_t n
, size_t obj_len
, git_otype obj_type
);
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.
57 * Saves us some `stat` calls.
59 * The fd is never closed, not even on error. It must be opened and closed
62 int git_odb__hashfd(git_oid
*out
, git_file fd
, size_t size
, git_otype type
);
65 * Hash an open file descriptor applying an array of filters
66 * Acts just like git_odb__hashfd with the addition of filters...
68 int git_odb__hashfd_filtered(
69 git_oid
*out
, git_file fd
, size_t len
, git_otype type
, git_vector
*filters
);
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`.
76 * The hash type for this call is always `GIT_OBJ_BLOB` because symlinks may
77 * only point to blobs.
79 int git_odb__hashlink(git_oid
*out
, const char *path
);
82 * Generate a GIT_ENOTFOUND error for the ODB.
84 int git_odb__error_notfound(const char *message
, const git_oid
*oid
);
87 * Generate a GIT_EAMBIGUOUS error for the ODB.
89 int git_odb__error_ambiguous(const char *message
);
92 * Attempt to read object header or just return whole object if it could
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
);
99 /* fully free the object; internal method, DO NOT EXPORT */
100 void git_odb_object__free(void *object
);