summaryrefslogtreecommitdiff
path: root/src/commit.c
diff options
context:
space:
mode:
authorJakob Pfender <jpfender@elegosoft.com>2011-05-17 15:31:05 +0200
committerJakob Pfender <jpfender@elegosoft.com>2011-05-17 15:31:05 +0200
commit050e8877dda969b62f47a180b865a4447785e9c7 (patch)
tree42ba240edc5f0c0f49e7effe7f8881df2fdca775 /src/commit.c
parente3c7786b22b385d7ec5049c5315c74bd37182e8c (diff)
parentc9662061f25ea51f39018a278b98c9a9b4410e84 (diff)
downloadlibgit2-050e8877dda969b62f47a180b865a4447785e9c7.tar.gz
Merge branch 'development' into unmerged
Diffstat (limited to 'src/commit.c')
-rw-r--r--src/commit.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/commit.c b/src/commit.c
index 9621703c3..54d7a47fe 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);
@@ -277,7 +286,7 @@ int commit_parse_buffer(git_commit *commit, const void *data, size_t len)
if (buffer < buffer_end) {
const char *line_end;
- size_t message_len = buffer_end - buffer;
+ size_t message_len;
/* Long message */
message_len = buffer_end - buffer;