diff --git a/Cargo.lock b/Cargo.lock index a9cbd7d..b3049d4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -171,12 +171,12 @@ dependencies = [ "anyhow", "derive_more", "fs", - "io", "java", "pathsub", "semver", "serde", "sha256", + "subprocess", "toml", ] @@ -308,14 +308,6 @@ dependencies = [ "hashbrown", ] -[[package]] -name = "io" -version = "0.2.0" -dependencies = [ - "derive_more", - "subprocess", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.2" @@ -329,8 +321,8 @@ dependencies = [ "bytesize", "derive_more", "fs", - "io", "semver", + "subprocess", ] [[package]] @@ -413,7 +405,6 @@ dependencies = [ "cli", "core", "fs", - "io", "java", "toml", ] @@ -529,9 +520,9 @@ dependencies = [ [[package]] name = "subprocess" -version = "0.2.14" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09969f0abcf65111c0cbdd8bfaa292ca3c38b46bc8ecc7270467af2f4acb172" +checksum = "98e067360c7f5a302e35c9f9cd24cb583c378fbedc73d0237284dbdd0650fcc5" dependencies = [ "libc", "winapi", @@ -571,9 +562,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.11+spec-1.1.0" +version = "1.0.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3afc9a848309fe1aaffaed6e1546a7a14de1f935dc9d89d32afd9a44bab7c46" +checksum = "bbe30f93627849fa362d4a602212d41bb237dc2bd0f8ba0b2ce785012e124220" dependencies = [ "indexmap", "serde_core", @@ -586,18 +577,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.5+spec-1.1.0" +version = "1.0.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" dependencies = [ "serde_core", ] [[package]] name = "toml_parser" -version = "1.0.6+spec-1.1.0" +version = "1.0.8+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" +checksum = "0742ff5ff03ea7e67c8ae6c93cac239e0d9784833362da3f9a9c1da8dfefcbdc" dependencies = [ "winnow", ] diff --git a/Cargo.toml b/Cargo.toml index ecaa01c..b224154 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,6 @@ publish = false # cli = { path = "crates/cli" } fs = { path = "crates/fs" } -io = { path = "crates/io" } java = { path = "crates/java" } core = { path = "crates/core" } pom = { path = "crates/pom" } @@ -34,8 +33,8 @@ lenient_semver = "0.4.2" pathsub = "0.1.1" ron = "0.12.0" sha256 = "1.6" -subprocess = "0.2.13" -toml = "0.9.11" +subprocess = "1.0" +toml = "1.0" derive_more = { version = "2.1", features = ["display", "from"] } semver = { version = "1.0",features = ["serde"] } diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index ec1d14d..ce125dd 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -12,12 +12,12 @@ publish.workspace = true [dependencies] derive_more.workspace = true fs.workspace = true -io.workspace = true java.workspace = true pathsub.workspace = true semver.workspace = true serde.workspace = true sha256.workspace = true +subprocess.workspace = true toml.workspace = true [dependencies.anyhow] diff --git a/crates/core/src/error.rs b/crates/core/src/error.rs index cf7da5d..521ebfe 100644 --- a/crates/core/src/error.rs +++ b/crates/core/src/error.rs @@ -5,16 +5,13 @@ pub type Result = std::result::Result; #[derive(Debug, From, Display)] pub enum Error { #[from] - Io(io::Error), + Io(std::io::Error), #[from] Java(java::Error), MissingFileName, - #[from] - StdIo(std::io::Error), - #[from] TomlDeserialize(toml::de::Error), diff --git a/crates/core/src/workspace.rs b/crates/core/src/workspace.rs index 477a989..df65763 100644 --- a/crates/core/src/workspace.rs +++ b/crates/core/src/workspace.rs @@ -2,11 +2,12 @@ use std::collections::HashMap; use std::fs::{OpenOptions, read_dir}; use std::io::{Read, Write}; use std::path::{Path, PathBuf}; +use std::time::Duration; use fs::expand_files; -use io::run_process; use java::{JAVA_EXT_CLASS, JAVA_EXT_SOURCE}; use serde::{Deserialize, Serialize}; +use subprocess::Exec; use crate::Error; use crate::nest::{F_NEST_LOCK, F_NEST_TOML, Nest, NestLock}; @@ -102,7 +103,11 @@ impl WorkspaceHandler { self.write_example_project()?; self.discover_packages()?; - run_process(&["git", "init", "."])?; + Exec::cmd("git") + .arg("init") + .arg(".") + .start()? + .wait_timeout(Duration::from_secs(10))?; } // Append to .gitignore diff --git a/crates/io/Cargo.toml b/crates/io/Cargo.toml deleted file mode 100644 index c41e5a0..0000000 --- a/crates/io/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "io" -version = "0.2.0" -edition.workspace = true -license.workspace = true - -description = "Raven's IO utilities" -repository.workspace = true - -publish.workspace = true - -[dependencies] -derive_more.workspace = true -subprocess.workspace = true diff --git a/crates/io/src/error.rs b/crates/io/src/error.rs deleted file mode 100644 index c5df1d1..0000000 --- a/crates/io/src/error.rs +++ /dev/null @@ -1,11 +0,0 @@ -use derive_more::{Display, From}; - -pub type Result = std::result::Result; - -#[derive(Debug, From, Display)] -pub enum Error { - #[from] - Io(std::io::Error), - #[from] - Popen(subprocess::PopenError), -} diff --git a/crates/io/src/lib.rs b/crates/io/src/lib.rs deleted file mode 100644 index 8608558..0000000 --- a/crates/io/src/lib.rs +++ /dev/null @@ -1,30 +0,0 @@ -mod error; - -use std::ffi; - -pub use error::{Error, Result}; - -pub fn run_process(argv: &[S]) -> Result<(Option, Option)> -where - S: AsRef, -{ - let mut process = subprocess::Popen::create( - argv, - subprocess::PopenConfig { - stdout: subprocess::Redirection::Pipe, - ..Default::default() - }, - )?; - - let result = process.communicate(None)?; - - if process - .wait_timeout(std::time::Duration::from_secs(5)) - .is_err() - || process.exit_status().is_none() - { - process.terminate()?; - } - - Ok(result) -} diff --git a/crates/java/Cargo.toml b/crates/java/Cargo.toml index 215d26c..4d160bd 100644 --- a/crates/java/Cargo.toml +++ b/crates/java/Cargo.toml @@ -16,5 +16,5 @@ publish.workspace = true bytesize.workspace = true derive_more.workspace = true fs.workspace = true -io.workspace = true semver.workspace = true +subprocess.workspace = true diff --git a/crates/java/src/compiler.rs b/crates/java/src/compiler.rs index bfa9038..e685536 100644 --- a/crates/java/src/compiler.rs +++ b/crates/java/src/compiler.rs @@ -1,5 +1,8 @@ use std::path::{Path, PathBuf}; +use subprocess::Exec; +use subprocess::Redirection; + use crate::JAVA_BIN_COMPILER; use crate::Result; @@ -45,6 +48,7 @@ pub struct Compiler { } impl Compiler { + /* pub fn compile>(self, path: P) -> Result<(Option, Option)> { let mut cmd: Vec = vec![JAVA_BIN_COMPILER.to_string()]; @@ -62,6 +66,23 @@ impl Compiler { Ok(io::run_process(cmd.as_slice())?) } + */ + + pub fn compile>(self, path: P) -> Result { + Ok(Exec::cmd(JAVA_BIN_COMPILER) + .args( + self.flags + .clone() + .into_iter() + .flat_map(|f| Into::>::into(f)), + ) + .arg(path.as_ref()) + .stdout(Redirection::Pipe) + .detached() + .start()? + .wait()? + .success()) + } } #[derive(Debug, Clone)] diff --git a/crates/java/src/error.rs b/crates/java/src/error.rs index e7791f4..7d9b7d6 100644 --- a/crates/java/src/error.rs +++ b/crates/java/src/error.rs @@ -7,13 +7,10 @@ pub enum Error { EmptyStdout, #[from] - Io(io::Error), + Io(std::io::Error), NthOutOfBounds, #[from] Semver(semver::Error), - - #[from] - StdIo(std::io::Error), } diff --git a/crates/java/src/lib.rs b/crates/java/src/lib.rs index 22b5e0f..2caae94 100644 --- a/crates/java/src/lib.rs +++ b/crates/java/src/lib.rs @@ -6,6 +6,7 @@ use std::str::FromStr; pub use error::{Error, Result}; use runtime::VMFlag; +use subprocess::Exec; pub const JAVA_BIN_VM: &str = "java"; pub const JAVA_BIN_COMPILER: &str = "javac"; @@ -41,9 +42,8 @@ pub fn get_javac_ver() -> Result { /// Calls the java binary, returning the complete stdout version information. fn get_java_version_info() -> Result { - Ok( - io::run_process(&[JAVA_BIN_VM, VMFlag::Version.to_string().as_str()])? - .0 - .ok_or(Error::EmptyStdout)?, - ) + Ok(Exec::cmd(JAVA_BIN_VM) + .arg(VMFlag::Version.to_string().as_str()) + .capture()? + .stdout_str()) } diff --git a/crates/java/src/runtime.rs b/crates/java/src/runtime.rs index 9f14d2d..7b18bc1 100644 --- a/crates/java/src/runtime.rs +++ b/crates/java/src/runtime.rs @@ -5,6 +5,7 @@ use crate::JAVA_BIN_VM; use crate::Result; use bytesize::ByteSize; +use subprocess::Exec; #[derive(Debug, Default, Clone)] pub struct JVMBuilder { @@ -74,36 +75,32 @@ pub struct JVM { } impl JVM { - pub fn run>(self, entry_point: P) -> Result<(Option, Option)> { - let mut cmd = vec![JAVA_BIN_VM.to_string()]; + pub fn run>(self, entry_point: P) -> Result<()> { + let capture = Exec::cmd(JAVA_BIN_VM) + .args( + self.flags + .clone() + .into_iter() + .flat_map(|f| Into::>::into(f)), + ) + .arg(entry_point.as_ref()) + .capture()?; - cmd.extend( - self.flags - .clone() - .into_iter() - .flat_map(|f| Into::>::into(f)), - ); - - cmd.push(entry_point.as_ref().to_path_buf().display().to_string()); - - let result = io::run_process(cmd.as_slice())?; - - if self.monitor { - let (stdout, stderr) = &result; - - if let Option::Some(stdout) = stdout - && stdout.len() > 0 - { - print!("{stdout}"); - } - if let Option::Some(stderr) = stderr - && stderr.len() > 0 - { - eprintln!("{stderr}"); - } + if !self.monitor { + return Ok(()); } - Ok(result) + let stdout = capture.stdout_str(); + if stdout.len() > 0 { + println!("{stdout}"); + } + + let stderr = capture.stderr_str(); + if stderr.len() > 0 { + eprintln!("{stderr}"); + } + + Ok(()) } } diff --git a/crates/raven/Cargo.toml b/crates/raven/Cargo.toml index 6026a1b..e9492b1 100644 --- a/crates/raven/Cargo.toml +++ b/crates/raven/Cargo.toml @@ -17,6 +17,5 @@ bytesize.workspace = true cli.workspace = true core.workspace = true fs.workspace = true -io.workspace = true java.workspace = true toml.workspace = true diff --git a/crates/raven/src/main.rs b/crates/raven/src/main.rs index df07529..ef2d7ee 100644 --- a/crates/raven/src/main.rs +++ b/crates/raven/src/main.rs @@ -17,7 +17,6 @@ fn main() -> anyhow::Result<()> { } .map_err(|err| anyhow!(err))?; - dbg!(); match &CLI_ARGS.command { Command::New { .. } | Command::Init => wh.init(), Command::Build => wh.build(), diff --git a/demo/.java-version b/demo/.java-version deleted file mode 100644 index aabe6ec..0000000 --- a/demo/.java-version +++ /dev/null @@ -1 +0,0 @@ -21 diff --git a/demo/Nest.toml b/demo/Nest.toml deleted file mode 100644 index f936757..0000000 --- a/demo/Nest.toml +++ /dev/null @@ -1,8 +0,0 @@ -dependencies = [] - -[workspace] -default_package = "main" - -[meta] -name = "demo" -version = "0.1.0" diff --git a/demo/src/main/Prey.toml b/demo/src/main/Prey.toml deleted file mode 100644 index f2dc644..0000000 --- a/demo/src/main/Prey.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -entry_point = "" - -[meta] -name = "main" -version = "0.1.0" diff --git a/demo/src/main/java/Main.java b/demo/src/main/java/Main.java deleted file mode 100644 index 52b9fad..0000000 --- a/demo/src/main/java/Main.java +++ /dev/null @@ -1,10 +0,0 @@ -public class Main { - - public static void main(String[] args) { - System.out.println("Hello, world!"); - } - - public static int add(int a, int b) { - return a + b; - } -} diff --git a/demo/src/test/Prey.toml b/demo/src/test/Prey.toml deleted file mode 100644 index 078176b..0000000 --- a/demo/src/test/Prey.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -entry_point = "" - -[meta] -name = "test" -version = "0.1.0" diff --git a/demo/src/test/java/MainTest.java b/demo/src/test/java/MainTest.java deleted file mode 100644 index ed111a6..0000000 --- a/demo/src/test/java/MainTest.java +++ /dev/null @@ -1,10 +0,0 @@ -public class MainTest { - - public static void main(String[] args) { - testAdd(); - } - - public static void testAdd() { - assert Main.add(2, 2) == 4; - } -} diff --git a/demo/target/Main.class b/demo/target/Main.class deleted file mode 100644 index 96e9d93..0000000 Binary files a/demo/target/Main.class and /dev/null differ diff --git a/demo/target/MainTest.class b/demo/target/MainTest.class deleted file mode 100644 index 112136c..0000000 Binary files a/demo/target/MainTest.class and /dev/null differ