Commit 6c9dc12b6a86290af63ed11f1209ebad91e3e1ca

Vicent Martí 2013-04-23T11:37:40

Merge pull request #1501 from xavier-l/packbuilder-commit Added function to insert commit into pack

diff --git a/include/git2/pack.h b/include/git2/pack.h
index 2f033be..118b8d5 100644
--- a/include/git2/pack.h
+++ b/include/git2/pack.h
@@ -95,6 +95,18 @@ GIT_EXTERN(int) git_packbuilder_insert(git_packbuilder *pb, const git_oid *id, c
 GIT_EXTERN(int) git_packbuilder_insert_tree(git_packbuilder *pb, const git_oid *id);
 
 /**
+ * Insert a commit object
+ * 
+ * This will add a commit as well as the completed referenced tree.
+ * 
+ * @param pb The packbuilder
+ * @param id The oid of the commit
+ * 
+ * @return 0 or an error code
+ */
+GIT_EXTERN(int) git_packbuilder_insert_commit(git_packbuilder *pb, const git_oid *id);
+
+/**
  * Write the new pack and the corresponding index to path
  *
  * @param pb The packbuilder
diff --git a/src/pack-objects.c b/src/pack-objects.c
index 459201f..1329a9b 100644
--- a/src/pack-objects.c
+++ b/src/pack-objects.c
@@ -1284,6 +1284,21 @@ static int cb_tree_walk(const char *root, const git_tree_entry *entry, void *pay
 		git_buf_cstr(&ctx->buf));
 }
 
+int git_packbuilder_insert_commit(git_packbuilder *pb, const git_oid *oid)
+{
+	git_commit *commit;
+
+	if (git_commit_lookup(&commit, pb->repo, oid) < 0 ||
+		git_packbuilder_insert(pb, oid, NULL) < 0)
+		return -1;
+
+	if (git_packbuilder_insert_tree(pb, git_commit_tree_id(commit)) < 0)
+		return -1;
+
+	git_commit_free(commit);
+	return 0;
+}
+
 int git_packbuilder_insert_tree(git_packbuilder *pb, const git_oid *oid)
 {
 	git_tree *tree;