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

Re: A generalization of git notes from blobs to trees - git metadata?

From
Johan Herland <johan@herland.net>
Date
Feb 7, 2010, 01:36 UTC
Message-ID
<201002070236.12711.johan@herland.net>
In-Reply-To
<2cfc40321002060532g4d22dd4dx403bf312708e1424@mail.gmail.com>
On Saturday 06 February 2010, Jon Seymour wrote:
> git notes is a nice innovation - well done to all those involved.
Thanks.
> Has consideration ever been given to generalizing the concept to allow
> note (or more correctly -  metadata) trees with arbitrary sha1s?

Not sure what you mean here. The note infrastructure allows _any_ SHA1 (not necessarily the SHA1 of an existing Git object) to be bound to a note object.

Furthermore, although we currently assume that all note objects are blobs, someone (who?) has already suggested (as mentioned in the notes TODO list) that a note object could also be a _tree_ object that can be unpacked/read to reveal further "sub-notes". Hence, in addition to having multiple notes refs (e.g. refs/notes/commits:deadbeef, refs/notes/bugs:deadbeef, etc.) to categorize notes, you could also classify notes _after_ having traversed the notes tree (e.g. refs/notes/bugs:deadbeef/fixes, refs/notes/bugs:deadbeef/causes). Note that support for this has not yet been written, and AFAIK it is also uncertain how such a change would affect the different use cases for notes (e.g. how to display them in 'git log')

Show 9 quoted lines
> For example, suppose you had reason to cache the distribution that
> resulted from the build of a particular commit, then it'd be nice to
> be able to do this using a notes like mechanism.
> 
>     git metadata import foo-1.1.0 dist ~/foo/dist
> 
> would create a git tree from the contents of ~/foo/dist and then bind
> it to meta item called dist associated with the sha1 corresponding to
> foo-1.1.0
You can do this already today by simply using 'git tag':
	# Prepare an index with the contents of ~/foo/dist
	git tag foo-1.1.0-dist $(git write-tree)
I don't see why you'd need to add a new metadata command.
Show 6 quoted lines
> To retrieve the contents of the previous build, you'd do something like
> 
>    get metadata export foo-1.1.0 dist /tmp/foo-1.1.0
> 
> This would find the metadata tree associated with foo-1.1.0, extract
> the dist subtree from that tree and write it to disk at /tmp/foo-1.1.0
Or, if you use a tag instead:
	git --work-tree=/tmp/foo-1.1.0 checkout foo-1.1.0-dist
Show 6 quoted lines
> I've used build outputs as an example here, but really it needn't be
> limited to that. I can see this facility would be useful for any kind
> of annotation or derived result that is more complex than a single
> text blob. Metadata trees in combination with a name spacing
> technique, could be used to store arbitrary metadata created by an
> arbitrary set of tools to arbitrary SHA1 objects.

I still don't see why this provides anything that isn't already supported by either using 'git tag', or by implementing support for notes-as-trees in the notes feature.

...Johan
-- 
Johan Herland, <johan@herland.net>
www.herland.net
Previous: Jon SeymourNext: Junio C Hamano
Message 2 of 19 in “A generalization of git notes from blobs to trees - git metadata?”
  1. Jon SeymourFeb 6, 2010
  2. Johan HerlandFeb 7, 2010
  3. Junio C HamanoFeb 7, 2010
  4. Jeff KingFeb 7, 2010
  5. Jon SeymourFeb 7, 2010
  6. Jakub NarebskiFeb 7, 2010
  7. Jon SeymourFeb 7, 2010
  8. Jon SeymourFeb 7, 2010
  9. Jeff KingFeb 7, 2010
  10. Junio C HamanoFeb 7, 2010
  11. Steven E. HarrisFeb 8, 2010
  12. Jeff KingFeb 10, 2010
  13. Junio C HamanoFeb 10, 2010
  14. Jeff KingFeb 10, 2010
  15. Junio C HamanoFeb 7, 2010
  16. Jeff KingFeb 7, 2010
  17. Johan HerlandFeb 7, 2010
  18. Jon SeymourFeb 7, 2010
  19. Jon SeymourFeb 7, 2010

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.