)]}'
{
  "commit": "1771be90c8e4797c2466296d1d570dbfa39d9743",
  "tree": "38e4ee534e905bd5a31cf7607eedbe48c5c6255c",
  "parents": [
    "135a7123755bfdde05da18012bebd2776f82b26c"
  ],
  "author": {
    "name": "Derrick Stolee",
    "email": "dstolee@microsoft.com",
    "time": "Tue Jun 18 11:14:29 2019 -0700"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Wed Jun 19 20:46:26 2019 -0700"
  },
  "message": "commit-graph: merge commit-graph chains\n\nWhen searching for a commit in a commit-graph chain of G graphs with N\ncommits, the search takes O(G log N) time. If we always add a new tip\ngraph with every write, the linear G term will start to dominate and\nslow the lookup process.\n\nTo keep lookups fast, but also keep most incremental writes fast, create\na strategy for merging levels of the commit-graph chain. The strategy is\ndetailed in the commit-graph design document, but is summarized by these\ntwo conditions:\n\n  1. If the number of commits we are adding is more than half the number\n     of commits in the graph below, then merge with that graph.\n\n  2. If we are writing more than 64,000 commits into a single graph,\n     then merge with all lower graphs.\n\nThe numeric values in the conditions above are currently constant, but\ncan become config options in a future update.\n\nAs we merge levels of the commit-graph chain, check that the commits\nstill exist in the repository. A garbage-collection operation may have\nremoved those commits from the object store and we do not want to\npersist them in the commit-graph chain. This is a non-issue if the\n\u0027git gc\u0027 process wrote a new, single-level commit-graph file.\n\nAfter we merge levels, the old graph-{hash}.graph files are no longer\nreferenced by the commit-graph-chain file. We will expire these files in\na future change.\n\nSigned-off-by: Derrick Stolee \u003cdstolee@microsoft.com\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1dca3bd8fe90a189e52008212d8aa8d9bd094eff",
      "old_mode": 33188,
      "old_path": "Documentation/technical/commit-graph.txt",
      "new_id": "d9c6253b0a4368b2e391157c853dc8c690d07196",
      "new_mode": 33188,
      "new_path": "Documentation/technical/commit-graph.txt"
    },
    {
      "type": "modify",
      "old_id": "1224309e5feb48a6cef4b86c41f5b4fecfcce604",
      "old_mode": 33188,
      "old_path": "commit-graph.c",
      "new_id": "fb3100921cdcd4675231b81f71f6d1db209096d7",
      "new_mode": 33188,
      "new_path": "commit-graph.c"
    },
    {
      "type": "modify",
      "old_id": "ccd24bd22bf665b9c13e5872d2512ef52bb3bcf9",
      "old_mode": 33261,
      "old_path": "t/t5324-split-commit-graph.sh",
      "new_id": "5cb5663a30967d2ae2d003b3d30fa8a6c27188c4",
      "new_mode": 33261,
      "new_path": "t/t5324-split-commit-graph.sh"
    }
  ]
}
