)]}'
{
  "commit": "26527ed86ec373b1063016a4df46d90a36f9c089",
  "tree": "9b0ff089794baa25067a125e2393fd84bd10302a",
  "parents": [
    "e902e9bcae2010bc42648c80ab6adc6c5a16a4a5"
  ],
  "author": {
    "name": "Johannes Schindelin",
    "email": "johannes.schindelin@gmx.de",
    "time": "Wed Mar 13 03:16:31 2019 -0700"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Thu Mar 14 12:46:29 2019 +0900"
  },
  "message": "rebase -i: demonstrate obscure loose object cache bug\n\nWe specifically support `exec` commands in `git rebase -i`\u0027s todo lists\nto rewrite the very same todo list. Of course, we need to validate that\ntodo list when re-reading it.\n\nIt is also totally legitimate to extend the todo list by `pick` lines\nusing short names of commits that were created only after the rebase\nstarted.\n\nAnd this is where the loose object cache interferes with this feature:\nif *some* loose object was read whose hash shares the same first two\ndigits with a commit that was not yet created when that loose object was\ncreated, then we fail to find that new commit by its short name in\n`get_oid()`, and the interactive rebase fails with an obscure error\nmessage like:\n\n\terror: invalid line 1: pick 6568fef\n\terror: please fix this using \u0027git rebase --edit-todo\u0027.\n\nLet\u0027s first demonstrate that this is actually a bug in a new regression\ntest, in a separate commit so that other developers who do not believe\nme can cherry-pick it to confirm the problem.\n\nThis new regression test generates two commits whose hashes share the\nfirst two hex digits (so that their corresponding loose objects live in\nthe same subdirectory of .git/objects/, and are therefore supposed to be\nin the same loose object cache bin).\n\nIt then picks the first, to make sure that the loose object cache is\ninitialized and cached that object directory, then generates the second\ncommit and picks it, too. Since the commit was generated in a different\nprocess than the sequencer that wants to pick it, the loose object cache\nhad no chance of being updated in the meantime.\n\nTechnically, we would need only one `exec` command in this regression\ntest case, but for ease of implementation, it uses a pseudo-recursive\ncall to the same script.\n\nSigned-off-by: Johannes Schindelin \u003cjohannes.schindelin@gmx.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b9292dfc2a329b32472368fb2874cc4a1e14cf47",
      "old_mode": 33261,
      "old_path": "t/t3429-rebase-edit-todo.sh",
      "new_id": "862f229c875211cf0b45d7691b71c626468d37fc",
      "new_mode": 33261,
      "new_path": "t/t3429-rebase-edit-todo.sh"
    }
  ]
}
