diff options
author | Vicent Marti <tanoku@gmail.com> | 2010-12-18 03:10:25 +0300 |
---|---|---|
committer | Vicent Marti <tanoku@gmail.com> | 2010-12-18 03:35:33 +0300 |
commit | 638c2ca4281589b73f2d402bb80775242045144a (patch) | |
tree | 8ad909bbf2612ddebe2078ed623f3fb4c9421cf1 | |
parent | 5cccfa899926a93c12af8232c0c0d16c0c9c7ff2 (diff) |
Rename 'git_person' to 'git_signature'
The new signature struct is public, and contains information about the
timezone offset. Must be free'd manually by the user.
Signed-off-by: Vicent Marti <tanoku@gmail.com>
-rw-r--r-- | src/commit.c | 71 | ||||
-rw-r--r-- | src/commit.h | 7 | ||||
-rw-r--r-- | src/git2.h | 1 | ||||
-rw-r--r-- | src/git2/commit.h | 18 | ||||
-rw-r--r-- | src/git2/common.h | 10 | ||||
-rw-r--r-- | src/git2/signature.h | 70 | ||||
-rw-r--r-- | src/git2/tag.h | 9 | ||||
-rw-r--r-- | src/git2/types.h | 13 | ||||
-rw-r--r-- | src/person.h | 21 | ||||
-rw-r--r-- | src/revwalk.c | 4 | ||||
-rw-r--r-- | src/signature.c (renamed from src/person.c) | 93 | ||||
-rw-r--r-- | src/signature.h | 12 | ||||
-rw-r--r-- | src/tag.c | 23 | ||||
-rw-r--r-- | src/tag.h | 2 | ||||
-rw-r--r-- | tests/t0401-parse.c | 58 | ||||
-rw-r--r-- | tests/t0402-details.c | 4 | ||||
-rw-r--r-- | tests/t0403-write.c | 50 | ||||
-rw-r--r-- | tests/t0502-list.c | 10 |
18 files changed, 245 insertions, 231 deletions
diff --git a/src/commit.c b/src/commit.c index d8a72a98a..019cefecf 100644 --- a/src/commit.c +++ b/src/commit.c @@ -26,11 +26,12 @@ #include "git2/common.h" #include "git2/object.h" #include "git2/repository.h" +#include "git2/signature.h" #include "common.h" #include "commit.h" #include "revwalk.h" -#include "person.h" +#include "signature.h" #define COMMIT_BASIC_PARSE 0x0 #define COMMIT_FULL_PARSE 0x1 @@ -50,8 +51,8 @@ void git_commit__free(git_commit *commit) { clear_parents(commit); - git_person__free(commit->author); - git_person__free(commit->committer); + git_signature_free(commit->author); + git_signature_free(commit->committer); free(commit->message); free(commit->message_short); @@ -82,12 +83,12 @@ int git_commit__writeback(git_commit *commit, git_odb_source *src) if (commit->author == NULL) return GIT_EMISSINGOBJDATA; - git_person__write(src, "author", commit->author); + git_signature__write(src, "author", commit->author); if (commit->committer == NULL) return GIT_EMISSINGOBJDATA; - git_person__write(src, "committer", commit->committer); + git_signature__write(src, "committer", commit->committer); if (commit->message != NULL) git__source_printf(src, "\n%s", commit->message); @@ -137,10 +138,10 @@ int commit_parse_buffer(git_commit *commit, void *data, size_t len, unsigned int if (parse_flags & COMMIT_FULL_PARSE) { if (commit->author) - git_person__free(commit->author); + git_signature_free(commit->author); - commit->author = git__malloc(sizeof(git_person)); - if ((error = git_person__parse(commit->author, &buffer, buffer_end, "author ")) < GIT_SUCCESS) + commit->author = git__malloc(sizeof(git_signature)); + if ((error = git_signature__parse(commit->author, &buffer, buffer_end, "author ")) < GIT_SUCCESS) return error; } else { @@ -152,15 +153,12 @@ int commit_parse_buffer(git_commit *commit, void *data, size_t len, unsigned int /* Always parse the committer; we need the commit time */ if (commit->committer) - git_person__free(commit->committer); + git_signature_free(commit->committer); - commit->committer = git__malloc(sizeof(git_person)); - if ((error = git_person__parse(commit->committer, &buffer, buffer_end, "committer ")) < GIT_SUCCESS) + commit->committer = git__malloc(sizeof(git_signature)); + if ((error = git_signature__parse(commit->committer, &buffer, buffer_end, "committer ")) < GIT_SUCCESS) return error; - commit->commit_time = commit->committer->time; - commit->commit_timezone_offset = commit->committer->timezone_offset; - /* parse commit message */ while (buffer <= buffer_end && *buffer == '\n') buffer++; @@ -232,35 +230,21 @@ int git_commit__parse_full(git_commit *commit) git_commit__parse_full(commit); GIT_COMMIT_GETTER(git_tree *, tree) -GIT_COMMIT_GETTER(git_person *, author) -GIT_COMMIT_GETTER(git_person *, committer) +GIT_COMMIT_GETTER(git_signature *, author) +GIT_COMMIT_GETTER(git_signature *, committer) GIT_COMMIT_GETTER(char *, message) GIT_COMMIT_GETTER(char *, message_short) time_t git_commit_time(git_commit *commit) { - assert(commit); - - if (commit->commit_time) - return commit->commit_time; - - if (!commit->object.in_memory) - git_commit__parse_full(commit); - - return commit->commit_time; + assert(commit && commit->committer); + return commit->committer->when.time; } -int git_commit_timezone_offset(git_commit *commit) +int git_commit_time_offset(git_commit *commit) { - assert(commit); - - if (commit->commit_timezone_offset) - return commit->commit_timezone_offset; - - if (!commit->object.in_memory) - git_commit__parse_full(commit); - - return commit->commit_timezone_offset; + assert(commit && commit->committer); + return commit->committer->when.offset; } unsigned int git_commit_parentcount(git_commit *commit) @@ -283,25 +267,24 @@ void git_commit_set_tree(git_commit *commit, git_tree *tree) commit->tree = tree; } -void git_commit_set_author(git_commit *commit, const char *name, const char *email, time_t time, int offset) +void git_commit_set_author(git_commit *commit, const git_signature *author_sig) { - assert(commit && name && email); + assert(commit && author_sig); commit->object.modified = 1; CHECK_FULL_PARSE(); - git_person__free(commit->author); - commit->author = git_person__new(name, email, time, offset); + git_signature_free(commit->author); + commit->author = git_signature_dup(author_sig); } -void git_commit_set_committer(git_commit *commit, const char *name, const char *email, time_t time, int offset) +void git_commit_set_committer(git_commit *commit, const git_signature *committer_sig) { - assert(commit && name && email); + assert(commit && committer_sig); commit->object.modified = 1; CHECK_FULL_PARSE(); - git_person__free(commit->committer); - commit->committer = git_person__new(name, email, time, offset); - commit->commit_time = time; + git_signature_free(commit->committer); + commit->committer = git_signature_dup(committer_sig); } void git_commit_set_message(git_commit *commit, const char *message) diff --git a/src/commit.h b/src/commit.h index 8c76c3b44..b53ee9b23 100644 --- a/src/commit.h +++ b/src/commit.h @@ -11,14 +11,11 @@ struct git_commit { git_object object; - time_t commit_time; - int commit_timezone_offset; - git_vector parents; git_tree *tree; - git_person *author; - git_person *committer; + git_signature *author; + git_signature *committer; char *message; char *message_short; diff --git a/src/git2.h b/src/git2.h index dbf5a9961..9eb9294df 100644 --- a/src/git2.h +++ b/src/git2.h @@ -33,6 +33,7 @@ #include "git2/types.h" #include "git2/oid.h" +#include "git2/signature.h" #include "git2/odb.h" #include "git2/repository.h" diff --git a/src/git2/commit.h b/src/git2/commit.h index 54b0ed872..ccffec45f 100644 --- a/src/git2/commit.h +++ b/src/git2/commit.h @@ -104,14 +104,14 @@ GIT_EXTERN(int) git_commit_timezone_offset(git_commit *commit); * @param commit a previously loaded commit. * @return the committer of a commit */ -GIT_EXTERN(const git_person *) git_commit_committer(git_commit *commit); +GIT_EXTERN(const git_signature *) 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_person *) git_commit_author(git_commit *commit); +GIT_EXTERN(const git_signature *) git_commit_author(git_commit *commit); /** * Get the tree pointed to by a commit. @@ -154,22 +154,16 @@ GIT_EXTERN(void) git_commit_set_message(git_commit *commit, const char *message) /** * Set the committer of a commit * @param commit the commit object - * @param name name of the new committer - * @param email email of the new committer - * @param time time when the committer committed the commit - * @param offset committer positive or negative timezone offset, in minutes from UTC + * @param author_sig signature of the committer */ -GIT_EXTERN(void) git_commit_set_committer(git_commit *commit, const char *name, const char *email, time_t time, int offset); +GIT_EXTERN(void) git_commit_set_committer(git_commit *commit, const git_signature *committer_sig); /** * Set the author of a commit * @param commit the commit object - * @param name name of the new author - * @param email email of the new author - * @param time time when the author created the commit - * @param offset author positive or negative timezone offset, in minutes from UTC + * @param author_sig signature of the author */ -GIT_EXTERN(void) git_commit_set_author(git_commit *commit, const char *name, const char *email, time_t time, int offset); +GIT_EXTERN(void) git_commit_set_author(git_commit *commit, const git_signature *author_sig); /** * Set the tree which is pointed to by a commit diff --git a/src/git2/common.h b/src/git2/common.h index 9734074ca..9d014c038 100644 --- a/src/git2/common.h +++ b/src/git2/common.h @@ -134,17 +134,7 @@ /** The index file is not backed up by an existing repository */ #define GIT_EBAREINDEX (GIT_ERROR -14) - GIT_BEGIN_DECL - -/** Parsed representation of a person */ -typedef struct git_person git_person; - -const char *git_person_name(git_person *person); -const char *git_person_email(git_person *person); -time_t git_person_time(git_person *person); -int git_person_timezone_offset(git_person *person); - /** @} */ GIT_END_DECL #endif diff --git a/src/git2/signature.h b/src/git2/signature.h new file mode 100644 index 000000000..96275aa07 --- /dev/null +++ b/src/git2/signature.h @@ -0,0 +1,70 @@ +/* + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, + * as published by the Free Software Foundation. + * + * In addition to the permissions in the GNU General Public License, + * the authors give you unlimited permission to link the compiled + * version of this file into combinations with other programs, + * and to distribute those combinations without any restriction + * coming from the use of this file. (The General Public License + * restrictions do apply in other respects; for example, they cover + * modification of the file, and distribution when not linked into + * a combined executable.) + * + * This file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ +#ifndef INCLUDE_git_signature_h__ +#define INCLUDE_git_signature_h__ + +#include "common.h" +#include "types.h" + +/** + * @file git2/signature.h + * @brief Git signature creation + * @defgroup git_signature Git signature creation + * @ingroup Git + * @{ + */ +GIT_BEGIN_DECL + +/** + * Create a new action signature. The signature must be freed + * manually or using git_signature_free + * + * @name name of the person + * @email email of the person + * @time time when the action happened + * @offset timezone offset in minutes for the time + * @return the new sig, NULl on out of memory + */ +GIT_EXTERN(git_signature *) git_signature_new(const char *name, const char *email, time_t time, int offset); + +/** + * Create a copy of an existing signature. + * + * All internal strings are also duplicated. + * @sig signature to duplicated + * @return a copy of sig, NULL on out of memory + */ +GIT_EXTERN(git_signature *) git_signature_dup(const git_signature *sig); + +/** + * Free an existing signature + * + * @sig signature to free + */ +GIT_EXTERN(void) git_signature_free(git_signature *sig); + +/** @} */ +GIT_END_DECL +#endif diff --git a/src/git2/tag.h b/src/git2/tag.h index d78235e81..8e29bc14a 100644 --- a/src/git2/tag.h +++ b/src/git2/tag.h @@ -96,7 +96,7 @@ GIT_EXTERN(const char *) git_tag_name(git_tag *t); * @param tag a previously loaded tag. * @return reference to the tag's author */ -GIT_EXTERN(const git_person *) git_tag_tagger(git_tag *t); +GIT_EXTERN(const git_signature *) git_tag_tagger(git_tag *t); /** * Get the message of a tag @@ -122,12 +122,9 @@ GIT_EXTERN(void) git_tag_set_name(git_tag *tag, const char *name); /** * Set the tagger of a tag * @param tag The tag to modify - * @param name the name of the new tagger - * @param email the email of the new tagger - * @param time the time when the tag was created - * @param offset tagger positive or negative timezone offset, in minutes from UTC + * @param tagger_sig signature of the tagging action */ -GIT_EXTERN(void) git_tag_set_tagger(git_tag *tag, const char *name, const char *email, time_t time, int offset); +GIT_EXTERN(void) git_tag_set_tagger(git_tag *tag, const git_signature *tagger_sig); /** * Set the message of a tag diff --git a/src/git2/types.h b/src/git2/types.h index 22fecef3f..99de33218 100644 --- a/src/git2/types.h +++ b/src/git2/types.h @@ -82,6 +82,19 @@ typedef struct git_tree git_tree; /** Memory representation of an index file. */ typedef struct git_index git_index; +/** Time in a signature */ +typedef struct git_time { + time_t time; /** time in seconds from epoch */ + int offset; /** timezone offset, in minutes */ +} git_time; + +/** An action signature (e.g. for committers, taggers, etc) */ +typedef struct git_signature { + char *name; /** full name of the author */ + char *email; /** email of the author */ + git_time when; /** time when the action happened */ +} git_signature; + /** @} */ GIT_END_DECL diff --git a/src/person.h b/src/person.h deleted file mode 100644 index d7ccbc9ba..000000000 --- a/src/person.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef INCLUDE_person_h__ -#define INCLUDE_person_h__ - -#include "git2/common.h" -#include "repository.h" -#include <time.h> - -/** Parsed representation of a person */ -struct git_person { - char *name; /**< Full name */ - char *email; /**< Email address */ - time_t time; /**< Time when this person committed the change */ - int timezone_offset; /**< Time zone offset in minutes. Can be either positive or negative. */ -}; - -void git_person__free(git_person *person); -git_person *git_person__new(const char *name, const char *email, time_t time, int offset); -int git_person__parse(git_person *person, char **buffer_out, const char *buffer_end, const char *header); -int git_person__write(git_odb_source *src, const char *header, const git_person *person); - -#endif diff --git a/src/revwalk.c b/src/revwalk.c index b724f77c8..f5bc6ca7d 100644 --- a/src/revwalk.c +++ b/src/revwalk.c @@ -388,8 +388,8 @@ void git_revwalk_list_timesort(git_revwalk_list *list) e = q, q = q->next, q_size--; else if (q_size == 0 || q == NULL || - p->walk_commit->commit_object->commit_time >= - q->walk_commit->commit_object->commit_time) + p->walk_commit->commit_object->committer->when.time >= + q->walk_commit->commit_object->committer->when.time) e = p, p = p->next, p_size--; else diff --git a/src/person.c b/src/signature.c index 96dc5d28d..c5bfda805 100644 --- a/src/person.c +++ b/src/signature.c @@ -24,31 +24,37 @@ */ #include "common.h" -#include "person.h" +#include "signature.h" #include "repository.h" #include "git2/common.h" -void git_person__free(git_person *person) +void git_signature_free(git_signature *sig) { - if (person == NULL) + if (sig == NULL) return; - free(person->name); - free(person->email); - free(person); + free(sig->name); + free(sig->email); + free(sig); } -git_person *git_person__new(const char *name, const char *email, time_t time, int offset) +git_signature *git_signature_new(const char *name, const char *email, time_t time, int offset) { - git_person *p; + git_signature *p = NULL; - if ((p = git__malloc(sizeof(git_person))) == NULL) + if ((p = git__malloc(sizeof(git_signature))) == NULL) goto cleanup; p->name = git__strdup(name); + if (p->name == NULL) + goto cleanup; + p->email = git__strdup(email); - p->time = time; - p->timezone_offset = offset; + if (p->email == NULL) + goto cleanup; + + p->when.time = time; + p->when.offset = offset; if (p->name == NULL || p->email == NULL) goto cleanup; @@ -56,31 +62,17 @@ git_person *git_person__new(const char *name, const char *email, time_t time, in return p; cleanup: - git_person__free(p); + git_signature_free(p); return NULL; } -const char *git_person_name(git_person *person) +git_signature *git_signature_dup(const git_signature *sig) { - return person->name; + return git_signature_new(sig->name, sig->email, sig->when.time, sig->when.offset); } -const char *git_person_email(git_person *person) -{ - return person->email; -} -time_t git_person_time(git_person *person) -{ - return person->time; -} - -int git_person_timezone_offset(git_person *person) -{ - return person->timezone_offset; -} - -int git_person__parse_timezone_offset(const char *buffer, int *offset_out) +static int parse_timezone_offset(const char *buffer, int *offset_out) { int offset, dec_offset; int mins, hours; @@ -90,8 +82,7 @@ int git_person__parse_timezone_offset(const char *buffer, int *offset_out) offset_start = buffer + 1; - if (*offset_start == '\n') - { + if (*offset_start == '\n') { *offset_out = 0; return GIT_SUCCESS; } @@ -107,18 +98,16 @@ int git_person__parse_timezone_offset(const char *buffer, int *offset_out) hours = dec_offset / 100; mins = dec_offset % 100; - if (hours > 14) // see http://www.worldtimezone.com/faq.html + if (hours > 14) // see http://www.worldtimezone.com/faq.html return GIT_EOBJCORRUPTED; - if (mins > 59) + if (mins > 59) return GIT_EOBJCORRUPTED; offset = (hours * 60) + mins; if (offset_start[0] == '-') - { offset *= -1; - } *offset_out = offset; @@ -126,7 +115,7 @@ int git_person__parse_timezone_offset(const char *buffer, int *offset_out) } -int git_person__parse(git_person *person, char **buffer_out, +int git_signature__parse(git_signature *sig, char **buffer_out, const char *buffer_end, const char *header) { const size_t header_len = strlen(header); @@ -136,7 +125,7 @@ int git_person__parse(git_person *person, char **buffer_out, char *line_end, *name_end, *email_end; int offset = 0; - memset(person, 0x0, sizeof(git_person)); + memset(sig, 0x0, sizeof(git_signature)); line_end = memchr(buffer, '\n', buffer_end - buffer); if (!line_end) @@ -155,9 +144,9 @@ int git_person__parse(git_person *person, char **buffer_out, return GIT_EOBJCORRUPTED; name_length = name_end - buffer - 1; - person->name = git__malloc(name_length + 1); - memcpy(person->name, buffer, name_length); - person->name[name_length] = 0; + sig->name = git__malloc(name_length + 1); + memcpy(sig->name, buffer, name_length); + sig->name[name_length] = 0; buffer = name_end + 1; if (buffer >= line_end) @@ -168,35 +157,35 @@ int git_person__parse(git_person *person, char **buffer_out, return GIT_EOBJCORRUPTED; email_length = email_end - buffer; - person->email = git__malloc(email_length + 1); - memcpy(person->email, buffer, email_length); - person->email[email_length] = 0; + sig->email = git__malloc(email_length + 1); + memcpy(sig->email, buffer, email_length); + sig->email[email_length] = 0; buffer = email_end + 1; if (buffer >= line_end) return GIT_EOBJCORRUPTED; - person->time = strtol(buffer, &buffer, 10); + sig->when.time = strtol(buffer, &buffer, 10); - if (person->time == 0) + if (sig->when.time == 0) return GIT_EOBJCORRUPTED; - if (git_person__parse_timezone_offset(buffer, &offset) < GIT_SUCCESS) + if (parse_timezone_offset(buffer, &offset) < GIT_SUCCESS) return GIT_EOBJCORRUPTED; - person->timezone_offset = offset; + sig->when.offset = offset; *buffer_out = (line_end + 1); return GIT_SUCCESS; } -int git_person__write(git_odb_source *src, const char *header, const git_person *person) +int git_signature__write(git_odb_source *src, const char *header, const git_signature *sig) { - char *sign; + char sign; int offset, hours, mins; - offset = person->timezone_offset; - sign = (person->timezone_offset < 0) ? "-" : "+"; + offset = sig->when.offset; + sign = (sig->when.offset < 0) ? '-' : '+'; if (offset < 0) offset = -offset; @@ -204,7 +193,7 @@ int git_person__write(git_odb_source *src, const char *header, const git_person hours = offset / 60; mins = offset % 60; - return git__source_printf(src, "%s %s <%s> %u %s%02d%02d\n", header, person->name, person->email, person->time, sign, hours, mins); + return git__source_printf(src, "%s %s <%s> %u %c%02d%02d\n", header, sig->name, sig->email, sig->when.time, sign, hours, mins); } diff --git a/src/signature.h b/src/signature.h new file mode 100644 index 000000000..ee212c2dc --- /dev/null +++ b/src/signature.h @@ -0,0 +1,12 @@ +#ifndef INCLUDE_signature_h__ +#define INCLUDE_signature_h__ + +#include "git2/common.h" +#include "git2/signature.h" +#include "repository.h" +#include <time.h> + +int git_signature__parse(git_signature *sig, char **buffer_out, const char *buffer_end, const char *header); +int git_signature__write(git_odb_source *src, const char *header, const git_signature *sig); + +#endif @@ -26,14 +26,15 @@ #include "common.h" #include "commit.h" #include "tag.h" -#include "person.h" +#include "signature.h" #include "revwalk.h" #include "git2/object.h" #include "git2/repository.h" +#include "git2/signature.h" void git_tag__free(git_tag *tag) { - git_person__free(tag->tagger); + git_signature_free(tag->tagger); free(tag->message); free(tag->tag_name); free(tag); @@ -92,18 +93,18 @@ void git_tag_set_name(git_tag *tag, const char *name) tag->tag_name = git__strdup(name); } -const git_person *git_tag_tagger(git_tag *t) +const git_signature *git_tag_tagger(git_tag *t) { return t->tagger; } -void git_tag_set_tagger(git_tag *tag, const char *name, const char *email, time_t time, int offset) +void git_tag_set_tagger(git_tag *tag, const git_signature *tagger_sig) { - assert(tag && name && email); + assert(tag && tagger_sig); tag->object.modified = 1; - git_person__free(tag->tagger); - tag->tagger = git_person__new(name, email, time, offset); + git_signature_free(tag->tagger); + tag->tagger = git_signature_dup(tagger_sig); } const char *git_tag_message(git_tag *t) @@ -190,11 +191,11 @@ static int parse_tag_buffer(git_tag *tag, char *buffer, const char *buffer_end) buffer = search + 1; if (tag->tagger != NULL) - git_person__free(tag->tagger); + git_signature_free(tag->tagger); - tag->tagger = git__malloc(sizeof(git_person)); + tag->tagger = git__malloc(sizeof(git_signature)); - if ((error = git_person__parse(tag->tagger, &buffer, buffer_end, "tagger ")) != 0) + if ((error = git_signature__parse(tag->tagger, &buffer, buffer_end, "tagger ")) != 0) return error; text_len = buffer_end - ++buffer; @@ -217,7 +218,7 @@ int git_tag__writeback(git_tag *tag, git_odb_source *src) git__write_oid(src, "object", git_object_id(tag->target)); git__source_printf(src, "type %s\n", git_object_type2string(tag->type)); git__source_printf(src, "tag %s\n", tag->tag_name); - git_person__write(src, "tagger", tag->tagger); + git_signature__write(src, "tagger", tag->tagger); if (tag->message != NULL) git__source_printf(src, "\n%s", tag->message); @@ -10,7 +10,7 @@ struct git_tag { git_object *target; git_otype type; char *tag_name; - git_person *tagger; + git_signature *tagger; char *message; }; diff --git a/tests/t0401-parse.c b/tests/t0401-parse.c index 5d3246321..d734e5d23 100644 --- a/tests/t0401-parse.c +++ b/tests/t0401-parse.c @@ -1,7 +1,7 @@ #include "test_lib.h" #include "test_helpers.h" #include "commit.h" -#include "person.h" +#include "signature.h" #include <git2/odb.h> #include <git2/commit.h> #include <git2/revwalk.h> @@ -129,29 +129,29 @@ BEGIN_TEST(parse_oid_test) END_TEST -BEGIN_TEST(parse_person_test) +BEGIN_TEST(parse_sig_test) -#define TEST_PERSON_PASS(_string, _header, _name, _email, _time, _offset) { \ +#define TEST_SIGNATURE_PASS(_string, _header, _name, _email, _time, _offset) { \ char *ptr = _string; \ size_t len = strlen(_string);\ - git_person person = {NULL, NULL, 0}; \ - must_pass(git_person__parse(&person, &ptr, ptr + len, _header));\ + git_signature person = {NULL, NULL, {0, 0}}; \ + must_pass(git_signature__parse(&person, &ptr, ptr + len, _header));\ must_be_true(strcmp(_name, person.name) == 0);\ must_be_true(strcmp(_email, person.email) == 0);\ - must_be_true(_time == person.time);\ - must_be_true(_offset == person.timezone_offset);\ + must_be_true(_time == person.when.time);\ + must_be_true(_offset == person.when.offset);\ free(person.name); free(person.email);\ } -#define TEST_PERSON_FAIL(_string, _header) { \ +#define TEST_SIGNATURE_FAIL(_string, _header) { \ char *ptr = _string; \ size_t len = strlen(_string);\ - git_person person = {NULL, NULL, 0}; \ - must_fail(git_person__parse(&person, &ptr, ptr + len, _header));\ + git_signature person = {NULL, NULL, {0, 0}}; \ + must_fail(git_signature__parse(&person, &ptr, ptr + len, _header));\ free(person.name); free(person.email);\ } - TEST_PERSON_PASS( + TEST_SIGNATURE_PASS( "author Vicent Marti <tanoku@gmail.com> 12345 \n", "author ", "Vicent Marti", @@ -159,7 +159,7 @@ BEGIN_TEST(parse_person_test) 12345, 0); - TEST_PERSON_PASS( + TEST_SIGNATURE_PASS( "author Vicent Marti <> 12345 \n", "author ", "Vicent Marti", @@ -167,7 +167,7 @@ BEGIN_TEST(parse_person_test) 12345, 0); - TEST_PERSON_PASS( + TEST_SIGNATURE_PASS( "author Vicent Marti <tanoku@gmail.com> 231301 +1020\n", "author ", "Vicent Marti", @@ -175,7 +175,7 @@ BEGIN_TEST(parse_person_test) 231301, 620); - TEST_PERSON_PASS( + TEST_SIGNATURE_PASS( "author Vicent Marti with an outrageously long name \ which will probably overflow the buffer <tanoku@gmail.com> 12345 \n", "author ", @@ -185,7 +185,7 @@ BEGIN_TEST(parse_person_test) 12345, 0); - TEST_PERSON_PASS( + TEST_SIGNATURE_PASS( "author Vicent Marti <tanokuwithaveryveryverylongemail\ whichwillprobablyvoverflowtheemailbuffer@gmail.com> 12345 \n", "author ", @@ -195,7 +195,7 @@ BEGIN_TEST(parse_person_test) 12345, 0); - TEST_PERSON_PASS( + TEST_SIGNATURE_PASS( "committer Vicent Marti <tanoku@gmail.com> 123456 +0000 \n", "committer ", "Vicent Marti", @@ -203,7 +203,7 @@ BEGIN_TEST(parse_person_test) 123456, 0); - TEST_PERSON_PASS( + TEST_SIGNATURE_PASS( "committer Vicent Marti <tanoku@gmail.com> 123456 +0100 \n", "committer ", "Vicent Marti", @@ -211,7 +211,7 @@ BEGIN_TEST(parse_person_test) 123456, 60); - TEST_PERSON_PASS( + TEST_SIGNATURE_PASS( "committer Vicent Marti <tanoku@gmail.com> 123456 -0100 \n", "committer ", "Vicent Marti", @@ -219,44 +219,44 @@ BEGIN_TEST(parse_person_test) 123456, -60); - TEST_PERSON_FAIL( + TEST_SIGNATURE_FAIL( "committer Vicent Marti <tanoku@gmail.com> 123456 -1500 \n", "committer "); - TEST_PERSON_FAIL( + TEST_SIGNATURE_FAIL( "committer Vicent Marti <tanoku@gmail.com> 123456 +0163 \n", "committer "); - TEST_PERSON_FAIL( + TEST_SIGNATURE_FAIL( "author Vicent Marti <tanoku@gmail.com> 12345 \n", "author "); - TEST_PERSON_FAIL( + TEST_SIGNATURE_FAIL( "author Vicent Marti <tanoku@gmail.com> 12345 \n", "committer "); - TEST_PERSON_FAIL( + TEST_SIGNATURE_FAIL( "author Vicent Marti 12345 \n", "author "); - TEST_PERSON_FAIL( + TEST_SIGNATURE_FAIL( "author Vicent Marti <broken@email 12345 \n", "author "); - TEST_PERSON_FAIL( + TEST_SIGNATURE_FAIL( "author Vicent Marti <tanoku@gmail.com> notime \n", "author "); - TEST_PERSON_FAIL( + TEST_SIGNATURE_FAIL( "author Vicent Marti <tanoku@gmail.com>\n", "author "); - TEST_PERSON_FAIL( + TEST_SIGNATURE_FAIL( "author ", "author "); -#undef TEST_PERSON_PASS -#undef TEST_PERSON_FAIL +#undef TEST_SIGNATURE_PASS +#undef TEST_SIGNATURE_FAIL END_TEST diff --git a/tests/t0402-details.c b/tests/t0402-details.c index 489b3ff67..0b2fe229b 100644 --- a/tests/t0402-details.c +++ b/tests/t0402-details.c @@ -1,7 +1,7 @@ #include "test_lib.h" #include "test_helpers.h" #include "commit.h" -#include "person.h" +#include "signature.h" #include <git2/odb.h> #include <git2/commit.h> @@ -28,7 +28,7 @@ BEGIN_TEST(query_details_test) git_oid id; git_commit *commit; - const git_person *author, *committer; + const git_signature *author, *committer; const char *message, *message_short; time_t commit_time; unsigned int parents, p; diff --git a/tests/t0403-write.c b/tests/t0403-write.c index 889c9e12f..c8e72da5f 100644 --- a/tests/t0403-write.c +++ b/tests/t0403-write.c @@ -1,11 +1,12 @@ #include "test_lib.h" #include "test_helpers.h" #include "commit.h" -#include "person.h" +#include "signature.h" #include <git2/odb.h> #include <git2/commit.h> #include <git2/revwalk.h> +#include <git2/signature.h> static const char *commit_ids[] = { "a4a7dce85cf63874e984719f4fdd239f5145052f", /* 0 */ @@ -27,7 +28,7 @@ BEGIN_TEST(writenew_test) git_commit *commit, *parent; git_tree *tree; git_oid id; - const git_person *author, *committer; + const git_signature *author, *committer; /* char hex_oid[41]; */ must_pass(git_repository_open(&repo, REPOSITORY_FOLDER)); @@ -42,26 +43,33 @@ BEGIN_TEST(writenew_test) git_commit_add_parent(commit, parent); /* Set other attributes */ - git_commit_set_committer(commit, COMMITTER_NAME, COMMITTER_EMAIL, 123456789, 60); - git_commit_set_author(commit, COMMITTER_NAME, COMMITTER_EMAIL, 987654321, 90); + committer = git_signature_new(COMMITTER_NAME, COMMITTER_EMAIL, 123456789, 60); + must_be_true(committer != NULL); + + author = git_signature_new(COMMITTER_NAME, COMMITTER_EMAIL, 987654321, 90); + must_be_true(author != NULL); + + git_commit_set_committer(commit, committer); + git_commit_set_author(commit, author); git_commit_set_message(commit, COMMIT_MESSAGE); + git_signature_free((git_signature *)committer); + git_signature_free((git_signature *)author); + /* Check attributes were set correctly */ author = git_commit_author(commit); must_be_true(author != NULL); must_be_true(strcmp(author->name, COMMITTER_NAME) == 0); must_be_true(strcmp(author->email, COMMITTER_EMAIL) == 0); - must_be_true(author->time == 987654321); - must_be_true(author->time_offset == 90); + must_be_true(author->when.time == 987654321); + must_be_true(author->when.offset == 90); committer = git_commit_committer(commit); must_be_true(committer != NULL); must_be_true(strcmp(committer->name, COMMITTER_NAME) == 0); must_be_true(strcmp(committer->email, COMMITTER_EMAIL) == 0); - must_be_true(committer->time == 123456789); - must_be_true(committer->time_offset == 60); - must_be_true(git_commit_time(commit) == 123456789); - must_be_true(git_commit_time_offset(commit) == 60); + must_be_true(committer->when.time == 123456789); + must_be_true(committer->when.offset == 60); must_be_true(strcmp(git_commit_message(commit), COMMIT_MESSAGE) == 0); @@ -77,18 +85,8 @@ BEGIN_TEST(writenew_test) /* Write to disk */ must_pass(git_object_write((git_object *)commit)); - /* Show new SHA1 */ -/* - git_oid_fmt(hex_oid, git_commit_id(commit)); - hex_oid[40] = 0; - printf("Written new commit, SHA1: %s\n", hex_oid); -*/ - must_pass(remove_loose_object(REPOSITORY_FOLDER, (git_object *)commit)); - //git_person_free(&author); - //git_person_free(&committer); - git_repository_free(repo); END_TEST @@ -107,12 +105,6 @@ BEGIN_TEST(writeback_test) message = git_commit_message(commit); -/* - git_oid_fmt(hex_oid, git_commit_id(commit)); - hex_oid[40] = 0; - printf("Old SHA1: %s\n", hex_oid); -*/ - git_commit_set_message(commit, "This is a new test message. Cool!\n"); git_oid_mkstr(&id, commit_ids[4]); @@ -122,12 +114,6 @@ BEGIN_TEST(writeback_test) must_pass(git_object_write((git_object *)commit)); -/* - git_oid_fmt(hex_oid, git_commit_id(commit)); - hex_oid[40] = 0; - printf("New SHA1: %s\n", hex_oid); -*/ - must_pass(remove_loose_object(REPOSITORY_FOLDER, (git_object *)commit)); git_repository_free(repo); diff --git a/tests/t0502-list.c b/tests/t0502-list.c index 04427f51a..119f15f99 100644 --- a/tests/t0502-list.c +++ b/tests/t0502-list.c @@ -4,6 +4,7 @@ #include "revwalk.h" #include <git2/odb.h> #include <git2/commit.h> +#include <git2/signature.h> BEGIN_TEST(list_timesort_test) @@ -15,12 +16,13 @@ BEGIN_TEST(list_timesort_test) #define TEST_SORTED() \ previous_time = INT_MAX;\ for (n = list.head; n != NULL; n = n->next) {\ - must_be_true(n->walk_commit->commit_object->commit_time <= previous_time);\ - previous_time = n->walk_commit->commit_object->commit_time;\ + must_be_true(n->walk_commit->commit_object->committer->when.time <= previous_time);\ + previous_time = n->walk_commit->commit_object->committer->when.time;\ } #define CLEAR_LIST() \ for (n = list.head; n != NULL; n = n->next) {\ + git_signature_free(n->walk_commit->commit_object->committer);\ free(n->walk_commit->commit_object);\ free(n->walk_commit);\ }\ @@ -37,7 +39,7 @@ BEGIN_TEST(list_timesort_test) git_commit *c = git__malloc(sizeof(git_commit)); git_revwalk_commit *rc = git__malloc(sizeof(git_revwalk_commit)); - c->commit_time = (time_t)rand(); + c->committer = git_signature_new("", "", (time_t)rand(), 0); rc->commit_object = c; git_revwalk_list_push_back(&list, rc); @@ -53,7 +55,7 @@ BEGIN_TEST(list_timesort_test) git_commit *c = git__malloc(sizeof(git_commit)); git_revwalk_commit *rc = git__malloc(sizeof(git_revwalk_commit)); - c->commit_time = 0; + c->committer = git_signature_new("", "", 0, 0); rc->commit_object = c; git_revwalk_list_push_back(&list, rc); |