Junio C Hamano <[email protected]> writes:
> Jeff King <[email protected]> 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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html