)]}'
{
  "commit": "c91c944a068e12eca5d4b6040ad05c7068437111",
  "tree": "f67cab6bfe0b824c5ca18982acae2f553a0a3bfe",
  "parents": [
    "7b76ac664cbe68c64bf79bd37e8b5d5fe690ba29"
  ],
  "author": {
    "name": "Elijah Newren",
    "email": "newren@gmail.com",
    "time": "Tue Dec 11 08:11:38 2018 -0800"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Fri Dec 28 12:49:48 2018 -0800"
  },
  "message": "rebase: define linearization ordering and enforce it\n\nEver since commit 3f213981e44a (\"add tests for rebasing merged history\",\n2013-06-06), t3425 has had tests which included the rebasing of merged\nhistory and whose order of applied commits was checked.  Unfortunately,\nthe tests expected different behavior depending on which backend was in\nuse.  Implementing these checks was the following four lines (including\nthe TODO message) which were repeated verbatim three times in t3425:\n\n    #TODO: make order consistent across all flavors of rebase\n    test_run_rebase success \u0027e n o\u0027 \u0027\u0027\n    test_run_rebase success \u0027e n o\u0027 -m\n    test_run_rebase success \u0027n o e\u0027 -i\n\nAs part of the effort to reduce differences between the rebase backends\nso that users get more uniform behavior, let\u0027s define the correct\nbehavior and modify the different backends so they all get the right\nanswer.  It turns out that the difference in behavior here is entirely\ndue to topological sorting; since some backends require topological\nsorting (particularly when --rebase-merges is specified), require it for\nall modes.  Modify the am and merge backends to implement this.\n\nPerformance Considerations:\n\nI was unable to measure any appreciable performance difference with this\nchange.  Trying to control the run-to-run variation was difficult; I\neventually found a headless beefy box that I could ssh into, which\nseemed to help.  Using git.git, I ran the following testcase:\n    $ git reset --hard v2.20.0-rc1~2\n    $ time git rebase --quiet v2.20.0-rc0~16\n\nI first ran once to warm any disk caches, then ran five subsequent runs\nand recorded the times of those five.  I observed the following results\nfor the average time:\n\n     Before this change:\n       \"real\" timing: 1.340s (standard deviation: 0.040s)\n       \"user\" timing: 1.050s (standard deviation: 0.041s)\n       \"sys\"  timing: 0.270s (standard deviation: 0.011s)\n     After  this change:\n       \"real\" timing: 1.327s (standard deviation: 0.065s)\n       \"user\" timing: 1.031s (standard deviation: 0.061s)\n       \"sys\"  timing: 0.280s (standard deviation: 0.014s)\n\nMeasurements aside, I would expect the timing for walking revisions to\nbe dwarfed by the work involved in creating and applying patches, so\nthis isn\u0027t too surprising.  Further, while somewhat counter-intuitive,\nit is possible that turning on topological sorting is actually a\nperformance improvement: by way of comparison, turning on --topo-order\nmade fast-export faster (see\nhttps://public-inbox.org/git/20090211135640.GA19600@coredump.intra.peff.net/).\n\nSigned-off-by: Elijah Newren \u003cnewren@gmail.com\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "99b8c177875a7f26ae6c7f70be42c9d97231f7b9",
      "old_mode": 33188,
      "old_path": "git-rebase--am.sh",
      "new_id": "6416716ee620cfac7803f9f00cef309a41b08f31",
      "new_mode": 33188,
      "new_path": "git-rebase--am.sh"
    },
    {
      "type": "modify",
      "old_id": "91250cbaed31fa27c482d129319c7e3fc9e63f39",
      "old_mode": 33188,
      "old_path": "git-rebase--merge.sh",
      "new_id": "ced38bb3a65955d30ee7f8c785a51ac1389b5f66",
      "new_mode": 33188,
      "new_path": "git-rebase--merge.sh"
    },
    {
      "type": "modify",
      "old_id": "5f892e33d7e53e8871df256b3344ebd0476712ee",
      "old_mode": 33261,
      "old_path": "t/t3425-rebase-topology-merges.sh",
      "new_id": "fd8efe84fe8f74d062d73f27fb63d95cc5bed4c8",
      "new_mode": 33261,
      "new_path": "t/t3425-rebase-topology-merges.sh"
    }
  ]
}
