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}
;
15 use rustc
::session
::Session
;
16 use rustc
::session
::config
::OutputType
;
17 use rustc
::util
::fs
::link_or_copy
;
18 use std
::path
::PathBuf
;
20 use std
::fs
as std_fs
;
22 pub fn save_trans_partition(sess
: &Session
,
25 files
: &[(OutputType
, PathBuf
)]) {
26 debug
!("save_trans_partition({:?},{},{:?})",
30 if sess
.opts
.incremental
.is_none() {
33 let work_product_id
= Arc
::new(WorkProductId(cgu_name
.to_string()));
35 let saved_files
: Option
<Vec
<_
>> =
37 .map(|&(kind
, ref path
)| {
38 let file_name
= format
!("cgu-{}.{}", cgu_name
, kind
.extension());
39 let path_in_incr_dir
= in_incr_comp_dir_sess(sess
, &file_name
);
40 match link_or_copy(path
, &path_in_incr_dir
) {
41 Ok(_
) => Some((kind
, file_name
)),
43 sess
.warn(&format
!("error copying object file `{}` \
44 to incremental directory as `{}`: {}",
46 path_in_incr_dir
.display(),
53 let saved_files
= match saved_files
{
58 let work_product
= WorkProduct
{
59 input_hash
: partition_hash
,
60 saved_files
: saved_files
,
63 sess
.dep_graph
.insert_work_product(&work_product_id
, work_product
);
66 pub fn delete_workproduct_files(sess
: &Session
, work_product
: &WorkProduct
) {
67 for &(_
, ref file_name
) in &work_product
.saved_files
{
68 let path
= in_incr_comp_dir_sess(sess
, file_name
);
69 match std_fs
::remove_file(&path
) {
73 &format
!("file-system error deleting outdated file `{}`: {}",
74 path
.display(), err
));