)]}'
{
  "commit": "a69a63265cfd9e006d43137f98301b8d274ad4c9",
  "tree": "21a211da0665b259b4105200c1525d6c3df6c163",
  "parents": [
    "c33d8f3b5a50b56466998e8c5ed8a077d2caed84",
    "5b2dd1af14ebc3577265ba725a7302f037d0b515"
  ],
  "author": {
    "name": "bors",
    "email": "bors@rust-lang.org",
    "time": "Thu Sep 03 16:44:58 2026 +0000"
  },
  "committer": {
    "name": "bors",
    "email": "bors@rust-lang.org",
    "time": "Thu Sep 03 16:44:58 2026 +0000"
  },
  "message": "Auto merge of #161716 - notriddle:remake-bootstrap-doc-mergeable, r\u003dKobzol,jieyouxu\n\nbootstrap: Enable rustdoc mergeable CCI for std and internal docs\n\n\n\nTakes a different approach to https://github.com/rust-lang/rust/pull/160098, where the internal docs are merged by bootstrap directly invoking rustdoc. This requires bootstrap to gather the list of metadata directories by inspecting cargo\u0027s fingerprint files (which aren\u0027t stable). The first commit is written by @camelid, but I wrote the other two.\r\n\r\nThis feature is needed because:\r\n\r\n1. The search index (that powers [web-based search](https://doc.rust-lang.org/nightly/nightly-rustc/?search\u003dty%20-%3E%20rustdoc%3A%3Atype)) needs to contain all of the crates in the nightly-rustc project. In particular, I\u0027d prefer if it contained Clippy, Rustdoc, and Rustc, since those crates share type checker stuff and the ability to search all three at once is convenient.\r\n2. For every crate that rustdoc *currently* documents, it has to load the search index from the doc output dir, and rebuild the search index with the new crate added to it. Loading the search index requires $O(\\text{crates})$ work, so doing it once for every crate means we\u0027re doing $O(\\text{crates}^2)$ work overall.\r\n3. It would be more efficient, *instead*, if each crate wrote its data separately, and then the final search index was generated at the end by merging them all at once. Obviously, this would make the work linear instead of quadratic. For the record, Hoogle and Sherlodoc have a similar index-generating step.\r\n4. We call this \"Mergeable Cross-Crate-Information.\" Cargo stores it in the build directory, and supplies it to Rustdoc in a separate phase that runs after everything else. When we eventually stabilize this feature, it will be invisible to (most) end users. `cargo doc` will just be faster.\r\n5. So, in order for crates to share their cross-crate info, we need them to share a build directory.\r\n6. Tools, like Rustdoc and Cargo, don\u0027t normally share a build directory with Rustc.\r\n7. To make them share a build directory while generating documentation, without forcing them to share a build directory while compiling, I added a new mode.\r\n\r\n---\r\n\r\nThis rustdoc feature is unstable but will be stabilized soon, and this is a good way of dogfooding it to make sure it works properly. It should have no effect on the generated docs, but it provides a significant speedup. For example, I measure a 3x speedup locally (3m 11s -\u003e 1m 1s) for `x doc src/tools` -- note that this is with the latest rustdoc perf improvements (rust-lang/rust#159854).\r\n\r\nr? @Kobzol ",
  "tree_diff": []
}
