]> git.proxmox.com Git - libgit2.git/commitdiff
Added git_commit_create_oid
authorJohn Wiegley <johnw@fpcomplete.com>
Tue, 29 Jan 2013 15:53:23 +0000 (09:53 -0600)
committerRussell Belfer <rb@github.com>
Sun, 21 Apr 2013 18:50:56 +0000 (11:50 -0700)
include/git2/commit.h
src/commit.c

index 764053eaa38b690115bf6bf8bf09b093be66bdf3..e7ef51816f81ec4a1829db7288b146719ba90b33 100644 (file)
@@ -287,6 +287,26 @@ GIT_EXTERN(int) git_commit_create_v(
                int parent_count,
                ...);
 
+/**
+ * Create a new commit in the repository, as with `git_commit_create`,
+ * using `git_oid` instances as parameters instead of `git_object`.
+ *
+ * See documentation for `git_commit_create` for information about the
+ * parameters, as the meaning is identical excepting that `tree` and
+ * `parents` now take `git_oid`.
+ */
+GIT_EXTERN(int) git_commit_create_oid(
+               git_oid *oid,
+               git_repository *repo,
+               const char *update_ref,
+               const git_signature *author,
+               const git_signature *committer,
+               const char *message_encoding,
+               const char *message,
+               const git_oid *tree,
+               int parent_count,
+               const git_oid *parents[]);
+
 /** @} */
 GIT_END_DECL
 #endif
index c7b83ed432bf468126cc4203ab1aa6ca56713893..e6bfd95ce63c00035a993fd37cb55ece8f187a16 100644 (file)
@@ -76,7 +76,7 @@ int git_commit_create_v(
        return res;
 }
 
-int git_commit_create(
+int git_commit_create_oid(
                git_oid *oid,
                git_repository *repo,
                const char *update_ref,
@@ -84,22 +84,18 @@ int git_commit_create(
                const git_signature *committer,
                const char *message_encoding,
                const char *message,
-               const git_tree *tree,
+               const git_oid *tree,
                int parent_count,
-               const git_commit *parents[])
+               const git_oid *parents[])
 {
        git_buf commit = GIT_BUF_INIT;
        int i;
        git_odb *odb;
 
-       assert(git_object_owner((const git_object *)tree) == repo);
-
-       git_oid__writebuf(&commit, "tree ", git_object_id((const git_object *)tree));
+       git_oid__writebuf(&commit, "tree ", tree);
 
-       for (i = 0; i < parent_count; ++i) {
-               assert(git_object_owner((const git_object *)parents[i]) == repo);
-               git_oid__writebuf(&commit, "parent ", git_object_id((const git_object *)parents[i]));
-       }
+       for (i = 0; i < parent_count; ++i)
+               git_oid__writebuf(&commit, "parent ", parents[i]);
 
        git_signature__writebuf(&commit, "author ", author);
        git_signature__writebuf(&commit, "committer ", committer);
@@ -131,6 +127,40 @@ on_error:
        return -1;
 }
 
+int git_commit_create(
+               git_oid *oid,
+               git_repository *repo,
+               const char *update_ref,
+               const git_signature *author,
+               const git_signature *committer,
+               const char *message_encoding,
+               const char *message,
+               const git_tree *tree,
+               int parent_count,
+               const git_commit *parents[])
+{
+        int retval, i;
+       const git_oid **parent_oids;
+
+       assert(git_object_owner((const git_object *)tree) == repo);
+
+       parent_oids = git__malloc(parent_count * sizeof(git_oid *));
+       GITERR_CHECK_ALLOC(parent_oids);
+
+       for (i = 0; i < parent_count; ++i) {
+               assert(git_object_owner((const git_object *)parents[i]) == repo);
+               parent_oids[i] = git_object_id((const git_object *)parents[i]);
+       }
+
+       retval = git_commit_create_oid(oid, repo, update_ref, author, committer,
+                                       message_encoding, message,
+                                       git_object_id((const git_object *)tree),
+                                       parent_count, parent_oids);
+
+       git__free((void *)parent_oids);
+        return retval;
+}
+
 int git_commit__parse_buffer(git_commit *commit, const void *data, size_t len)
 {
        const char *buffer = data;