[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:
parent
1851f0802e
commit
81e2c112d9
@ -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,
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user