1 /*
2 * Copyright (C) the libgit2 contributors. All rights reserved.
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 */7 modulelibgit2_d.sys.mempack;
8 9 10 privatestaticimportlibgit2_d.buffer;
11 privatestaticimportlibgit2_d.types;
12 13 /**
14 * @file git2/sys/mempack.h
15 * @brief Custom ODB backend that permits packing objects in-memory
16 * @defgroup git_backend Git custom backend APIs
17 * @ingroup Git
18 * @{
19 */20 extern (C):
21 nothrow @nogc:
22 package(libgit2_d):
23 24 /**
25 * Instantiate a new mempack backend.
26 *
27 * The backend must be added to an existing ODB with the highest
28 * priority.
29 *
30 * git_mempack_new(&mempacker);
31 * git_repository_odb(&odb, repository);
32 * git_odb_add_backend(odb, mempacker, 999);
33 *
34 * Once the backend has been loaded, all writes to the ODB will
35 * instead be queued in memory, and can be finalized with
36 * `git_mempack_dump`.
37 *
38 * Subsequent reads will also be served from the in-memory store
39 * to ensure consistency, until the memory store is dumped.
40 *
41 * Params:
42 * out_ = Pointer where to store the ODB backend
43 *
44 * Returns: 0 on success; error code otherwise
45 */46 //GIT_EXTERN47 intgit_mempack_new(libgit2_d.types.git_odb_backend** out_);
48 49 /**
50 * Dump all the queued in-memory writes to a packfile.
51 *
52 * The contents of the packfile will be stored in the given buffer.
53 * It is the caller's responsibility to ensure that the generated
54 * packfile is available to the repository (e.g. by writing it
55 * to disk, or doing something crazy like distributing it across
56 * several copies of the repository over a network).
57 *
58 * Once the generated packfile is available to the repository,
59 * call `git_mempack_reset` to cleanup the memory store.
60 *
61 * Calling `git_mempack_reset` before the packfile has been
62 * written to disk will result in an inconsistent repository
63 * (the objects in the memory store won't be accessible).
64 *
65 * Params:
66 * pack = Buffer where to store the raw packfile
67 * repo = The active repository where the backend is loaded
68 * backend = The mempack backend
69 *
70 * Returns: 0 on success; error code otherwise
71 */72 //GIT_EXTERN73 intgit_mempack_dump(libgit2_d.buffer.git_buf* pack, libgit2_d.types.git_repository* repo, libgit2_d.types.git_odb_backend* backend);
74 75 /**
76 * Reset the memory packer by clearing all the queued objects.
77 *
78 * This assumes that `git_mempack_dump` has been called before to
79 * store all the queued objects into a single packfile.
80 *
81 * Alternatively, call `reset` without a previous dump to "undo"
82 * all the recently written objects, giving transaction-like
83 * semantics to the Git repository.
84 *
85 * Params:
86 * backend = The mempack backend
87 *
88 * Returns: 0 on success; error code otherwise
89 */90 //GIT_EXTERN91 intgit_mempack_reset(libgit2_d.types.git_odb_backend* backend);