Junio C Hamano <gitster@xxxxxxxxx> writes: > Jeff King <peff@xxxxxxxx> writes: > >>> So maybe we would have to put reset_ident_date() at the end of the >>> function instead, at least after git_committer_info() is called. >> >> Yes, although "reset and end" still feels a bit weird to me. >> >> I'd almost prefer to just have long-running programs insert resets at >> strategic points. > > Certainly "reset at the end" feels weird but it can be explained as > "for a one-shot thing we use the first time of the default date and > it gives a consistent timestamp; conceptually, things that make > multiple commits are like doing that one-shot thing multiple times > in a row." > > When viewed that way, it is not _too_ bad, I would guess. An interdiff to what we queued previously would look like this: builtin/tag.c | 11 ++++++++++- commit.c | 15 ++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/builtin/tag.c b/builtin/tag.c index 5dccae3..e852ded 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -225,7 +225,6 @@ static void create_tag(const unsigned char *object, const char *tag, if (type <= OBJ_NONE) die(_("bad object type.")); - reset_ident_date(); header_len = snprintf(header_buf, sizeof(header_buf), "object %s\n" "type %s\n" @@ -287,6 +286,16 @@ static void create_tag(const unsigned char *object, const char *tag, unlink_or_warn(path); free(path); } + + /* + * Reset the default timestamp for the next call to create tag/commit + * object, so that they get their own fresh timestamp. + * + * NOTE NOTE NOTE! if you are libifying this function later by + * turning exit/die in the above code to return an error, be + * sure to jump here to make this call happen. + */ + reset_ident_date(); } struct msg_arg { diff --git a/commit.c b/commit.c index b02f3c4..db24013 100644 --- a/commit.c +++ b/commit.c @@ -1543,7 +1543,6 @@ int commit_tree_extended(const char *msg, size_t msg_len, } /* Person/date information */ - reset_ident_date(); if (!author) author = git_author_info(IDENT_STRICT); strbuf_addf(&buffer, "author %s\n", author); @@ -1564,11 +1563,21 @@ int commit_tree_extended(const char *msg, size_t msg_len, if (encoding_is_utf8 && !verify_utf8(&buffer)) fprintf(stderr, commit_utf8_warn); - if (sign_commit && do_sign_commit(&buffer, sign_commit)) - return -1; + if (sign_commit && do_sign_commit(&buffer, sign_commit)) { + result = -1; + goto out; + } result = write_sha1_file(buffer.buf, buffer.len, commit_type, ret); + +out: strbuf_release(&buffer); + + /* + * Reset the default timestamp for the next call to create tag/commit + * object, so that they get their own fresh timestamp. + */ + reset_ident_date(); return result; } -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html