)]}'
{
  "commit": "5d809ccdcb330c360ce536ad4988138f51a43a5f",
  "tree": "f73061a5bee425590a2fd9c00288dd26f9f5e147",
  "parents": [
    "c15bbeaa62532cef001b63ab0e2ca9ec9ed311f3"
  ],
  "author": {
    "name": "Martin Fick",
    "email": "martin.fick@linaro.org",
    "time": "Wed Aug 03 11:39:03 2022 -0600"
  },
  "committer": {
    "name": "Martin Fick",
    "email": "martin.fick@linaro.org",
    "time": "Wed Sep 14 09:53:11 2022 -0600"
  },
  "message": "Use custom Matcher to find and replace properties\n\nThe simplest way to find and replace properties in Strings is using a\nPattern Matcher. However, implementing a specialized Matcher using\nsimpler String primitives is faster, so do so using an API that looks\nand feels as simple as the Pattern Matcher API.\n\nIn a sample walking ancestors use case, this caching and saves a small\nbut measurable amount of the total time. In the case of a task.config\nwhich walks all dependencies for a change when run with status:open\n--no-limit --task--applicable the gain can be seen below.\n\nBefore this change: 8m7s 3m16s 3m26s 3m16s 3m21s\nAfter this change: 2m34s 2m28s 2m40s 2m34s 2m39s\n\nChange-Id: Ief2d6a24f6952828214f55a4a4cf9ea0f3768f42\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bccf03c877b1fc8e874843b7618fc200aea9fe9b",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/task/properties/AbstractExpander.java",
      "new_id": "381331938bc0ad9bfaddaf5e892787e1cdfa1ccf",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/task/properties/AbstractExpander.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "abe203d2903668fde80e3308571882b176aa1dfb",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/task/properties/Matcher.java"
    }
  ]
}
