)]}'
{
  "commit": "4557f1add261b70887136498084e7491a3f9535f",
  "tree": "94812f55852f4d6944586a03d418186d04ea6d26",
  "parents": [
    "6e3a7b3398559305c7a239a42e447c21a8f39ff8"
  ],
  "author": {
    "name": "Johannes Schindelin",
    "email": "johannes.schindelin@gmx.de",
    "time": "Thu Feb 09 23:23:06 2017 +0100"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Thu Feb 09 14:55:26 2017 -0800"
  },
  "message": "rebase--helper: add a builtin helper for interactive rebases\n\nGit\u0027s interactive rebase is still implemented as a shell script, despite\nits complexity. This implies that it suffers from the portability point\nof view, from lack of expressibility, and of course also from\nperformance. The latter issue is particularly serious on Windows, where\nwe pay a hefty price for relying so much on POSIX.\n\nUnfortunately, being such a huge shell script also means that we missed\nthe train when it would have been relatively easy to port it to C, and\ninstead piled feature upon feature onto that poor script that originally\nnever intended to be more than a slightly pimped cherry-pick in a loop.\n\nTo open the road toward better performance (in addition to all the other\nbenefits of C over shell scripts), let\u0027s just start *somewhere*.\n\nThe approach taken here is to add a builtin helper that at first intends\nto take care of the parts of the interactive rebase that are most\naffected by the performance penalties mentioned above.\n\nIn particular, after we spent all those efforts on preparing the sequencer\nto process rebase -i\u0027s git-rebase-todo scripts, we implement the `git\nrebase -i --continue` functionality as a new builtin, git-rebase--helper.\n\nOnce that is in place, we can work gradually on tackling the rest of the\ntechnical debt.\n\nNote that the rebase--helper needs to learn about the transient\n--ff/--no-ff options of git-rebase, as the corresponding flag is not\npersisted to, and re-read from, the state directory.\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": "b1020b875fc006c81ed92ffb93e73876487c7c57",
      "old_mode": 33188,
      "old_path": ".gitignore",
      "new_id": "833ef3b0b783b8180d0dad1ce336713bddf09b26",
      "new_mode": 33188,
      "new_path": ".gitignore"
    },
    {
      "type": "modify",
      "old_id": "8e4081e0619f8a9927a3a4c544048f576a194fd0",
      "old_mode": 33188,
      "old_path": "Makefile",
      "new_id": "29f8663509416777e036fc43c9f67155bd7cbb26",
      "new_mode": 33188,
      "new_path": "Makefile"
    },
    {
      "type": "modify",
      "old_id": "67f80519dafc4875434437a34e438453bc2c78c4",
      "old_mode": 33188,
      "old_path": "builtin.h",
      "new_id": "9e4a89816d5fbde0ed0b3bebff8f90f70dd4480d",
      "new_mode": 33188,
      "new_path": "builtin.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ca1ebb2fa18a221446e5f8458e1f30528c31ed98",
      "new_mode": 33188,
      "new_path": "builtin/rebase--helper.c"
    },
    {
      "type": "modify",
      "old_id": "c887272b129968db161a152ce8a91aca4439ca3c",
      "old_mode": 33188,
      "old_path": "git.c",
      "new_id": "33f52acbcc8647e10e5d675806ca03d33fed899d",
      "new_mode": 33188,
      "new_path": "git.c"
    }
  ]
}
