diff options
author | Russell Belfer <arrbee@arrbee.com> | 2012-03-20 04:49:46 +0400 |
---|---|---|
committer | Russell Belfer <arrbee@arrbee.com> | 2012-03-20 04:49:46 +0400 |
commit | 4aa7de15159b3edfcb23173a4a463606f1bfdd19 (patch) | |
tree | ec347589a2f3fdbb0bee1250e4c4df57702bfb3d /src/notes.c | |
parent | 7c7ff7d11e2d22f7b9c7f8152f5c58dde37ac207 (diff) |
Convert indexer, notes, sha1_lookup, and signature
More files moved to new error handling style.
Diffstat (limited to 'src/notes.c')
-rw-r--r-- | src/notes.c | 179 |
1 files changed, 75 insertions, 104 deletions
diff --git a/src/notes.c b/src/notes.c index 68554c36f..05c70c643 100644 --- a/src/notes.c +++ b/src/notes.c @@ -21,11 +21,8 @@ static int find_subtree(git_tree **subtree, const git_oid *root, *subtree = NULL; error = git_tree_lookup(&tree, repo, root); - if (error < GIT_SUCCESS) { - if (error == GIT_ENOTFOUND) - return error; /* notes tree doesn't exist yet */ - return git__rethrow(error, "Failed to open notes tree"); - } + if (error < 0) + return error; for (i=0; i<git_tree_entrycount(tree); i++) { entry = git_tree_entry_byindex(tree, i); @@ -56,7 +53,7 @@ static int find_subtree(git_tree **subtree, const git_oid *root, } *subtree = tree; - return GIT_SUCCESS; + return 0; } static int find_blob(git_oid *blob, git_tree *tree, const char *target) @@ -71,7 +68,7 @@ static int find_blob(git_oid *blob, git_tree *tree, const char *target) /* found matching note object - return */ git_oid_cpy(blob, git_tree_entry_id(entry)); - return GIT_SUCCESS; + return 0; } } return GIT_ENOTFOUND; @@ -93,18 +90,17 @@ static int note_write(git_oid *out, git_repository *repo, if (tree_sha) { error = find_subtree(&tree, tree_sha, repo, target, &fanout); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to lookup subtree"); + if (error < 0) + return error; error = find_blob(&oid, tree, target + fanout); - if (error < GIT_SUCCESS && error != GIT_ENOTFOUND) { - git_tree_free(tree); - return git__throw(GIT_ENOTFOUND, "Failed to read subtree %s", target); - } - - if (error == GIT_SUCCESS) { + if (error != GIT_ENOTFOUND) { git_tree_free(tree); - return git__throw(GIT_EEXISTS, "Note for `%s` exists already", target); + if (!error) { + giterr_set(GITERR_REPOSITORY, "Note for '%s' exists already", target); + error = GIT_EEXISTS; + } + return error; } } @@ -113,8 +109,8 @@ static int note_write(git_oid *out, git_repository *repo, error = git_treebuilder_create(&tb, tree); git_tree_free(tree); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to create treebuilder"); + if (error < 0) + return error; if (!tree_sha) /* no notes tree yet - create fanout */ @@ -122,18 +118,18 @@ static int note_write(git_oid *out, git_repository *repo, /* create note object */ error = git_blob_create_frombuffer(&oid, repo, note, strlen(note)); - if (error < GIT_SUCCESS) { + if (error < 0) { git_treebuilder_free(tb); - return git__rethrow(error, "Failed to create note object"); + return error; } error = git_treebuilder_insert(&entry, tb, target + fanout, &oid, 0100644); - if (error < GIT_SUCCESS) { + if (error < 0) { /* libgit2 doesn't support object removal (gc) yet */ /* we leave an orphaned blob object behind - TODO */ git_treebuilder_free(tb); - return git__rethrow(error, "Failed to insert note object"); + return error; } if (out) @@ -142,8 +138,8 @@ static int note_write(git_oid *out, git_repository *repo, error = git_treebuilder_write(&oid, repo, tb); git_treebuilder_free(tb); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to write notes tree"); + if (error < 0) + return 0; if (!tree_sha) { /* create fanout subtree */ @@ -153,27 +149,28 @@ static int note_write(git_oid *out, git_repository *repo, subtree[2] = '\0'; error = git_treebuilder_create(&tb, NULL); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to create treebuilder"); + if (error < 0) + return error; error = git_treebuilder_insert(NULL, tb, subtree, &oid, 0040000); - if (error < GIT_SUCCESS) { + if (error < 0) { git_treebuilder_free(tb); - return git__rethrow(error, "Failed to insert note object"); + return error; } error = git_treebuilder_write(&oid, repo, tb); + git_treebuilder_free(tb); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to write notes tree"); + if (error < 0) + return error; } /* create new notes commit */ error = git_tree_lookup(&tree, repo, &oid); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to open new notes tree"); + if (error < 0) + return error; error = git_commit_create(&oid, repo, notes_ref, author, committer, NULL, GIT_NOTES_DEFAULT_MSG_ADD, @@ -181,10 +178,7 @@ static int note_write(git_oid *out, git_repository *repo, git_tree_free(tree); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to create new notes commit"); - - return GIT_SUCCESS; + return error; } static int note_lookup(git_note **out, git_repository *repo, @@ -197,31 +191,25 @@ static int note_lookup(git_note **out, git_repository *repo, git_note *note; error = find_subtree(&tree, tree_sha, repo, target, &fanout); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to lookup subtree"); + if (error < 0) + return error; error = find_blob(&oid, tree, target + fanout); - if (error < GIT_SUCCESS) { - git_tree_free(tree); - return git__throw(GIT_ENOTFOUND, "No note found for object %s", - target); - } + git_tree_free(tree); + if (error < 0) + return error; error = git_blob_lookup(&blob, repo, &oid); - if (error < GIT_SUCCESS) - return git__throw(GIT_ERROR, "Failed to lookup note object"); + if (error < 0) + return error; note = git__malloc(sizeof(git_note)); - if (note == NULL) { - git_blob_free(blob); - return GIT_ENOMEM; - } + GITERR_CHECK_ALLOC(note); git_oid_cpy(¬e->oid, &oid); note->message = git__strdup(git_blob_rawcontent(blob)); - if (note->message == NULL) - error = GIT_ENOMEM; + GITERR_CHECK_ALLOC(note->message); *out = note; @@ -240,39 +228,30 @@ static int note_remove(git_repository *repo, git_treebuilder *tb; error = find_subtree(&tree, tree_sha, repo, target, &fanout); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to lookup subtree"); + if (error < 0) + return error; error = find_blob(&oid, tree, target + fanout); - if (error < GIT_SUCCESS) { - git_tree_free(tree); - return git__throw(GIT_ENOTFOUND, "No note found for object %s", - target); - } + if (!error) + error = git_treebuilder_create(&tb, tree); - error = git_treebuilder_create(&tb, tree); git_tree_free(tree); - - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to create treebuilder"); + if (error < 0) + return error; error = git_treebuilder_remove(tb, target + fanout); - if (error < GIT_SUCCESS) { - git_treebuilder_free(tb); - return git__rethrow(error, "Failed to remove entry from notes tree"); - } + if (!error) + error = git_treebuilder_write(&oid, repo, tb); - error = git_treebuilder_write(&oid, repo, tb); git_treebuilder_free(tb); - - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to write notes tree"); + if (error < 0) + return error; /* create new notes commit */ error = git_tree_lookup(&tree, repo, &oid); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to open new notes tree"); + if (error < 0) + return error; error = git_commit_create(&oid, repo, notes_ref, author, committer, NULL, GIT_NOTES_DEFAULT_MSG_RM, @@ -280,9 +259,6 @@ static int note_remove(git_repository *repo, git_tree_free(tree); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to create new notes commit"); - return error; } @@ -301,8 +277,8 @@ int git_note_read(git_note **out, git_repository *repo, notes_ref = GIT_NOTES_DEFAULT_REF; error = git_reference_lookup(&ref, repo, notes_ref); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to lookup reference `%s`", notes_ref); + if (error < 0) + return error; assert(git_reference_type(ref) == GIT_REF_OID); @@ -311,27 +287,26 @@ int git_note_read(git_note **out, git_repository *repo, git_reference_free(ref); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to find notes commit object"); + if (error < 0) + return error; sha = git_commit_tree_oid(commit); git_commit_free(commit); target = git_oid_allocfmt(oid); - if (target == NULL) - return GIT_ENOMEM; + GITERR_CHECK_ALLOC(target); error = note_lookup(out, repo, sha, target); git__free(target); - return error == GIT_SUCCESS ? GIT_SUCCESS : - git__rethrow(error, "Failed to read note"); + return error; } -int git_note_create(git_oid *out, git_repository *repo, - git_signature *author, git_signature *committer, - const char *notes_ref, const git_oid *oid, - const char *note) +int git_note_create( + git_oid *out, git_repository *repo, + git_signature *author, git_signature *committer, + const char *notes_ref, const git_oid *oid, + const char *note) { int error, nparents = 0; char *target; @@ -343,10 +318,10 @@ int git_note_create(git_oid *out, git_repository *repo, notes_ref = GIT_NOTES_DEFAULT_REF; error = git_reference_lookup(&ref, repo, notes_ref); - if (error < GIT_SUCCESS && error != GIT_ENOTFOUND) - return git__rethrow(error, "Failed to lookup reference `%s`", notes_ref); + if (error < 0 && error != GIT_ENOTFOUND) + return error; - if (error == GIT_SUCCESS) { + if (!error) { assert(git_reference_type(ref) == GIT_REF_OID); /* lookup existing notes tree oid */ @@ -355,16 +330,15 @@ int git_note_create(git_oid *out, git_repository *repo, git_reference_free(ref); error = git_commit_lookup(&commit, repo, &sha); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to find notes commit object"); + if (error < 0) + return error; git_oid_cpy(&sha, git_commit_tree_oid(commit)); nparents++; } target = git_oid_allocfmt(oid); - if (target == NULL) - return GIT_ENOMEM; + GITERR_CHECK_ALLOC(target); error = note_write(out, repo, author, committer, notes_ref, note, nparents ? &sha : NULL, target, @@ -372,8 +346,7 @@ int git_note_create(git_oid *out, git_repository *repo, git__free(target); git_commit_free(commit); - return error == GIT_SUCCESS ? GIT_SUCCESS : - git__rethrow(error, "Failed to write note"); + return error; } int git_note_remove(git_repository *repo, const char *notes_ref, @@ -390,8 +363,8 @@ int git_note_remove(git_repository *repo, const char *notes_ref, notes_ref = GIT_NOTES_DEFAULT_REF; error = git_reference_lookup(&ref, repo, notes_ref); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to lookup reference `%s`", notes_ref); + if (error < 0) + return error; assert(git_reference_type(ref) == GIT_REF_OID); @@ -399,22 +372,20 @@ int git_note_remove(git_repository *repo, const char *notes_ref, git_reference_free(ref); error = git_commit_lookup(&commit, repo, &sha); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to find notes commit object"); + if (error < 0) + return error; git_oid_cpy(&sha, git_commit_tree_oid(commit)); target = git_oid_allocfmt(oid); - if (target == NULL) - return GIT_ENOMEM; + GITERR_CHECK_ALLOC(target); error = note_remove(repo, author, committer, notes_ref, &sha, target, 1, &commit); git__free(target); git_commit_free(commit); - return error == GIT_SUCCESS ? GIT_SUCCESS : - git__rethrow(error, "Failed to read note"); + return error; } const char * git_note_message(git_note *note) |