diff options
author | Vicent Martà <tanoku@gmail.com> | 2011-05-02 15:29:50 -0700 |
---|---|---|
committer | Vicent Martà <tanoku@gmail.com> | 2011-05-02 15:29:50 -0700 |
commit | cc3b82e376e0216c1af4ad46d24327d61e9efd99 (patch) | |
tree | f3d617b50af44f28caa440fd012947a6498c76e2 /src/commit.c | |
parent | fde97669ec7f07b339233601f39100ecfc089c53 (diff) | |
parent | 79b61557366db4550d1122bfa88b9851a5e2f5aa (diff) | |
download | libgit2-cc3b82e376e0216c1af4ad46d24327d61e9efd99.tar.gz |
Merge pull request #151 from carlosmn/root-commit.
Support root commits
Diffstat (limited to 'src/commit.c')
-rw-r--r-- | src/commit.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/commit.c b/src/commit.c index 9621703c3..0c37ec59b 100644 --- a/src/commit.c +++ b/src/commit.c @@ -224,9 +224,18 @@ int git_commit_create( if (error < GIT_SUCCESS) return error; - if (git_reference_type(head) == GIT_REF_SYMBOLIC) { - if ((error = git_reference_resolve(&head, head)) < GIT_SUCCESS) + error = git_reference_resolve(&head, head); + if (error < GIT_SUCCESS) { + if (error != GIT_ENOTFOUND) 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); |