git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 09/17] provide a helper to set the commit buffer

From
Jeff King <peff@peff.net>
Date
Jun 10, 2014, 21:40 UTC
Message-ID
<20140610214014.GI19147@sigill.intra.peff.net>
In-Reply-To
<20140610213509.GA26979@sigill.intra.peff.net>

Right now this is just a one-liner, but abstracting it will make it easier to change later.

Signed-off-by: Jeff King <peff@peff.net>
---
 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 11a05c1..fc8b4e2 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 d72ed43..cc89128 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
Previous: Jeff KingNext: Jeff King
Message 47 of 60 in “store length of commit->buffer”
  1. 0/15 store length of commit->bufferJeff King, Jun 9, 2014
  2. 01/15 alloc: include any-object allocations in alloc_reportJeff King, Jun 9, 2014
  3. 02/15 commit: push commit_index update into alloc_commit_nodeJeff King, Jun 9, 2014
  4. Junio C HamanoJun 10, 2014
  5. 03/15 do not create "struct commit" with xcallocJeff King, Jun 9, 2014
  6. Junio C HamanoJun 10, 2014
  7. Jeff KingJun 10, 2014
  8. 04/15 logmsg_reencode: return const bufferJeff King, Jun 9, 2014
  9. Eric SunshineJun 10, 2014
  10. 05/15 sequencer: use logmsg_reencode in get_messageJeff King, Jun 9, 2014
  11. Junio C HamanoJun 10, 2014
  12. Jeff KingJun 10, 2014
  13. 06/15 provide a helper to free commit bufferJeff King, Jun 9, 2014
  14. 07/15 provide a helper to set the commit bufferJeff King, Jun 9, 2014
  15. 08/15 provide helpers to access the commit bufferJeff King, Jun 9, 2014
  16. Eric SunshineJun 10, 2014
  17. 09/15 use get_cached_commit_buffer where appropriateJeff King, Jun 9, 2014
  18. 10/15 use get_commit_buffer to avoid duplicate codeJeff King, Jun 9, 2014
  19. Eric SunshineJun 10, 2014
  20. Jeff KingJun 10, 2014
  21. 11/15 convert logmsg_reencode to get_commit_bufferJeff King, Jun 9, 2014
  22. 12/15 use get_commit_buffer everywhereJeff King, Jun 9, 2014
  23. Junio C HamanoJun 9, 2014
  24. Jeff KingJun 10, 2014
  25. Jeff KingJun 10, 2014
  26. Junio C HamanoJun 10, 2014
  27. Jeff KingJun 10, 2014
  28. 13/15 commit-slab: provide a static initializerJeff King, Jun 9, 2014
  29. 14/15 commit: convert commit->buffer to a slabJeff King, Jun 9, 2014
  30. 15/15 commit: record buffer length in cacheJeff King, Jun 9, 2014
  31. Christian CouderJun 10, 2014
  32. Jeff KingJun 10, 2014
  33. Jeff KingJun 10, 2014
  34. Christian CouderJun 10, 2014
  35. 0/17 store length of commit->bufferJeff King, Jun 10, 2014
  36. 01/17 commit_tree: take a pointer/len pair rather than a const strbufJeff King, Jun 10, 2014
  37. 02/17 replace dangerous uses of strbuf_attachJeff King, Jun 10, 2014
  38. 03/17 alloc: include any-object allocations in alloc_reportJeff King, Jun 10, 2014
  39. 04/17 commit: push commit_index update into alloc_commit_nodeJeff King, Jun 10, 2014
  40. 05/17 do not create "struct commit" with xcallocJeff King, Jun 10, 2014
  41. 06/17 logmsg_reencode: return const bufferJeff King, Jun 10, 2014
  42. 07/17 sequencer: use logmsg_reencode in get_messageJeff King, Jun 10, 2014
  43. 08/17 provide a helper to free commit bufferJeff King, Jun 10, 2014
  44. Junio C HamanoJun 12, 2014
  45. Jeff KingJun 12, 2014
  46. Jeff KingJun 12, 2014
  47. 09/17 provide a helper to set the commit bufferJeff King, Jun 10, 2014
  48. 10/17 provide helpers to access the commit bufferJeff King, Jun 10, 2014
  49. 11/17 use get_cached_commit_buffer where appropriateJeff King, Jun 10, 2014
  50. 12/17 use get_commit_buffer to avoid duplicate codeJeff King, Jun 10, 2014
  51. 13/17 convert logmsg_reencode to get_commit_bufferJeff King, Jun 10, 2014
  52. 14/17 use get_commit_buffer everywhereJeff King, Jun 10, 2014
  53. 15/17 commit-slab: provide a static initializerJeff King, Jun 10, 2014
  54. Junio C HamanoJun 12, 2014
  55. Jeff KingJun 12, 2014
  56. 16/17 commit: convert commit->buffer to a slabJeff King, Jun 10, 2014
  57. 17/17 commit: record buffer length in cacheJeff King, Jun 10, 2014
  58. Jeff KingJun 10, 2014
  59. Junio C HamanoJun 12, 2014
  60. reuse cached commit buffer when parsing signaturesJeff King, Jun 13, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.