Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Belfer <arrbee@arrbee.com>2012-03-20 04:49:46 +0400
committerRussell Belfer <arrbee@arrbee.com>2012-03-20 04:49:46 +0400
commit4aa7de15159b3edfcb23173a4a463606f1bfdd19 (patch)
treeec347589a2f3fdbb0bee1250e4c4df57702bfb3d /src/notes.c
parent7c7ff7d11e2d22f7b9c7f8152f5c58dde37ac207 (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.c179
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(&note->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)