mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-30 00:04:03 +00:00
Merge pull request #1887 from libgit2/ntk/topic/git_message_raw
commit: Introduce git_commit_message_raw()
This commit is contained in:
commit
ab13687662
@ -100,11 +100,22 @@ GIT_EXTERN(const char *) git_commit_message_encoding(const git_commit *commit);
|
|||||||
/**
|
/**
|
||||||
* Get the full message of a commit.
|
* Get the full message of a commit.
|
||||||
*
|
*
|
||||||
|
* The returned message will be slightly prettified by removing any
|
||||||
|
* potential leading newlines.
|
||||||
|
*
|
||||||
* @param commit a previously loaded commit.
|
* @param commit a previously loaded commit.
|
||||||
* @return the message of a commit
|
* @return the message of a commit
|
||||||
*/
|
*/
|
||||||
GIT_EXTERN(const char *) git_commit_message(const git_commit *commit);
|
GIT_EXTERN(const char *) git_commit_message(const git_commit *commit);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the full raw message of a commit.
|
||||||
|
*
|
||||||
|
* @param commit a previously loaded commit.
|
||||||
|
* @return the raw message of a commit
|
||||||
|
*/
|
||||||
|
GIT_EXTERN(const char *) git_commit_message_raw(const git_commit *commit);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the commit time (i.e. committer time) of a commit.
|
* Get the commit time (i.e. committer time) of a commit.
|
||||||
*
|
*
|
||||||
|
23
src/commit.c
23
src/commit.c
@ -29,7 +29,7 @@ void git_commit__free(void *_commit)
|
|||||||
git_signature_free(commit->committer);
|
git_signature_free(commit->committer);
|
||||||
|
|
||||||
git__free(commit->raw_header);
|
git__free(commit->raw_header);
|
||||||
git__free(commit->message);
|
git__free(commit->raw_message);
|
||||||
git__free(commit->message_encoding);
|
git__free(commit->message_encoding);
|
||||||
|
|
||||||
git__free(commit);
|
git__free(commit);
|
||||||
@ -240,13 +240,13 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
|
|||||||
buffer_end = buffer + git_odb_object_size(odb_obj);
|
buffer_end = buffer + git_odb_object_size(odb_obj);
|
||||||
|
|
||||||
buffer += header_len;
|
buffer += header_len;
|
||||||
while (buffer < buffer_end && *buffer == '\n')
|
if (*buffer == '\n')
|
||||||
++buffer;
|
++buffer;
|
||||||
|
|
||||||
/* extract commit message */
|
/* extract commit message */
|
||||||
if (buffer <= buffer_end) {
|
if (buffer <= buffer_end) {
|
||||||
commit->message = git__strndup(buffer, buffer_end - buffer);
|
commit->raw_message = git__strndup(buffer, buffer_end - buffer);
|
||||||
GITERR_CHECK_ALLOC(commit->message);
|
GITERR_CHECK_ALLOC(commit->raw_message);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -265,7 +265,7 @@ bad_buffer:
|
|||||||
|
|
||||||
GIT_COMMIT_GETTER(const git_signature *, author, commit->author)
|
GIT_COMMIT_GETTER(const git_signature *, author, commit->author)
|
||||||
GIT_COMMIT_GETTER(const git_signature *, committer, commit->committer)
|
GIT_COMMIT_GETTER(const git_signature *, committer, commit->committer)
|
||||||
GIT_COMMIT_GETTER(const char *, message, commit->message)
|
GIT_COMMIT_GETTER(const char *, message_raw, commit->raw_message)
|
||||||
GIT_COMMIT_GETTER(const char *, message_encoding, commit->message_encoding)
|
GIT_COMMIT_GETTER(const char *, message_encoding, commit->message_encoding)
|
||||||
GIT_COMMIT_GETTER(const char *, raw_header, commit->raw_header)
|
GIT_COMMIT_GETTER(const char *, raw_header, commit->raw_header)
|
||||||
GIT_COMMIT_GETTER(git_time_t, time, commit->committer->when.time)
|
GIT_COMMIT_GETTER(git_time_t, time, commit->committer->when.time)
|
||||||
@ -273,6 +273,19 @@ GIT_COMMIT_GETTER(int, time_offset, commit->committer->when.offset)
|
|||||||
GIT_COMMIT_GETTER(unsigned int, parentcount, (unsigned int)git_array_size(commit->parent_ids))
|
GIT_COMMIT_GETTER(unsigned int, parentcount, (unsigned int)git_array_size(commit->parent_ids))
|
||||||
GIT_COMMIT_GETTER(const git_oid *, tree_id, &commit->tree_id);
|
GIT_COMMIT_GETTER(const git_oid *, tree_id, &commit->tree_id);
|
||||||
|
|
||||||
|
const char *git_commit_message(const git_commit *commit)
|
||||||
|
{
|
||||||
|
const char *message = commit->raw_message;
|
||||||
|
|
||||||
|
assert(commit);
|
||||||
|
|
||||||
|
/* trim leading newlines from raw message */
|
||||||
|
while (*message && *message == '\n')
|
||||||
|
++message;
|
||||||
|
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
int git_commit_tree(git_tree **tree_out, const git_commit *commit)
|
int git_commit_tree(git_tree **tree_out, const git_commit *commit)
|
||||||
{
|
{
|
||||||
assert(commit);
|
assert(commit);
|
||||||
|
@ -24,7 +24,7 @@ struct git_commit {
|
|||||||
git_signature *committer;
|
git_signature *committer;
|
||||||
|
|
||||||
char *message_encoding;
|
char *message_encoding;
|
||||||
char *message;
|
char *raw_message;
|
||||||
char *raw_header;
|
char *raw_header;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -382,9 +382,13 @@ committer Vicent Marti <tanoku@gmail.com> 1273848544 +0200\n\
|
|||||||
This commit has a few LF at the start of the commit message";
|
This commit has a few LF at the start of the commit message";
|
||||||
const char *message =
|
const char *message =
|
||||||
"This commit has a few LF at the start of the commit message";
|
"This commit has a few LF at the start of the commit message";
|
||||||
|
const char *raw_message =
|
||||||
|
"\n\
|
||||||
|
\n\
|
||||||
|
This commit has a few LF at the start of the commit message";
|
||||||
cl_git_pass(parse_commit(&commit, buffer));
|
cl_git_pass(parse_commit(&commit, buffer));
|
||||||
cl_assert_equal_s(message, git_commit_message(commit));
|
cl_assert_equal_s(message, git_commit_message(commit));
|
||||||
|
cl_assert_equal_s(raw_message, git_commit_message_raw(commit));
|
||||||
git_commit__free(commit);
|
git_commit__free(commit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -400,8 +404,10 @@ committer Vicent Marti <tanoku@gmail.com> 1273848544 +0200\n\
|
|||||||
\n\
|
\n\
|
||||||
\n";
|
\n";
|
||||||
const char *message = "";
|
const char *message = "";
|
||||||
|
const char *raw_message = "\n\n";
|
||||||
|
|
||||||
cl_git_pass(parse_commit(&commit, buffer));
|
cl_git_pass(parse_commit(&commit, buffer));
|
||||||
cl_assert_equal_s(message, git_commit_message(commit));
|
cl_assert_equal_s(message, git_commit_message(commit));
|
||||||
|
cl_assert_equal_s(raw_message, git_commit_message_raw(commit));
|
||||||
git_commit__free(commit);
|
git_commit__free(commit);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user