)]}'
{
  "commit": "60a6d261ac6bd0991c5d189681701c9d91558c82",
  "tree": "0e966f3812f87c831e95a5259859e8faec7a0577",
  "parents": [
    "8bf5ddd31f3c9bae676ea0f287be0d82e2520744"
  ],
  "author": {
    "name": "Martin Fick",
    "email": "martin.fick@linaro.org",
    "time": "Sat Jul 30 21:30:05 2022 -0600"
  },
  "committer": {
    "name": "Martin Fick",
    "email": "martin.fick@linaro.org",
    "time": "Wed Sep 14 09:53:11 2022 -0600"
  },
  "message": "Cache applicable definitionLists for ChangeNodes\n\nTake advantage of ChangeNodes whose subNodes do not require a reload to\ncache applicable, filtered lists, per branch. For non Change Nodes, the\nsubNodes lists, including applicable, filtered subNode Lists are already\ncached per branch. However for ChangeNodes these caches are always empty\nsince ChangeNodes are not reused (due to their name changing).  Much of\nthe benefits of this missed caching can be achieved for ChangeNodes by\nat least caching definitionLists instead of NodeLists. This is already\nbeing done for the full definitionList for ChangeNodes, so do it also\nfor the applicable, filtered definitionLists, per branch.\n\nIn a sample walking ancestors use case, this definitionList caching for\nover 33K ChangeNodes results applicable nodelists being evaluated less\nthan 300 times! The performance gain in the case of a task.config which\nwalks all dependencies for a change run with status:open --no-limit\n--task--applicable is very significant, around three times as fast:\n\nBefore this change:  15m14s 15m46s 17m37s 15m24s 15m11s\nAfter this change:    4m47s  4m56s  4m22s  5m5s   4m27s\n\nChange-Id: I6a7ef48b028e901179a0767734aec709bec9c7cd\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ff9ff3bbf3f39925992b13971032fb26c12b8e68",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/task/HitHashMap.java",
      "new_id": "a7f0f721e94ec694c4e8b8f34aa582a786c51d6c",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/task/HitHashMap.java"
    },
    {
      "type": "modify",
      "old_id": "aeeb4341b00a70dcf0c91f9b4cabc35f9b11ee17",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/task/StatisticsMap.java",
      "new_id": "4ae885731ebf29f6b96297de61e209def8470b06",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/task/StatisticsMap.java"
    },
    {
      "type": "modify",
      "old_id": "63491566f488ace44b85a6927ff97043a7c771d6",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java",
      "new_id": "64b333f88f41d81891bd32668e9a83f648f4021e",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d7d0651e56af18fe9782f77a6497e07d2d93baf4",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/task/TracksStatistics.java"
    }
  ]
}
