Right now this is just a one-liner, but abstracting it will make it easier to change later. Signed-off-by: Jeff King <peff@xxxxxxxx> --- builtin/blame.c | 2 +- commit.c | 7 ++++++- commit.h | 6 ++++++ object.c | 2 +- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/builtin/blame.c b/builtin/blame.c index 6ce3c6d..0af3a18 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -2313,7 +2313,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt, ident, ident, path, (!contents_from ? path : (!strcmp(contents_from, "-") ? "standard input" : contents_from))); - commit->buffer = strbuf_detach(&msg, NULL); + set_commit_buffer(commit, strbuf_detach(&msg, NULL)); if (!contents_from || strcmp("-", contents_from)) { struct stat st; diff --git a/commit.c b/commit.c index d7b6836..5cc52e0 100644 --- a/commit.c +++ b/commit.c @@ -245,6 +245,11 @@ int unregister_shallow(const unsigned char *sha1) return 0; } +void set_commit_buffer(struct commit *commit, void *buffer) +{ + commit->buffer = buffer; +} + void free_commit_buffer(struct commit *commit) { free(commit->buffer); @@ -335,7 +340,7 @@ int parse_commit(struct commit *item) } ret = parse_commit_buffer(item, buffer, size); if (save_commit_buffer && !ret) { - item->buffer = buffer; + set_commit_buffer(item, buffer); return 0; } free(buffer); diff --git a/commit.h b/commit.h index daccf46..5cc0bf3 100644 --- a/commit.h +++ b/commit.h @@ -52,6 +52,12 @@ int parse_commit(struct commit *item); void parse_commit_or_die(struct commit *item); /* + * Associate an object buffer with the commit. The ownership of the + * memory is handed over to the commit, and must be free()-able. + */ +void set_commit_buffer(struct commit *, void *buffer); + +/* * Free any cached object buffer associated with the commit. */ void free_commit_buffer(struct commit *); diff --git a/object.c b/object.c index 57a0890..44ca657 100644 --- a/object.c +++ b/object.c @@ -198,7 +198,7 @@ struct object *parse_object_buffer(const unsigned char *sha1, enum object_type t if (parse_commit_buffer(commit, buffer, size)) return NULL; if (!commit->buffer) { - commit->buffer = buffer; + set_commit_buffer(commit, buffer); *eaten_p = 1; } obj = &commit->object; -- 2.0.0.729.g520999f -- 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