コミットメタ情報

リビジョン712a978a595d607f6081af778728dffc5752c796 (tree)
日時2013-12-13 22:16:26
作者argius <argius.net@gmai...>
コミッターargius

ログメッセージ

[#32549] executing a script directly inputted

変更サマリ

差分

--- a/src/net/argius/stew/CommandProcessor.java
+++ b/src/net/argius/stew/CommandProcessor.java
@@ -127,13 +127,29 @@ final class CommandProcessor {
127127 }
128128 // script
129129 if (commandName.equals("-s")) {
130- final File file = Path.resolve(env.getCurrentDirectory(), p.at(1));
131- if (!file.isFile()) {
130+ if (!p.has(1)) {
132131 throw new UsageException(res.get("usage.-s"));
133132 }
134- log.debug("-s %s", file.getAbsolutePath());
135- ScriptEngineManager factory = new ScriptEngineManager();
136- ScriptEngine engine = factory.getEngineByName("JavaScript");
133+ final String p1 = p.at(1);
134+ final File file;
135+ if (p1.contains(".")) { // by extension
136+ file = Path.resolve(env.getCurrentDirectory(), p1);
137+ if (!file.exists() || !file.isFile()) {
138+ outputMessage("e.file-not-exists", p1);
139+ return true;
140+ }
141+ log.debug("script file: %s", file.getAbsolutePath());
142+ } else { // by name
143+ file = null;
144+ log.debug("script name: %s", p1);
145+ }
146+ ScriptEngine engine = (file == null)
147+ ? new ScriptEngineManager().getEngineByName(p1)
148+ : new ScriptEngineManager().getEngineByExtension(Path.getExtension(file));
149+ if (engine == null) {
150+ outputMessage("e.unsupported", p1);
151+ return true;
152+ }
137153 engine.put("connection", env.getCurrentConnection());
138154 engine.put("conn", env.getCurrentConnection());
139155 engine.put("patameter", p);
@@ -141,12 +157,17 @@ final class CommandProcessor {
141157 engine.put("outputProcessor", op);
142158 engine.put("op", op);
143159 try {
144- Reader r = new FileReader(file);
145- try {
146- engine.eval("function using(o, f) { f(o); o.close() }");
147- engine.eval(r);
148- } finally {
149- r.close();
160+ if (file == null) {
161+ engine.put(ScriptEngine.FILENAME, null);
162+ engine.eval(p.after(2));
163+ } else {
164+ engine.put(ScriptEngine.FILENAME, file.getAbsolutePath());
165+ Reader r = new FileReader(file);
166+ try {
167+ engine.eval(r);
168+ } finally {
169+ r.close();
170+ }
150171 }
151172 } catch (Exception ex) {
152173 throw new CommandException(ex);
--- a/src/net/argius/stew/messages.u8p
+++ b/src/net/argius/stew/messages.u8p
@@ -27,6 +27,7 @@ e.command=Error: {0}
2727 e.database=Database Error: {0}
2828 e.dir-not-exists=Directory[{0}] does not exist.
2929 e.fatal=Fatal Error: {0}
30+e.file-not-exists=File[{0}] does not exist.
3031 e.no-connector=Connector [{0}] does not exist.
3132 e.not-connect=Not connected.
3233 e.not-found=Error: Command [{0}] was not found.
--- a/src/net/argius/stew/messages_ja.u8p
+++ b/src/net/argius/stew/messages_ja.u8p
@@ -26,6 +26,7 @@ e.command=エラー: {0}
2626 e.database=データベースエラー: {0}
2727 e.dir-not-exists=ディレクトリ[{0}]は存在しません。
2828 e.fatal=致命的なエラー: {0}
29+e.file-not-exists=ファイル[{0}]は存在しません。
2930 e.no-connector=コネクタ [{0}] はありません。
3031 e.not-connect=接続されていません。
3132 e.not-found=エラー: コマンド [{0}] は見つかりませんでした。
旧リポジトリブラウザで表示