)]}'
{
  "commit": "55088ac8a480d94ccf37bc53b6b2ddc7475b269b",
  "tree": "bb7be712dc97d52f4e77ed23bc88b7515daea2af",
  "parents": [
    "94f057755b7941b321fd11fec1b2e3ca5313a4e0"
  ],
  "author": {
    "name": "Tamir Duberstein",
    "email": "tamird@gmail.com",
    "time": "Wed Jun 10 11:50:01 2026 -0700"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Wed Jun 10 12:38:49 2026 -0700"
  },
  "message": "describe: limit default ref iteration to tags\n\nWithout --all, git describe ignores refs outside refs/tags/. Commit\n8a5a1884e9 (Avoid accessing non-tag refs in git-describe unless --all is\nrequested, 2008-02-24) moved this check ahead of object lookup. That\navoided loading objects for irrelevant refs, but the backend still has\nto yield every ref before get_name() can reject it.\n\nPass refs/tags/ to the iterator so the backend can avoid visiting those\nrefs in the first place.\n\nThe new perf test creates 10,000 unrelated packed refs. It measures:\n\n    git describe --exact-match HEAD\n\nThe runtime drops from 0.03(0.01+0.01) to 0.02(0.00+0.00). In a\nrepository with 120,532 refs but only 330 tags, the same command went\nfrom 171.7 ms to 9.9 ms.\n\nSigned-off-by: Tamir Duberstein \u003ctamird@gmail.com\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bffeed13a3cb14d7ce738597460c29556fe8aa2a",
      "old_mode": 33188,
      "old_path": "builtin/describe.c",
      "new_id": "e93c3720ec4bd79f4313ef2e9423cb49f321cd9d",
      "new_mode": 33188,
      "new_path": "builtin/describe.c"
    },
    {
      "type": "modify",
      "old_id": "069f91ce493a703c95a88244f3e58e26e017f44c",
      "old_mode": 33261,
      "old_path": "t/perf/p6100-describe.sh",
      "new_id": "b1c61529bb7bf8ff64c15ae42576774b5d05fabf",
      "new_mode": 33261,
      "new_path": "t/perf/p6100-describe.sh"
    }
  ]
}
