From 9e9e6ae177332f5c1311eff9c9b5ca9740e04dbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Tue, 5 Apr 2011 16:15:54 +0200 Subject: [PATCH] Add API git_signature_new_now MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- include/git2/signature.h | 11 +++++++++++ src/signature.c | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/include/git2/signature.h b/include/git2/signature.h index b0995c8b2..013ce7460 100644 --- a/include/git2/signature.h +++ b/include/git2/signature.h @@ -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. * diff --git a/src/signature.c b/src/signature.c index bd64652ca..0e8331365 100644 --- a/src/signature.c +++ b/src/signature.c @@ -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) {