From 9b31ebfab8d7aa95b93698b5f1faee1df02bb261 Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Fri, 7 Apr 2017 00:20:57 +0800 Subject: [PATCH] ExecutableRenameAction: relativize destination path (i.e. to make scp/sftp calls easier) --- source/net/filebot/cli/ArgumentBean.java | 2 +- source/net/filebot/cli/ExecutableRenameAction.java | 12 +++++++++--- source/net/filebot/cli/ScriptShellBaseClass.java | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/source/net/filebot/cli/ArgumentBean.java b/source/net/filebot/cli/ArgumentBean.java index 1d16e370..2df906fa 100644 --- a/source/net/filebot/cli/ArgumentBean.java +++ b/source/net/filebot/cli/ArgumentBean.java @@ -205,7 +205,7 @@ public class ArgumentBean { public RenameAction getRenameAction() { // support custom executables (via absolute path) if (action.startsWith("/")) { - return new ExecutableRenameAction(action); + return new ExecutableRenameAction(action, getOutputPath()); } // support custom groovy scripts (via closures) diff --git a/source/net/filebot/cli/ExecutableRenameAction.java b/source/net/filebot/cli/ExecutableRenameAction.java index 7ef55364..f86f10c3 100644 --- a/source/net/filebot/cli/ExecutableRenameAction.java +++ b/source/net/filebot/cli/ExecutableRenameAction.java @@ -8,15 +8,17 @@ import net.filebot.RenameAction; public class ExecutableRenameAction implements RenameAction { private final String executable; + private final File directory; - public ExecutableRenameAction(String executable) { + public ExecutableRenameAction(String executable, File directory) { this.executable = executable; + this.directory = directory; } @Override public File rename(File from, File to) throws Exception { - ProcessBuilder process = new ProcessBuilder(executable, from.getPath(), to.getPath()); - process.directory(from.getParentFile()); + ProcessBuilder process = new ProcessBuilder(executable, from.getCanonicalPath(), getRelativePath(directory, to)); + process.directory(directory); process.inheritIO(); int exitCode = process.start().waitFor(); @@ -27,6 +29,10 @@ public class ExecutableRenameAction implements RenameAction { return null; } + private String getRelativePath(File dir, File f) { + return dir == null ? f.toString() : dir.toPath().relativize(f.toPath()).toString(); + } + @Override public boolean canRevert() { return false; diff --git a/source/net/filebot/cli/ScriptShellBaseClass.java b/source/net/filebot/cli/ScriptShellBaseClass.java index 12b450d6..73b220d0 100644 --- a/source/net/filebot/cli/ScriptShellBaseClass.java +++ b/source/net/filebot/cli/ScriptShellBaseClass.java @@ -514,7 +514,7 @@ public abstract class ScriptShellBaseClass extends Script { } if (obj instanceof File) { - return new ExecutableRenameAction(obj.toString()); + return new ExecutableRenameAction(obj.toString(), getArgumentBean().getOutputPath()); } if (obj instanceof Closure) {