)]}'
{
  "commit": "2dfb8cbd3b749242ee4492a7f15eba6889d52c7f",
  "tree": "80b561b5acd7a6eaab93774e1f48e5db33900d61",
  "parents": [
    "56c22442ee369ddc6f44c2ff5e0664d47a3c6b0e"
  ],
  "author": {
    "name": "Nico Weber",
    "email": "thakis@chromium.org",
    "time": "Wed Sep 23 23:16:38 2026 -0700"
  },
  "committer": {
    "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Thu Sep 24 09:08:32 2026 -0700"
  },
  "message": "Write phony rules for harddeps\n\nWrite a rule for each target with at least two hard deps,\nsimilar to what WritePublicInputsStampOrPhony() does for public_inputs:\n\n    build phony/foo/bar.harddeps: $\n        phony phony/foo/action phony/foo/dep.harddeps\n\nIt lists the target\u0027s direct hard deps. This mirrors\nResolvedTargetData::ComputeHardDeps(), so it depends on the same set\nof hard deps, but its size is proportional to the number of direct deps.\nA target\u0027s input deps then just refer to its own .harddeps rule.\n\nResults for a Chromium build (mac, arm64, is_debug\u003dfalse):\n\n                                      before         after\n  size of all loaded .ninja files     1025 MB        427 MB\n  gn gen (hyperfine, 6 runs)          2.065s ± .048  1.947s ± .050\n    user / sys                        12.0s / 4.3s   10.1s / 4.5s\n\nChromium no-op builds of base_unittests (target already built, hyperfine, M-series Mac):\n\n                                               before           after\n  siso v1.6.0 (autoninja), -offline            735.5 ms ± 13.7  648.3 ms ± 22.8\n    user / sys                                 3.7s / 1.9s      2.3s / 2.2s\n  depot_tools ninja (1.12.1)                   4.37s ± .02      2.25s ± .02\n  ninja v1.13.2                                2.755s ± .009    1.532s ± .007\n  ninja with some local changes to tweak perf  535.8 ms ± 2.7   408.4 ms ± 8.1\n  (`siso -n` and `ninja -n` are within 2% of the no-op times.)\n\nNo intended behavior change.\n\nBug: chromium:40278737\nChange-Id: I163e6bea334c2e626bf7c96cd8d942848a6766bf\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/26741\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6fc5e438fcde63d63cd2bdfa8b60ea96a3cc26c2",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_copy_target_writer_unittest.cc",
      "new_id": "c81fa0b8489ab1cb54774201571f65622d9222ec",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_copy_target_writer_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "d3d1eb1d078bbb9b3796e9d865b5f54b2053589a",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_target_writer.cc",
      "new_id": "7e1ba0ecf8d8ccf5d3f73b59f5a4cf8bee72fe37",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_target_writer.cc"
    },
    {
      "type": "modify",
      "old_id": "d7b28837d4077c0ca1857550c45468472d4d8247",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_target_writer.h",
      "new_id": "043e8346b6648a96094f695a119fdd33e374ec6f",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_target_writer.h"
    },
    {
      "type": "modify",
      "old_id": "53b1a4d49492cd997bd12401145e6344ff5aa668",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_target_writer_unittest.cc",
      "new_id": "fb0032041dbfb4207580ae5fa01bafb69cc73027",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_target_writer_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "bf30bfbb3f9ce2f4543abcb7a2a88a3c90f6d864",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_utils.cc",
      "new_id": "e8a046a16561f8326368aeecc7134f4aa65147e8",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_utils.cc"
    },
    {
      "type": "modify",
      "old_id": "e629d917c04fc529b71275535c0b937ad669f9e7",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_utils.h",
      "new_id": "1773038f52365e329dcc73c35bc00e58e2f84076",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_utils.h"
    },
    {
      "type": "modify",
      "old_id": "de936c57bd113353f152ec73dce4d569fbab5d36",
      "old_mode": 33188,
      "old_path": "src/gn/resolved_target_data.cc",
      "new_id": "b0ef9a6ef3f784cb1f0abf6ddbc826aa8d9ae7ae",
      "new_mode": 33188,
      "new_path": "src/gn/resolved_target_data.cc"
    },
    {
      "type": "modify",
      "old_id": "2c0f8360f6f24e7d788a85b5a0e8d0fe7379e8f6",
      "old_mode": 33188,
      "old_path": "src/gn/resolved_target_data.h",
      "new_id": "544872da8eced19f48695eef5211ae75d42be7c3",
      "new_mode": 33188,
      "new_path": "src/gn/resolved_target_data.h"
    }
  ]
}
