diff options
author | Edwin Cheng <[email protected]> | 2020-04-26 11:52:21 +0100 |
---|---|---|
committer | Edwin Cheng <[email protected]> | 2020-04-26 11:59:09 +0100 |
commit | bfce6573772ebb91a9b1054864c0f53669ceee2f (patch) | |
tree | ac0befe1ebbd9dcad3bf960f3754c96e3963c23b /crates/ra_proc_macro_srv | |
parent | 183673655f72250ee05ab1c5864feeae33a3c662 (diff) |
Generate uniq name
Diffstat (limited to 'crates/ra_proc_macro_srv')
-rw-r--r-- | crates/ra_proc_macro_srv/src/dylib.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/crates/ra_proc_macro_srv/src/dylib.rs b/crates/ra_proc_macro_srv/src/dylib.rs index 209f61493..aa84e951c 100644 --- a/crates/ra_proc_macro_srv/src/dylib.rs +++ b/crates/ra_proc_macro_srv/src/dylib.rs | |||
@@ -8,7 +8,6 @@ use goblin::{mach::Mach, Object}; | |||
8 | use libloading::Library; | 8 | use libloading::Library; |
9 | use memmap::Mmap; | 9 | use memmap::Mmap; |
10 | use ra_proc_macro::ProcMacroKind; | 10 | use ra_proc_macro::ProcMacroKind; |
11 | |||
12 | use std::io; | 11 | use std::io; |
13 | 12 | ||
14 | const NEW_REGISTRAR_SYMBOL: &str = "_rustc_proc_macro_decls_"; | 13 | const NEW_REGISTRAR_SYMBOL: &str = "_rustc_proc_macro_decls_"; |
@@ -197,7 +196,10 @@ impl Expander { | |||
197 | /// Copy the dylib to temp directory to prevent locking in Windows | 196 | /// Copy the dylib to temp directory to prevent locking in Windows |
198 | #[cfg(windows)] | 197 | #[cfg(windows)] |
199 | fn ensure_file_with_lock_free_access(path: &Path) -> io::Result<PathBuf> { | 198 | fn ensure_file_with_lock_free_access(path: &Path) -> io::Result<PathBuf> { |
199 | use std::{ffi::OsString, time::SystemTime}; | ||
200 | |||
200 | let mut to = std::env::temp_dir(); | 201 | let mut to = std::env::temp_dir(); |
202 | |||
201 | let file_name = path.file_name().ok_or_else(|| { | 203 | let file_name = path.file_name().ok_or_else(|| { |
202 | io::Error::new( | 204 | io::Error::new( |
203 | io::ErrorKind::InvalidInput, | 205 | io::ErrorKind::InvalidInput, |
@@ -205,8 +207,14 @@ fn ensure_file_with_lock_free_access(path: &Path) -> io::Result<PathBuf> { | |||
205 | ) | 207 | ) |
206 | })?; | 208 | })?; |
207 | 209 | ||
208 | to.push(file_name); | 210 | // generate a time deps unique number |
209 | std::fs::copy(path, &to)?; | 211 | let t = SystemTime::now().duration_since(std::time::UNIX_EPOCH).expect("Time went backwards"); |
212 | |||
213 | let mut unique_name = OsString::from(t.as_millis().to_string()); | ||
214 | unique_name.push(file_name); | ||
215 | |||
216 | to.push(unique_name); | ||
217 | std::fs::copy(path, &to).unwrap(); | ||
210 | Ok(to) | 218 | Ok(to) |
211 | } | 219 | } |
212 | 220 | ||