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) {
&base;
let rewrite_import = |e: &mut Expression| {
if let Expression::Include(ref mut def) = e {
let path = PathBuf::from(&def.path.fragment);
if path.is_relative() {
def.path.fragment = base
.join(path)
.canonicalize()
.unwrap()
.to_string_lossy()
.to_string();
#[cfg(not(windows))]
{
if path.is_relative() {
def.path.fragment = base
.join(path)
.canonicalize()
.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 {
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.
if path.starts_with("std/") {
return;
}
if path.is_relative() {
def.path.fragment = base
.join(path)
.canonicalize()
.unwrap()
.to_string_lossy()
.to_string();
#[cfg(not(windows))]
{
if path.is_relative() {
def.path.fragment = base
.join(path)
.canonicalize()
.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 {
normalized = path;
}
match normalized.canonicalize() {
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()),
#[cfg(windows)]
{
Ok(normalized)
}
#[cfg(not(windows))]
{
match normalized.canonicalize() {
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()),
}
}
}