summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas O'Donnell <andytom@users.noreply.github.com>2021-03-13 17:09:40 +0100
committerGitHub <noreply@github.com>2021-03-13 17:09:40 +0100
commit50bc5d9134f3093fc23d7f2136463f08b9a0a68b (patch)
tree68ed309610494100a17dc5e00b0bb7e57f98afce
parente5cdd9c1b3c17ffcf5416c39bf95dbb556b4f90f (diff)
fix(java): use consistent separators for java path (#2455)
* fix(java): use consistent separators for java path This switches us from just appending `/bin/java` to `$JAVA_HOME` to treating `$JAVA_HOME` as a path. This should fix any issues on Windows where $JAVA_HOME might use `\` rather than `/`. * test(java): add test for JAVA_HOME * refactor: remove duplicate defaults * perf: sligntly better java path perf * Update src/modules/java.rs Co-authored-by: Dario Vladović <d.vladimyr@gmail.com> * Update src/modules/java.rs Co-authored-by: Dario Vladović <d.vladimyr@gmail.com> * Update src/modules/java.rs Co-authored-by: Dario Vladović <d.vladimyr@gmail.com> Co-authored-by: Dario Vladović <d.vladimyr@gmail.com>
-rw-r--r--src/modules/java.rs41
1 files changed, 35 insertions, 6 deletions
diff --git a/src/modules/java.rs b/src/modules/java.rs
index 36a7abf51..5c87d402e 100644
--- a/src/modules/java.rs
+++ b/src/modules/java.rs
@@ -1,5 +1,6 @@
use crate::configs::java::JavaConfig;
use crate::formatter::StringFormatter;
+use std::path::PathBuf;
use super::{Context, Module, RootModuleConfig};
@@ -54,12 +55,19 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
}
fn get_java_version(context: &Context) -> Option<String> {
- let java_command = match context.get_env("JAVA_HOME") {
- Some(java_home) => format!("{}/bin/java", java_home),
- None => String::from("java"),
- };
-
- let output = context.exec_cmd(&java_command.as_str(), &["-Xinternalversion"])?;
+ let java_command = context
+ .get_env("JAVA_HOME")
+ .map(PathBuf::from)
+ .and_then(|path| {
+ path.join("bin")
+ .join("java")
+ .into_os_string()
+ .into_string()
+ .ok()
+ })
+ .unwrap_or_else(|| String::from("java"));
+
+ let output = context.exec_cmd(&java_command, &["-Xinternalversion"])?;
let java_version = if output.stdout.is_empty() {
output.stderr
} else {
@@ -263,4 +271,25 @@ mod tests {
assert_eq!(expected, actual);
dir.close()
}
+
+ #[test]
+ fn test_java_home() -> io::Result<()> {
+ let dir = tempfile::tempdir()?;
+ File::create(dir.path().join("Main.java"))?.sync_all()?;
+ let java_home: PathBuf = ["a", "b", "c"].iter().collect();
+ let java_bin = java_home.join("bin").join("java");
+
+ let actual = ModuleRenderer::new("java")
+ .env("JAVA_HOME", java_home.to_str().unwrap())
+ .cmd(&format!("{} -Xinternalversion", java_bin.to_str().unwrap()),
+ Some(CommandOutput {
+ stdout: "OpenJDK 64-Bit Server VM (11.0.4+11-LTS-sapmachine) for linux-amd64 JRE (11.0.4+11-LTS-sapmachine), built on Jul 17 2019 08:58:43 by \"\" with gcc 7.3.0".to_owned(),
+ stderr: String::new(),
+ }))
+ .path(dir.path())
+ .collect();
+ let expected = Some(format!("via {}", Color::Red.dimmed().paint("☕ v11.0.4 ")));
+ assert_eq!(expected, actual);
+ dir.close()
+ }
}