|
8 | 8 | //! `rustdoc`.
|
9 | 9 |
|
10 | 10 | use std::fs;
|
11 |
| -use std::io; |
12 | 11 | use std::path::{Path, PathBuf};
|
13 | 12 |
|
14 | 13 | use crate::builder::crate_description;
|
@@ -694,11 +693,12 @@ impl Step for Rustc {
|
694 | 693 | // rustc. rustdoc needs to be able to see everything, for example when
|
695 | 694 | // merging the search index, or generating local (relative) links.
|
696 | 695 | let out_dir = builder.stage_out(compiler, Mode::Rustc).join(target.triple).join("doc");
|
697 |
| - t!(symlink_dir_force(&builder.config, &out, &out_dir)); |
| 696 | + t!(fs::create_dir_all(out_dir.parent().unwrap())); |
| 697 | + symlink_dir_force(&builder.config, &out, &out_dir); |
698 | 698 | // Cargo puts proc macros in `target/doc` even if you pass `--target`
|
699 | 699 | // explicitly (https://github.com/rust-lang/cargo/issues/7677).
|
700 | 700 | let proc_macro_out_dir = builder.stage_out(compiler, Mode::Rustc).join("doc");
|
701 |
| - t!(symlink_dir_force(&builder.config, &out, &proc_macro_out_dir)); |
| 701 | + symlink_dir_force(&builder.config, &out, &proc_macro_out_dir); |
702 | 702 |
|
703 | 703 | // Build cargo command.
|
704 | 704 | let mut cargo = builder.cargo(compiler, Mode::Rustc, SourceType::InTree, target, "doc");
|
@@ -821,7 +821,7 @@ macro_rules! tool_doc {
|
821 | 821 | ];
|
822 | 822 | for out_dir in out_dirs {
|
823 | 823 | t!(fs::create_dir_all(&out_dir));
|
824 |
| - t!(symlink_dir_force(&builder.config, &out, &out_dir)); |
| 824 | + symlink_dir_force(&builder.config, &out, &out_dir); |
825 | 825 | }
|
826 | 826 |
|
827 | 827 | // Build cargo command.
|
@@ -964,21 +964,24 @@ impl Step for UnstableBookGen {
|
964 | 964 | }
|
965 | 965 | }
|
966 | 966 |
|
967 |
| -fn symlink_dir_force(config: &Config, src: &Path, dst: &Path) -> io::Result<()> { |
| 967 | +fn symlink_dir_force(config: &Config, original: &Path, link: &Path) { |
968 | 968 | if config.dry_run() {
|
969 |
| - return Ok(()); |
| 969 | + return; |
970 | 970 | }
|
971 |
| - if let Ok(m) = fs::symlink_metadata(dst) { |
| 971 | + if let Ok(m) = fs::symlink_metadata(link) { |
972 | 972 | if m.file_type().is_dir() {
|
973 |
| - fs::remove_dir_all(dst)?; |
| 973 | + t!(fs::remove_dir_all(link)); |
974 | 974 | } else {
|
975 | 975 | // handle directory junctions on windows by falling back to
|
976 | 976 | // `remove_dir`.
|
977 |
| - fs::remove_file(dst).or_else(|_| fs::remove_dir(dst))?; |
| 977 | + t!(fs::remove_file(link).or_else(|_| fs::remove_dir(link))); |
978 | 978 | }
|
979 | 979 | }
|
980 | 980 |
|
981 |
| - symlink_dir(config, src, dst) |
| 981 | + t!( |
| 982 | + symlink_dir(config, original, link), |
| 983 | + format!("failed to create link from {} -> {}", link.display(), original.display()) |
| 984 | + ); |
982 | 985 | }
|
983 | 986 |
|
984 | 987 | #[derive(Ord, PartialOrd, Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
|
0 commit comments