mirror of
https://github.com/etaHEN/etaHEN.git
synced 2026-01-14 20:14:39 +08:00
118 lines
3.9 KiB
C
118 lines
3.9 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_mempack_h__
|
|
#define INCLUDE_sys_git_odb_mempack_h__
|
|
|
|
#include "git2/common.h"
|
|
#include "git2/types.h"
|
|
#include "git2/oid.h"
|
|
#include "git2/odb.h"
|
|
#include "git2/buffer.h"
|
|
|
|
/**
|
|
* @file git2/sys/mempack.h
|
|
* @brief A custom object database backend for storing objects in-memory
|
|
* @defgroup git_mempack A custom object database backend for storing objects in-memory
|
|
* @ingroup Git
|
|
* @{
|
|
*/
|
|
GIT_BEGIN_DECL
|
|
|
|
/**
|
|
* Instantiate a new mempack backend.
|
|
*
|
|
* The backend must be added to an existing ODB with the highest
|
|
* priority.
|
|
*
|
|
* git_mempack_new(&mempacker);
|
|
* git_repository_odb(&odb, repository);
|
|
* git_odb_add_backend(odb, mempacker, 999);
|
|
*
|
|
* Once the backend has been loaded, all writes to the ODB will
|
|
* instead be queued in memory, and can be finalized with
|
|
* `git_mempack_dump`.
|
|
*
|
|
* Subsequent reads will also be served from the in-memory store
|
|
* to ensure consistency, until the memory store is dumped.
|
|
*
|
|
* @param out Pointer where to store the ODB backend
|
|
* @return 0 on success; error code otherwise
|
|
*/
|
|
GIT_EXTERN(int) git_mempack_new(git_odb_backend **out);
|
|
|
|
/**
|
|
* Write a thin packfile with the objects in the memory store.
|
|
*
|
|
* A thin packfile is a packfile that does not contain its transitive closure of
|
|
* references. This is useful for efficiently distributing additions to a
|
|
* repository over the network, but also finds use in the efficient bulk
|
|
* addition of objects to a repository, locally.
|
|
*
|
|
* This operation performs the (shallow) insert operations into the
|
|
* `git_packbuilder`, but does not write the packfile to disk;
|
|
* see `git_packbuilder_write_buf`.
|
|
*
|
|
* It also does not reset the in-memory object database; see `git_mempack_reset`.
|
|
*
|
|
* @param backend The mempack backend
|
|
* @param pb The packbuilder to use to write the packfile
|
|
* @return 0 on success or an error code
|
|
*/
|
|
GIT_EXTERN(int) git_mempack_write_thin_pack(git_odb_backend *backend, git_packbuilder *pb);
|
|
|
|
/**
|
|
* Dump all the queued in-memory writes to a packfile.
|
|
*
|
|
* The contents of the packfile will be stored in the given buffer.
|
|
* It is the caller's responsibility to ensure that the generated
|
|
* packfile is available to the repository (e.g. by writing it
|
|
* to disk, or doing something crazy like distributing it across
|
|
* several copies of the repository over a network).
|
|
*
|
|
* Once the generated packfile is available to the repository,
|
|
* call `git_mempack_reset` to cleanup the memory store.
|
|
*
|
|
* Calling `git_mempack_reset` before the packfile has been
|
|
* written to disk will result in an inconsistent repository
|
|
* (the objects in the memory store won't be accessible).
|
|
*
|
|
* @param pack Buffer where to store the raw packfile
|
|
* @param repo The active repository where the backend is loaded
|
|
* @param backend The mempack backend
|
|
* @return 0 on success; error code otherwise
|
|
*/
|
|
GIT_EXTERN(int) git_mempack_dump(git_buf *pack, git_repository *repo, git_odb_backend *backend);
|
|
|
|
/**
|
|
* Reset the memory packer by clearing all the queued objects.
|
|
*
|
|
* This assumes that `git_mempack_dump` has been called before to
|
|
* store all the queued objects into a single packfile.
|
|
*
|
|
* Alternatively, call `reset` without a previous dump to "undo"
|
|
* all the recently written objects, giving transaction-like
|
|
* semantics to the Git repository.
|
|
*
|
|
* @param backend The mempack backend
|
|
* @return 0 on success; error code otherwise
|
|
*/
|
|
GIT_EXTERN(int) git_mempack_reset(git_odb_backend *backend);
|
|
|
|
/**
|
|
* Get the total number of objects in mempack
|
|
*
|
|
* @param count The count of objects in the mempack
|
|
* @param backend The mempack backend
|
|
* @return 0 on success, or -1 on error
|
|
*/
|
|
GIT_EXTERN(int) git_mempack_object_count(size_t *count, git_odb_backend *backend);
|
|
|
|
/** @} */
|
|
GIT_END_DECL
|
|
|
|
#endif
|