From 52f2390b4308fe51ecceecbc35a87bf6e74e9aa8 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Wed, 7 Jul 2010 14:56:05 +0200 Subject: Add external API to access detailed commit attributes The following new external methods have been added: GIT_EXTERN(const char *) git_commit_message_short(git_commit *commit); GIT_EXTERN(const char *) git_commit_message(git_commit *commit); GIT_EXTERN(time_t) git_commit_time(git_commit *commit); GIT_EXTERN(const git_commit_person *) git_commit_committer(git_commit *commit); GIT_EXTERN(const git_commit_person *) git_commit_author(git_commit *commit); GIT_EXTERN(const git_tree *) git_commit_tree(git_commit *commit); A new structure, git_commit_person has been added to represent a commit's author or committer. The parsing of a commit has been split in two phases. When adding a commit to the revision pool: - the commit's ODB object is opened - its raw contents are parsed for commit TIME, PARENTS and TREE (the minimal amount of data required to traverse the pool) - the commit's ODB object is closed When querying for extended information on a commit: - the commit's ODB object is reopened - its raw contents are parsed for the requested information - the commit's ODB object remains open to handle additional queries New unit tests have been added for the new functionality: In t0401-parse: parse_person_test In t0402-details: query_details_test Signed-off-by: Vicent Marti --- src/git/commit.h | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) (limited to 'src/git/commit.h') diff --git a/src/git/commit.h b/src/git/commit.h index 0ccf3c246..6d34f01ce 100644 --- a/src/git/commit.h +++ b/src/git/commit.h @@ -3,6 +3,7 @@ #include "common.h" #include "oid.h" +#include "tree.h" /** * @file git/commit.h @@ -16,6 +17,13 @@ GIT_BEGIN_DECL /** Parsed representation of a commit object. */ typedef struct git_commit git_commit; +/** Parsed representation of an author/committer of a commit */ +typedef struct git_commit_person { + char name[64]; /**< Full name */ + char email[64]; /**< Email address */ + time_t time; /**< Time when this person commited the change */ +} git_commit_person; + /** * Locate a reference to a commit without loading it. * The generated commit object is owned by the revision @@ -45,11 +53,53 @@ GIT_EXTERN(git_commit *) git_commit_parse(git_revpool *pool, const git_oid *id); /** * Get the id of a commit. - * @param commit a previously parsed commit. + * @param commit a previously loaded commit. * @return object identity for the commit. */ GIT_EXTERN(const git_oid *) git_commit_id(git_commit *commit); +/** + * Get the short (one line) message of a commit. + * @param commit a previously loaded commit. + * @return the short message of a commit + */ +GIT_EXTERN(const char *) git_commit_message_short(git_commit *commit); + +/** + * Get the full message of a commit. + * @param commit a previously loaded commit. + * @return the message of a commit + */ +GIT_EXTERN(const char *) git_commit_message(git_commit *commit); + +/** + * Get the commit time (i.e. committer time) of a commit. + * @param commit a previously loaded commit. + * @return the time of a commit + */ +GIT_EXTERN(time_t) git_commit_time(git_commit *commit); + +/** + * Get the committer of a commit. + * @param commit a previously loaded commit. + * @return the committer of a commit + */ +GIT_EXTERN(const git_commit_person *) git_commit_committer(git_commit *commit); + +/** + * Get the author of a commit. + * @param commit a previously loaded commit. + * @return the author of a commit + */ +GIT_EXTERN(const git_commit_person *) git_commit_author(git_commit *commit); + +/** + * Get the tree pointed to by a commit. + * @param commit a previously loaded commit. + * @return the tree of a commit + */ +GIT_EXTERN(const git_tree *) git_commit_tree(git_commit *commit); + /** @} */ GIT_END_DECL #endif -- cgit v1.2.1