[bootstrap] Move sanitize_sh from dist to install

This is the only place it's used, so there's no need for it to be public in another module.
In general, `dist` shouldn't ever touch shell scripts.
This commit is contained in:
Joshua Nelson 2022-05-27 17:52:41 -05:00
parent 1851f0802e
commit 81e2c112d9
2 changed files with 25 additions and 25 deletions

View File

@ -894,29 +894,6 @@ fn run(self, builder: &Builder<'_>) -> GeneratedTarball {
} }
} }
// We have to run a few shell scripts, which choke quite a bit on both `\`
// characters and on `C:\` paths, so normalize both of them away.
pub fn sanitize_sh(path: &Path) -> String {
let path = path.to_str().unwrap().replace("\\", "/");
return change_drive(unc_to_lfs(&path)).unwrap_or(path);
fn unc_to_lfs(s: &str) -> &str {
s.strip_prefix("//?/").unwrap_or(s)
}
fn change_drive(s: &str) -> Option<String> {
let mut ch = s.chars();
let drive = ch.next().unwrap_or('C');
if ch.next() != Some(':') {
return None;
}
if ch.next() != Some('/') {
return None;
}
Some(format!("/{}/{}", drive, &s[drive.len_utf8() + 2..]))
}
}
#[derive(Debug, PartialOrd, Ord, Copy, Clone, Hash, PartialEq, Eq)] #[derive(Debug, PartialOrd, Ord, Copy, Clone, Hash, PartialEq, Eq)]
pub struct Cargo { pub struct Cargo {
pub compiler: Compiler, pub compiler: Compiler,

View File

@ -5,12 +5,12 @@
use std::env; use std::env;
use std::fs; use std::fs;
use std::path::{Component, PathBuf}; use std::path::{Component, Path, PathBuf};
use std::process::Command; use std::process::Command;
use crate::util::t; use crate::util::t;
use crate::dist::{self, sanitize_sh}; use crate::dist;
use crate::tarball::GeneratedTarball; use crate::tarball::GeneratedTarball;
use crate::Compiler; use crate::Compiler;
@ -22,6 +22,29 @@
#[cfg(not(target_os = "illumos"))] #[cfg(not(target_os = "illumos"))]
const SHELL: &str = "sh"; const SHELL: &str = "sh";
// We have to run a few shell scripts, which choke quite a bit on both `\`
// characters and on `C:\` paths, so normalize both of them away.
fn sanitize_sh(path: &Path) -> String {
let path = path.to_str().unwrap().replace("\\", "/");
return change_drive(unc_to_lfs(&path)).unwrap_or(path);
fn unc_to_lfs(s: &str) -> &str {
s.strip_prefix("//?/").unwrap_or(s)
}
fn change_drive(s: &str) -> Option<String> {
let mut ch = s.chars();
let drive = ch.next().unwrap_or('C');
if ch.next() != Some(':') {
return None;
}
if ch.next() != Some('/') {
return None;
}
Some(format!("/{}/{}", drive, &s[drive.len_utf8() + 2..]))
}
}
fn install_sh( fn install_sh(
builder: &Builder<'_>, builder: &Builder<'_>,
package: &str, package: &str,