From ab79438d68dbc79da41fd97b2ffc3238d039b02d Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Thu, 17 Nov 2016 12:44:46 -0500 Subject: [PATCH] canonicalize base incremental path on windows This sidesteps problems with long paths because the canonical path includes the "magic long path prefix" on Windows. --- src/librustc_incremental/persist/fs.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/librustc_incremental/persist/fs.rs b/src/librustc_incremental/persist/fs.rs index 223200957cb7..2572a9c1d78f 100644 --- a/src/librustc_incremental/persist/fs.rs +++ b/src/librustc_incremental/persist/fs.rs @@ -201,6 +201,19 @@ pub fn prepare_session_directory(tcx: TyCtxt) -> Result { debug!("crate-dir: {}", crate_dir.display()); try!(create_dir(tcx.sess, &crate_dir, "crate")); + // Hack: canonicalize the path *after creating the directory* + // because, on windows, long paths can cause problems; + // canonicalization inserts this weird prefix that makes windows + // tolerate long paths. + let crate_dir = match crate_dir.canonicalize() { + Ok(v) => v, + Err(err) => { + tcx.sess.err(&format!("incremental compilation: error canonicalizing path `{}`: {}", + crate_dir.display(), err)); + return Err(()); + } + }; + let mut source_directories_already_tried = FxHashSet(); loop {