)]}'
{
  "commit": "3f7fb0dd45372b97fa050df7b277e706595621f3",
  "tree": "63140ca3737dd7aafa39f64365bd5175ad374f1c",
  "parents": [
    "873422314254ef6186dea157d15d33cea29dd7bc"
  ],
  "author": {
    "name": "Takuto Ikuta",
    "email": "tikuta@google.com",
    "time": "Thu Jun 19 17:52:38 2025 +0900"
  },
  "committer": {
    "name": "GN LUCI",
    "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Thu Jun 19 02:31:01 2025 -0700"
  },
  "message": "Propagate module dependencies transitively via public_deps\n\nWhen using C++ modules, dependencies must be treated as transitive. If a\ntarget `A` has a `public_deps` on module `B`, and `B` in turn has a\n`public_deps` on module `C`, any target that depends on `A` must also be\nprovided with the dependency on `C`.\n\nPreviously, GN did not propagate these module dependencies recursively.\nThis meant the dependency on `C` was not passed to `A`\u0027s dependents,\nwhich could lead to compilation failures. This behavior is incorrect, as\ndependencies between C++ modules are analogous to transitive header\ninclusions.\n\nThis change fixes this by recursively traversing the `public_deps` graph\nin `ResolvedTargetData` to collect the complete set of transitive module\ndependencies. This ensures that all module dependencies are correctly\npassed to the compiler.\n\nBug: 40440396\nChange-Id: Ib7b0e09477705708c92e6981b651c0eb9d6617e3\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19100\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6e27c6883c8dc2c2a59ed16594767b0f4efbfc6b",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_c_binary_target_writer.cc",
      "new_id": "cdfce61a464374b7871f47feb824525283f78b77",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_c_binary_target_writer.cc"
    },
    {
      "type": "modify",
      "old_id": "ce6d72b3f72d6c04e145d94125417d459ba74398",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_c_binary_target_writer_unittest.cc",
      "new_id": "80f453dafd5f1a1c30cc61fdefa2fb51ed728f46",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_c_binary_target_writer_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "7c3e79f103f693ab11ae455a3b47f775b2794ef9",
      "old_mode": 33188,
      "old_path": "src/gn/resolved_target_data.cc",
      "new_id": "30433b07e7ed5cc13233ccbabde34acf233a2c49",
      "new_mode": 33188,
      "new_path": "src/gn/resolved_target_data.cc"
    },
    {
      "type": "modify",
      "old_id": "61483bf4f148620cd2b0b14ef471e12f2d2c7f21",
      "old_mode": 33188,
      "old_path": "src/gn/resolved_target_data.h",
      "new_id": "a2743fcdd8a36378459804fff191517331efe3bd",
      "new_mode": 33188,
      "new_path": "src/gn/resolved_target_data.h"
    },
    {
      "type": "modify",
      "old_id": "1dde1c2dd04700990c9101f20b81f06bf8b2a928",
      "old_mode": 33188,
      "old_path": "src/gn/swift_values.h",
      "new_id": "c7f4f01b71350b4f4d6e33fc251b4deee282236f",
      "new_mode": 33188,
      "new_path": "src/gn/swift_values.h"
    },
    {
      "type": "modify",
      "old_id": "53ed8ad9f0547c37eb376b01666fc5219639a2ff",
      "old_mode": 33188,
      "old_path": "src/gn/target.cc",
      "new_id": "6cb5572a04ced242699bc8f09e432dc9892a52c0",
      "new_mode": 33188,
      "new_path": "src/gn/target.cc"
    },
    {
      "type": "modify",
      "old_id": "9c960e5ec70b9ce249038a06f0033046ad6d41ab",
      "old_mode": 33188,
      "old_path": "src/gn/xcode_writer.h",
      "new_id": "4a75cb3445d9051235e2f881a007301f96e12452",
      "new_mode": 33188,
      "new_path": "src/gn/xcode_writer.h"
    }
  ]
}
