From b5b6255302f81d43236a001353b94af3aca929fa Mon Sep 17 00:00:00 2001 From: nightwing Date: Sat, 4 Apr 2015 00:13:29 +0400 Subject: [PATCH] fix plugin manager on windows --- configs/client-default.js | 11 +++++++++++ plugins/c9.core/util.js | 4 ++-- plugins/c9.ide.plugins/installer.js | 8 +++++--- plugins/c9.ide.plugins/manager.js | 8 ++++++-- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/configs/client-default.js b/configs/client-default.js index 69da96b9..f99968b8 100644 --- a/configs/client-default.js +++ b/configs/client-default.js @@ -7,6 +7,17 @@ module.exports = function(options) { assert(options.workspaceName, "Option 'workspaceName' must be set"); assert(options.home, "Option 'home' must be set"); assert(options.platform, "Option 'platform' must be set"); + + // normalize workspacedir and home paths + function normalize(path) { + path = path.replace(/([^/])\/$/, "$1"); + if (options.platform == "win32") + path = path.replace(/\\/g, "/"); + return path; + } + options.workspaceDir = normalize(options.workspaceDir); + options.installPath = normalize(options.installPath); + options.home = normalize(options.home); var workspaceDir = options.workspaceDir; var debug = options.debug !== undefined ? options.debug : false; diff --git a/plugins/c9.core/util.js b/plugins/c9.core/util.js index e73001ed..4e37bb0b 100644 --- a/plugins/c9.core/util.js +++ b/plugins/c9.core/util.js @@ -348,10 +348,10 @@ define(function(require, exports, module) { }; plugin.escapeShell = function(cmd) { - var re = /([\#\&\;\`\|\*\?<>\^\(\)\[\]\{\}\$\,\x0A\xFF\' \"])/g; + var re = /([\#\&\;\`\|\*\?<>\^\(\)\[\]\{\}\$\,\x0A\xFF\' \"\\])/g; return cmd.replace(re, "\\$1");//.replace(/^~/, "\\~"); }; - + var cloneObject = plugin.cloneObject = function(obj) { if (obj === null || typeof obj !== "object") return obj; diff --git a/plugins/c9.ide.plugins/installer.js b/plugins/c9.ide.plugins/installer.js index ff38cdb4..2e102bae 100644 --- a/plugins/c9.ide.plugins/installer.js +++ b/plugins/c9.ide.plugins/installer.js @@ -1,6 +1,6 @@ define(function(require, exports, module) { main.consumes = [ - "Plugin", "proc", "c9", "pubsub", "auth" + "Plugin", "proc", "c9", "pubsub", "auth", "util" ]; main.provides = ["plugin.installer"]; return main; @@ -8,10 +8,12 @@ define(function(require, exports, module) { function main(options, imports, register) { var Plugin = imports.Plugin; var c9 = imports.c9; + var util = imports.util; var proc = imports.proc; var auth = imports.auth; var pubsub = imports.pubsub; + var escapeShell = util.escapeShell; var updates = options.updates; var architect; @@ -103,7 +105,7 @@ define(function(require, exports, module) { function installPlugin(name, version, callback){ proc.spawn("bash", { - args: ["-c", ["c9", "install", "--local", "--force", "--accessToken=" + auth.accessToken, name + "@" + version].join(" ")] + args: ["-c", ["c9", "install", "--local", "--force", "--accessToken=" + auth.accessToken, escapeShell(name) + "@" + escapeShell(version)].join(" ")] }, function(err, process){ if (err) return callback(err); @@ -127,7 +129,7 @@ define(function(require, exports, module) { function uninstallPlugin(name, callback){ proc.spawn("c9", { - args: ["remove", "--local", "--force", "--accessToken=" + auth.accessToken, name] + args: ["remove", "--local", "--force", "--accessToken=" + auth.accessToken, escapeShell(name)] }, function(err, process){ if (err) return callback(err); diff --git a/plugins/c9.ide.plugins/manager.js b/plugins/c9.ide.plugins/manager.js index 9058bfbc..f75904ab 100644 --- a/plugins/c9.ide.plugins/manager.js +++ b/plugins/c9.ide.plugins/manager.js @@ -580,14 +580,18 @@ define(function(require, exports, module) { // Download tar file with template for plugin proc.execFile("bash", { - args: ["-c", ["curl", "-L", url, "--create-dirs", "-o", tarPathAbsolute].join(" ")] + args: ["-c", [ + // using mkdirp since "--create-dirs" is broken on windows + "mkdir", "-p", util.escapeShell(dirname(tarPathAbsolute)), ";", + "curl", "-L", util.escapeShell(url), "-o", util.escapeShell(tarPathAbsolute)].join(" ") + ] }, function(err, stderr, stdout){ if (err) return handleError(err); // Untar tar file proc.execFile("bash", { - args: ["-c", ["tar", "-zxvf", tarPath, "-C", pluginsDirAbsolute].join(" ")] + args: ["-c", ["tar", "-zxvf", util.escapeShell(tarPath), "-C", util.escapeShell(pluginsDirAbsolute)].join(" ")] }, function(err, stderr, stdout){ if (err) return handleError(err);