diff options
-rw-r--r-- | src/backends/clang.rs | 15 | ||||
-rw-r--r-- | src/backends/clang_c.rs | 15 | ||||
-rw-r--r-- | src/backends/mod.rs | 12 | ||||
-rw-r--r-- | src/main.rs | 14 |
4 files changed, 29 insertions, 27 deletions
diff --git a/src/backends/clang.rs b/src/backends/clang.rs index cf42c41..3da7379 100644 --- a/src/backends/clang.rs +++ b/src/backends/clang.rs @@ -1,9 +1,8 @@ -use crate::backends::{mk_tmp_dir, Backend, RunError}; +use super::get_binary_by_filename; +use crate::backends::{Backend, RunError}; use crate::serde_duration::deserialize_duration; use crate::wait::{wait_child, ChildExitStatus}; use serde_derive::Deserialize; -use std::collections::hash_map::DefaultHasher; -use std::hash::{Hash, Hasher}; use std::io::{Error, ErrorKind, Result as IoResult}; use std::path::{Path, PathBuf}; use std::process::Command; @@ -31,16 +30,6 @@ fn default_timeout() -> Duration { Duration::from_secs(1) } -fn get_binary_by_filename(fname: &Path) -> IoResult<PathBuf> { - let hashed_fname = { - let mut hasher = DefaultHasher::new(); - fname.hash(&mut hasher); - format!("{:x}", hasher.finish()) - }; - - Ok(mk_tmp_dir()?.join(hashed_fname)) -} - impl ClangBackend { fn build(&self, fname: &Path) -> IoResult<PathBuf> { let binary_fname = get_binary_by_filename(fname)?; diff --git a/src/backends/clang_c.rs b/src/backends/clang_c.rs index 7ee5161..a16a38c 100644 --- a/src/backends/clang_c.rs +++ b/src/backends/clang_c.rs @@ -1,9 +1,8 @@ -use crate::backends::{mk_tmp_dir, Backend, RunError}; +use super::get_binary_by_filename; +use crate::backends::{Backend, RunError}; use crate::serde_duration::deserialize_duration; use crate::wait::{wait_child, ChildExitStatus}; use serde_derive::Deserialize; -use std::collections::hash_map::DefaultHasher; -use std::hash::{Hash, Hasher}; use std::io::{Error, ErrorKind, Result as IoResult}; use std::path::{Path, PathBuf}; use std::process::Command; @@ -31,16 +30,6 @@ fn default_timeout() -> Duration { Duration::from_secs(1) } -fn get_binary_by_filename(fname: &Path) -> IoResult<PathBuf> { - let hashed_fname = { - let mut hasher = DefaultHasher::new(); - fname.hash(&mut hasher); - format!("{:x}", hasher.finish()) - }; - - Ok(mk_tmp_dir()?.join(hashed_fname)) -} - impl ClangCBackend { fn build(&self, fname: &Path) -> IoResult<PathBuf> { let binary_fname = get_binary_by_filename(fname)?; diff --git a/src/backends/mod.rs b/src/backends/mod.rs index 6d402af..be6e5e6 100644 --- a/src/backends/mod.rs +++ b/src/backends/mod.rs @@ -1,6 +1,8 @@ use crate::wait::ChildExitStatus; use lazy_static::lazy_static; +use std::collections::hash_map::DefaultHasher; use std::env::temp_dir; +use std::hash::{Hash, Hasher}; use std::io::{Error, ErrorKind}; use std::path::{Path, PathBuf}; @@ -38,3 +40,13 @@ fn mk_tmp_dir() -> std::io::Result<&'static std::path::PathBuf> { } Ok(&*EVR_TMP_DIR) } + +pub fn get_binary_by_filename(fname: &Path) -> std::io::Result<PathBuf> { + let hashed_fname = { + let mut hasher = DefaultHasher::new(); + fname.hash(&mut hasher); + format!("{:x}", hasher.finish()) + }; + + Ok(mk_tmp_dir()?.join(hashed_fname)) +} diff --git a/src/main.rs b/src/main.rs index 2ad7991..d1484a4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,6 @@ extern crate lazy_static; -use clap::{App, AppSettings, Arg}; +use clap::{App, AppSettings, Arg, SubCommand}; use env_logger; use log::error; use std::io::prelude::*; @@ -16,6 +16,7 @@ fn main() { .author("syn") .setting(AppSettings::ColoredHelp) .setting(AppSettings::UnifiedHelpMessage) + .subcommand(SubCommand::with_name("where")) .arg( Arg::with_name("src") .required(true) @@ -48,6 +49,17 @@ fn main() { } }; + match matches.subcommand() { + ("where", Some(_submodule)) => { + match backends::get_binary_by_filename(src_path.as_ref()) { + Ok(path) => eprintln!("{}", path.display()), + Err(e) => error!("No binary: {}", e), + } + return; + } + _ => {} + } + if src_path.exists() { if let Some(backend) = config.get_backend(&src_path) { match backend.run(&src_path) { |