mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-03 23:24:51 +00:00

There were a couple of "init_opts()" functions a few more cases of structure initialization that I somehow missed.
109 lines
3.2 KiB
C
109 lines
3.2 KiB
C
/*
|
|
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
*
|
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
*/
|
|
#ifndef INCLUDE_sys_git_odb_backend_h__
|
|
#define INCLUDE_sys_git_odb_backend_h__
|
|
|
|
#include "git2/common.h"
|
|
#include "git2/types.h"
|
|
#include "git2/oid.h"
|
|
#include "git2/odb.h"
|
|
|
|
/**
|
|
* @file git2/sys/backend.h
|
|
* @brief Git custom backend implementors functions
|
|
* @defgroup git_backend Git custom backend APIs
|
|
* @ingroup Git
|
|
* @{
|
|
*/
|
|
GIT_BEGIN_DECL
|
|
|
|
/**
|
|
* An instance for a custom backend
|
|
*/
|
|
struct git_odb_backend {
|
|
unsigned int version;
|
|
git_odb *odb;
|
|
|
|
/* read and read_prefix each return to libgit2 a buffer which
|
|
* will be freed later. The buffer should be allocated using
|
|
* the function git_odb_backend_malloc to ensure that it can
|
|
* be safely freed later. */
|
|
int (* read)(
|
|
void **, size_t *, git_otype *, git_odb_backend *, const git_oid *);
|
|
|
|
/* To find a unique object given a prefix of its oid. The oid given
|
|
* must be so that the remaining (GIT_OID_HEXSZ - len)*4 bits are 0s.
|
|
*/
|
|
int (* read_prefix)(
|
|
git_oid *, void **, size_t *, git_otype *,
|
|
git_odb_backend *, const git_oid *, size_t);
|
|
|
|
int (* read_header)(
|
|
size_t *, git_otype *, git_odb_backend *, const git_oid *);
|
|
|
|
/**
|
|
* Write an object into the backend. The id of the object has
|
|
* already been calculated and is passed in.
|
|
*/
|
|
int (* write)(
|
|
git_odb_backend *, const git_oid *, const void *, size_t, git_otype);
|
|
|
|
int (* writestream)(
|
|
git_odb_stream **, git_odb_backend *, size_t, git_otype);
|
|
|
|
int (* readstream)(
|
|
git_odb_stream **, git_odb_backend *, const git_oid *);
|
|
|
|
int (* exists)(
|
|
git_odb_backend *, const git_oid *);
|
|
|
|
int (* exists_prefix)(
|
|
git_oid *, git_odb_backend *, const git_oid *, size_t);
|
|
|
|
/**
|
|
* If the backend implements a refreshing mechanism, it should be exposed
|
|
* through this endpoint. Each call to `git_odb_refresh()` will invoke it.
|
|
*
|
|
* However, the backend implementation should try to stay up-to-date as much
|
|
* as possible by itself as libgit2 will not automatically invoke
|
|
* `git_odb_refresh()`. For instance, a potential strategy for the backend
|
|
* implementation to achieve this could be to internally invoke this
|
|
* endpoint on failed lookups (ie. `exists()`, `read()`, `read_header()`).
|
|
*/
|
|
int (* refresh)(git_odb_backend *);
|
|
|
|
int (* foreach)(
|
|
git_odb_backend *, git_odb_foreach_cb cb, void *payload);
|
|
|
|
int (* writepack)(
|
|
git_odb_writepack **, git_odb_backend *, git_odb *odb,
|
|
git_transfer_progress_cb progress_cb, void *progress_payload);
|
|
|
|
void (* free)(git_odb_backend *);
|
|
};
|
|
|
|
#define GIT_ODB_BACKEND_VERSION 1
|
|
#define GIT_ODB_BACKEND_INIT {GIT_ODB_BACKEND_VERSION}
|
|
|
|
/**
|
|
* Initializes a `git_odb_backend` with default values. Equivalent to
|
|
* creating an instance with GIT_ODB_BACKEND_INIT.
|
|
*
|
|
* @param opts the `git_odb_backend` struct to initialize.
|
|
* @param version Version the struct; pass `GIT_ODB_BACKEND_VERSION`
|
|
* @return Zero on success; -1 on failure.
|
|
*/
|
|
GIT_EXTERN(int) git_odb_init_backend(
|
|
git_odb_backend *backend,
|
|
unsigned int version);
|
|
|
|
GIT_EXTERN(void *) git_odb_backend_malloc(git_odb_backend *backend, size_t len);
|
|
|
|
GIT_END_DECL
|
|
|
|
#endif
|