From 1d587d8c4c6b7150131cbe1c421ee419dcb4c56d Mon Sep 17 00:00:00 2001 From: Arpad Borsos Date: Wed, 25 Nov 2020 15:40:13 +0100 Subject: [PATCH] Fix persisted doctests on Windows / when using workspaces When using the unstable `--persist-doctests` option, Windows path separators were not escaped properly. Also when running the command in a workspace, crate files can overwrite each other. Before: `src\lib_rs_1_0\rust_out` After: `\crate_a_src_lib_rs_1_0\rust_out`, `\crate_b_src_lib_rs_1_0\rust_out` --- src/librustdoc/doctest.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/librustdoc/doctest.rs b/src/librustdoc/doctest.rs index 9f35e57df41..a615701f253 100644 --- a/src/librustdoc/doctest.rs +++ b/src/librustdoc/doctest.rs @@ -754,12 +754,14 @@ impl Tester for Collector { let folder_name = filename .to_string() .chars() - .map(|c| if c == '/' || c == '.' { '_' } else { c }) + .map(|c| if c == '\\' || c == '/' || c == '.' { '_' } else { c }) .collect::(); path.push(format!( - "{name}_{line}_{number}", - name = folder_name, + "{krate}_{file}_{line}_{number}", + krate = cratename, + file = folder_name, + line = line, number = { // Increases the current test number, if this file already // exists or it creates a new entry with a test number of 0. @@ -768,7 +770,6 @@ impl Tester for Collector { .and_modify(|v| *v += 1) .or_insert(0) }, - line = line, )); std::fs::create_dir_all(&path)