DEV: Canonicalize is never the right thing on windows.

This commit is contained in:
Jeremy Wall 2019-11-09 15:39:32 -06:00
parent acffc6d5da
commit 6f714e6583
2 changed files with 49 additions and 23 deletions

View File

@ -568,31 +568,50 @@ impl ModuleDef {
} }
pub fn imports_to_absolute(&mut self, base: PathBuf) { pub fn imports_to_absolute(&mut self, base: PathBuf) {
&base;
let rewrite_import = |e: &mut Expression| { let rewrite_import = |e: &mut Expression| {
if let Expression::Include(ref mut def) = e { if let Expression::Include(ref mut def) = e {
let path = PathBuf::from(&def.path.fragment); let path = PathBuf::from(&def.path.fragment);
if path.is_relative() { #[cfg(not(windows))]
def.path.fragment = base {
.join(path) if path.is_relative() {
.canonicalize() def.path.fragment = base
.unwrap() .join(path)
.to_string_lossy() .canonicalize()
.to_string(); .unwrap()
.to_string_lossy()
.to_string();
}
}
#[cfg(windows)]
{
if path.is_relative() {
def.path.fragment = dbg!(base.join(path).to_string_lossy().to_string());
}
} }
} }
if let Expression::Import(ref mut def) = e { if let Expression::Import(ref mut def) = e {
let path = PathBuf::from(&def.path.fragment); let path = dbg!(PathBuf::from(&def.path.fragment));
// std/ paths are special and do not get made into absolute paths. // std/ paths are special and do not get made into absolute paths.
if path.starts_with("std/") { if path.starts_with("std/") {
return; return;
} }
if path.is_relative() { #[cfg(not(windows))]
def.path.fragment = base {
.join(path) if path.is_relative() {
.canonicalize() def.path.fragment = base
.unwrap() .join(path)
.to_string_lossy() .canonicalize()
.to_string(); .unwrap()
.to_string_lossy()
.to_string();
}
}
#[cfg(windows)]
{
if path.is_relative() {
def.path.fragment = base.join(path).to_string_lossy().to_string();
}
} }
} }
}; };

View File

@ -381,14 +381,21 @@ where
} else { } else {
normalized = path; normalized = path;
} }
match normalized.canonicalize() { #[cfg(windows)]
Ok(p) => Ok(p), {
Err(e) => Err(error::BuildError::new( Ok(normalized)
format!("Path not found {}", normalized.to_string_lossy()), }
error::ErrorType::OSError, #[cfg(not(windows))]
) {
.wrap_cause(Box::new(e)) match normalized.canonicalize() {
.to_boxed()), Ok(p) => Ok(p),
Err(e) => Err(error::BuildError::new(
format!("Path not found {}", normalized.to_string_lossy()),
error::ErrorType::OSError,
)
.wrap_cause(Box::new(e))
.to_boxed()),
}
} }
} }