summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorMichael Schubert <schu@schu.io>2012-08-19 22:26:32 +0200
committerMichael Schubert <schu@schu.io>2012-10-09 21:28:31 +0200
commit0a32dca5ecbd4c56b02ba78af4174ac7f65a786c (patch)
tree733f2d3113d96524c1e4c05d7e98c03baf07614f /include
parentec1d42b7d5eb5a25b504277bee5b0cc97931e1a7 (diff)
downloadlibgit2-0a32dca5ecbd4c56b02ba78af4174ac7f65a786c.tar.gz
gsoc-pack-objects WIP
Diffstat (limited to 'include')
-rw-r--r--include/git2.h1
-rw-r--r--include/git2/errors.h1
-rw-r--r--include/git2/pack.h89
-rw-r--r--include/git2/types.h3
4 files changed, 94 insertions, 0 deletions
diff --git a/include/git2.h b/include/git2.h
index 805044abb..d55543986 100644
--- a/include/git2.h
+++ b/include/git2.h
@@ -51,5 +51,6 @@
#include "git2/notes.h"
#include "git2/reset.h"
#include "git2/message.h"
+#include "git2/pack.h"
#endif
diff --git a/include/git2/errors.h b/include/git2/errors.h
index f6d9bf2e3..1c4e910a6 100644
--- a/include/git2/errors.h
+++ b/include/git2/errors.h
@@ -56,6 +56,7 @@ typedef enum {
GITERR_INDEXER,
GITERR_SSL,
GITERR_SUBMODULE,
+ GITERR_THREAD,
} git_error_t;
/**
diff --git a/include/git2/pack.h b/include/git2/pack.h
new file mode 100644
index 000000000..748ad2e11
--- /dev/null
+++ b/include/git2/pack.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2009-2012 the libgit2 contributors
+ *
+ * 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_git_pack_h__
+#define INCLUDE_git_pack_h__
+
+#include "common.h"
+#include "oid.h"
+
+/**
+ * @file git2/pack.h
+ * @brief Git pack management routines
+ * @defgroup git_pack Git pack management routines
+ * @ingroup Git
+ * @{
+ */
+GIT_BEGIN_DECL
+
+/**
+ * Initialize a new packbuilder
+ *
+ * @param out The new packbuilder object
+ * @param repo The repository
+ *
+ * @return 0 or an error code
+ */
+GIT_EXTERN(int) git_packbuilder_new(git_packbuilder **out, git_repository *repo);
+
+/**
+ * Set number of threads to spawn
+ *
+ * By default, libgit2 won't spawn any threads at all;
+ * when set to 0, libgit2 will autodetect the number of
+ * CPUs.
+ *
+ * @param pb The packbuilder
+ * @param n Number of threads to spawn
+ */
+GIT_EXTERN(void) git_packbuilder_set_threads(git_packbuilder *pb, unsigned int n);
+
+/**
+ * Insert a single object
+ *
+ * For an optimal pack it's mandatory to insert objects in recency order,
+ * commits followed by trees and blobs.
+ *
+ * @param pb The packbuilder
+ * @param oid The oid of the commit
+ * @param oid The name; might be NULL
+ *
+ * @return 0 or an error code
+ */
+GIT_EXTERN(int) git_packbuilder_insert(git_packbuilder *pb, const git_oid *oid, const char *name);
+
+/**
+ * Insert a root tree object
+ *
+ * This will add the tree as well as all referenced trees and blobs.
+ *
+ * @param pb The packbuilder
+ * @param oid The oid of the root tree
+ *
+ * @return 0 or an error code
+ */
+GIT_EXTERN(int) git_packbuilder_insert_tree(git_packbuilder *pb, const git_oid *oid);
+
+/**
+ * Write the new pack and the corresponding index to path
+ *
+ * @param pb The packbuilder
+ * @param path Directory to store the new pack and index
+ *
+ * @return 0 or an error code
+ */
+GIT_EXTERN(int) git_packbuilder_write(git_packbuilder *pb, const char *file);
+
+/**
+ * Free the packbuilder and all associated data
+ *
+ * @param pb The packbuilder
+ */
+GIT_EXTERN(void) git_packbuilder_free(git_packbuilder *pb);
+
+/** @} */
+GIT_END_DECL
+#endif
diff --git a/include/git2/types.h b/include/git2/types.h
index 26e9c57e7..01ddbf3d6 100644
--- a/include/git2/types.h
+++ b/include/git2/types.h
@@ -137,6 +137,9 @@ typedef struct git_reflog git_reflog;
/** Representation of a git note */
typedef struct git_note git_note;
+/** Representation of a git packbuilder */
+typedef struct git_packbuilder git_packbuilder;
+
/** Time in a signature */
typedef struct git_time {
git_time_t time; /** time in seconds from epoch */