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:
authorVicent Marti <tanoku@gmail.com>2010-12-18 03:10:25 +0300
committerVicent Marti <tanoku@gmail.com>2010-12-18 03:35:33 +0300
commit638c2ca4281589b73f2d402bb80775242045144a (patch)
tree8ad909bbf2612ddebe2078ed623f3fb4c9421cf1
parent5cccfa899926a93c12af8232c0c0d16c0c9c7ff2 (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.c71
-rw-r--r--src/commit.h7
-rw-r--r--src/git2.h1
-rw-r--r--src/git2/commit.h18
-rw-r--r--src/git2/common.h10
-rw-r--r--src/git2/signature.h70
-rw-r--r--src/git2/tag.h9
-rw-r--r--src/git2/types.h13
-rw-r--r--src/person.h21
-rw-r--r--src/revwalk.c4
-rw-r--r--src/signature.c (renamed from src/person.c)93
-rw-r--r--src/signature.h12
-rw-r--r--src/tag.c23
-rw-r--r--src/tag.h2
-rw-r--r--tests/t0401-parse.c58
-rw-r--r--tests/t0402-details.c4
-rw-r--r--tests/t0403-write.c50
-rw-r--r--tests/t0502-list.c10
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
diff --git a/src/tag.c b/src/tag.c
index 7485daa0d..4c6cabf0b 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -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);
diff --git a/src/tag.h b/src/tag.h
index dd84ff69b..624fcc654 100644
--- a/src/tag.h
+++ b/src/tag.h
@@ -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);