Add API git_signature_new_now

Most tags will have a timestamp of whenever the code is running and
dealing with time and timezones is error-prone. Optimize for this case
by adding a function which causes the signature to be created with a
current timestamp.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
This commit is contained in:
Carlos Martín Nieto 2011-04-05 16:15:54 +02:00 committed by Vicent Marti
parent b5c00c6d41
commit 9e9e6ae177
2 changed files with 30 additions and 0 deletions

View File

@ -49,6 +49,17 @@ GIT_BEGIN_DECL
*/
GIT_EXTERN(git_signature *) git_signature_new(const char *name, const char *email, git_time_t time, int offset);
/**
* Create a new action signature with a timestamp of 'now'. The
* signature must be freed manually or using git_signature_free
*
* @param name name of the person
* @param email email of the person
* @return the new sig, NULL on out of memory
*/
GIT_EXTERN(git_signature *) git_signature_new_now(const char *name, const char *email);
/**
* Create a copy of an existing signature.
*

View File

@ -65,6 +65,25 @@ git_signature *git_signature_dup(const git_signature *sig)
return git_signature_new(sig->name, sig->email, sig->when.time, sig->when.offset);
}
git_signature *git_signature_new_now(const char *name, const char *email)
{
time_t now;
struct tm utc_tm, local_tm;
int offset;
time(&now);
gmtime_r(&now, &utc_tm);
localtime_r(&now, &local_tm);
offset = mktime(&local_tm) - mktime(&utc_tm);
offset /= 60;
/* mktime takes care of setting tm_isdst correctly */
if (local_tm.tm_isdst)
offset += 60;
return git_signature_new(name, email, now, offset);
}
static int parse_timezone_offset(const char *buffer, long *offset_out)
{