From 25acd554e35d918020857aed349479ac4c8ac129 Mon Sep 17 00:00:00 2001 From: Andrew Block Date: Fri, 26 Jul 2019 13:22:27 +0000 Subject: [PATCH 1/2] First stages of Windows integration --- jcliff-dev.sh | 2 +- src/main/assembly/assembly.xml | 3 +- src/main/java/com/redhat/jcliff/Cli.java | 19 +++++++- src/main/{bash => scripts}/jcliff | 0 src/main/scripts/jcliff.bat | 60 ++++++++++++++++++++++++ 5 files changed, 81 insertions(+), 3 deletions(-) rename src/main/{bash => scripts}/jcliff (100%) mode change 100755 => 100644 create mode 100644 src/main/scripts/jcliff.bat diff --git a/jcliff-dev.sh b/jcliff-dev.sh index f045f7d..63c58a9 100755 --- a/jcliff-dev.sh +++ b/jcliff-dev.sh @@ -25,4 +25,4 @@ export CLASSPATH=$(echo "${JCLIFF_HOME}"/target/jcliff-*.jar) export JCLIFF_RULES_DIR=${JCLIFF_RULES_DIR:-'./src/main/resources'} export JCLIFF_DEPS_DIR=${JCLIFF_DEPS_DIR:-'./target/dependency/'} -./src/main/bash/jcliff ${@} +./src/main/scripts/jcliff ${@} diff --git a/src/main/assembly/assembly.xml b/src/main/assembly/assembly.xml index b988eb1..ed5795e 100644 --- a/src/main/assembly/assembly.xml +++ b/src/main/assembly/assembly.xml @@ -14,10 +14,11 @@ - ${project.basedir}/src/main/bash + ${project.basedir}/src/main/scripts / jcliff + jcliff.bat diff --git a/src/main/java/com/redhat/jcliff/Cli.java b/src/main/java/com/redhat/jcliff/Cli.java index 18a6be8..b390d53 100644 --- a/src/main/java/com/redhat/jcliff/Cli.java +++ b/src/main/java/com/redhat/jcliff/Cli.java @@ -37,6 +37,7 @@ public class Cli { private final String password; private final String timeout; private final Ctx ctx; + private final Boolean isWindows; public Cli(String cli, String controller, @@ -50,6 +51,7 @@ public Cli(String cli, this.password=password; this.timeout=timeout; this.ctx=ctx; + this.isWindows=isWindows(); } public String run(String command) { @@ -162,12 +164,23 @@ public String run(String[] command,long execTimeout) { for(String x:cmdArray) buf.append(x).append(' '); FileWriter scw=new FileWriter(scriptFile); + if(isWindows) { + scw.write("set NOPAUSE=true &&"); + } scw.write(buf.toString()+">"+outFile.getAbsolutePath()+" 2>"+errFile.getAbsolutePath()); scw.flush(); ctx.log("Script file:"+scriptFile.getAbsolutePath()+" "+scriptFile.exists()); ctx.log("In file:"+tempFile.getAbsolutePath()+" "+tempFile.exists()); - int returnCode=runAndWait(new String[] {"/bin/sh",scriptFile.getAbsolutePath()},execTimeout); + String[] runAndWaitArgs = null; + + if(isWindows) { + runAndWaitArgs = new String[]{String.format("cmd.exe", "/c", "FOR /F 'Tokens=*' %%A IN ('type %s') DO call %%~A", scriptFile.getAbsolutePath())}; + } else { + runAndWaitArgs = new String[] {"/bin/sh",scriptFile.getAbsolutePath()}; + } + + int returnCode=runAndWait(runAndWaitArgs, execTimeout); @@ -205,4 +218,8 @@ private String read(File f) throws Exception { r.close(); return buf.toString().trim(); } + + private Boolean isWindows() { + return System.getProperty("os.name").toLowerCase().indexOf("win") >= 0; + } } diff --git a/src/main/bash/jcliff b/src/main/scripts/jcliff old mode 100755 new mode 100644 similarity index 100% rename from src/main/bash/jcliff rename to src/main/scripts/jcliff diff --git a/src/main/scripts/jcliff.bat b/src/main/scripts/jcliff.bat new file mode 100644 index 0000000..79d2446 --- /dev/null +++ b/src/main/scripts/jcliff.bat @@ -0,0 +1,60 @@ +@echo off + +setlocal EnableDelayedExpansion + +set NOPAUSE=true + +if "%JBOSS_HOME%" == "" ( + echo No JBOSS_HOME provided. Aborting... + EXIT /b 1 +) + +if "%JCLIFF_HOME%" == "" ( + echo No JCLIFF_HOME provided. Aborting... + EXIT /b 1 +) + +if not exist "%JCLIFF_HOME%" ( + echo Provided JCLIFF_HOME does not exist: %JCLIFF_HOME% + EXIT /b 2 +) + +set JBOSS_CONTROLLER=%JBOSS_CONTROLLER_HOST%:%JBOSS_CONTROLLER_PORT% + +set CONTROLLER= + +if not "%JBOSS_CONTROLLER%" == ":" ( + set CONTROLLER=--controller=%JBOSS_CONTROLLER% +) + +set JBOSS_CLI_TIMEOUT=30000 + + +if "%JCLIFF_RULES_DIR%" == "" ( + set JCLIFF_RULES_DIR=%JCLIFF_HOME%\rules +) + +if not "%JAVA_HOME%" == "" ( + set JAVA=%JAVA_HOME%\bin\java.exe +) else ( + For /F "Tokens=*" %%I in ('where java') Do Set JAVA=%%I +) + +if not exist "%JAVA%" ( + echo Invalid path to Java executable: %JAVA% + EXIT /b 3 +) + + +if "%JCLIFF_DEPS_DIR%" == "" ( + set JCLIFF_DEPS_DIR=%JCLIFF_HOME% +) + +set CLASSPATH= + for /R %JCLIFF_HOME% %%a in (*.jar) do ( + set CLASSPATH=%%a;!CLASSPATH! + ) + +set CLASSPATH=!CLASSPATH! + +call "%JAVA%" -classpath "!CLASSPATH!" com.redhat.jcliff.Main --cli="%JBOSS_HOME%\bin\jboss-cli.bat" %CONTROLLER% --timeout="%JBOSS_CLI_TIMEOUT%" --ruledir="%JCLIFF_RULES_DIR%" %* \ No newline at end of file From e3eee2b41c740b5e7643a3f37a05a21ebf6df5d1 Mon Sep 17 00:00:00 2001 From: Andrew Block Date: Mon, 29 Jul 2019 02:51:09 +0000 Subject: [PATCH 2/2] Modified how commands are being executed --- pom.xml | 2 +- src/main/java/com/redhat/jcliff/Cli.java | 17 ++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index b10a7a8..c626336 100644 --- a/pom.xml +++ b/pom.xml @@ -198,7 +198,7 @@ jcliff - src/main/bash/jcliff + src/main/scripts/jcliff diff --git a/src/main/java/com/redhat/jcliff/Cli.java b/src/main/java/com/redhat/jcliff/Cli.java index b390d53..08e3f8b 100644 --- a/src/main/java/com/redhat/jcliff/Cli.java +++ b/src/main/java/com/redhat/jcliff/Cli.java @@ -18,11 +18,9 @@ */ package com.redhat.jcliff; -import java.io.InputStream; import java.io.File; import java.io.FileWriter; import java.io.FileReader; -import java.io.InputStreamReader; import java.util.List; import java.util.ArrayList; @@ -91,7 +89,6 @@ private static int runAndWait(String[] args,long timeout) throws Exception { Exec x=new Exec(args); x.start(); x.join(timeout); - if(x.isAlive()) throw new RuntimeException ("Timeout while waiting for child process to complete"); if(x.exception!=null) @@ -150,6 +147,7 @@ public String run(String[] command,long execTimeout) { writer.write('\n'); } writer.flush(); + writer.close(); } catch (Exception e) { throw new RuntimeException(e); } @@ -164,20 +162,21 @@ public String run(String[] command,long execTimeout) { for(String x:cmdArray) buf.append(x).append(' '); FileWriter scw=new FileWriter(scriptFile); - if(isWindows) { - scw.write("set NOPAUSE=true &&"); - } - scw.write(buf.toString()+">"+outFile.getAbsolutePath()+" 2>"+errFile.getAbsolutePath()); + buf.append(">"+outFile.getAbsolutePath()); + buf.append(" "); + buf.append("2>"+errFile.getAbsolutePath()); scw.flush(); + scw.write(buf.toString()); + scw.close(); ctx.log("Script file:"+scriptFile.getAbsolutePath()+" "+scriptFile.exists()); ctx.log("In file:"+tempFile.getAbsolutePath()+" "+tempFile.exists()); String[] runAndWaitArgs = null; if(isWindows) { - runAndWaitArgs = new String[]{String.format("cmd.exe", "/c", "FOR /F 'Tokens=*' %%A IN ('type %s') DO call %%~A", scriptFile.getAbsolutePath())}; + runAndWaitArgs = new String[]{"cmd.exe", "/c", buf.toString()}; } else { - runAndWaitArgs = new String[] {"/bin/sh",scriptFile.getAbsolutePath()}; + runAndWaitArgs = new String[] {"/bin/sh","-c", buf.toString()}; } int returnCode=runAndWait(runAndWaitArgs, execTimeout);