cli_xtask/subcommand/
dist_build_readme.rs1use crate::{config::Config, Result, Run};
2
3#[cfg_attr(doc, doc = include_str!("../../doc/cargo-xtask-dist-build-readme.md"))]
5#[derive(Debug, Clone, Default, clap::Args)]
6#[non_exhaustive]
7pub struct DistBuildReadme {}
8
9impl Run for DistBuildReadme {
10 fn run(&self, config: &Config) -> Result<()> {
11 self.run(config)
12 }
13}
14
15impl DistBuildReadme {
16 #[tracing::instrument(name = "dist-build-readme", skip_all, err)]
18 pub fn run(&self, config: &Config) -> Result<()> {
19 tracing::info!("Building READMEs...");
20
21 let Self {} = self;
22 let config = config.dist()?;
23
24 let packages = config.packages();
25
26 let working_dir = config.dist_working_directory(None);
27 let readme_dir;
28 let add_package_dir;
29 if packages.len() > 1 {
30 readme_dir = working_dir.join("readme");
31 add_package_dir = true;
32 crate::fs::remove_dir(&readme_dir)?;
33 } else {
34 readme_dir = working_dir;
35 add_package_dir = false;
36 }
37
38 let Self {} = self;
39
40 for package in packages {
41 if let Some(readme) = &package.metadata().readme {
42 let src_file = package.root_directory().join(readme);
43 let dest_dir = if add_package_dir {
44 readme_dir.join(package.name())
45 } else {
46 readme_dir.clone()
47 };
48 let dest_file = dest_dir.join(readme);
49 crate::fs::copy(src_file, dest_file)?;
50 }
51 }
52
53 Ok(())
54 }
55}