)]}'
{
  "commit": "22b8bd000500b1f8640143d3cc7086d5cbc2c00c",
  "tree": "1ba2e620479bf4c04fc8fab4d409068067762538",
  "parents": [
    "c6fd627dea5e48a5a154dcd8e4838ed1cf2c27e3"
  ],
  "author": {
    "name": "Philipp Wollermann",
    "email": "philwo@google.com",
    "time": "Mon Jun 29 09:19:53 2026 +0900"
  },
  "committer": {
    "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Sun Jun 28 20:53:51 2026 -0700"
  },
  "message": "Make Ninja output deterministic across GN binary builds\n\nSubstitutionBits::FillVector() iterated a base::flat_set\u003cconst\nSubstitution*\u003e in pointer order, causing ninja variable assignments\n(defines, include_dirs, etc.) within build edges to appear in a\ndifferent order depending on which build of GN was used, even from the\nsame source. Different binaries place the Substitution objects at\ndifferent addresses, producing different iteration order.\n\nFix by sorting the FillVector output by substitution name.\n\nChange-Id: Ie90abe5b7121e21614e8dffcfc24889bbeaa028a\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/23440\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: Matt Stark \u003cmsta@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9a9027bc6914cbf7f37b48500f2c5e0e604328af",
      "old_mode": 33261,
      "old_path": "build/gen.py",
      "new_id": "c95b57ef16ad105d0e05983b5cc8dc2689d6b905",
      "new_mode": 33261,
      "new_path": "build/gen.py"
    },
    {
      "type": "modify",
      "old_id": "723bf8a4469953dd9e234ac892efc6ff5d22b516",
      "old_mode": 33188,
      "old_path": "src/gn/substitution_type.cc",
      "new_id": "9f7877f48b69f1b2af954e68d6e7d30384422676",
      "new_mode": 33188,
      "new_path": "src/gn/substitution_type.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d8e8b33384e1821e061937379570a2f2b26aa13a",
      "new_mode": 33188,
      "new_path": "src/gn/substitution_type_unittest.cc"
    }
  ]
}
