)]}'
{
  "commit": "52b8ea934ecd24b52806188b53367aaa6185deb3",
  "tree": "436e0c06b3e15172cafd39067473192d8dd5eacd",
  "parents": [
    "e4df519f05ab20eae235968166a17a5a196bc377"
  ],
  "author": {
    "name": "Paul Mackerras",
    "email": "paulus@samba.org",
    "time": "Mon Mar 02 09:38:17 2009 +1100"
  },
  "committer": {
    "name": "Paul Mackerras",
    "email": "paulus@samba.org",
    "time": "Mon Mar 02 09:38:17 2009 +1100"
  },
  "message": "gitk: Fix possible infinite loop and display corruption\n\nThis fixes an issue reported by Johannes Sixt on the git mailing list:\n\n\u003e This recipe sends gitk into an endless loop. In git.git do:\n\u003e\n\u003e cd t\n\u003e # remove chmod a+x A near the end of the file\n\u003e sed -i \u0027s/chmod/: chmod/\u0027 t3400-rebase.sh\n\u003e sh t3400-rebase.sh --debug\n\u003e cd trash\\ directory.t3400-rebase/\n\u003e gitk master modechange modechange@{1}\n\u003e\n\u003e\n\u003e I briefly see the history chart, but the dot that should be modechange@{1}\n\u003e is missing. One automatically selected commit is shown in the diff section\n\u003e below. But then the commit list is cleared and gitk goes into an infinite\n\u003e loop.\n\u003e\n\u003e Things work alright if either modechange@{1} is dropped, or the \u0027chmod\u0027\n\u003e line is left unchanged, which is a bit strange.\n\u003e\n\u003e This is with git version 1.6.1.2.390.gba743\n\nThere were actually two problems.  This recipe created a situation where\ngit log would output a child commit after its parent.  This meant that\nwe called fix_reversal which called splitvarc, which should call modify_arc\nto note the fact that it has modified the arc that it has just split.  It\nwasn\u0027t, which meant that displayorder and other variables got into an\ninconsistent state (a commit appearing twice in displayorder).\n\nThis then meant that the targetrow/targetid logic in drawvisible thought\nit need to redraw each time.  That, together with the fact that drawvisible\ncalled drawcommits which called drawvisible if a redraw was needed, led\nto the infinite loop.\n\nIn fact drawvisible is now the only caller of drawcommits.  Thus, the\nstart and end row arguments to drawcommits always encompass the whole\nvisible area, so drawcommits doesn\u0027t need to call drawvisible to redraw;\nit just needs to clear the screen and draw what it\u0027s been asked to.\n\nThis fixes these two problems by adding a call to modify_arc in\nsplitvarc and by taking out the call to drawvisible in drawcommits.\nIt also removes an unrelated left-over debugging puts in external_blame.\n\nSigned-off-by: Paul Mackerras \u003cpaulus@samba.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "dc2a439618ffd92a92d9ca954a8597ba31875dab",
      "old_mode": 33261,
      "old_path": "gitk",
      "new_id": "1773ae63eb54f3b602b782a3633034aab2f828ae",
      "new_mode": 33261,
      "new_path": "gitk"
    }
  ]
}
