)]}'
{
  "commit": "0839e5695702d2fc14002c37b5f2f1c6c4c6be43",
  "tree": "ed8a4f57c0bd64c5ea92923fd42f0bc615eb2c6d",
  "parents": [
    "2f952b81ed2c44ebce3496d659a93d82a1a2f662",
    "d2902a45498793f8dc69abc6448f517b69437eec"
  ],
  "author": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Wed May 27 14:15:46 2026 +0900"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Wed May 27 14:15:46 2026 +0900"
  },
  "message": "Merge branch \u0027ps/odb-in-memory\u0027\n\nAdd a new odb \"in-memory\" source that is meant to only hold\ntentative objects (like the virtual blob object that represents the\nworking tree file used by \"git blame\").\n\n* ps/odb-in-memory:\n  t/unit-tests: add tests for the in-memory object source\n  odb: generic in-memory source\n  odb/source-inmemory: stub out remaining functions\n  odb/source-inmemory: implement `freshen_object()` callback\n  odb/source-inmemory: implement `count_objects()` callback\n  odb/source-inmemory: implement `find_abbrev_len()` callback\n  odb/source-inmemory: implement `for_each_object()` callback\n  odb/source-inmemory: convert to use oidtree\n  oidtree: add ability to store data\n  cbtree: allow using arbitrary wrapper structures for nodes\n  odb/source-inmemory: implement `write_object_stream()` callback\n  odb/source-inmemory: implement `write_object()` callback\n  odb/source-inmemory: implement `read_object_stream()` callback\n  odb/source-inmemory: implement `read_object_info()` callback\n  odb: fix unnecessary call to `find_cached_object()`\n  odb/source-inmemory: implement `free()` callback\n  odb: introduce \"in-memory\" source\n",
  "tree_diff": []
}
