Deliver units to compilation Context after initialization
authorDirkjan Ochtman <dirkjan@ochtman.nl>
Wed, 11 Apr 2018 20:25:05 +0000 (22:25 +0200)
committerDirkjan Ochtman <dirkjan@ochtman.nl>
Wed, 11 Apr 2018 22:10:49 +0000 (00:10 +0200)
src/cargo/ops/cargo_clean.rs
src/cargo/ops/cargo_rustc/context/mod.rs
src/cargo/ops/cargo_rustc/mod.rs

index cf1923ae7ed28e8c69c0083f6eb5591249f34cc5..74e317c3d493d99524b7cd405c0b1d07c4792723 100644 (file)
@@ -85,16 +85,8 @@ pub fn clean(ws: &Workspace, opts: &CleanOptions) -> CargoResult<()> {
 
     let mut build_config = BuildConfig::new(&opts.config.rustc()?.host, &opts.target)?;
     build_config.release = opts.release;
-    let mut cx = Context::new(
-        ws,
-        &resolve,
-        &packages,
-        opts.config,
-        build_config,
-        profiles,
-        None,
-        &units,
-    )?;
+    let mut cx = Context::new(ws, &resolve, &packages, opts.config, build_config, profiles)?;
+    cx.prepare_units(None, &units)?;
 
     for unit in units.iter() {
         rm_rf(&cx.files().fingerprint_dir(unit), config)?;
index 389a0afd5473c383770baa8384ebe3748ef873a4..17238595f8ee204404961188fa84ffdf4c33292c 100644 (file)
@@ -105,20 +105,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
         config: &'cfg Config,
         build_config: BuildConfig,
         profiles: &'a Profiles,
-        export_dir: Option<PathBuf>,
-        units: &[Unit<'a>],
     ) -> CargoResult<Context<'a, 'cfg>> {
-        let dest = if build_config.release {
-            "release"
-        } else {
-            "debug"
-        };
-        let host_layout = Layout::new(ws, None, dest)?;
-        let target_layout = match build_config.requested_target.as_ref() {
-            Some(target) => Some(Layout::new(ws, Some(target), dest)?),
-            None => None,
-        };
-
         let incremental_env = match env::var("CARGO_INCREMENTAL") {
             Ok(v) => Some(v == "1"),
             Err(_) => None,
@@ -163,13 +150,39 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
         };
 
         cx.probe_target_info()?;
-        let deps = build_unit_dependencies(units, &cx)?;
-        cx.unit_dependencies = deps;
-        let files = CompilationFiles::new(units, host_layout, target_layout, export_dir, ws, &cx);
-        cx.files = Some(files);
         Ok(cx)
     }
 
+    pub fn prepare_units(
+        &mut self,
+        export_dir: Option<PathBuf>,
+        units: &[Unit<'a>],
+    ) -> CargoResult<()> {
+        let dest = if self.build_config.release {
+            "release"
+        } else {
+            "debug"
+        };
+        let host_layout = Layout::new(self.ws, None, dest)?;
+        let target_layout = match self.build_config.requested_target.as_ref() {
+            Some(target) => Some(Layout::new(self.ws, Some(target), dest)?),
+            None => None,
+        };
+
+        let deps = build_unit_dependencies(units, &self)?;
+        self.unit_dependencies = deps;
+        let files = CompilationFiles::new(
+            units,
+            host_layout,
+            target_layout,
+            export_dir,
+            self.ws,
+            &self,
+        );
+        self.files = Some(files);
+        Ok(())
+    }
+
     /// Prepare this context, ensuring that all filesystem directories are in
     /// place.
     pub fn prepare(&mut self) -> CargoResult<()> {
index 02efdde7023ee3b6d0c705491644d30e1797c817..fb865f565e4a11de28ca84608efbc4ad822c4281 100644 (file)
@@ -181,19 +181,9 @@ pub fn compile_targets<'a, 'cfg: 'a>(
         })
         .collect::<Vec<_>>();
 
-    let mut cx = Context::new(
-        ws,
-        resolve,
-        packages,
-        config,
-        build_config,
-        profiles,
-        export_dir,
-        &units,
-    )?;
-
+    let mut cx = Context::new(ws, resolve, packages, config, build_config, profiles)?;
     let mut queue = JobQueue::new(&cx);
-
+    cx.prepare_units(export_dir, &units)?;
     cx.prepare()?;
     cx.build_used_in_plugin_map(&units)?;
     custom_build::build_map(&mut cx, &units)?;