vendor/libgit2/src/signature.c in rugged-0.19.0 vs vendor/libgit2/src/signature.c in rugged-0.21.0
- old
+ new
@@ -72,31 +72,40 @@
if (p->name[0] == '\0') {
git_signature_free(p);
return signature_error("Signature cannot have an empty name");
}
-
+
p->when.time = time;
p->when.offset = offset;
*sig_out = p;
return 0;
}
-git_signature *git_signature_dup(const git_signature *sig)
+int git_signature_dup(git_signature **dest, const git_signature *source)
{
- git_signature *new = git__calloc(1, sizeof(git_signature));
+ git_signature *signature;
- if (new == NULL)
- return NULL;
+ if (source == NULL)
+ return 0;
- new->name = git__strdup(sig->name);
- new->email = git__strdup(sig->email);
- new->when.time = sig->when.time;
- new->when.offset = sig->when.offset;
+ signature = git__calloc(1, sizeof(git_signature));
+ GITERR_CHECK_ALLOC(signature);
- return new;
+ signature->name = git__strdup(source->name);
+ GITERR_CHECK_ALLOC(signature->name);
+
+ signature->email = git__strdup(source->email);
+ GITERR_CHECK_ALLOC(signature->email);
+
+ signature->when.time = source->when.time;
+ signature->when.offset = source->when.offset;
+
+ *dest = signature;
+
+ return 0;
}
int git_signature_now(git_signature **sig_out, const char *name, const char *email)
{
time_t now;
@@ -127,10 +136,27 @@
*sig_out = sig;
return 0;
}
+int git_signature_default(git_signature **out, git_repository *repo)
+{
+ int error;
+ git_config *cfg;
+ const char *user_name, *user_email;
+
+ if ((error = git_repository_config_snapshot(&cfg, repo)) < 0)
+ return error;
+
+ if (!(error = git_config_get_string(&user_name, cfg, "user.name")) &&
+ !(error = git_config_get_string(&user_email, cfg, "user.email")))
+ error = git_signature_now(out, user_name, user_email);
+
+ git_config_free(cfg);
+ return error;
+}
+
int git_signature__parse(git_signature *sig, const char **buffer_out,
const char *buffer_end, const char *header, char ender)
{
const char *buffer = *buffer_out;
const char *email_start, *email_end;
@@ -201,9 +227,11 @@
void git_signature__writebuf(git_buf *buf, const char *header, const git_signature *sig)
{
int offset, hours, mins;
char sign;
+
+ assert(buf && sig);
offset = sig->when.offset;
sign = (sig->when.offset < 0) ? '-' : '+';
if (offset < 0)