summaryrefslogtreecommitdiffstats
path: root/extra/git2/src/mempack.rs
diff options
context:
space:
mode:
Diffstat (limited to 'extra/git2/src/mempack.rs')
-rw-r--r--extra/git2/src/mempack.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/extra/git2/src/mempack.rs b/extra/git2/src/mempack.rs
new file mode 100644
index 000000000..a78070791
--- /dev/null
+++ b/extra/git2/src/mempack.rs
@@ -0,0 +1,49 @@
+use std::marker;
+
+use crate::util::Binding;
+use crate::{raw, Buf, Error, Odb, Repository};
+
+/// A structure to represent a mempack backend for the object database. The
+/// Mempack is bound to the Odb that it was created from, and cannot outlive
+/// that Odb.
+pub struct Mempack<'odb> {
+ raw: *mut raw::git_odb_backend,
+ _marker: marker::PhantomData<&'odb Odb<'odb>>,
+}
+
+impl<'odb> Binding for Mempack<'odb> {
+ type Raw = *mut raw::git_odb_backend;
+
+ unsafe fn from_raw(raw: *mut raw::git_odb_backend) -> Mempack<'odb> {
+ Mempack {
+ raw,
+ _marker: marker::PhantomData,
+ }
+ }
+
+ fn raw(&self) -> *mut raw::git_odb_backend {
+ self.raw
+ }
+}
+
+// We don't need to implement `Drop` for Mempack because it is owned by the
+// odb to which it is attached, and that will take care of freeing the mempack
+// and associated memory.
+
+impl<'odb> Mempack<'odb> {
+ /// Dumps the contents of the mempack into the provided buffer.
+ pub fn dump(&self, repo: &Repository, buf: &mut Buf) -> Result<(), Error> {
+ unsafe {
+ try_call!(raw::git_mempack_dump(buf.raw(), repo.raw(), self.raw));
+ }
+ Ok(())
+ }
+
+ /// Clears all data in the mempack.
+ pub fn reset(&self) -> Result<(), Error> {
+ unsafe {
+ try_call!(raw::git_mempack_reset(self.raw));
+ }
+ Ok(())
+ }
+}