)]}'
{
  "commit": "bb1b7ae31a6816826acf6d61371ad6332c9ede78",
  "tree": "798fbab4203c798aa22c094b8d8ed6b1b0c3495a",
  "parents": [
    "27082f385f568c13d4bdde179f59e4d6f7613266"
  ],
  "author": {
    "name": "Martin Fick",
    "email": "martin.fick@linaro.org",
    "time": "Thu Jun 30 10:56:02 2022 -0600"
  },
  "committer": {
    "name": "Martin Fick",
    "email": "martin.fick@linaro.org",
    "time": "Wed Sep 07 14:45:02 2022 -0600"
  },
  "message": "Use a SubNodeAdder to add TaskTree SubNodes\n\nThe new SubNodeAdder stores data that is only needed while adding\nsubnodes, and thus it is discarded after this completes in order to\nimmdediately free up the memory for this data since it will never be\nused again anyway. Previously this data was only freed once a node\u0027s\nsubnodes were refreshed which only happens when a node is applicable\nagain for another change.\n\nIn some real world use cases, there are over 1K nodes which are not\napplicable for each change, a singificant amount of memory can end up\nbeing used much longer than needed, until another change in the same\nnode is processed or the end of the query. Multiply this by \u003e 1K nodes\nand this ends up being a lot data being held for much longer than\nneeded.\n\nChange-Id: I941a2d686425a7d12a2b5bd82c23293b08658ede\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2ba88eab9c2a2b52df05751ddbcae23a93747afa",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java",
      "new_id": "d51f5bbdb70ce2a052706008bec497955e7bc9de",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java"
    }
  ]
}
