Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'include/git2/odb_backend.h')
-rw-r--r--include/git2/odb_backend.h61
1 files changed, 55 insertions, 6 deletions
diff --git a/include/git2/odb_backend.h b/include/git2/odb_backend.h
index f4620f5f4..dbc3981f6 100644
--- a/include/git2/odb_backend.h
+++ b/include/git2/odb_backend.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009-2012 the libgit2 contributors
+ * 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.
@@ -10,6 +10,7 @@
#include "common.h"
#include "types.h"
#include "oid.h"
+#include "indexer.h"
/**
* @file git2/backend.h
@@ -21,11 +22,24 @@
GIT_BEGIN_DECL
struct git_odb_stream;
+struct git_odb_writepack;
-/** An instance for a custom backend */
+/**
+ * Function type for callbacks from git_odb_foreach.
+ */
+typedef int (*git_odb_foreach_cb)(const git_oid *id, void *payload);
+
+/**
+ * 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 *,
struct git_odb_backend *,
@@ -42,13 +56,17 @@ struct git_odb_backend {
void **, size_t *, git_otype *,
struct git_odb_backend *,
const git_oid *,
- unsigned int);
+ size_t);
int (* read_header)(
size_t *, git_otype *,
struct git_odb_backend *,
const git_oid *);
+ /* The writer may assume that the object
+ * has already been hashed and is passed
+ * in the first parameter.
+ */
int (* write)(
git_oid *,
struct git_odb_backend *,
@@ -71,9 +89,25 @@ struct git_odb_backend {
struct git_odb_backend *,
const git_oid *);
+ int (* refresh)(struct git_odb_backend *);
+
+ int (* foreach)(
+ struct git_odb_backend *,
+ git_odb_foreach_cb cb,
+ void *payload);
+
+ int (* writepack)(
+ struct git_odb_writepack **,
+ struct git_odb_backend *,
+ git_transfer_progress_callback progress_cb,
+ void *progress_payload);
+
void (* free)(struct git_odb_backend *);
};
+#define GIT_ODB_BACKEND_VERSION 1
+#define GIT_ODB_BACKEND_INIT {GIT_ODB_BACKEND_VERSION}
+
/** Streaming mode */
enum {
GIT_STREAM_RDONLY = (1 << 1),
@@ -84,7 +118,7 @@ enum {
/** A stream to read/write from a backend */
struct git_odb_stream {
struct git_odb_backend *backend;
- int mode;
+ unsigned int mode;
int (*read)(struct git_odb_stream *stream, char *buffer, size_t len);
int (*write)(struct git_odb_stream *stream, const char *buffer, size_t len);
@@ -92,8 +126,23 @@ struct git_odb_stream {
void (*free)(struct git_odb_stream *stream);
};
-GIT_EXTERN(int) git_odb_backend_pack(git_odb_backend **backend_out, const char *objects_dir);
-GIT_EXTERN(int) git_odb_backend_loose(git_odb_backend **backend_out, const char *objects_dir, int compression_level, int do_fsync);
+/** A stream to write a pack file to the ODB */
+struct git_odb_writepack {
+ struct git_odb_backend *backend;
+
+ int (*add)(struct git_odb_writepack *writepack, const void *data, size_t size, git_transfer_progress *stats);
+ int (*commit)(struct git_odb_writepack *writepack, git_transfer_progress *stats);
+ void (*free)(struct git_odb_writepack *writepack);
+};
+
+GIT_EXTERN(void *) git_odb_backend_malloc(git_odb_backend *backend, size_t len);
+
+/**
+ * Constructors for in-box ODB backends.
+ */
+GIT_EXTERN(int) git_odb_backend_pack(git_odb_backend **out, const char *objects_dir);
+GIT_EXTERN(int) git_odb_backend_loose(git_odb_backend **out, const char *objects_dir, int compression_level, int do_fsync);
+GIT_EXTERN(int) git_odb_backend_one_pack(git_odb_backend **out, const char *index_file);
GIT_END_DECL