summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2014-07-21 10:47:01 -0400
committerEdward Thomson <ethomson@microsoft.com>2014-10-26 22:59:29 -0400
commitbad4937ea50a8874598171c7ccb3d3443f1daf7b (patch)
treefddf82c84fd56243ddf1678b4394eddc05651c09
parenta612a25fa673447e874407fd2d9501998885d392 (diff)
downloadlibgit2-bad4937ea50a8874598171c7ccb3d3443f1daf7b.tar.gz
Introduce `git_note_author`, `git_note_committer`
-rw-r--r--include/git2/notes.h17
-rw-r--r--src/notes.c35
-rw-r--r--src/notes.h3
3 files changed, 51 insertions, 4 deletions
diff --git a/include/git2/notes.h b/include/git2/notes.h
index 98eb2aef3..1a7794a5c 100644
--- a/include/git2/notes.h
+++ b/include/git2/notes.h
@@ -97,6 +97,23 @@ GIT_EXTERN(int) git_note_read(
const git_oid *oid);
/**
+ * Get the note author
+ *
+ * @param note the note
+ * @return the author
+ */
+GIT_EXTERN(const git_signature *) git_note_author(const git_note *note);
+
+/**
+ * Get the note committer
+ *
+ * @param note the note
+ * @return the committer
+ */
+GIT_EXTERN(const git_signature *) git_note_committer(const git_note *note);
+
+
+/**
* Get the note message
*
* @param note the note
diff --git a/src/notes.c b/src/notes.c
index ffe5d345a..046a91614 100644
--- a/src/notes.c
+++ b/src/notes.c
@@ -306,7 +306,11 @@ cleanup:
return error;
}
-static int note_new(git_note **out, git_oid *note_oid, git_blob *blob)
+static int note_new(
+ git_note **out,
+ git_oid *note_oid,
+ git_commit *commit,
+ git_blob *blob)
{
git_note *note = NULL;
@@ -314,6 +318,11 @@ static int note_new(git_note **out, git_oid *note_oid, git_blob *blob)
GITERR_CHECK_ALLOC(note);
git_oid_cpy(&note->id, note_oid);
+
+ if (git_signature_dup(&note->author, git_commit_author(commit)) < 0 ||
+ git_signature_dup(&note->committer, git_commit_committer(commit)) < 0)
+ return -1;
+
note->message = git__strdup((char *)git_blob_rawcontent(blob));
GITERR_CHECK_ALLOC(note->message);
@@ -323,7 +332,11 @@ static int note_new(git_note **out, git_oid *note_oid, git_blob *blob)
}
static int note_lookup(
- git_note **out, git_repository *repo, git_tree *tree, const char *target)
+ git_note **out,
+ git_repository *repo,
+ git_commit *commit,
+ git_tree *tree,
+ const char *target)
{
int error, fanout = 0;
git_oid oid;
@@ -340,7 +353,7 @@ static int note_lookup(
if ((error = git_blob_lookup(&blob, repo, &oid)) < 0)
goto cleanup;
- if ((error = note_new(&note, &oid, blob)) < 0)
+ if ((error = note_new(&note, &oid, commit, blob)) < 0)
goto cleanup;
*out = note;
@@ -432,7 +445,7 @@ int git_note_read(git_note **out, git_repository *repo,
if (!(error = retrieve_note_tree_and_commit(
&tree, &commit, repo, &notes_ref)))
- error = note_lookup(out, repo, tree, target);
+ error = note_lookup(out, repo, commit, tree, target);
git__free(target);
git_tree_free(tree);
@@ -502,6 +515,18 @@ int git_note_default_ref(const char **out, git_repository *repo)
return note_get_default_ref(out, repo);
}
+const git_signature *git_note_committer(const git_note *note)
+{
+ assert(note);
+ return note->committer;
+}
+
+const git_signature *git_note_author(const git_note *note)
+{
+ assert(note);
+ return note->author;
+}
+
const char * git_note_message(const git_note *note)
{
assert(note);
@@ -519,6 +544,8 @@ void git_note_free(git_note *note)
if (note == NULL)
return;
+ git_signature_free(note->committer);
+ git_signature_free(note->author);
git__free(note->message);
git__free(note);
}
diff --git a/src/notes.h b/src/notes.h
index e9cfa00fa..cfc0ca239 100644
--- a/src/notes.h
+++ b/src/notes.h
@@ -23,6 +23,9 @@
struct git_note {
git_oid id;
+ git_signature *author;
+ git_signature *committer;
+
char *message;
};