1 // Copyright 2012-2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
11 //! This module contains files for saving intermediate work-products.
14 use rustc
::dep_graph
::{WorkProduct, WorkProductId, DepGraph}
;
15 use rustc
::session
::Session
;
16 use rustc
::session
::config
::OutputType
;
17 use rustc
::util
::fs
::link_or_copy
;
18 use std
::path
::PathBuf
;
19 use std
::fs
as std_fs
;
21 pub fn save_trans_partition(sess
: &Session
,
24 files
: &[(OutputType
, PathBuf
)]) {
25 debug
!("save_trans_partition({:?},{:?})",
28 if sess
.opts
.incremental
.is_none() {
31 let work_product_id
= WorkProductId
::from_cgu_name(cgu_name
);
33 let saved_files
: Option
<Vec
<_
>> =
35 .map(|&(kind
, ref path
)| {
36 let file_name
= format
!("cgu-{}.{}", cgu_name
, kind
.extension());
37 let path_in_incr_dir
= in_incr_comp_dir_sess(sess
, &file_name
);
38 match link_or_copy(path
, &path_in_incr_dir
) {
39 Ok(_
) => Some((kind
, file_name
)),
41 sess
.warn(&format
!("error copying object file `{}` \
42 to incremental directory as `{}`: {}",
44 path_in_incr_dir
.display(),
51 let saved_files
= match saved_files
{
56 let work_product
= WorkProduct
{
57 cgu_name
: cgu_name
.to_string(),
61 dep_graph
.insert_work_product(&work_product_id
, work_product
);
64 pub fn delete_workproduct_files(sess
: &Session
, work_product
: &WorkProduct
) {
65 for &(_
, ref file_name
) in &work_product
.saved_files
{
66 let path
= in_incr_comp_dir_sess(sess
, file_name
);
67 match std_fs
::remove_file(&path
) {
71 &format
!("file-system error deleting outdated file `{}`: {}",
72 path
.display(), err
));