Commit 8381238e by Carlos Martín Nieto

commit: support a root commits

A root commit is a commit whose branch (usually what HEAD points to)
doesn't exist (yet). This situation can happen when the commit is the
first after 1) a repository is initialized or 2) a orphan checkout has
been performed.

Take this opportunity to remove the symbolic link check, as
git_reference_resolve works on OID refs as well.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
parent 68a146c1
...@@ -224,9 +224,18 @@ int git_commit_create( ...@@ -224,9 +224,18 @@ int git_commit_create(
if (error < GIT_SUCCESS) if (error < GIT_SUCCESS)
return error; return error;
if (git_reference_type(head) == GIT_REF_SYMBOLIC) { error = git_reference_resolve(&head, head);
if ((error = git_reference_resolve(&head, head)) < GIT_SUCCESS) if (error < GIT_SUCCESS) {
if (error != GIT_ENOTFOUND)
return error; return error;
/*
* The target of the reference was not found. This can happen
* just after a repository has been initialized (the master
* branch doesn't exist yet, as it doesn't have anything to
* point to) or after an orphan checkout, so if the target
* branch doesn't exist yet, create it and return.
*/
return git_reference_create_oid_f(&head, repo, git_reference_target(head), oid);
} }
error = git_reference_set_oid(head, oid); error = git_reference_set_oid(head, oid);
......
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