cargo_compile: iterate packages once, not three times
authorRalf Jung <post@ralfj.de>
Thu, 14 Sep 2017 18:02:08 +0000 (20:02 +0200)
committerRalf Jung <post@ralfj.de>
Thu, 14 Sep 2017 21:43:29 +0000 (23:43 +0200)
src/cargo/ops/cargo_compile.rs
src/cargo/ops/cargo_doc.rs

index 6717e309880ec21317961769c03c13bb11de6c9b..88309fdfa66871d443aa6aa2f5b0ec2df21318bb 100644 (file)
@@ -231,21 +231,16 @@ pub fn compile_ws<'a>(ws: &Workspace<'a>,
                                             &specs)?;
     let (packages, resolve_with_overrides) = resolve;
 
-    let mut pkgids = Vec::new();
-    if specs.len() > 0 {
-        for p in specs.iter() {
-            pkgids.push(p.query(resolve_with_overrides.iter())?);
-        }
-    } else {
+    if specs.is_empty() {
         return Err(format!("manifest path `{}` contains no package: The manifest is virtual, \
                      and the workspace has no members.", ws.current_manifest().display()).into());
     };
 
-    let to_builds = pkgids.iter().map(|id| {
-        packages.get(id)
-    }).collect::<CargoResult<Vec<_>>>()?;
-    for p in to_builds.iter() {
+    let mut to_builds = Vec::new();
+    for p in specs.iter() {
+        let p = packages.get(p.query(resolve_with_overrides.iter())?)?;
         p.manifest().print_teapot(ws.config());
+        to_builds.push(p);
     }
 
     let mut general_targets = Vec::new();
index 4d8c8797b6222e64bd163d6c30c8bad70435b300..0181a0c44f91fee5a621738fd9008c8abc397e4c 100644 (file)
@@ -22,16 +22,16 @@ pub fn doc(ws: &Workspace, options: &DocOptions) -> CargoResult<()> {
                                             &specs)?;
     let (packages, resolve_with_overrides) = resolve;
 
-    let mut pkgs = Vec::new();
-    if specs.len() > 0 {
-        for p in specs.iter() {
-            pkgs.push(packages.get(p.query(resolve_with_overrides.iter())?)?);
-        }
-    } else {
+    if specs.is_empty() {
         return Err(format!("manifest path `{}` contains no package: The manifest is virtual, \
                      and the workspace has no members.", ws.current_manifest().display()).into());
     };
 
+    let mut pkgs = Vec::new();
+    for p in specs.iter() {
+        pkgs.push(packages.get(p.query(resolve_with_overrides.iter())?)?);
+    }
+
     let mut lib_names = HashSet::new();
     let mut bin_names = HashSet::new();
     for package in &pkgs {