diff --git a/bin/c9 b/bin/c9 index 32d1f9e5..9de38075 100755 --- a/bin/c9 +++ b/bin/c9 @@ -6,8 +6,6 @@ var architect = require("architect"); // Add ability to load AMD modules require("amd-loader"); -var verbose = process.argv.indexOf("--verbose") + 1 - || process.argv.indexOf("-v") + 1; architect.resolveConfig(require("../configs/cli.js")(), __dirname + "/../plugins", function (err, config) { diff --git a/configs/cli.js b/configs/cli.js index 9bfebe48..80a8d3f5 100644 --- a/configs/cli.js +++ b/configs/cli.js @@ -1,12 +1,14 @@ module.exports = function(options) { // workaround for api difference between node and c9 events modules -var EventEmitter = require("events").EventEmitter; -var emit_ = EventEmitter.prototype.emit -EventEmitter.prototype.emit = function() { - emit_.apply(this, arguments); - return true; -} +var EventEmitter = require("../plugins/c9.nodeapi/events").EventEmitter; +var Module = require("module"); +var _resolveFilename_orig = Module._resolveFilename +Module._resolveFilename = function(id, parent) { + if (id == "events" && parent && /c9.core[\\/]ext\.js/.test(parent.id)) + id = "../c9.nodeapi/events"; + return _resolveFilename_orig.call(Module, id, parent); +}; var PID = process.env.C9_PID || 526; var APIHOST = process.env.C9_APIHOST || "api.c9.io"; // "api.c9.io"; diff --git a/node_modules/vfs-local/localfs.js b/node_modules/vfs-local/localfs.js index f9376f77..1984e00d 100644 --- a/node_modules/vfs-local/localfs.js +++ b/node_modules/vfs-local/localfs.js @@ -350,7 +350,7 @@ module.exports = function setup(fsOptions) { // This helper function doesn't follow node conventions in the callback, // there is no err, only entry. - function createStatEntry(file, fullpath, callback) { + function createStatEntry(file, fullpath, callback, _loop) { fs.lstat(fullpath, function (err, stat) { var entry = { name: file @@ -378,26 +378,29 @@ module.exports = function setup(fsOptions) { return callback(entry); } fs.readlink(fullpath, function (err, link) { - if (entry.name == link) { - entry.linkStatErr = "ELOOP: recursive symlink"; - return callback(entry); - } - if (err) { entry.linkErr = err.stack; return callback(entry); } + var fullLinkPath = pathResolve(dirname(fullpath), link); + if (!_loop) { + _loop = {fullLinkPath: fullpath, max: 100}; + } + if (fullLinkPath.toLowerCase() == _loop.fullLinkPath.toLowerCase() || _loop.max --< 0) { + entry.linkErr = "ELOOP: recursive symlink"; + return callback(entry); + } entry.link = link; - resolvePath(pathResolve(dirname(fullpath), link), {alreadyRooted: true}, function (err, newpath) { - if (err) { - entry.linkStatErr = err; - return callback(entry); - } - createStatEntry(basename(newpath), newpath, function (linkStat) { - entry.linkStat = linkStat; - linkStat.fullPath = newpath.substr(base.length) || "/"; - return callback(entry); - }); + resolvePath(fullLinkPath, {alreadyRooted: true}, function (err, newpath) { + if (err) { + entry.linkErr = err; + return callback(entry); + } + createStatEntry(basename(newpath), newpath, function (linkStat) { + entry.linkStat = linkStat; + linkStat.fullPath = newpath.substr(base.length) || "/"; + return callback(entry); + }, _loop); }); }); } diff --git a/plugins/c9.cli.publish/publish.js b/plugins/c9.cli.publish/publish.js index 81cb6459..9c817498 100644 --- a/plugins/c9.cli.publish/publish.js +++ b/plugins/c9.cli.publish/publish.js @@ -44,6 +44,7 @@ define(function(require, exports, module) { var force = false; var dryRun = false; var createTag = false; + var compress = false; // Set up basic auth for api if needed if (BASICAUTH) api.basicAuth = BASICAUTH; @@ -85,6 +86,11 @@ define(function(require, exports, module) { "alias": "t", "default": false, "boolean": true + }, + "compress" : { + "description": "Minify output with uglify.js", + "default": true, + "boolean": true } }, check: function(argv) { @@ -125,9 +131,17 @@ define(function(require, exports, module) { "alias": "d", "default": false, "boolean": true + }, + "compress" : { + "description": "Minify output with uglify.js", + "default": false, + "boolean": true } }, exec: function(argv) { + compress = argv["compress"]; + verbose = argv["verbose"]; + force = argv["force"]; if (argv["devel"]) { var code = function(argument) { /* TODO explain */ @@ -159,13 +173,14 @@ define(function(require, exports, module) { } else { dryRun = true; - publish({local: true}, function(err){ + publish({local: true}, function(err, result){ if (err) { console.error(err); if (!verbose) console.error("\nTry running with --verbose flag for more information"); process.exit(1); } + console.log("Done!"); }); } } @@ -186,6 +201,7 @@ define(function(require, exports, module) { check: function(argv) {}, exec: function(argv) { verbose = argv["verbose"]; + compress = argv["compress"]; unpublish( function(err, data){ @@ -574,7 +590,7 @@ define(function(require, exports, module) { enableBrowser: true, includeConfig: false, noArchitect: true, - compress: !dryRun, + compress: compress, obfuscate: true, oneLine: true, filter: [], diff --git a/plugins/c9.fs/fs.cache.xml.js b/plugins/c9.fs/fs.cache.xml.js index dda745dd..c9ad1844 100644 --- a/plugins/c9.fs/fs.cache.xml.js +++ b/plugins/c9.fs/fs.cache.xml.js @@ -561,8 +561,8 @@ define(function(require, exports, module) { node.size = stat.size; if (stat.mtime != undefined) node.mtime = stat.mtime; - if (original_stat) - node.link = stat.fullPath; + if (original_stat || stat.linkErr) + node.link = stat.fullPath || stat.linkErr; node.isFolder = isFolder; }