Commit 92550398 by John Wiegley Committed by Russell Belfer

Added git_commit_create_oid

parent 1384b688
...@@ -287,6 +287,26 @@ GIT_EXTERN(int) git_commit_create_v( ...@@ -287,6 +287,26 @@ GIT_EXTERN(int) git_commit_create_v(
int parent_count, 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 GIT_END_DECL
#endif #endif
...@@ -76,7 +76,7 @@ int git_commit_create_v( ...@@ -76,7 +76,7 @@ int git_commit_create_v(
return res; return res;
} }
int git_commit_create( int git_commit_create_oid(
git_oid *oid, git_oid *oid,
git_repository *repo, git_repository *repo,
const char *update_ref, const char *update_ref,
...@@ -84,22 +84,18 @@ int git_commit_create( ...@@ -84,22 +84,18 @@ int git_commit_create(
const git_signature *committer, const git_signature *committer,
const char *message_encoding, const char *message_encoding,
const char *message, const char *message,
const git_tree *tree, const git_oid *tree,
int parent_count, int parent_count,
const git_commit *parents[]) const git_oid *parents[])
{ {
git_buf commit = GIT_BUF_INIT; git_buf commit = GIT_BUF_INIT;
int i; int i;
git_odb *odb; git_odb *odb;
assert(git_object_owner((const git_object *)tree) == repo); git_oid__writebuf(&commit, "tree ", tree);
git_oid__writebuf(&commit, "tree ", git_object_id((const git_object *)tree));
for (i = 0; i < parent_count; ++i) { for (i = 0; i < parent_count; ++i)
assert(git_object_owner((const git_object *)parents[i]) == repo); git_oid__writebuf(&commit, "parent ", parents[i]);
git_oid__writebuf(&commit, "parent ", git_object_id((const git_object *)parents[i]));
}
git_signature__writebuf(&commit, "author ", author); git_signature__writebuf(&commit, "author ", author);
git_signature__writebuf(&commit, "committer ", committer); git_signature__writebuf(&commit, "committer ", committer);
...@@ -131,6 +127,40 @@ on_error: ...@@ -131,6 +127,40 @@ on_error:
return -1; 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) int git_commit__parse_buffer(git_commit *commit, const void *data, size_t len)
{ {
const char *buffer = data; const char *buffer = data;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment