From 4e59366ab1099b2944caa63b89b8f8d121f9be25 Mon Sep 17 00:00:00 2001 From: Georg Seibt <seibt@fim.uni-passau.de> Date: Wed, 13 Apr 2016 15:53:11 +0200 Subject: [PATCH] implement ToolWrapper, check whether the command is working in GitWrapper --- .../process/ToolNotWorkingException.java | 25 +++++++++++++++++++ .../seibt/gitwrapper/process/ToolWrapper.java | 16 ++++++++++++ .../fim/seibt/gitwrapper/repo/GitWrapper.java | 19 ++++++++++---- 3 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 src/de/uni_passau/fim/seibt/gitwrapper/process/ToolNotWorkingException.java create mode 100644 src/de/uni_passau/fim/seibt/gitwrapper/process/ToolWrapper.java diff --git a/src/de/uni_passau/fim/seibt/gitwrapper/process/ToolNotWorkingException.java b/src/de/uni_passau/fim/seibt/gitwrapper/process/ToolNotWorkingException.java new file mode 100644 index 0000000..1150130 --- /dev/null +++ b/src/de/uni_passau/fim/seibt/gitwrapper/process/ToolNotWorkingException.java @@ -0,0 +1,25 @@ +package de.uni_passau.fim.seibt.gitwrapper.process; + +/** + * An {@link Exception} indicating that a wrapped tool is not working. + */ +public class ToolNotWorkingException extends Exception { + + public ToolNotWorkingException() {} + + public ToolNotWorkingException(String message) { + super(message); + } + + public ToolNotWorkingException(String message, Throwable cause) { + super(message, cause); + } + + public ToolNotWorkingException(Throwable cause) { + super(cause); + } + + public ToolNotWorkingException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/src/de/uni_passau/fim/seibt/gitwrapper/process/ToolWrapper.java b/src/de/uni_passau/fim/seibt/gitwrapper/process/ToolWrapper.java new file mode 100644 index 0000000..6370a81 --- /dev/null +++ b/src/de/uni_passau/fim/seibt/gitwrapper/process/ToolWrapper.java @@ -0,0 +1,16 @@ +package de.uni_passau.fim.seibt.gitwrapper.process; + +public abstract class ToolWrapper { + + protected String cmd; + + public ToolWrapper(String cmd) throws ToolNotWorkingException { + this.cmd = cmd; + + if (!isWorking()) { + throw new ToolNotWorkingException(cmd + " is not working."); + } + } + + protected abstract boolean isWorking(); +} diff --git a/src/de/uni_passau/fim/seibt/gitwrapper/repo/GitWrapper.java b/src/de/uni_passau/fim/seibt/gitwrapper/repo/GitWrapper.java index ea8f7ad..5d4d758 100644 --- a/src/de/uni_passau/fim/seibt/gitwrapper/repo/GitWrapper.java +++ b/src/de/uni_passau/fim/seibt/gitwrapper/repo/GitWrapper.java @@ -10,11 +10,13 @@ import java.util.regex.Pattern; import de.uni_passau.fim.seibt.gitwrapper.process.ProcessExecutor; import de.uni_passau.fim.seibt.gitwrapper.process.ProcessExecutor.ExecRes; +import de.uni_passau.fim.seibt.gitwrapper.process.ToolNotWorkingException; +import de.uni_passau.fim.seibt.gitwrapper.process.ToolWrapper; /** * A wrapper for executing git commands. */ -public class GitWrapper { +public class GitWrapper extends ToolWrapper { public static final int EXIT_SUCCESS = 0; public static final int EXIT_FAIL = 1; @@ -24,15 +26,22 @@ public class GitWrapper { private static final Pattern CLONING_INTO = Pattern.compile("Cloning into '(.*)'\\.\\.\\."); private static final Pattern ALREADY_EXISTS = Pattern.compile("fatal: destination path '(.*)' already exists and is not an empty directory\\."); - private String git; + private static final String GIT_VERSION_C = "--version"; + private static final String GIT_VERSION_PREFIX = "git version"; /** * Constructs a new {@link GitWrapper} * * @param git the git command, e.g. '/usr/bin/git' or just 'git' */ - public GitWrapper(String git) { - this.git = git; + public GitWrapper(String git) throws ToolNotWorkingException { + super(git); + } + + @Override + protected boolean isWorking() { + Function<ExecRes, Boolean> checkPrefix = execRes -> execRes.output.startsWith(GIT_VERSION_PREFIX); + return ProcessExecutor.exec(cmd, new File("."), true, GIT_VERSION_C).map(checkPrefix).orElse(false); } /** @@ -124,6 +133,6 @@ public class GitWrapper { * @return the result of the execution */ public Optional<ExecRes> exec(File workingDirectory, String... parameters) { - return ProcessExecutor.exec(git, workingDirectory, true, parameters); + return ProcessExecutor.exec(cmd, workingDirectory, true, parameters); } } -- GitLab