)]}'
{
  "commit": "2fec4128e04e89ee99e75a4169d004d9605bd23f",
  "tree": "ae2235dabc6b13373d0184aa5bf665f91d6ca599",
  "parents": [
    "219009f60695ba87d382f03f1de59b9f1b6170b2"
  ],
  "author": {
    "name": "Cole Faust",
    "email": "colefaust@google.com",
    "time": "Sat Sep 07 17:28:11 2024 -0700"
  },
  "committer": {
    "name": "Cole Faust",
    "email": "colefaust@google.com",
    "time": "Mon Sep 09 17:42:49 2024 -0700"
  },
  "message": "Make globs compatible with hash-based ninja semantics\n\nPreviously, globs worked by having soong_build rewrite a ninja file\nthat ran the globs, and then dependended on the results of that ninja\nfile. soong_build also pre-filled their outputs so that it wouldn\u0027t\nbe immediately rerun on the 2nd build.\n\nHowever, the pre-filling of outputs worked for ninja, because although\nit updated their timestamps, the soong ninja file was then touched\nby soong_build after that, so the soong_build ninja file was newer\nand ninja wouldn\u0027t rerun soong. But N2 reruns actions if their inputs\u0027\nmtimes change in any way, not just if they\u0027re newer. Similarly,\nhashed-based ninja implementations could not enforce an order on\nfile contents, so they would have the same problem.\n\nTo fix this, lift the glob checking out of ninja and into soong_ui.\nSoong_build will output a globs report file every time it\u0027s run, and\nevery time soong_ui is run it will check the globs file, and if any\nglobs change, update an input to soong_build. soong_ui is essentially\ndoing what was done in ninja with bpglob actions before.\n\nBug: 364749114\nTest: m nothing, m nothing again doesn\u0027t reanalyze, create a new file under a glob directory, m nothing again reanalyzes\nChange-Id: I0dbc5ec58c89b869b59cd0602b82215c4972d799\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a8be7ec1674b29876b6cf4e97cb92789be9dbc65",
      "old_mode": 33188,
      "old_path": "cmd/soong_build/main.go",
      "new_id": "24a44b4dac08f844e3ad6970e18d759ba3bb2cc2",
      "new_mode": 33188,
      "new_path": "cmd/soong_build/main.go"
    },
    {
      "type": "modify",
      "old_id": "2e40950b55b1693e8642bf4cfcf0d6fdde53a56c",
      "old_mode": 33261,
      "old_path": "tests/bootstrap_test.sh",
      "new_id": "715f9764784df7a851ec487b67d80a508ec47a90",
      "new_mode": 33261,
      "new_path": "tests/bootstrap_test.sh"
    },
    {
      "type": "modify",
      "old_id": "08e195783bf2d6dfd98006d3a29c69deee6ff324",
      "old_mode": 33188,
      "old_path": "ui/build/config.go",
      "new_id": "f02222e1a3714a5b4ab136e76d731b7739dde0c3",
      "new_mode": 33188,
      "new_path": "ui/build/config.go"
    },
    {
      "type": "modify",
      "old_id": "b94ffa574c137722fffdb460e42f5ee3d34e2132",
      "old_mode": 33188,
      "old_path": "ui/build/soong.go",
      "new_id": "76a3e3536c948674596d33549d292c9c609a90c4",
      "new_mode": 33188,
      "new_path": "ui/build/soong.go"
    },
    {
      "type": "modify",
      "old_id": "3faa94d953e2e3372dff5ba6d28718ed1c5139d2",
      "old_mode": 33188,
      "old_path": "ui/build/test_build.go",
      "new_id": "ba53119b6c285fd9052b848f04bcd6ec631bb7c0",
      "new_mode": 33188,
      "new_path": "ui/build/test_build.go"
    }
  ]
}
