)]}'
{
  "commit": "eb1f75e4232cac32454482b1c4460c468c4828d9",
  "tree": "79fded60fa9df8a4ba876fe803890cf2e859e2b8",
  "parents": [
    "d6b7f0dd209c650ce90da6b749c947519d58f3dc"
  ],
  "author": {
    "name": "danakj",
    "email": "danakj@chromium.org",
    "time": "Wed Mar 30 09:56:25 2022 -0400"
  },
  "committer": {
    "name": "Commit Bot",
    "email": "commit-bot@chromium.org",
    "time": "Wed Mar 30 15:24:00 2022 +0000"
  },
  "message": "Ensure all --extern crates are listed as dependencies in Ninja.\n\nAny Rust crate B that is visible for use as a dependency of another\nRust crate A gets added to the compile of A with an `--extern` flag,\nsuch as `--extern B`. This ensures that B is accessible from A, so that\nit can use the functions and types in B.\n\nWhen A makes use of something in B, it means A needs to be rebuilt when\nB changes, however. This is not expressed to ninja through the\n`externs` set. Currently, if A deps on B deps on C, and B is an\norder-only dependency (such as a group), ninja does not know that A\nshould be rebuilt when C is changed. For direct dependencies,\nninja hears about them since rlibs are also collected as linkable_deps\nin NinjaBinaryTargetWriter::ClassifyDependency(). But transitive\ndependencies need to be propagated to the set of implicit dependencies\nof a target in order to cause it to rebuild, if the dependency can be\naccessed from the target.\n\nWe ensure transitive deps get a dependency relationship in ninja if\nand only if they appear in `externs`, since transitive dependencies\nthat are not visible to a crate can not require it to be recompiled.\n\nBug: 282\nChange-Id: I9f30274c65cccabcaed0181d7fe3b95539fb674b\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/13380\nReviewed-by: Tyler Mandry \u003ctmandry@google.com\u003e\nReviewed-by: Brett Wilson \u003cbrettw@chromium.org\u003e\nCommit-Queue: Brett Wilson \u003cbrettw@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f3ff21fc4d50023bebebc1e0f32c1a0c46c122a2",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_rust_binary_target_writer.cc",
      "new_id": "9263a58a55490de0c6f550ed133ea15bd10bcedf",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_rust_binary_target_writer.cc"
    },
    {
      "type": "modify",
      "old_id": "68d5970e3837711a5f805f431bcb579abe7fd176",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_rust_binary_target_writer_unittest.cc",
      "new_id": "d2241930235cc158f59e62fb7d02a525ea548ad4",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_rust_binary_target_writer_unittest.cc"
    }
  ]
}
