Supports execution of other file types on Windows, e.g. .bat, .cmd
This commit is contained in:
parent
173ad5b74b
commit
7d44d25e38
@ -16,7 +16,6 @@ use std::io;
|
|||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use std::fs::Metadata;
|
|
||||||
use flate2::write::GzEncoder;
|
use flate2::write::GzEncoder;
|
||||||
use flate2::Compression;
|
use flate2::Compression;
|
||||||
|
|
||||||
@ -46,11 +45,7 @@ fn runners_dir() -> PathBuf {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn runner_url(arch: &str) -> String {
|
fn runner_url(arch: &str) -> String {
|
||||||
let mut ext = "";
|
let ext = if cfg!(target_family = "windows") { ".exe" } else { "" };
|
||||||
if cfg!(target_family = "windows") {
|
|
||||||
ext = ".exe";
|
|
||||||
}
|
|
||||||
|
|
||||||
RUNNER_URL_TEMPLATE
|
RUNNER_URL_TEMPLATE
|
||||||
.replace("$VERSION$", VERSION)
|
.replace("$VERSION$", VERSION)
|
||||||
.replace("$ARCH$", arch) + ext
|
.replace("$ARCH$", arch) + ext
|
||||||
@ -91,22 +86,6 @@ fn patch_runner(runner_exec: &Path, new_runner_exec: &Path, exec_name: &str) ->
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_family = "windows")]
|
|
||||||
fn is_executable(path: &Path, _: &Metadata) -> bool {
|
|
||||||
if let Some(ext) = path.extension() {
|
|
||||||
ext == "exe"
|
|
||||||
} else {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(target_family = "unix")]
|
|
||||||
fn is_executable(_: &Path, metadata: &Metadata) -> bool {
|
|
||||||
use std::os::unix::fs::PermissionsExt;
|
|
||||||
const S_IXUSR: u32 = 0o100;
|
|
||||||
return metadata.permissions().mode() & S_IXUSR == S_IXUSR
|
|
||||||
}
|
|
||||||
|
|
||||||
fn create_tgz(dir: &Path, out: &Path) -> io::Result<()> {
|
fn create_tgz(dir: &Path, out: &Path) -> io::Result<()> {
|
||||||
let f = fs::File::create(out)?;
|
let f = fs::File::create(out)?;
|
||||||
let gz = GzEncoder::new(f, Compression::best());
|
let gz = GzEncoder::new(f, Compression::best());
|
||||||
@ -182,11 +161,11 @@ fn main() -> Result<(), Box<Error>> {
|
|||||||
let exec_path = Path::new(input_dir).join(exec_name);
|
let exec_path = Path::new(input_dir).join(exec_name);
|
||||||
match fs::metadata(&exec_path) {
|
match fs::metadata(&exec_path) {
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
bail!("Cannot find executable {} inside directory {:?}", exec_name, input_dir);
|
bail!("Cannot find file {:?}", exec_path);
|
||||||
},
|
},
|
||||||
Ok(metadata) => {
|
Ok(metadata) => {
|
||||||
if !is_executable(&exec_path, &metadata) {
|
if !metadata.is_file() {
|
||||||
bail!("File {} inside directory {:?} isn't executable", exec_name, input_dir);
|
bail!("{:?} isn't a file", exec_path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user