Support --exclude option for `cargo doc`
authorAleksey Kladov <aleksey.kladov@gmail.com>
Mon, 26 Feb 2018 18:39:25 +0000 (21:39 +0300)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Mon, 26 Feb 2018 18:39:25 +0000 (21:39 +0300)
I think this should have been implemented when the feature was added for
other commands. Probably just an oversight.

src/bin/doc.rs

index 6e17836963c2d0d1cafc61f6b33c2f113b8aea39..c0ffcddedf2994084008dd6f19e7e041d05d080a 100644 (file)
@@ -27,6 +27,7 @@ pub struct Options {
     flag_frozen: bool,
     flag_locked: bool,
     flag_all: bool,
+    flag_exclude: Vec<String>,
     #[serde(rename = "flag_Z")]
     flag_z: Vec<String>,
 }
@@ -42,6 +43,7 @@ Options:
     --open                       Opens the docs in a browser after the operation
     -p SPEC, --package SPEC ...  Package to document
     --all                        Document all packages in the workspace
+    --exclude SPEC ...           Exclude packages from the build
     --no-deps                    Don't build documentation for dependencies
     -j N, --jobs N               Number of parallel jobs, defaults to # of CPUs
     --lib                        Document only this package's library
@@ -88,11 +90,9 @@ pub fn execute(options: Options, config: &mut Config) -> CliResult {
     let root = find_root_manifest_for_wd(options.flag_manifest_path, config.cwd())?;
     let ws = Workspace::new(&root, config)?;
 
-    let spec = if options.flag_all || (ws.is_virtual() && options.flag_package.is_empty()) {
-        Packages::All
-    } else {
-        Packages::Packages(&options.flag_package)
-    };
+    let spec = Packages::from_flags(options.flag_all,
+                                    &options.flag_exclude,
+                                    &options.flag_package)?;
 
     let empty = Vec::new();
     let doc_opts = ops::DocOptions {