From 200359ecd23426861716c782d7fceae67cdca13d Mon Sep 17 00:00:00 2001 From: Brady Dowling Date: Tue, 12 Apr 2016 21:08:43 +0000 Subject: [PATCH 001/104] Added Java runners --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8f441c92..367119b6 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", "c9.ide.processlist": "#2b12cd1bdd", - "c9.ide.run": "#6bd4996a4e", + "c9.ide.run": "#c9550b7a0e", "c9.ide.run.build": "#0598fff697", "c9.ide.run.debug.xdebug": "#9956689819", "c9.ide.save": "#25a63f31e2", From e89400bc23417ea2fcbb3394f9c5b8ea701f22ab Mon Sep 17 00:00:00 2001 From: Brady Dowling Date: Tue, 12 Apr 2016 21:16:39 +0000 Subject: [PATCH 002/104] Added Java runners to SDK --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 367119b6..1a0cdb63 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", "c9.ide.processlist": "#2b12cd1bdd", - "c9.ide.run": "#c9550b7a0e", + "c9.ide.run": "#f77c535526", "c9.ide.run.build": "#0598fff697", "c9.ide.run.debug.xdebug": "#9956689819", "c9.ide.save": "#25a63f31e2", From 0bfe031ea847247d3f76adb343b7749b69f293a1 Mon Sep 17 00:00:00 2001 From: Brady Dowling Date: Tue, 12 Apr 2016 21:37:07 +0000 Subject: [PATCH 003/104] Updated the selector for Java runners --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1a0cdb63..07364c98 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", "c9.ide.processlist": "#2b12cd1bdd", - "c9.ide.run": "#f77c535526", + "c9.ide.run": "#761714e446", "c9.ide.run.build": "#0598fff697", "c9.ide.run.debug.xdebug": "#9956689819", "c9.ide.save": "#25a63f31e2", From a80a4744189fc3c4332448c78eb00a0f38a4e512 Mon Sep 17 00:00:00 2001 From: Brady Dowling Date: Tue, 12 Apr 2016 21:39:26 +0000 Subject: [PATCH 004/104] Single-file Java runner is chosen first --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 07364c98..ab2907e9 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", "c9.ide.processlist": "#2b12cd1bdd", - "c9.ide.run": "#761714e446", + "c9.ide.run": "#1c7d2a3c32", "c9.ide.run.build": "#0598fff697", "c9.ide.run.debug.xdebug": "#9956689819", "c9.ide.save": "#25a63f31e2", From a1524d9a4ec61a18728be87f4be7f94d974c4870 Mon Sep 17 00:00:00 2001 From: Brady Dowling Date: Wed, 13 Apr 2016 14:56:48 +0000 Subject: [PATCH 005/104] Added renamed files --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ab2907e9..f493071f 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", "c9.ide.processlist": "#2b12cd1bdd", - "c9.ide.run": "#1c7d2a3c32", + "c9.ide.run": "#3f66921065", "c9.ide.run.build": "#0598fff697", "c9.ide.run.debug.xdebug": "#9956689819", "c9.ide.save": "#25a63f31e2", From 3892fe36df78d736ecb48c8f43d15bfd98a4b6be Mon Sep 17 00:00:00 2001 From: nightwing Date: Tue, 19 Apr 2016 18:05:30 +0000 Subject: [PATCH 006/104] fix Workspace count is NaN on smartface workspaces --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 85af830e..cd6f17a5 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "c9.ide.preview.browser": "#897177be7f", "c9.ide.preview.markdown": "#c3174d86e0", "c9.ide.pubsub": "#a85fb27eca", - "c9.ide.readonly": "#719881e192", + "c9.ide.readonly": "#a4605830c4", "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", "c9.ide.processlist": "#2b12cd1bdd", From b8deaf74268457d8932e2c7e1ea33a9883903ccb Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 22 Apr 2016 13:52:23 +0200 Subject: [PATCH 007/104] c9-auto-bump 3.1.2320 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cdf4da9d..c085be9c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2319", + "version": "3.1.2320", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From d68490b550ed34532c8b1d5b683b9851225031d4 Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 22 Apr 2016 14:00:58 +0200 Subject: [PATCH 008/104] c9-auto-bump 3.1.2321 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c085be9c..48b9870d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2320", + "version": "3.1.2321", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 0008c57800a15741bee88bcad6f9a98e9a8ac3ad Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 22 Apr 2016 15:13:21 +0200 Subject: [PATCH 009/104] c9-auto-bump 3.1.2322 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 48b9870d..646ac61b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2321", + "version": "3.1.2322", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 6de1c9daee246100a83da7ff284da37658facdcd Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 21 Apr 2016 00:18:10 +0000 Subject: [PATCH 010/104] fix small ui issues --- package.json | 2 +- plugins/c9.ide.plugins/loader.js | 4 ++-- plugins/c9.ide.ui/codebox.js | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 646ac61b..e74ae73a 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "c9.ide.language.javascript.infer": "#18acb93a3a", "c9.ide.language.jsonalyzer": "#4b329741b1", "c9.ide.language.codeintel": "#253ae15f5e", - "c9.ide.collab": "#9c8fec5d78", + "c9.ide.collab": "#bab99a8b38", "c9.ide.local": "#10eb45842a", "c9.ide.find": "#e33fbaed2f", "c9.ide.find.infiles": "#c0a13737ef", diff --git a/plugins/c9.ide.plugins/loader.js b/plugins/c9.ide.plugins/loader.js index 7ce2afb4..e025d3b9 100644 --- a/plugins/c9.ide.plugins/loader.js +++ b/plugins/c9.ide.plugins/loader.js @@ -92,9 +92,9 @@ define(function(require, exports, module) { delete extraPackages[config.packagePath]; } }); - Object.keys(extraPackages).forEach(function(extraConfig) { + Object.keys(extraPackages).forEach(function(packagePath) { console.warn("[c9.ide.loader] Package " - + extraConfig.packagePath + " should be installed, according " + + packagePath + " should be installed, according " + "to the database, but was not found on the filesystem. " + "Try reinstalling it."); }); diff --git a/plugins/c9.ide.ui/codebox.js b/plugins/c9.ide.ui/codebox.js index 504a0aab..18eca48b 100644 --- a/plugins/c9.ide.ui/codebox.js +++ b/plugins/c9.ide.ui/codebox.js @@ -91,11 +91,13 @@ apf.codebox = function(struct, tagName) { var checkInitial = function() { var value = ace.getValue(); if (value && ace.renderer.initialMessageNode) { + ace.renderer.off("afterRender", checkInitial); dom.removeCssClass(ace.container, "ace_initialMsg"); ace.renderer.scroller.removeChild(ace.renderer.initialMessageNode); ace.renderer.initialMessageNode = null; } else if (!value && !ace.renderer.initialMessageNode) { + ace.renderer.on("afterRender", checkInitial); dom.addCssClass(ace.container, "ace_initialMsg"); var el = document.createElement("div"); el.className = "tb_textboxInitialMsg"; @@ -103,7 +105,6 @@ apf.codebox = function(struct, tagName) { ace.renderer.initialMessageNode = el; ace.renderer.scroller.appendChild(ace.renderer.initialMessageNode); } - }; ace.on("input", checkInitial); From e9f84cb591131051a98614ca1b31601954ede866 Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 21 Apr 2016 00:19:09 +0000 Subject: [PATCH 011/104] be more strict about vfs extend in readonly mode --- configs/client-default.js | 5 ---- package.json | 10 ++++---- plugins/c9.vfs.client/vfs.log.js | 2 ++ plugins/c9.vfs.client/vfs.ping.js | 5 ++-- .../c9.vfs.server/vfs.connect.standalone.js | 1 - plugins/c9.vfs.server/vfs.js | 3 --- plugins/c9.vfs.server/vfs_wrapper.js | 25 +++++++++++-------- plugins/c9.vfs.standalone/standalone.js | 2 +- 8 files changed, 25 insertions(+), 28 deletions(-) diff --git a/configs/client-default.js b/configs/client-default.js index 50593d86..f532d9e7 100644 --- a/configs/client-default.js +++ b/configs/client-default.js @@ -35,8 +35,6 @@ module.exports = function(options) { var devel = options.standalone && !options.local || options.mode === "devel" || options.mode == "onlinedev" || options.dev; var localExtendFiles = options.localExtend || options.standalone; - // allow extend code access only to C9-deveoped plugins - var extendToken = options.extendToken || "token"; var plugins = [ // C9 @@ -412,7 +410,6 @@ module.exports = function(options) { "plugins/c9.ide.language.go/go", { packagePath: "plugins/c9.ide.language.jsonalyzer/jsonalyzer", - extendToken: extendToken, workspaceDir: workspaceDir, homeDir: options.home, bashBin: options.bashBin, @@ -787,7 +784,6 @@ module.exports = function(options) { }, { packagePath: "plugins/c9.ide.pubsub/pubsub-client", - extendToken: extendToken }, { packagePath: "plugins/c9.ide.collab/notifications/bubble", @@ -868,7 +864,6 @@ module.exports = function(options) { plugins.push( { packagePath: "plugins/c9.ide.collab/connect", - extendToken: extendToken, enable: collab, debug: debug, localServerFile: localExtendFiles, diff --git a/package.json b/package.json index e74ae73a..94f947ae 100644 --- a/package.json +++ b/package.json @@ -65,9 +65,9 @@ "c9.ide.language.javascript.eslint": "#4de5457db1", "c9.ide.language.javascript.tern": "#b55d0069bb", "c9.ide.language.javascript.infer": "#18acb93a3a", - "c9.ide.language.jsonalyzer": "#4b329741b1", + "c9.ide.language.jsonalyzer": "#23457a0bf6", "c9.ide.language.codeintel": "#253ae15f5e", - "c9.ide.collab": "#bab99a8b38", + "c9.ide.collab": "#763cbbfe3f", "c9.ide.local": "#10eb45842a", "c9.ide.find": "#e33fbaed2f", "c9.ide.find.infiles": "#c0a13737ef", @@ -90,17 +90,17 @@ "c9.ide.help.support": "#932fbb3743", "c9.ide.imgeditor": "#612e75ef4f", "c9.ide.immediate": "#19758abe08", - "c9.ide.installer": "#1232d4e179", + "c9.ide.installer": "#4ec5341876", "c9.ide.language.python": "#330b80e3b2", "c9.ide.language.go": "#6ce1c7a7ef", "c9.ide.mount": "#4c39359b87", - "c9.ide.navigate": "#0b7ec7936c", + "c9.ide.navigate": "#3941d604b9", "c9.ide.newresource": "#981a408a7b", "c9.ide.openfiles": "#2ae85a9e33", "c9.ide.preview": "#5f5fff0185", "c9.ide.preview.browser": "#897177be7f", "c9.ide.preview.markdown": "#c3174d86e0", - "c9.ide.pubsub": "#a85fb27eca", + "c9.ide.pubsub": "#933baeb7b4", "c9.ide.readonly": "#719881e192", "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", diff --git a/plugins/c9.vfs.client/vfs.log.js b/plugins/c9.vfs.client/vfs.log.js index 3d3c453a..5ab2d214 100644 --- a/plugins/c9.vfs.client/vfs.log.js +++ b/plugins/c9.vfs.client/vfs.log.js @@ -20,6 +20,8 @@ define(function (require, exports, module) { if (loaded) return false; loaded = true; + if (c9.readonly) return false; + ext.loadRemotePlugin("log", { code: require("text!./log-service.js"), redefine: true diff --git a/plugins/c9.vfs.client/vfs.ping.js b/plugins/c9.vfs.client/vfs.ping.js index fcebcf6e..275814e6 100644 --- a/plugins/c9.vfs.client/vfs.ping.js +++ b/plugins/c9.vfs.client/vfs.ping.js @@ -22,10 +22,9 @@ define(function(require, exports, module) { loaded = true; ext.loadRemotePlugin("ping", { - code: require("text!./ping-service.js"), - redefine: true + file: "c9.vfs.client/ping-service.js" }, function(err, remote) { - if (err) + if (!remote) return console.error(err); api = remote; diff --git a/plugins/c9.vfs.server/vfs.connect.standalone.js b/plugins/c9.vfs.server/vfs.connect.standalone.js index 82807063..51096d8a 100644 --- a/plugins/c9.vfs.server/vfs.connect.standalone.js +++ b/plugins/c9.vfs.server/vfs.connect.standalone.js @@ -56,7 +56,6 @@ define(function(require, exports, module) { projectDir: vfsOptions.projectDir, extendDirectory: options.extendDirectory, extendOptions: projectOptions.extendOptions, - extendToken: "not_needed", collab: options.collab, vfsOptions: vfsOptions, public: true diff --git a/plugins/c9.vfs.server/vfs.js b/plugins/c9.vfs.server/vfs.js index 8a6107cf..8cf16b1e 100644 --- a/plugins/c9.vfs.server/vfs.js +++ b/plugins/c9.vfs.server/vfs.js @@ -24,7 +24,6 @@ function Vfs(vfs, master, options) { this.public = options.public || false; this.vfsOptions = options.vfsOptions || {}; this.pid = this.vfsOptions.pid; - var extendToken = options.extendToken; this.homeDir = options.homeDir; this.workspaceDir = options.projectDir; @@ -36,14 +35,12 @@ function Vfs(vfs, master, options) { blocked: this.readonly, extendDirectory: options.extendDirectory, extendOptions: options.extendOptions, - extendToken: extendToken }); this.vfsWorkspace = wrapVfs(vfs, { root: this.workspaceDir, readonly: this.readonly, extendDirectory: options.extendDirectory, extendOptions: options.extendOptions, - extendToken: extendToken }); var vfsProxy = proxyVfs(Object.keys(this.vfsHome), this.vfsHome, this.vfsWorkspace); diff --git a/plugins/c9.vfs.server/vfs_wrapper.js b/plugins/c9.vfs.server/vfs_wrapper.js index 8fe1192a..d3eade23 100644 --- a/plugins/c9.vfs.server/vfs_wrapper.js +++ b/plugins/c9.vfs.server/vfs_wrapper.js @@ -8,7 +8,6 @@ module.exports = function(vfs, options) { var methods = options.methods || Object.keys(vfs); var readonly = "readonly" in options ? options.readonly : false; var blocked = !!options.blocked; - var extendToken = options.extendToken; var roMethods = { resolve: 1, @@ -74,18 +73,24 @@ module.exports = function(vfs, options) { options[key] = extendOptions[key]; } - if (options.code || options.stream) { - if (readonly && (!extendToken || extendToken !== options.extendToken)) - return callback(new error.Forbidden("VFS extend: " + name + " with options 'stream' or 'code' not authorized in read only mode")); - else - return vfs.extend(name, options, callback); + if (readonly) { + var whitelist = { + "c9.ide.collab/server/collab-server.js": true, + "c9.ide.pubsub/pubsub-service.js": true, + "c9.vfs.client/ping-service.js": true, + }; + if (!options.file || !whitelist[options.file]) + return callback(new error.Forbidden("VFS extend: " + name + " is not authorized in read only mode")); } + + if (options.code || options.stream) + return vfs.extend(name, options, callback); - if (!options.file) - return callback(new error.Forbidden("Option 'file' is missing")); + if (!options.file) + return callback(new error.Forbidden("Option 'file' is missing")); - if (typeof options.file != "string") - return callback(new error.Forbidden("Invalid option 'file'")); + if (typeof options.file != "string") + return callback(new error.Forbidden("Invalid option 'file'")); if (extendDirectory) { var file = options.file = path.normalize(path.join(extendDirectory, options.file)); diff --git a/plugins/c9.vfs.standalone/standalone.js b/plugins/c9.vfs.standalone/standalone.js index 7470c8ab..8da836c9 100644 --- a/plugins/c9.vfs.standalone/standalone.js +++ b/plugins/c9.vfs.standalone/standalone.js @@ -255,7 +255,7 @@ function plugin(options, imports, register) { }; api.updatConfig = api.updatConfig || function(opts, params) { var id = params.token; - opts.accessToken = opts.extendToken = id || "token"; + opts.accessToken = id || "token"; var user = opts.extendOptions.user; user.id = id || -1; user.name = id ? "user" + id : "johndoe"; From baf384acab7197c14973e78fce1015ab7b61b604 Mon Sep 17 00:00:00 2001 From: nightwing Date: Fri, 22 Apr 2016 15:38:13 +0000 Subject: [PATCH 012/104] backward compat --- package.json | 2 +- plugins/c9.vfs.client/vfs.ping.js | 15 +++++++++------ plugins/c9.vfs.server/vfs_wrapper.js | 12 +++++++----- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 94f947ae..a94be016 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "c9.ide.preview": "#5f5fff0185", "c9.ide.preview.browser": "#897177be7f", "c9.ide.preview.markdown": "#c3174d86e0", - "c9.ide.pubsub": "#933baeb7b4", + "c9.ide.pubsub": "#b20bdfb12a", "c9.ide.readonly": "#719881e192", "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", diff --git a/plugins/c9.vfs.client/vfs.ping.js b/plugins/c9.vfs.client/vfs.ping.js index 275814e6..4e02ade7 100644 --- a/plugins/c9.vfs.client/vfs.ping.js +++ b/plugins/c9.vfs.client/vfs.ping.js @@ -1,7 +1,7 @@ define(function(require, exports, module) { "use strict"; - main.consumes = ["Plugin", "ext", "c9", "vfs", "metrics"]; + main.consumes = ["Plugin", "ext", "c9", "vfs"]; main.provides = ["vfs.ping"]; return main; @@ -9,7 +9,6 @@ define(function(require, exports, module) { var Plugin = imports.Plugin; var c9 = imports.c9; var ext = imports.ext; - var metrics = imports.metrics; /***** Initialization *****/ @@ -17,13 +16,17 @@ define(function(require, exports, module) { var api; var loaded = false; - function load(){ - if (loaded) return; + function load(oldVfs) { + if (loaded && !oldVfs) return; loaded = true; - + ext.loadRemotePlugin("ping", { - file: "c9.vfs.client/ping-service.js" + file: oldVfs ? undefined : "c9.vfs.client/ping-service.js", + code: oldVfs ? require("text!./ping-service.js") : undefined }, function(err, remote) { + if (!remote && !oldVfs) + return load(true); + if (!remote) return console.error(err); diff --git a/plugins/c9.vfs.server/vfs_wrapper.js b/plugins/c9.vfs.server/vfs_wrapper.js index d3eade23..1b4182c3 100644 --- a/plugins/c9.vfs.server/vfs_wrapper.js +++ b/plugins/c9.vfs.server/vfs_wrapper.js @@ -83,12 +83,14 @@ module.exports = function(vfs, options) { return callback(new error.Forbidden("VFS extend: " + name + " is not authorized in read only mode")); } - if (options.code || options.stream) - return vfs.extend(name, options, callback); - - if (!options.file) + // localfs extend checks for file, then code, then stream + if (!options.file) { + if (options.code || options.stream) + return vfs.extend(name, options, callback); + return callback(new error.Forbidden("Option 'file' is missing")); - + } + if (typeof options.file != "string") return callback(new error.Forbidden("Invalid option 'file'")); From f7c79da0917c4f90346de16002d04675df2c7abc Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 22 Apr 2016 21:57:42 +0200 Subject: [PATCH 013/104] c9-auto-bump 3.1.2323 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a94be016..437afaf0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2322", + "version": "3.1.2323", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 4a86ac8ef6f292fdd77be75a990757aa34f1f3fd Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 10:27:36 +0200 Subject: [PATCH 014/104] c9-auto-bump 3.1.2324 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 437afaf0..1c016325 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2323", + "version": "3.1.2324", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 121fec3469c5931ce2c131c9aa8fb7ac535ec838 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 11:49:06 +0200 Subject: [PATCH 015/104] c9-auto-bump 3.1.2325 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1c016325..746812de 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2324", + "version": "3.1.2325", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 5660acbb291fdac4d3a15d3f5e98f6b5d8181ab7 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 12:42:28 +0200 Subject: [PATCH 016/104] c9-auto-bump 3.1.2326 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 746812de..1a39050d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2325", + "version": "3.1.2326", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 7b1254d117824ed414f4577c7933554375bdc9a6 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 12:45:41 +0200 Subject: [PATCH 017/104] c9-auto-bump 3.1.2327 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1a39050d..5b4a3f9e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2326", + "version": "3.1.2327", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 13fabefed5cb01230a7353ebbc339434ac3755a9 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 13:20:19 +0200 Subject: [PATCH 018/104] c9-auto-bump 3.1.2328 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5b4a3f9e..593e1060 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2327", + "version": "3.1.2328", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From ecbb32062eb620f5211f7e197dd3ccae31283498 Mon Sep 17 00:00:00 2001 From: nightwing Date: Mon, 25 Apr 2016 11:24:53 +0000 Subject: [PATCH 019/104] fix exception in mkdirP --- plugins/c9.fs/fs.cache.xml.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/c9.fs/fs.cache.xml.js b/plugins/c9.fs/fs.cache.xml.js index 7922f9a0..9f3aa3d1 100644 --- a/plugins/c9.fs/fs.cache.xml.js +++ b/plugins/c9.fs/fs.cache.xml.js @@ -570,7 +570,7 @@ define(function(require, exports, module) { node = {label: p, path: subPath, status: "pending", isFolder: true}; // TODO filter hidden files in getChildren instead. if (!showHidden && isFileHidden(p)) { - orphans[node.path] = path; + orphans[node.path] = node; return; } } else if (updateNode) { From 4c5d0517c2c864316e192978308841e94babfc19 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 13:27:14 +0200 Subject: [PATCH 020/104] c9-auto-bump 3.1.2329 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d0a7f161..e3de76ed 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2328", + "version": "3.1.2329", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 8e38282feb6ad149675da3b468cc67b28e9f1608 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 13:27:55 +0200 Subject: [PATCH 021/104] c9-auto-bump 3.1.2330 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e3de76ed..53bacc88 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2329", + "version": "3.1.2330", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 52f03a60b849b49a37532534898d8ffb86ca3d78 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 14:17:47 +0200 Subject: [PATCH 022/104] c9-auto-bump 3.1.2331 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 53bacc88..8059e5a5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2330", + "version": "3.1.2331", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From afb67a66a12edb5fa49b98b92e62984ba494612e Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 14:29:56 +0200 Subject: [PATCH 023/104] c9-auto-bump 3.1.2332 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8059e5a5..f595ef41 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2331", + "version": "3.1.2332", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From cca27c5885b38e1be685fd94465355af6731e893 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 14:36:39 +0200 Subject: [PATCH 024/104] c9-auto-bump 3.1.2333 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f595ef41..52498c86 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2332", + "version": "3.1.2333", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 5a64a7ba35f68137d5c3766dd926806d6973580d Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 15:26:57 +0200 Subject: [PATCH 025/104] c9-auto-bump 3.1.2334 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 52498c86..98538f18 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2333", + "version": "3.1.2334", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 4af7e83cdc5034916f06070e618094c6cb97e5ce Mon Sep 17 00:00:00 2001 From: Nikolai Onken Date: Mon, 25 Apr 2016 15:35:59 +0200 Subject: [PATCH 026/104] Revert "Vfs fix extend" --- configs/client-default.js | 5 ++++ package.json | 10 +++---- plugins/c9.ide.plugins/loader.js | 4 +-- plugins/c9.ide.ui/codebox.js | 3 +- plugins/c9.vfs.client/vfs.log.js | 2 -- plugins/c9.vfs.client/vfs.ping.js | 18 +++++------- .../c9.vfs.server/vfs.connect.standalone.js | 1 + plugins/c9.vfs.server/vfs.js | 3 ++ plugins/c9.vfs.server/vfs_wrapper.js | 29 +++++++------------ plugins/c9.vfs.standalone/standalone.js | 2 +- 10 files changed, 37 insertions(+), 40 deletions(-) diff --git a/configs/client-default.js b/configs/client-default.js index f532d9e7..50593d86 100644 --- a/configs/client-default.js +++ b/configs/client-default.js @@ -35,6 +35,8 @@ module.exports = function(options) { var devel = options.standalone && !options.local || options.mode === "devel" || options.mode == "onlinedev" || options.dev; var localExtendFiles = options.localExtend || options.standalone; + // allow extend code access only to C9-deveoped plugins + var extendToken = options.extendToken || "token"; var plugins = [ // C9 @@ -410,6 +412,7 @@ module.exports = function(options) { "plugins/c9.ide.language.go/go", { packagePath: "plugins/c9.ide.language.jsonalyzer/jsonalyzer", + extendToken: extendToken, workspaceDir: workspaceDir, homeDir: options.home, bashBin: options.bashBin, @@ -784,6 +787,7 @@ module.exports = function(options) { }, { packagePath: "plugins/c9.ide.pubsub/pubsub-client", + extendToken: extendToken }, { packagePath: "plugins/c9.ide.collab/notifications/bubble", @@ -864,6 +868,7 @@ module.exports = function(options) { plugins.push( { packagePath: "plugins/c9.ide.collab/connect", + extendToken: extendToken, enable: collab, debug: debug, localServerFile: localExtendFiles, diff --git a/package.json b/package.json index 98538f18..d6ec6adf 100644 --- a/package.json +++ b/package.json @@ -65,9 +65,9 @@ "c9.ide.language.javascript.eslint": "#4de5457db1", "c9.ide.language.javascript.tern": "#b55d0069bb", "c9.ide.language.javascript.infer": "#18acb93a3a", - "c9.ide.language.jsonalyzer": "#23457a0bf6", + "c9.ide.language.jsonalyzer": "#724bf6919d", "c9.ide.language.codeintel": "#253ae15f5e", - "c9.ide.collab": "#763cbbfe3f", + "c9.ide.collab": "#b05e428616", "c9.ide.local": "#10eb45842a", "c9.ide.find": "#e33fbaed2f", "c9.ide.find.infiles": "#c0a13737ef", @@ -90,17 +90,17 @@ "c9.ide.help.support": "#932fbb3743", "c9.ide.imgeditor": "#612e75ef4f", "c9.ide.immediate": "#19758abe08", - "c9.ide.installer": "#4ec5341876", + "c9.ide.installer": "#462c535ff0", "c9.ide.language.python": "#330b80e3b2", "c9.ide.language.go": "#6ce1c7a7ef", "c9.ide.mount": "#4c39359b87", - "c9.ide.navigate": "#3941d604b9", + "c9.ide.navigate": "#113b38a061", "c9.ide.newresource": "#981a408a7b", "c9.ide.openfiles": "#2ae85a9e33", "c9.ide.preview": "#5f5fff0185", "c9.ide.preview.browser": "#897177be7f", "c9.ide.preview.markdown": "#c3174d86e0", - "c9.ide.pubsub": "#b20bdfb12a", + "c9.ide.pubsub": "#b19163ae34", "c9.ide.readonly": "#719881e192", "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", diff --git a/plugins/c9.ide.plugins/loader.js b/plugins/c9.ide.plugins/loader.js index e025d3b9..7ce2afb4 100644 --- a/plugins/c9.ide.plugins/loader.js +++ b/plugins/c9.ide.plugins/loader.js @@ -92,9 +92,9 @@ define(function(require, exports, module) { delete extraPackages[config.packagePath]; } }); - Object.keys(extraPackages).forEach(function(packagePath) { + Object.keys(extraPackages).forEach(function(extraConfig) { console.warn("[c9.ide.loader] Package " - + packagePath + " should be installed, according " + + extraConfig.packagePath + " should be installed, according " + "to the database, but was not found on the filesystem. " + "Try reinstalling it."); }); diff --git a/plugins/c9.ide.ui/codebox.js b/plugins/c9.ide.ui/codebox.js index 18eca48b..504a0aab 100644 --- a/plugins/c9.ide.ui/codebox.js +++ b/plugins/c9.ide.ui/codebox.js @@ -91,13 +91,11 @@ apf.codebox = function(struct, tagName) { var checkInitial = function() { var value = ace.getValue(); if (value && ace.renderer.initialMessageNode) { - ace.renderer.off("afterRender", checkInitial); dom.removeCssClass(ace.container, "ace_initialMsg"); ace.renderer.scroller.removeChild(ace.renderer.initialMessageNode); ace.renderer.initialMessageNode = null; } else if (!value && !ace.renderer.initialMessageNode) { - ace.renderer.on("afterRender", checkInitial); dom.addCssClass(ace.container, "ace_initialMsg"); var el = document.createElement("div"); el.className = "tb_textboxInitialMsg"; @@ -105,6 +103,7 @@ apf.codebox = function(struct, tagName) { ace.renderer.initialMessageNode = el; ace.renderer.scroller.appendChild(ace.renderer.initialMessageNode); } + }; ace.on("input", checkInitial); diff --git a/plugins/c9.vfs.client/vfs.log.js b/plugins/c9.vfs.client/vfs.log.js index 5ab2d214..3d3c453a 100644 --- a/plugins/c9.vfs.client/vfs.log.js +++ b/plugins/c9.vfs.client/vfs.log.js @@ -20,8 +20,6 @@ define(function (require, exports, module) { if (loaded) return false; loaded = true; - if (c9.readonly) return false; - ext.loadRemotePlugin("log", { code: require("text!./log-service.js"), redefine: true diff --git a/plugins/c9.vfs.client/vfs.ping.js b/plugins/c9.vfs.client/vfs.ping.js index 4e02ade7..fcebcf6e 100644 --- a/plugins/c9.vfs.client/vfs.ping.js +++ b/plugins/c9.vfs.client/vfs.ping.js @@ -1,7 +1,7 @@ define(function(require, exports, module) { "use strict"; - main.consumes = ["Plugin", "ext", "c9", "vfs"]; + main.consumes = ["Plugin", "ext", "c9", "vfs", "metrics"]; main.provides = ["vfs.ping"]; return main; @@ -9,6 +9,7 @@ define(function(require, exports, module) { var Plugin = imports.Plugin; var c9 = imports.c9; var ext = imports.ext; + var metrics = imports.metrics; /***** Initialization *****/ @@ -16,18 +17,15 @@ define(function(require, exports, module) { var api; var loaded = false; - function load(oldVfs) { - if (loaded && !oldVfs) return; + function load(){ + if (loaded) return; loaded = true; - + ext.loadRemotePlugin("ping", { - file: oldVfs ? undefined : "c9.vfs.client/ping-service.js", - code: oldVfs ? require("text!./ping-service.js") : undefined + code: require("text!./ping-service.js"), + redefine: true }, function(err, remote) { - if (!remote && !oldVfs) - return load(true); - - if (!remote) + if (err) return console.error(err); api = remote; diff --git a/plugins/c9.vfs.server/vfs.connect.standalone.js b/plugins/c9.vfs.server/vfs.connect.standalone.js index 51096d8a..82807063 100644 --- a/plugins/c9.vfs.server/vfs.connect.standalone.js +++ b/plugins/c9.vfs.server/vfs.connect.standalone.js @@ -56,6 +56,7 @@ define(function(require, exports, module) { projectDir: vfsOptions.projectDir, extendDirectory: options.extendDirectory, extendOptions: projectOptions.extendOptions, + extendToken: "not_needed", collab: options.collab, vfsOptions: vfsOptions, public: true diff --git a/plugins/c9.vfs.server/vfs.js b/plugins/c9.vfs.server/vfs.js index 8cf16b1e..8a6107cf 100644 --- a/plugins/c9.vfs.server/vfs.js +++ b/plugins/c9.vfs.server/vfs.js @@ -24,6 +24,7 @@ function Vfs(vfs, master, options) { this.public = options.public || false; this.vfsOptions = options.vfsOptions || {}; this.pid = this.vfsOptions.pid; + var extendToken = options.extendToken; this.homeDir = options.homeDir; this.workspaceDir = options.projectDir; @@ -35,12 +36,14 @@ function Vfs(vfs, master, options) { blocked: this.readonly, extendDirectory: options.extendDirectory, extendOptions: options.extendOptions, + extendToken: extendToken }); this.vfsWorkspace = wrapVfs(vfs, { root: this.workspaceDir, readonly: this.readonly, extendDirectory: options.extendDirectory, extendOptions: options.extendOptions, + extendToken: extendToken }); var vfsProxy = proxyVfs(Object.keys(this.vfsHome), this.vfsHome, this.vfsWorkspace); diff --git a/plugins/c9.vfs.server/vfs_wrapper.js b/plugins/c9.vfs.server/vfs_wrapper.js index 1b4182c3..8fe1192a 100644 --- a/plugins/c9.vfs.server/vfs_wrapper.js +++ b/plugins/c9.vfs.server/vfs_wrapper.js @@ -8,6 +8,7 @@ module.exports = function(vfs, options) { var methods = options.methods || Object.keys(vfs); var readonly = "readonly" in options ? options.readonly : false; var blocked = !!options.blocked; + var extendToken = options.extendToken; var roMethods = { resolve: 1, @@ -73,26 +74,18 @@ module.exports = function(vfs, options) { options[key] = extendOptions[key]; } - if (readonly) { - var whitelist = { - "c9.ide.collab/server/collab-server.js": true, - "c9.ide.pubsub/pubsub-service.js": true, - "c9.vfs.client/ping-service.js": true, - }; - if (!options.file || !whitelist[options.file]) - return callback(new error.Forbidden("VFS extend: " + name + " is not authorized in read only mode")); - } - - // localfs extend checks for file, then code, then stream - if (!options.file) { - if (options.code || options.stream) + if (options.code || options.stream) { + if (readonly && (!extendToken || extendToken !== options.extendToken)) + return callback(new error.Forbidden("VFS extend: " + name + " with options 'stream' or 'code' not authorized in read only mode")); + else return vfs.extend(name, options, callback); - - return callback(new error.Forbidden("Option 'file' is missing")); } - - if (typeof options.file != "string") - return callback(new error.Forbidden("Invalid option 'file'")); + + if (!options.file) + return callback(new error.Forbidden("Option 'file' is missing")); + + if (typeof options.file != "string") + return callback(new error.Forbidden("Invalid option 'file'")); if (extendDirectory) { var file = options.file = path.normalize(path.join(extendDirectory, options.file)); diff --git a/plugins/c9.vfs.standalone/standalone.js b/plugins/c9.vfs.standalone/standalone.js index 8da836c9..7470c8ab 100644 --- a/plugins/c9.vfs.standalone/standalone.js +++ b/plugins/c9.vfs.standalone/standalone.js @@ -255,7 +255,7 @@ function plugin(options, imports, register) { }; api.updatConfig = api.updatConfig || function(opts, params) { var id = params.token; - opts.accessToken = id || "token"; + opts.accessToken = opts.extendToken = id || "token"; var user = opts.extendOptions.user; user.id = id || -1; user.name = id ? "user" + id : "johndoe"; From 154fee2910a060181affa6e43026d9814b0dfbf1 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 15:43:24 +0200 Subject: [PATCH 027/104] c9-auto-bump 3.1.2335 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d6ec6adf..c7ab033a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2334", + "version": "3.1.2335", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 1b6f180b9e36dfa4a2b24e8e50806c921be4d098 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 17:37:18 +0200 Subject: [PATCH 028/104] c9-auto-bump 3.1.2336 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c7ab033a..ee452187 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2335", + "version": "3.1.2336", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From a84c97c7556e138adaea8d1310d7c22098b9b525 Mon Sep 17 00:00:00 2001 From: Nikolai Onken Date: Mon, 25 Apr 2016 17:37:54 +0200 Subject: [PATCH 029/104] Revert "Revert "Vfs fix extend"" --- configs/client-default.js | 5 --- package.json | 10 +++--- plugins/c9.ide.plugins/loader.js | 4 +-- plugins/c9.ide.ui/codebox.js | 3 +- plugins/c9.vfs.client/vfs.log.js | 2 ++ plugins/c9.vfs.client/vfs.ping.js | 18 ++++++----- .../c9.vfs.server/vfs.connect.standalone.js | 1 - plugins/c9.vfs.server/vfs.js | 3 -- plugins/c9.vfs.server/vfs_wrapper.js | 31 ++++++++++++------- plugins/c9.vfs.standalone/standalone.js | 2 +- 10 files changed, 41 insertions(+), 38 deletions(-) diff --git a/configs/client-default.js b/configs/client-default.js index 50593d86..f532d9e7 100644 --- a/configs/client-default.js +++ b/configs/client-default.js @@ -35,8 +35,6 @@ module.exports = function(options) { var devel = options.standalone && !options.local || options.mode === "devel" || options.mode == "onlinedev" || options.dev; var localExtendFiles = options.localExtend || options.standalone; - // allow extend code access only to C9-deveoped plugins - var extendToken = options.extendToken || "token"; var plugins = [ // C9 @@ -412,7 +410,6 @@ module.exports = function(options) { "plugins/c9.ide.language.go/go", { packagePath: "plugins/c9.ide.language.jsonalyzer/jsonalyzer", - extendToken: extendToken, workspaceDir: workspaceDir, homeDir: options.home, bashBin: options.bashBin, @@ -787,7 +784,6 @@ module.exports = function(options) { }, { packagePath: "plugins/c9.ide.pubsub/pubsub-client", - extendToken: extendToken }, { packagePath: "plugins/c9.ide.collab/notifications/bubble", @@ -868,7 +864,6 @@ module.exports = function(options) { plugins.push( { packagePath: "plugins/c9.ide.collab/connect", - extendToken: extendToken, enable: collab, debug: debug, localServerFile: localExtendFiles, diff --git a/package.json b/package.json index ee452187..2ccd621d 100644 --- a/package.json +++ b/package.json @@ -65,9 +65,9 @@ "c9.ide.language.javascript.eslint": "#4de5457db1", "c9.ide.language.javascript.tern": "#b55d0069bb", "c9.ide.language.javascript.infer": "#18acb93a3a", - "c9.ide.language.jsonalyzer": "#724bf6919d", + "c9.ide.language.jsonalyzer": "#ccc7bfdd92", "c9.ide.language.codeintel": "#253ae15f5e", - "c9.ide.collab": "#b05e428616", + "c9.ide.collab": "#60db5fb28d", "c9.ide.local": "#10eb45842a", "c9.ide.find": "#e33fbaed2f", "c9.ide.find.infiles": "#c0a13737ef", @@ -90,17 +90,17 @@ "c9.ide.help.support": "#932fbb3743", "c9.ide.imgeditor": "#612e75ef4f", "c9.ide.immediate": "#19758abe08", - "c9.ide.installer": "#462c535ff0", + "c9.ide.installer": "#a397e56fcc", "c9.ide.language.python": "#330b80e3b2", "c9.ide.language.go": "#6ce1c7a7ef", "c9.ide.mount": "#4c39359b87", - "c9.ide.navigate": "#113b38a061", + "c9.ide.navigate": "#ce2d16f517", "c9.ide.newresource": "#981a408a7b", "c9.ide.openfiles": "#2ae85a9e33", "c9.ide.preview": "#5f5fff0185", "c9.ide.preview.browser": "#897177be7f", "c9.ide.preview.markdown": "#c3174d86e0", - "c9.ide.pubsub": "#b19163ae34", + "c9.ide.pubsub": "#a6403d76bb", "c9.ide.readonly": "#719881e192", "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", diff --git a/plugins/c9.ide.plugins/loader.js b/plugins/c9.ide.plugins/loader.js index 7ce2afb4..e025d3b9 100644 --- a/plugins/c9.ide.plugins/loader.js +++ b/plugins/c9.ide.plugins/loader.js @@ -92,9 +92,9 @@ define(function(require, exports, module) { delete extraPackages[config.packagePath]; } }); - Object.keys(extraPackages).forEach(function(extraConfig) { + Object.keys(extraPackages).forEach(function(packagePath) { console.warn("[c9.ide.loader] Package " - + extraConfig.packagePath + " should be installed, according " + + packagePath + " should be installed, according " + "to the database, but was not found on the filesystem. " + "Try reinstalling it."); }); diff --git a/plugins/c9.ide.ui/codebox.js b/plugins/c9.ide.ui/codebox.js index 504a0aab..18eca48b 100644 --- a/plugins/c9.ide.ui/codebox.js +++ b/plugins/c9.ide.ui/codebox.js @@ -91,11 +91,13 @@ apf.codebox = function(struct, tagName) { var checkInitial = function() { var value = ace.getValue(); if (value && ace.renderer.initialMessageNode) { + ace.renderer.off("afterRender", checkInitial); dom.removeCssClass(ace.container, "ace_initialMsg"); ace.renderer.scroller.removeChild(ace.renderer.initialMessageNode); ace.renderer.initialMessageNode = null; } else if (!value && !ace.renderer.initialMessageNode) { + ace.renderer.on("afterRender", checkInitial); dom.addCssClass(ace.container, "ace_initialMsg"); var el = document.createElement("div"); el.className = "tb_textboxInitialMsg"; @@ -103,7 +105,6 @@ apf.codebox = function(struct, tagName) { ace.renderer.initialMessageNode = el; ace.renderer.scroller.appendChild(ace.renderer.initialMessageNode); } - }; ace.on("input", checkInitial); diff --git a/plugins/c9.vfs.client/vfs.log.js b/plugins/c9.vfs.client/vfs.log.js index 3d3c453a..5ab2d214 100644 --- a/plugins/c9.vfs.client/vfs.log.js +++ b/plugins/c9.vfs.client/vfs.log.js @@ -20,6 +20,8 @@ define(function (require, exports, module) { if (loaded) return false; loaded = true; + if (c9.readonly) return false; + ext.loadRemotePlugin("log", { code: require("text!./log-service.js"), redefine: true diff --git a/plugins/c9.vfs.client/vfs.ping.js b/plugins/c9.vfs.client/vfs.ping.js index fcebcf6e..4e02ade7 100644 --- a/plugins/c9.vfs.client/vfs.ping.js +++ b/plugins/c9.vfs.client/vfs.ping.js @@ -1,7 +1,7 @@ define(function(require, exports, module) { "use strict"; - main.consumes = ["Plugin", "ext", "c9", "vfs", "metrics"]; + main.consumes = ["Plugin", "ext", "c9", "vfs"]; main.provides = ["vfs.ping"]; return main; @@ -9,7 +9,6 @@ define(function(require, exports, module) { var Plugin = imports.Plugin; var c9 = imports.c9; var ext = imports.ext; - var metrics = imports.metrics; /***** Initialization *****/ @@ -17,15 +16,18 @@ define(function(require, exports, module) { var api; var loaded = false; - function load(){ - if (loaded) return; + function load(oldVfs) { + if (loaded && !oldVfs) return; loaded = true; - + ext.loadRemotePlugin("ping", { - code: require("text!./ping-service.js"), - redefine: true + file: oldVfs ? undefined : "c9.vfs.client/ping-service.js", + code: oldVfs ? require("text!./ping-service.js") : undefined }, function(err, remote) { - if (err) + if (!remote && !oldVfs) + return load(true); + + if (!remote) return console.error(err); api = remote; diff --git a/plugins/c9.vfs.server/vfs.connect.standalone.js b/plugins/c9.vfs.server/vfs.connect.standalone.js index 82807063..51096d8a 100644 --- a/plugins/c9.vfs.server/vfs.connect.standalone.js +++ b/plugins/c9.vfs.server/vfs.connect.standalone.js @@ -56,7 +56,6 @@ define(function(require, exports, module) { projectDir: vfsOptions.projectDir, extendDirectory: options.extendDirectory, extendOptions: projectOptions.extendOptions, - extendToken: "not_needed", collab: options.collab, vfsOptions: vfsOptions, public: true diff --git a/plugins/c9.vfs.server/vfs.js b/plugins/c9.vfs.server/vfs.js index 8a6107cf..8cf16b1e 100644 --- a/plugins/c9.vfs.server/vfs.js +++ b/plugins/c9.vfs.server/vfs.js @@ -24,7 +24,6 @@ function Vfs(vfs, master, options) { this.public = options.public || false; this.vfsOptions = options.vfsOptions || {}; this.pid = this.vfsOptions.pid; - var extendToken = options.extendToken; this.homeDir = options.homeDir; this.workspaceDir = options.projectDir; @@ -36,14 +35,12 @@ function Vfs(vfs, master, options) { blocked: this.readonly, extendDirectory: options.extendDirectory, extendOptions: options.extendOptions, - extendToken: extendToken }); this.vfsWorkspace = wrapVfs(vfs, { root: this.workspaceDir, readonly: this.readonly, extendDirectory: options.extendDirectory, extendOptions: options.extendOptions, - extendToken: extendToken }); var vfsProxy = proxyVfs(Object.keys(this.vfsHome), this.vfsHome, this.vfsWorkspace); diff --git a/plugins/c9.vfs.server/vfs_wrapper.js b/plugins/c9.vfs.server/vfs_wrapper.js index 8fe1192a..1b4182c3 100644 --- a/plugins/c9.vfs.server/vfs_wrapper.js +++ b/plugins/c9.vfs.server/vfs_wrapper.js @@ -8,7 +8,6 @@ module.exports = function(vfs, options) { var methods = options.methods || Object.keys(vfs); var readonly = "readonly" in options ? options.readonly : false; var blocked = !!options.blocked; - var extendToken = options.extendToken; var roMethods = { resolve: 1, @@ -74,18 +73,26 @@ module.exports = function(vfs, options) { options[key] = extendOptions[key]; } - if (options.code || options.stream) { - if (readonly && (!extendToken || extendToken !== options.extendToken)) - return callback(new error.Forbidden("VFS extend: " + name + " with options 'stream' or 'code' not authorized in read only mode")); - else - return vfs.extend(name, options, callback); + if (readonly) { + var whitelist = { + "c9.ide.collab/server/collab-server.js": true, + "c9.ide.pubsub/pubsub-service.js": true, + "c9.vfs.client/ping-service.js": true, + }; + if (!options.file || !whitelist[options.file]) + return callback(new error.Forbidden("VFS extend: " + name + " is not authorized in read only mode")); } - - if (!options.file) - return callback(new error.Forbidden("Option 'file' is missing")); - - if (typeof options.file != "string") - return callback(new error.Forbidden("Invalid option 'file'")); + + // localfs extend checks for file, then code, then stream + if (!options.file) { + if (options.code || options.stream) + return vfs.extend(name, options, callback); + + return callback(new error.Forbidden("Option 'file' is missing")); + } + + if (typeof options.file != "string") + return callback(new error.Forbidden("Invalid option 'file'")); if (extendDirectory) { var file = options.file = path.normalize(path.join(extendDirectory, options.file)); diff --git a/plugins/c9.vfs.standalone/standalone.js b/plugins/c9.vfs.standalone/standalone.js index 7470c8ab..8da836c9 100644 --- a/plugins/c9.vfs.standalone/standalone.js +++ b/plugins/c9.vfs.standalone/standalone.js @@ -255,7 +255,7 @@ function plugin(options, imports, register) { }; api.updatConfig = api.updatConfig || function(opts, params) { var id = params.token; - opts.accessToken = opts.extendToken = id || "token"; + opts.accessToken = id || "token"; var user = opts.extendOptions.user; user.id = id || -1; user.name = id ? "user" + id : "johndoe"; From 30a23edfc1e398c2a2e7c2abe10804fddb0cb777 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 17:51:46 +0200 Subject: [PATCH 030/104] c9-auto-bump 3.1.2337 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2ccd621d..098cfb39 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2336", + "version": "3.1.2337", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 4153f6e10c7ebaa61e50656795f25c54fa6e9db5 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 17:52:07 +0200 Subject: [PATCH 031/104] c9-auto-bump 3.1.2338 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f4772a37..9b79e198 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2337", + "version": "3.1.2338", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 14104470c4b4bee0a4a7cf83d1d76e66fdae1289 Mon Sep 17 00:00:00 2001 From: Tim Robinson Date: Mon, 25 Apr 2016 12:35:05 -0400 Subject: [PATCH 032/104] Remove preview ratelimiter Looks like this causing a memory leak. Going to rate limit on a haproxy level now. --- plugins/c9.preview/preview.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/c9.preview/preview.js b/plugins/c9.preview/preview.js index bde0ac02..d454679a 100644 --- a/plugins/c9.preview/preview.js +++ b/plugins/c9.preview/preview.js @@ -53,7 +53,6 @@ define(function(require, exports, module) { requestTimeout(15*60*1000), require("./lib/middleware/sanitize-path-param"), require("./lib/middleware/block-dot-files"), - ratelimit("username", 20 * 1000, 1000), handler.getProjectSession(), handler.getRole(db), handler.getProxyUrl(function() { @@ -86,4 +85,4 @@ define(function(require, exports, module) { register(); } -}); \ No newline at end of file +}); From 594e36f26235078f8b61ac8413de62e4bf668924 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 18:35:58 +0200 Subject: [PATCH 033/104] c9-auto-bump 3.1.2339 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9b79e198..061db593 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2338", + "version": "3.1.2339", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 1f707403d6a3b7781f6762965632b5759d18916c Mon Sep 17 00:00:00 2001 From: Nikolai Onken Date: Mon, 25 Apr 2016 19:54:42 +0200 Subject: [PATCH 034/104] Revert "Revert "Revert "Vfs fix extend""" --- configs/client-default.js | 5 ++++ package.json | 10 +++---- plugins/c9.ide.plugins/loader.js | 4 +-- plugins/c9.ide.ui/codebox.js | 3 +- plugins/c9.vfs.client/vfs.log.js | 2 -- plugins/c9.vfs.client/vfs.ping.js | 18 +++++------- .../c9.vfs.server/vfs.connect.standalone.js | 1 + plugins/c9.vfs.server/vfs.js | 3 ++ plugins/c9.vfs.server/vfs_wrapper.js | 29 +++++++------------ plugins/c9.vfs.standalone/standalone.js | 2 +- 10 files changed, 37 insertions(+), 40 deletions(-) diff --git a/configs/client-default.js b/configs/client-default.js index f532d9e7..50593d86 100644 --- a/configs/client-default.js +++ b/configs/client-default.js @@ -35,6 +35,8 @@ module.exports = function(options) { var devel = options.standalone && !options.local || options.mode === "devel" || options.mode == "onlinedev" || options.dev; var localExtendFiles = options.localExtend || options.standalone; + // allow extend code access only to C9-deveoped plugins + var extendToken = options.extendToken || "token"; var plugins = [ // C9 @@ -410,6 +412,7 @@ module.exports = function(options) { "plugins/c9.ide.language.go/go", { packagePath: "plugins/c9.ide.language.jsonalyzer/jsonalyzer", + extendToken: extendToken, workspaceDir: workspaceDir, homeDir: options.home, bashBin: options.bashBin, @@ -784,6 +787,7 @@ module.exports = function(options) { }, { packagePath: "plugins/c9.ide.pubsub/pubsub-client", + extendToken: extendToken }, { packagePath: "plugins/c9.ide.collab/notifications/bubble", @@ -864,6 +868,7 @@ module.exports = function(options) { plugins.push( { packagePath: "plugins/c9.ide.collab/connect", + extendToken: extendToken, enable: collab, debug: debug, localServerFile: localExtendFiles, diff --git a/package.json b/package.json index 061db593..e2e7a4b9 100644 --- a/package.json +++ b/package.json @@ -65,9 +65,9 @@ "c9.ide.language.javascript.eslint": "#4de5457db1", "c9.ide.language.javascript.tern": "#b55d0069bb", "c9.ide.language.javascript.infer": "#18acb93a3a", - "c9.ide.language.jsonalyzer": "#ccc7bfdd92", + "c9.ide.language.jsonalyzer": "#cbad4ae0ba", "c9.ide.language.codeintel": "#253ae15f5e", - "c9.ide.collab": "#60db5fb28d", + "c9.ide.collab": "#ea6e93717a", "c9.ide.local": "#10eb45842a", "c9.ide.find": "#e33fbaed2f", "c9.ide.find.infiles": "#c0a13737ef", @@ -90,17 +90,17 @@ "c9.ide.help.support": "#932fbb3743", "c9.ide.imgeditor": "#612e75ef4f", "c9.ide.immediate": "#19758abe08", - "c9.ide.installer": "#a397e56fcc", + "c9.ide.installer": "#73dc437ff1", "c9.ide.language.python": "#330b80e3b2", "c9.ide.language.go": "#6ce1c7a7ef", "c9.ide.mount": "#4c39359b87", - "c9.ide.navigate": "#ce2d16f517", + "c9.ide.navigate": "#6ab1441c80", "c9.ide.newresource": "#981a408a7b", "c9.ide.openfiles": "#2ae85a9e33", "c9.ide.preview": "#5f5fff0185", "c9.ide.preview.browser": "#897177be7f", "c9.ide.preview.markdown": "#c3174d86e0", - "c9.ide.pubsub": "#a6403d76bb", + "c9.ide.pubsub": "#0b5e060dc6", "c9.ide.readonly": "#a4605830c4", "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", diff --git a/plugins/c9.ide.plugins/loader.js b/plugins/c9.ide.plugins/loader.js index e025d3b9..7ce2afb4 100644 --- a/plugins/c9.ide.plugins/loader.js +++ b/plugins/c9.ide.plugins/loader.js @@ -92,9 +92,9 @@ define(function(require, exports, module) { delete extraPackages[config.packagePath]; } }); - Object.keys(extraPackages).forEach(function(packagePath) { + Object.keys(extraPackages).forEach(function(extraConfig) { console.warn("[c9.ide.loader] Package " - + packagePath + " should be installed, according " + + extraConfig.packagePath + " should be installed, according " + "to the database, but was not found on the filesystem. " + "Try reinstalling it."); }); diff --git a/plugins/c9.ide.ui/codebox.js b/plugins/c9.ide.ui/codebox.js index 18eca48b..504a0aab 100644 --- a/plugins/c9.ide.ui/codebox.js +++ b/plugins/c9.ide.ui/codebox.js @@ -91,13 +91,11 @@ apf.codebox = function(struct, tagName) { var checkInitial = function() { var value = ace.getValue(); if (value && ace.renderer.initialMessageNode) { - ace.renderer.off("afterRender", checkInitial); dom.removeCssClass(ace.container, "ace_initialMsg"); ace.renderer.scroller.removeChild(ace.renderer.initialMessageNode); ace.renderer.initialMessageNode = null; } else if (!value && !ace.renderer.initialMessageNode) { - ace.renderer.on("afterRender", checkInitial); dom.addCssClass(ace.container, "ace_initialMsg"); var el = document.createElement("div"); el.className = "tb_textboxInitialMsg"; @@ -105,6 +103,7 @@ apf.codebox = function(struct, tagName) { ace.renderer.initialMessageNode = el; ace.renderer.scroller.appendChild(ace.renderer.initialMessageNode); } + }; ace.on("input", checkInitial); diff --git a/plugins/c9.vfs.client/vfs.log.js b/plugins/c9.vfs.client/vfs.log.js index 5ab2d214..3d3c453a 100644 --- a/plugins/c9.vfs.client/vfs.log.js +++ b/plugins/c9.vfs.client/vfs.log.js @@ -20,8 +20,6 @@ define(function (require, exports, module) { if (loaded) return false; loaded = true; - if (c9.readonly) return false; - ext.loadRemotePlugin("log", { code: require("text!./log-service.js"), redefine: true diff --git a/plugins/c9.vfs.client/vfs.ping.js b/plugins/c9.vfs.client/vfs.ping.js index 4e02ade7..fcebcf6e 100644 --- a/plugins/c9.vfs.client/vfs.ping.js +++ b/plugins/c9.vfs.client/vfs.ping.js @@ -1,7 +1,7 @@ define(function(require, exports, module) { "use strict"; - main.consumes = ["Plugin", "ext", "c9", "vfs"]; + main.consumes = ["Plugin", "ext", "c9", "vfs", "metrics"]; main.provides = ["vfs.ping"]; return main; @@ -9,6 +9,7 @@ define(function(require, exports, module) { var Plugin = imports.Plugin; var c9 = imports.c9; var ext = imports.ext; + var metrics = imports.metrics; /***** Initialization *****/ @@ -16,18 +17,15 @@ define(function(require, exports, module) { var api; var loaded = false; - function load(oldVfs) { - if (loaded && !oldVfs) return; + function load(){ + if (loaded) return; loaded = true; - + ext.loadRemotePlugin("ping", { - file: oldVfs ? undefined : "c9.vfs.client/ping-service.js", - code: oldVfs ? require("text!./ping-service.js") : undefined + code: require("text!./ping-service.js"), + redefine: true }, function(err, remote) { - if (!remote && !oldVfs) - return load(true); - - if (!remote) + if (err) return console.error(err); api = remote; diff --git a/plugins/c9.vfs.server/vfs.connect.standalone.js b/plugins/c9.vfs.server/vfs.connect.standalone.js index 51096d8a..82807063 100644 --- a/plugins/c9.vfs.server/vfs.connect.standalone.js +++ b/plugins/c9.vfs.server/vfs.connect.standalone.js @@ -56,6 +56,7 @@ define(function(require, exports, module) { projectDir: vfsOptions.projectDir, extendDirectory: options.extendDirectory, extendOptions: projectOptions.extendOptions, + extendToken: "not_needed", collab: options.collab, vfsOptions: vfsOptions, public: true diff --git a/plugins/c9.vfs.server/vfs.js b/plugins/c9.vfs.server/vfs.js index 8cf16b1e..8a6107cf 100644 --- a/plugins/c9.vfs.server/vfs.js +++ b/plugins/c9.vfs.server/vfs.js @@ -24,6 +24,7 @@ function Vfs(vfs, master, options) { this.public = options.public || false; this.vfsOptions = options.vfsOptions || {}; this.pid = this.vfsOptions.pid; + var extendToken = options.extendToken; this.homeDir = options.homeDir; this.workspaceDir = options.projectDir; @@ -35,12 +36,14 @@ function Vfs(vfs, master, options) { blocked: this.readonly, extendDirectory: options.extendDirectory, extendOptions: options.extendOptions, + extendToken: extendToken }); this.vfsWorkspace = wrapVfs(vfs, { root: this.workspaceDir, readonly: this.readonly, extendDirectory: options.extendDirectory, extendOptions: options.extendOptions, + extendToken: extendToken }); var vfsProxy = proxyVfs(Object.keys(this.vfsHome), this.vfsHome, this.vfsWorkspace); diff --git a/plugins/c9.vfs.server/vfs_wrapper.js b/plugins/c9.vfs.server/vfs_wrapper.js index 1b4182c3..8fe1192a 100644 --- a/plugins/c9.vfs.server/vfs_wrapper.js +++ b/plugins/c9.vfs.server/vfs_wrapper.js @@ -8,6 +8,7 @@ module.exports = function(vfs, options) { var methods = options.methods || Object.keys(vfs); var readonly = "readonly" in options ? options.readonly : false; var blocked = !!options.blocked; + var extendToken = options.extendToken; var roMethods = { resolve: 1, @@ -73,26 +74,18 @@ module.exports = function(vfs, options) { options[key] = extendOptions[key]; } - if (readonly) { - var whitelist = { - "c9.ide.collab/server/collab-server.js": true, - "c9.ide.pubsub/pubsub-service.js": true, - "c9.vfs.client/ping-service.js": true, - }; - if (!options.file || !whitelist[options.file]) - return callback(new error.Forbidden("VFS extend: " + name + " is not authorized in read only mode")); - } - - // localfs extend checks for file, then code, then stream - if (!options.file) { - if (options.code || options.stream) + if (options.code || options.stream) { + if (readonly && (!extendToken || extendToken !== options.extendToken)) + return callback(new error.Forbidden("VFS extend: " + name + " with options 'stream' or 'code' not authorized in read only mode")); + else return vfs.extend(name, options, callback); - - return callback(new error.Forbidden("Option 'file' is missing")); } - - if (typeof options.file != "string") - return callback(new error.Forbidden("Invalid option 'file'")); + + if (!options.file) + return callback(new error.Forbidden("Option 'file' is missing")); + + if (typeof options.file != "string") + return callback(new error.Forbidden("Invalid option 'file'")); if (extendDirectory) { var file = options.file = path.normalize(path.join(extendDirectory, options.file)); diff --git a/plugins/c9.vfs.standalone/standalone.js b/plugins/c9.vfs.standalone/standalone.js index 8da836c9..7470c8ab 100644 --- a/plugins/c9.vfs.standalone/standalone.js +++ b/plugins/c9.vfs.standalone/standalone.js @@ -255,7 +255,7 @@ function plugin(options, imports, register) { }; api.updatConfig = api.updatConfig || function(opts, params) { var id = params.token; - opts.accessToken = id || "token"; + opts.accessToken = opts.extendToken = id || "token"; var user = opts.extendOptions.user; user.id = id || -1; user.name = id ? "user" + id : "johndoe"; From d06198fe0ff4d7b28ff04ed4986e4cee5c6f382b Mon Sep 17 00:00:00 2001 From: Tim Robinson Date: Mon, 25 Apr 2016 13:58:39 -0400 Subject: [PATCH 035/104] Revert "Revert "Revert "Revert "Vfs fix extend"""" --- configs/client-default.js | 5 --- package.json | 10 +++--- plugins/c9.ide.plugins/loader.js | 4 +-- plugins/c9.ide.ui/codebox.js | 3 +- plugins/c9.vfs.client/vfs.log.js | 2 ++ plugins/c9.vfs.client/vfs.ping.js | 18 ++++++----- .../c9.vfs.server/vfs.connect.standalone.js | 1 - plugins/c9.vfs.server/vfs.js | 3 -- plugins/c9.vfs.server/vfs_wrapper.js | 31 ++++++++++++------- plugins/c9.vfs.standalone/standalone.js | 2 +- 10 files changed, 41 insertions(+), 38 deletions(-) diff --git a/configs/client-default.js b/configs/client-default.js index 50593d86..f532d9e7 100644 --- a/configs/client-default.js +++ b/configs/client-default.js @@ -35,8 +35,6 @@ module.exports = function(options) { var devel = options.standalone && !options.local || options.mode === "devel" || options.mode == "onlinedev" || options.dev; var localExtendFiles = options.localExtend || options.standalone; - // allow extend code access only to C9-deveoped plugins - var extendToken = options.extendToken || "token"; var plugins = [ // C9 @@ -412,7 +410,6 @@ module.exports = function(options) { "plugins/c9.ide.language.go/go", { packagePath: "plugins/c9.ide.language.jsonalyzer/jsonalyzer", - extendToken: extendToken, workspaceDir: workspaceDir, homeDir: options.home, bashBin: options.bashBin, @@ -787,7 +784,6 @@ module.exports = function(options) { }, { packagePath: "plugins/c9.ide.pubsub/pubsub-client", - extendToken: extendToken }, { packagePath: "plugins/c9.ide.collab/notifications/bubble", @@ -868,7 +864,6 @@ module.exports = function(options) { plugins.push( { packagePath: "plugins/c9.ide.collab/connect", - extendToken: extendToken, enable: collab, debug: debug, localServerFile: localExtendFiles, diff --git a/package.json b/package.json index e2e7a4b9..4f940ff1 100644 --- a/package.json +++ b/package.json @@ -65,9 +65,9 @@ "c9.ide.language.javascript.eslint": "#4de5457db1", "c9.ide.language.javascript.tern": "#b55d0069bb", "c9.ide.language.javascript.infer": "#18acb93a3a", - "c9.ide.language.jsonalyzer": "#cbad4ae0ba", + "c9.ide.language.jsonalyzer": "#d8183d84b4", "c9.ide.language.codeintel": "#253ae15f5e", - "c9.ide.collab": "#ea6e93717a", + "c9.ide.collab": "#32403f2590", "c9.ide.local": "#10eb45842a", "c9.ide.find": "#e33fbaed2f", "c9.ide.find.infiles": "#c0a13737ef", @@ -90,17 +90,17 @@ "c9.ide.help.support": "#932fbb3743", "c9.ide.imgeditor": "#612e75ef4f", "c9.ide.immediate": "#19758abe08", - "c9.ide.installer": "#73dc437ff1", + "c9.ide.installer": "#b2e4ba0a92", "c9.ide.language.python": "#330b80e3b2", "c9.ide.language.go": "#6ce1c7a7ef", "c9.ide.mount": "#4c39359b87", - "c9.ide.navigate": "#6ab1441c80", + "c9.ide.navigate": "#5d5707058c", "c9.ide.newresource": "#981a408a7b", "c9.ide.openfiles": "#2ae85a9e33", "c9.ide.preview": "#5f5fff0185", "c9.ide.preview.browser": "#897177be7f", "c9.ide.preview.markdown": "#c3174d86e0", - "c9.ide.pubsub": "#0b5e060dc6", + "c9.ide.pubsub": "#0fba9708be", "c9.ide.readonly": "#a4605830c4", "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", diff --git a/plugins/c9.ide.plugins/loader.js b/plugins/c9.ide.plugins/loader.js index 7ce2afb4..e025d3b9 100644 --- a/plugins/c9.ide.plugins/loader.js +++ b/plugins/c9.ide.plugins/loader.js @@ -92,9 +92,9 @@ define(function(require, exports, module) { delete extraPackages[config.packagePath]; } }); - Object.keys(extraPackages).forEach(function(extraConfig) { + Object.keys(extraPackages).forEach(function(packagePath) { console.warn("[c9.ide.loader] Package " - + extraConfig.packagePath + " should be installed, according " + + packagePath + " should be installed, according " + "to the database, but was not found on the filesystem. " + "Try reinstalling it."); }); diff --git a/plugins/c9.ide.ui/codebox.js b/plugins/c9.ide.ui/codebox.js index 504a0aab..18eca48b 100644 --- a/plugins/c9.ide.ui/codebox.js +++ b/plugins/c9.ide.ui/codebox.js @@ -91,11 +91,13 @@ apf.codebox = function(struct, tagName) { var checkInitial = function() { var value = ace.getValue(); if (value && ace.renderer.initialMessageNode) { + ace.renderer.off("afterRender", checkInitial); dom.removeCssClass(ace.container, "ace_initialMsg"); ace.renderer.scroller.removeChild(ace.renderer.initialMessageNode); ace.renderer.initialMessageNode = null; } else if (!value && !ace.renderer.initialMessageNode) { + ace.renderer.on("afterRender", checkInitial); dom.addCssClass(ace.container, "ace_initialMsg"); var el = document.createElement("div"); el.className = "tb_textboxInitialMsg"; @@ -103,7 +105,6 @@ apf.codebox = function(struct, tagName) { ace.renderer.initialMessageNode = el; ace.renderer.scroller.appendChild(ace.renderer.initialMessageNode); } - }; ace.on("input", checkInitial); diff --git a/plugins/c9.vfs.client/vfs.log.js b/plugins/c9.vfs.client/vfs.log.js index 3d3c453a..5ab2d214 100644 --- a/plugins/c9.vfs.client/vfs.log.js +++ b/plugins/c9.vfs.client/vfs.log.js @@ -20,6 +20,8 @@ define(function (require, exports, module) { if (loaded) return false; loaded = true; + if (c9.readonly) return false; + ext.loadRemotePlugin("log", { code: require("text!./log-service.js"), redefine: true diff --git a/plugins/c9.vfs.client/vfs.ping.js b/plugins/c9.vfs.client/vfs.ping.js index fcebcf6e..4e02ade7 100644 --- a/plugins/c9.vfs.client/vfs.ping.js +++ b/plugins/c9.vfs.client/vfs.ping.js @@ -1,7 +1,7 @@ define(function(require, exports, module) { "use strict"; - main.consumes = ["Plugin", "ext", "c9", "vfs", "metrics"]; + main.consumes = ["Plugin", "ext", "c9", "vfs"]; main.provides = ["vfs.ping"]; return main; @@ -9,7 +9,6 @@ define(function(require, exports, module) { var Plugin = imports.Plugin; var c9 = imports.c9; var ext = imports.ext; - var metrics = imports.metrics; /***** Initialization *****/ @@ -17,15 +16,18 @@ define(function(require, exports, module) { var api; var loaded = false; - function load(){ - if (loaded) return; + function load(oldVfs) { + if (loaded && !oldVfs) return; loaded = true; - + ext.loadRemotePlugin("ping", { - code: require("text!./ping-service.js"), - redefine: true + file: oldVfs ? undefined : "c9.vfs.client/ping-service.js", + code: oldVfs ? require("text!./ping-service.js") : undefined }, function(err, remote) { - if (err) + if (!remote && !oldVfs) + return load(true); + + if (!remote) return console.error(err); api = remote; diff --git a/plugins/c9.vfs.server/vfs.connect.standalone.js b/plugins/c9.vfs.server/vfs.connect.standalone.js index 82807063..51096d8a 100644 --- a/plugins/c9.vfs.server/vfs.connect.standalone.js +++ b/plugins/c9.vfs.server/vfs.connect.standalone.js @@ -56,7 +56,6 @@ define(function(require, exports, module) { projectDir: vfsOptions.projectDir, extendDirectory: options.extendDirectory, extendOptions: projectOptions.extendOptions, - extendToken: "not_needed", collab: options.collab, vfsOptions: vfsOptions, public: true diff --git a/plugins/c9.vfs.server/vfs.js b/plugins/c9.vfs.server/vfs.js index 8a6107cf..8cf16b1e 100644 --- a/plugins/c9.vfs.server/vfs.js +++ b/plugins/c9.vfs.server/vfs.js @@ -24,7 +24,6 @@ function Vfs(vfs, master, options) { this.public = options.public || false; this.vfsOptions = options.vfsOptions || {}; this.pid = this.vfsOptions.pid; - var extendToken = options.extendToken; this.homeDir = options.homeDir; this.workspaceDir = options.projectDir; @@ -36,14 +35,12 @@ function Vfs(vfs, master, options) { blocked: this.readonly, extendDirectory: options.extendDirectory, extendOptions: options.extendOptions, - extendToken: extendToken }); this.vfsWorkspace = wrapVfs(vfs, { root: this.workspaceDir, readonly: this.readonly, extendDirectory: options.extendDirectory, extendOptions: options.extendOptions, - extendToken: extendToken }); var vfsProxy = proxyVfs(Object.keys(this.vfsHome), this.vfsHome, this.vfsWorkspace); diff --git a/plugins/c9.vfs.server/vfs_wrapper.js b/plugins/c9.vfs.server/vfs_wrapper.js index 8fe1192a..1b4182c3 100644 --- a/plugins/c9.vfs.server/vfs_wrapper.js +++ b/plugins/c9.vfs.server/vfs_wrapper.js @@ -8,7 +8,6 @@ module.exports = function(vfs, options) { var methods = options.methods || Object.keys(vfs); var readonly = "readonly" in options ? options.readonly : false; var blocked = !!options.blocked; - var extendToken = options.extendToken; var roMethods = { resolve: 1, @@ -74,18 +73,26 @@ module.exports = function(vfs, options) { options[key] = extendOptions[key]; } - if (options.code || options.stream) { - if (readonly && (!extendToken || extendToken !== options.extendToken)) - return callback(new error.Forbidden("VFS extend: " + name + " with options 'stream' or 'code' not authorized in read only mode")); - else - return vfs.extend(name, options, callback); + if (readonly) { + var whitelist = { + "c9.ide.collab/server/collab-server.js": true, + "c9.ide.pubsub/pubsub-service.js": true, + "c9.vfs.client/ping-service.js": true, + }; + if (!options.file || !whitelist[options.file]) + return callback(new error.Forbidden("VFS extend: " + name + " is not authorized in read only mode")); } - - if (!options.file) - return callback(new error.Forbidden("Option 'file' is missing")); - - if (typeof options.file != "string") - return callback(new error.Forbidden("Invalid option 'file'")); + + // localfs extend checks for file, then code, then stream + if (!options.file) { + if (options.code || options.stream) + return vfs.extend(name, options, callback); + + return callback(new error.Forbidden("Option 'file' is missing")); + } + + if (typeof options.file != "string") + return callback(new error.Forbidden("Invalid option 'file'")); if (extendDirectory) { var file = options.file = path.normalize(path.join(extendDirectory, options.file)); diff --git a/plugins/c9.vfs.standalone/standalone.js b/plugins/c9.vfs.standalone/standalone.js index 7470c8ab..8da836c9 100644 --- a/plugins/c9.vfs.standalone/standalone.js +++ b/plugins/c9.vfs.standalone/standalone.js @@ -255,7 +255,7 @@ function plugin(options, imports, register) { }; api.updatConfig = api.updatConfig || function(opts, params) { var id = params.token; - opts.accessToken = opts.extendToken = id || "token"; + opts.accessToken = id || "token"; var user = opts.extendOptions.user; user.id = id || -1; user.name = id ? "user" + id : "johndoe"; From bf7a388db2490d18df1a14c9f2ed3c2e629c6766 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 19:58:45 +0200 Subject: [PATCH 036/104] c9-auto-bump 3.1.2340 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e2e7a4b9..096e8385 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2339", + "version": "3.1.2340", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From fc15e36a150f6a7573b98085af0d0a30e8a8c6aa Mon Sep 17 00:00:00 2001 From: nightwing Date: Mon, 25 Apr 2016 22:47:32 +0400 Subject: [PATCH 037/104] fix pubsub connection with old vfs --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4f940ff1..f7c209de 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "c9.ide.preview": "#5f5fff0185", "c9.ide.preview.browser": "#897177be7f", "c9.ide.preview.markdown": "#c3174d86e0", - "c9.ide.pubsub": "#0fba9708be", + "c9.ide.pubsub": "#99b7289040", "c9.ide.readonly": "#a4605830c4", "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", From 987fce4acf2c54afc0116ae8b9d819baedf570d9 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 22:11:50 +0200 Subject: [PATCH 038/104] c9-auto-bump 3.1.2341 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 096e8385..0bbf6fc2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2340", + "version": "3.1.2341", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 67c113afefc409ebf72835eb25d8e98a89eeb090 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 22:28:07 +0200 Subject: [PATCH 039/104] c9-auto-bump 3.1.2342 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 08d71133..a4ffa5a9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2341", + "version": "3.1.2342", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 0a570b4f2ae58f1dab1c1d4faec948939a3751d8 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 23:33:44 +0200 Subject: [PATCH 040/104] c9-auto-bump 3.1.2343 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a4ffa5a9..f436a579 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2342", + "version": "3.1.2343", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From ac63dd89ec4de86229f405b0f7e95cc9f91e7865 Mon Sep 17 00:00:00 2001 From: nightwing Date: Mon, 25 Apr 2016 21:37:14 +0000 Subject: [PATCH 041/104] fix another case of fscache breaking mkdirp --- plugins/c9.fs/fs.cache.xml.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/c9.fs/fs.cache.xml.js b/plugins/c9.fs/fs.cache.xml.js index 9f3aa3d1..32cf2ca1 100644 --- a/plugins/c9.fs/fs.cache.xml.js +++ b/plugins/c9.fs/fs.cache.xml.js @@ -369,10 +369,10 @@ define(function(require, exports, module) { createNode(dir, {mime: "folder"}); }); - if (!dirsToMake[0]) + var node = dirsToMake[0] && findNode(dirsToMake[0]); + if (!node) return; - var node = findNode(dirsToMake[0]); e.undo = function(){ dirsToMake.forEach(function(dir) { var node = findNode(dir); From 3122059b608475de3aa1b8ee48ccb0563184db0c Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 23:44:55 +0200 Subject: [PATCH 042/104] c9-auto-bump 3.1.2344 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f436a579..33f5e956 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2343", + "version": "3.1.2344", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From f34c680e44c8638715ea20290cdca2bd592aa413 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 25 Apr 2016 23:47:19 +0200 Subject: [PATCH 043/104] c9-auto-bump 3.1.2345 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 33f5e956..a3389669 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2344", + "version": "3.1.2345", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 92c5d5557ba4abd4473e53641d9d71c55ba12355 Mon Sep 17 00:00:00 2001 From: c9bot Date: Tue, 26 Apr 2016 00:07:21 +0200 Subject: [PATCH 044/104] c9-auto-bump 3.1.2346 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a3389669..8932030d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2345", + "version": "3.1.2346", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 957d92bdab8296124a0bdeac0ca77566e6acef91 Mon Sep 17 00:00:00 2001 From: Chris Brown Date: Fri, 22 Apr 2016 16:19:58 +0100 Subject: [PATCH 045/104] Added an option for collaborator menu items to show the user's full name instead of their user id --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8932030d..d452cd84 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "c9.ide.language.javascript.infer": "#18acb93a3a", "c9.ide.language.jsonalyzer": "#d8183d84b4", "c9.ide.language.codeintel": "#253ae15f5e", - "c9.ide.collab": "#32403f2590", + "c9.ide.collab": "#e9b3306fa7", "c9.ide.local": "#10eb45842a", "c9.ide.find": "#e33fbaed2f", "c9.ide.find.infiles": "#c0a13737ef", From 8b71dafee7a60d60f21f00811a2d265d0006bc90 Mon Sep 17 00:00:00 2001 From: Chris Brown Date: Mon, 25 Apr 2016 10:59:21 +0100 Subject: [PATCH 046/104] When showing debugger values in tooltips, if the type is unknown, check whether it is likely to be a primitive or an object based on whether or not it has properties --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d452cd84..d3fe0d4c 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "c9.ide.format": "#5ec97fb083", "c9.ide.help.support": "#932fbb3743", "c9.ide.imgeditor": "#612e75ef4f", - "c9.ide.immediate": "#19758abe08", + "c9.ide.immediate": "#0e0c18066c", "c9.ide.installer": "#b2e4ba0a92", "c9.ide.language.python": "#330b80e3b2", "c9.ide.language.go": "#6ce1c7a7ef", From da6d7348fef185185104ecb456806fcc008deab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gerbore?= Date: Thu, 31 Mar 2016 15:33:36 +0000 Subject: [PATCH 047/104] cd into /tmp/codeintel before running tar --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d3fe0d4c..9d1ca564 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "c9.ide.language.javascript.tern": "#b55d0069bb", "c9.ide.language.javascript.infer": "#18acb93a3a", "c9.ide.language.jsonalyzer": "#d8183d84b4", - "c9.ide.language.codeintel": "#253ae15f5e", + "c9.ide.language.codeintel": "#e92ace1a56", "c9.ide.collab": "#e9b3306fa7", "c9.ide.local": "#10eb45842a", "c9.ide.find": "#e33fbaed2f", From 76e3a90c8a7a5d9812913881cf1a77127c643432 Mon Sep 17 00:00:00 2001 From: allanderek Date: Fri, 1 Apr 2016 14:16:46 +0100 Subject: [PATCH 048/104] Update README.md Removes the explanation that Python code completion is marked as experimental. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9d1ca564..07024a8a 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "c9.ide.imgeditor": "#612e75ef4f", "c9.ide.immediate": "#0e0c18066c", "c9.ide.installer": "#b2e4ba0a92", - "c9.ide.language.python": "#330b80e3b2", + "c9.ide.language.python": "#6572da93c1", "c9.ide.language.go": "#6ce1c7a7ef", "c9.ide.mount": "#4c39359b87", "c9.ide.navigate": "#5d5707058c", From adb4269013d9c6a6d54685ffc09bd1dfa2f995c0 Mon Sep 17 00:00:00 2001 From: Christophe Tafani-Dereeper Date: Fri, 8 Apr 2016 16:07:07 +0200 Subject: [PATCH 049/104] Update makelocal.sh invocation in setup-local-dev.sh --- scripts/setup-local-dev.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/setup-local-dev.sh b/scripts/setup-local-dev.sh index 76734464..f113a370 100755 --- a/scripts/setup-local-dev.sh +++ b/scripts/setup-local-dev.sh @@ -160,7 +160,8 @@ if [ "$os" == "windows" ]; then cscript //NoLogo //B //E:jscript ./shortcut.wscript.js rm -f ./shortcut.wscript.js - bash ./makelocal.sh + current_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + bash "$current_dir/makelocal.sh" fi From 61d203499af02e16fe1d9b6502489a264618f92b Mon Sep 17 00:00:00 2001 From: Nikolai Onken Date: Thu, 21 Apr 2016 12:47:57 +0000 Subject: [PATCH 050/104] Remove apidocs --- plugins/c9.vfs.standalone/standalone.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/c9.vfs.standalone/standalone.js b/plugins/c9.vfs.standalone/standalone.js index 7470c8ab..11cd5b22 100644 --- a/plugins/c9.vfs.standalone/standalone.js +++ b/plugins/c9.vfs.standalone/standalone.js @@ -221,8 +221,6 @@ function plugin(options, imports, register) { }); }); - api.get("/api.json", {name: "api"}, frontdoor.middleware.describeApi(api)); - // fake authentication api.authenticate = api.authenticate || function() { return function(req, res, next) { From 8ccb5ec236cdc87a502253ba933400acf6079371 Mon Sep 17 00:00:00 2001 From: nightwing Date: Tue, 26 Apr 2016 02:59:43 +0400 Subject: [PATCH 051/104] update fold commands in the menu --- plugins/c9.ide.ace/ace.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/c9.ide.ace/ace.js b/plugins/c9.ide.ace/ace.js index b2da9718..98172b82 100644 --- a/plugins/c9.ide.ace/ace.js +++ b/plugins/c9.ide.ace/ace.js @@ -976,11 +976,12 @@ define(function(require, exports, module) { c = 0; - addEditorMenu("Edit/Code Folding/Fold", "fold"), + addEditorMenu("Edit/Code Folding/Toggle Fold", "toggleFoldWidget"), addEditorMenu("Edit/Code Folding/Unfold", "unfold"), menus.addItemByPath("Edit/Code Folding/~", new ui.divider(), c += 100, handle); - addEditorMenu("Edit/Code Folding/Fold All", "foldall"), + addEditorMenu("Edit/Code Folding/Fold Other", "foldOther"); + addEditorMenu("Edit/Code Folding/Fold All", "foldall"); addEditorMenu("Edit/Code Folding/Unfold All", "unfoldall"); c = 0; From c0264c5fcf242c1610d4e4dbc9cd520373cc2be8 Mon Sep 17 00:00:00 2001 From: nightwing Date: Tue, 26 Apr 2016 03:04:04 +0400 Subject: [PATCH 052/104] add LICENSE-COMMERCIAL-USE to sdk config --- LICENSE-COMMERCIAL-USE | 564 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 564 insertions(+) create mode 100644 LICENSE-COMMERCIAL-USE diff --git a/LICENSE-COMMERCIAL-USE b/LICENSE-COMMERCIAL-USE new file mode 100644 index 00000000..e6f960c4 --- /dev/null +++ b/LICENSE-COMMERCIAL-USE @@ -0,0 +1,564 @@ +CLOUD9 ONPREM LICENSE AGREEMENT + + +For parties who have entered a separate commercial agreement with Cloud9 to use +the Cloud9 SDK for commercial purposes, the following license shall apply. + + +Congratulations! You’re on your way to a better coding experience. +Cloud9 IDE, Inc.'s ("Cloud9", "we", or "us") Cloud9 OnPrem software helps you +build software fGaster and more efficiently by enabling distributed collaborative +development for teams. Before you download and/or use our Cloud9 OnPrem software, +we need you to agree to a special set of terms. Welcome to the Software License +Agreement (the "Agreement"). + +PLEASE READ THIS AGREEMENT CAREFULLY BEFORE INSTALLING OR USING THE SOFTWARE. +THESE TERMS AND CONDITIONS GOVERN YOUR USE OF THE SOFTWARE (AS DEFINED BELOW), +UNLESS WE HAVE EXECUTED A SEPARATE WRITTEN AGREEMENT WITH YOU FOR THAT PURPOSE. +WE'RE ONLY WILLING TO LICENSE THE SOFTWARE TO YOU IF YOU ACCEPT ALL THE TERMS +AND CONDITIONS OF THIS AGREEMENT. BY INSTALLING OR USING THE SOFTWARE OR BY +CLICKING "I ACCEPT" BELOW, YOU ARE CONFIRMING THAT YOU UNDERSTAND THIS +AGREEMENT, AND THAT YOU ACCEPT ALL OF ITS TERMS AND CONDITIONS. IF YOU ARE +ENTERING INTO THIS AGREEMENT ON BEHALF OF A COMPANY OR OTHER LEGAL ENTITY, YOU +REPRESENT THAT YOU HAVE THE LEGAL AUTHORITY TO BIND THE ENTITY TO THIS +AGREEMENT, IN WHICH CASE "YOU" WILL MEAN THE ENTITY YOU REPRESENT. IF YOU DON'T +HAVE SUCH AUTHORITY, OR IF YOU DON'T ACCEPT ALL THE TERMS AND CONDITIONS OF THIS +AGREEMENT, THEN WE ARE UNWILLING TO LICENSE THE SOFTWARE TO YOU, AND YOU MAY NOT +DOWNLOAD, INSTALL, OR USE IT. + +1.Definitions. +Here are some definitions we use in this Agreement. If you see a capitalized +word that isn't listed here, it will be defined somewhere in the Agreement. + +The "Agreement Effective Date" is the earlier of the date that you either click +"I Accept" to the terms and conditions of this Agreement, or that you first +place an order for Software or Services. + +“Cloud9 SDK” is an Application Programming Interface defined to give users the +ability to extend the Cloud9 OnPrem software or integrate it with other systems. + +“Derivative Works” refer to any software created using any of the Cloud9 OnPrem +source code. + +"Documentation" means any manuals, documentation and other supporting materials +related to the Software that we generally provide to our customers. +Documentation is considered part of the Software. + +"Fees" means both: (i) the fees you're required to pay us to use the Software +during the applicable License Term, as such fees are reflected on each +applicable Order Form; and (ii) the fees you're required to pay us for any +Services you engage us to perform, as such fees are reflected on each applicable +SOW. + +"License Key" means a data file utilized by the Software's access control +mechanism that allows you to use the Software during the License Term. + +"License Term" means one (1) year from the applicable Order Effective Date. +The "Order Form" is a written or electronic form that we'll give you to order +Software (or that we'll use to order Software on your behalf, once we've gotten +your authorization). Upon execution by the parties (or, in the case of an +electronic orders, confirmation and placement of the order), each Order Form +will be subject to the terms and conditions of this Agreement. +The "Order Effective Date" is the effective date of each Order Form. + +“Plugins” refer to any software created to interact with the Cloud9 OnPrem +software using the Cloud9 SDK. + +"Seats" mean the number of User accounts for the Software that you're authorized +to create. The number of Seats is specified in the applicable Order Form. Only +one User can use a Seat at a time. Multiple Users aren't allowed to use the same +Seat. + +"Services" means training, consulting, or implementation services that we +provide to you pursuant to a mutually executed Statement of Work.  Services do +not include support. + +"Software" means the object-code/obfuscated source code, actual source code or +Derivative Works version of our proprietary Cloud9 OnPrem software application. +Software includes any applicable Documentation, as well as any Updates to the +Software that we provide you or that you can access under this Agreement. +"Statement of Work" or "SOW" means a mutually executed statement of work +detailing the Services we'll perform for you, their price, and your related +obligations (if any). + +An "Update" is a Software release that we make generally available to our +customers, along with any corresponding changes to Documentation. An Update may +be an error correction or bug fix, generally indicated by a change in the digit +to the right of the second decimal point (e.g., a change from version x.x.x to +x.x.y); or it may be an enhancement, new feature, or new functionality, +generally indicated by a change in the digit to the right of the first decimal +point (e.g., x.x.x to x.y.x) or to the left of the first decimal point +(e.g., x.x.x to y.x.x). + +A "User" is a single person or machine account that initiates the execution of +the Software and/or interacts with or directs the Software in the performance of +its functions. The number of Users shouldn't exceed the number of Seats you've +licensed from us. + +2.License Grant. + +Subject to your compliance with the terms of this Agreement (including, among +other things, paying the Fees you owe us), we hereby grant you a non-exclusive, +non-transferable, worldwide, royalty-free, limited-term license to install, +execute, and use the Software for your internal business purposes during the +applicable License Term, in accordance with the Documentation, and only for the +number of Seats that you've paid for. You can make copies of the Software for +non-production purposes only, provided that you reproduce all copyright and +other proprietary notices that are on the original copy of the Software. + +Your agents and contractors can use the Software too, so long as they're using +it on your behalf, and provided that you agree to be fully responsible for their +behavior under this Agreement. + +3.Restrictions. +We license the Software to you – we don't sell it. As between us, we own all +right, title and interest in and to the Software, and any intellectual property +rights associated with it and with our company. We reserve all rights in and to +the Software that we don't expressly grant you in this Agreement. You agree not +to, nor permit nor authorize any third party to: (i) sublicense, sell, rent, +lease, transfer, assign, or distribute the Software to third parties; (ii) host +the Software for the benefit of third parties; (iii) disclose or permit any +third party to access the Software, except as expressly permitted in Section 2, +above; (iv) hack or modify the License Key, or try to avoid or change any +license registration process we may implement; (v) modify or create derivative +works of the Software, or merge the Software with other software; (vi) +disassemble, decompile, bypass any code obfuscation, or otherwise reverse +engineer the Software or attempt to derive any of its source code, in whole or +in part, except to the extent such activities are expressly permitted by law or +applicable license notwithstanding this prohibition; (vii) modify, obscure, or +delete any proprietary rights notices included in or on the Software or +Documentation; (viii) otherwise use or copy the Software in a manner not +expressly permitted by this Agreement; or (ix) use any Software that we license +to you beyond its applicable License Term. + +4.Seats. +Remember, only one User can use a Seat at a time. Multiple Users aren't allowed +to use the same Seat, and only one human being can be associated with a +particular User account. If you want to swap out, delete, or suspend a User, you +can do that, and then assign a new User to the open Seat. If you find that you +need more Seats, that's great – we're here to help! Just submit a new request +through our website or via our sales team, and pay for the additional Seats +(a new Order Form will be generated). If and when you add additional Seats to +your subscription, you'll pay Fees for those seats at the then-current price, +prorated for the balance of the applicable License Term. When the time comes to +renew your Seats for another year-long License Term, we'll invoice you for all +of your Seats at once, at the then-current price (we reserve the right to change +our prices at any time, but the new prices won't affect you until it's time to +renew your license for another year). You agree that any orders that you make +(or that you authorize us to make on your behalf) for additional Seats during +the term of this Agreement will be governed by this Agreement. + +5.Verification. +From time to time, we may have reason to make sure that you're not using extra +Seats without paying for them. You agree to cooperate with us to achieve that +goal. To help us verify the number of Seats you're actually using, you agree to +promptly give us any usage files and reports that your instance of the Software +generates, if and when we ask for them. We might also (or instead) ask one of +your officers to certify the number of Seats that you're actually using. You +agree to provide such a certification if we ask for it. If we determine that +you're using more Seats than you've paid for, in addition to any other remedies +we might have at law or in equity, you agree to pay us the then-current Fees for +the additional Seats you're using, starting from the date you began using each +Seat. + +6.Government Users. +No technical data or computer software is developed under this Agreement. The +Software and Documentation have been developed solely with private funds, and +are considered "Commercial Computer Software" and "Commercial Computer Software +Documentation" as described in FAR 12.212, FAR 27.405-3, and DFARS 227.7202-3, +and are licensed to the to the U.S. Government end user as restricted computer +software and limited rights data. Any use, disclosure, modification, +distribution, or reproduction of the Software or Documentation by the U.S. +Government or its contractors is subject to the restrictions set forth in this +Agreement. + +7.Delivery. +Promptly after the applicable Order Effective Date, we'll make the Software and +the License Key available for you to download on a secure, password-protected +website. As Updates become available, we'll make those available for you to +download on the same website. You're responsible for maintaining the +confidentiality of all of your usernames and passwords, including the ones you +use to download the Software. Take good care of them, because you agree that +you'll be responsible for any activity that takes place using your usernames and +passwords (whether you knew about it or not). + +8.Services. +Our Services can help you get the most out of the Software. If you want +Services, let us know, and we'll work with you to prepare a SOW that describes +the date, time, location, and objectives of the Services, as well as the price. + +Each SOW will be binding once we both sign it, and you agree that any Services +we provide to you (whether pursuant to a SOW or not) will be governed +exclusively by the terms of this Agreement.  In the event of any conflict +between the terms of this Agreement and any SOW, the terms of this Agreement +will control. Provided you comply with the terms of this Agreement (including, +among other things, paying us the Fees you owe us), we'll perform the Services +described in each SOW, according to the timeframes set forth in that SOW. + +We'll control the manner and means by which the Services are performed, and we +reserve the right to determine which personnel we assign to perform Services for +you. + +Provided we remain responsible for all of their acts and omissions, we can use +third parties to help us perform the Services.  You acknowledge that we will +retain all right, title and interest in and to anything we use or develop in +connection with performing Services for you, including, among other things, +software programs, tools, specifications, ideas, concepts, inventions, +processes, techniques, and know-how.  To the extent we deliver anything to you +during the course of performing Services, we grant you a non-exclusive, +non-transferable, worldwide, royalty-free, limited-term license to use those +deliverables during the term of this Agreement, solely in conjunction with your +use of the Software. + +9.Term and Termination. + +9.1 Term. +This Agreement starts on the Agreement Effective Date and will continue in +effect for one (1) year (the "Initial Term"), at which time, so long as you +choose to renew your Software license for additional License Terms (which, to be +clear, you're under no obligation to do), this Agreement will automatically +continue in effect for additional one (1) year terms (each, a "Renewal Term") +until this Agreement is either terminated by a party or expires in accordance +with this Section 8. We'll notify you at least sixty (60) days before the end of +the Initial Term and each Renewal Term that it's time for you to renew your +Software license. If you want to renew, let us know. We'll generate a new Order +Form for you, and make a new License Key available for you to download that will +let you use the Software for another License Term. + +9.2 Termination for Convenience; +Automatic Expiration. Either of us can terminate this Agreement for our +convenience at the end of the Initial Term or any Renewal Term by providing +written notice to the other at least thirty (30) days before the end of the +Initial Term or any Renewal Term. This Agreement will automatically expire +without the requirement of notice if, at the end of the Initial Term or any +Renewal Term, you decide not to pay the Fees required to renew your Seats for an +additional License Term. + +9.3 Termination for Breach. +We can terminate this Agreement immediately upon notice to you if you breach +any part of it, and you fail to cure the breach within thirty (30) days of us +notifying you of it. That said, there are certain kinds of breaches that we take +much more seriously, and that can really damage us. We therefore reserve the +right to terminate this Agreement immediately upon written notice to you, but +without giving you a cure period, if you breach any of the terms of this +Agreement relating to our intellectual property (including your compliance with +the license grant and any license restrictions) or our Confidential Information +(defined below). + +9.4 Effect of Termination. +When this Agreement terminates or expires: (i) the License Term for any Software +in your possession will immediately end, and any outstanding SOWs will +immediately terminate; (ii) you'll no longer have the right to use the Software, +and any licenses we grant you in this Agreement will automatically cease to +exist as of the date of termination/expiration; (iii) if you owed us any money +prior to termination/expiration, you'll need to pay us all that money +immediately; (iv) you'll destroy all copies of the Software in your possession +or control, and certify in writing to us that you've done so; and (v) each of +us will promptly return to the other (or, if the other party requests it, +destroy) all Confidential Information belonging to the other.  You'll still be +able to access the Software to migrate your data for ninety (90) days after +termination or expiration of this Agreement, but you won't be allowed to use the +Software on a production basis during that time.  We encourage you to keep +copies of your data outside of the Software itself, because if the Software gets +disabled, you won't have access to the data you've stored there (and we won't be +liable to you if that happens). Sections 1, 3, 5, 6, 8, 9.2, 9.3, 9.4, 11, 12.2, +and 13-17 will survive the termination or expiration of this Agreement for any +reason. + +10.Support. + +10.1 Support Times. +Provided that you've paid us the Fees you owe us, we'll provide you with +technical support for the Software twenty-four (24) hours per day, five (5) days +per week, excluding weekends and national U.S. holidays. We currently only offer +support via email (write to us at mailto:support@c9.io) or web-based ticketing +(through https://c9.io/support). You can contact our amazing support team to +help answer your questions on installing and using the Software, identifying and +verifying the causes of suspected errors in the Software, and helping you find +workarounds for Software malfunctions. Though we'll do our best to respond to +automated support requests, we typically need more information than an automated +ticketing system can give us to solve your issue. Whenever possible, please +initiate any support requests from a person or machine that our support team can +interact with. We like the personal touch. + +10.2 Updates. +We'll make Updates available to you on the same secure website where you +downloaded the Software and the License Key. + +10.3 Exclusions. +We might not be able to correct every problem we find, but we'll use our +reasonable efforts to correct any material, reproducible errors in the Software +that you make us aware of. We might ask for your help in reproducing the error +for us. Please - don't do things with our Software that would make it harder for +us to help you. We won't be responsible for supporting you in those +circumstances, which include, among other things: (i) someone (other than us) +modifying the Software; (ii) changing your operating system or environment in a +way that adversely affects the Software or its performance; (iii) using the +Software in a manner for which it was not designed, or other than as authorized +under this Agreement; or (iv) accident, negligence, or misuse of the Software. +We're only required to support a given version of the Software for a year from +the date of its commercial release, or six months from the commercial release +of the next Update, whichever is longer. If you want support for earlier +versions of the Software, we'll try to help you if we can, but you'll need to +pay us for that help at our then-current rates. + +11.Payment. +You agree to pay the Fees to us in full, without deduction or setoff of any +kind, in U.S. Dollars (unless the Order Form says otherwise), within 30 days of +the date of the invoice we send you related to the applicable SOW or Order Form. +Amounts payable under this Agreement are nonrefundable, except as provided in +Section 12.1. If you don't pay us on time, we reserve the right, in addition to +taking any other action that we see fit, to charge you interest on past due +amounts at 1.0% per month or the highest interest rate allowed by law, whichever +is less, and to additionally charge all expenses of recovery. You are solely +responsible for all taxes, fees, duties and governmental assessments (except for +taxes based on Cloud9's net income) that are imposed or become due in connection +with the subject matter of this Agreement. + +12.Limited Warranties + +12.1 Limited Warranties. +We offer you (and only you) the following limited warranties: (i) that the +unmodified Software, at the time we make it available to you for download, will +not contain or transmit any malware, viruses, or worms (otherwise known as +computer code or other technology specifically designed to disrupt, disable, or +harm your software, hardware, computer system, or network); (ii) that any +Services we perform for you under this Agreement will be performed in a good and +workmanlike manner, by appropriately qualified personnel (you just need to let +us know about a problem within thirty (30) days of the date the Services were +performed); and (iii) that, for ninety (90) days from the date the Software is +made available for download, the unmodified Software will substantially conform +to its Documentation. We don't warrant that your use of the Software will be +uninterrupted, or that the operation of the Software will be error-free. + +These warranties won't apply if you modify the Software, or if you use the +Software in any way that isn't expressly permitted by this Agreement and the +Documentation. + +Our only obligation, and your only remedy, for any breach of these limited +warranties will be, at our option and expense, to either (i) repair the +Software; (ii) replace the Software; or (iii) terminate this Agreement with +respect to the defective Software, and refund the Fees you've paid for the +defective Software during the then-current License Term once you've returned it +to us (or destroyed it). + +12.2 Disclaimer. +THE LIMITED WARRANTIES DESCRIBED ABOVE ARE THE ONLY WARRANTIES WE MAKE WITH +RESPECT TO THE SOFTWARE, SERVICES AND OUR TECHNICAL SUPPORT. WE DON'T MAKE ANY +OTHER WARRANTIES, AND WE HEREBY SPECIFICALLY DISCLAIM ANY OTHER WARRANTIES, +WHETHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, +OR ANY WARRANTIES OR CONDITIONS ARISING OUT OF COURSE OF DEALING OR USAGE OF +TRADE. NO ADVICE OR INFORMATION, WHETHER ORAL OR WRITTEN, THAT YOU GET FROM US +OR ANYWHERE ELSE WILL CREATE ANY WARRANTY OR CONDITION NOT EXPRESSLY STATED IN +THIS AGREEMENT. + +13.LIMITATION OF LIABILITY. + +13.1 Waiver of Consequential Damages. +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL WE BE LIABLE +TO YOU OR TO ANY THIRD PARTY FOR ANY INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE, OR +CONSEQUENTIAL DAMAGES (INCLUDING FOR LOSS OF PROFITS, REVENUE, OR DATA) OR FOR +THE COST OF OBTAINING SUBSTITUTE PRODUCTS ARISING OUT OF OR IN CONNECTION WITH +THIS AGREEMENT, HOWEVER CAUSED, WHETHER SUCH LIABILITY ARISES FROM ANY CLAIM +BASED UPON CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR +OTHERWISE, AND WHETHER OR NOT WE'VE BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + +13.2 Limitation of Total Liability. +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, OUR TOTAL CUMULATIVE +LIABILITY TO YOU OR ANY THIRD PARTY UNDER THIS AGREEMENT, FROM ALL CAUSES OF +ACTION AND ALL THEORIES OF LIABILITY, WILL BE LIMITED TO AND WILL NOT EXCEED THE +FEES YOU'VE ACTUALLY PAID US DURING THE 12 MONTHS PRECEDING THE CLAIM GIVING +RISE TO SUCH LIABILITY. + +13.3 Basis of Bargain. +You understand and agree that we've set our prices and entered into this +Agreement with you in reliance upon the limitations of liability set forth in +this Agreement, which allocate risk between us and form the basis of a bargain +between the parties. + +14.Indemnification. + +14.1 Our Indemnification Obligation. +We'll defend or settle, at our option and expense, any third-party claim brought +against you to the extent that it's based on an allegation that your use or +possession of the Software as permitted under this Agreement infringes a +copyright or misappropriates a trade secret of any third party (each, a "Claim"), +and, subject to Section 13, we'll pay all damages and costs (including +reasonable legal fees) finally awarded by a court of final appeal attributable +to such a Claim, provided that you notify us in writing of any such Claim as +soon as reasonably practicable and allow us to control, and reasonably cooperate +with us in the defense of, any such Claim and related settlement negotiations. + +14.2 Exclusions. +You understand that we'll have no obligation to indemnify you for any Claim +that's based on (i) the modification of the Software, unless we were the ones +who made the modifications; (ii) your use of the Software other than as +authorized by this Agreement and the Documentation; (iii) your failure to use +updated or modified Software that we make available to you that would have +helped avoid or mitigate the Claim; (iv) your failure to stop using the Software +after receiving written notice to do so from us in order to avoid further +infringement or misappropriation; or (v) the combination, operation or use of +the Software with equipment, devices, software, systems, or data that we didn't +supply (subparts (i)-(v) may be referred to collectively as "Indemnity +Exclusions"). + +14.3 Right to Ameliorate Damages. +If your use of the Software is, or in our reasonable opinion is likely to be, +subject to a Claim under Section 14.1, we may, at our sole option and at no +charge to you (and in addition to our indemnity obligation to you in Section +14.1): (i) procure for you the right to continue using the Software; (ii) +replace or modify the Software so that it is non-infringing and substantially +equivalent in function to the original Software; or (iii) if options (i) and (ii) +above are not commercially practicable in our reasonable estimation, we can +terminate this Agreement and all licenses granted hereunder (in which event, +you will immediately stop using the Software) and refund the Fees that you paid +us for the then-current License Term. + +14.4 Sole Remedy. +THIS SECTION 14 SETS FORTH OUR SOLE AND EXCLUSIVE OBLIGATIONS, AND YOUR SOLE AND +EXCLUSIVE REMEDIES, WITH RESPECT TO CLAIMS OF INFRINGEMENT OR MISAPPROPRIATION +OF THIRD PARTY INTELLECTUAL PROPERTY RIGHTS. + +14.5 Your Indemnification Obligation. +Because we can't know what you're doing with the Software behind your firewall, +except to the extent that we're obliged to indemnify you in Section 14.1 above, +you will defend, indemnify, and hold us harmless from and against any claims +that may arise out of or that are based upon (i) your breach of this Agreement; +(ii) content that you upload to the Software; or (iii) an Indemnity Exclusion. + +15.Confidentiality. + +15.1 Definition of Confidential Information. +For the purposes of this Agreement, "Confidential Information" means any +business or technical information that either one of us discloses to the other, +in writing, orally, or by any other means, and including things like computer +programs, code, algorithms, data, know-how, formulas, processes, ideas, +inventions (whether patentable or not), schematics and other technical, +business, financial, and product development plans, names and expertise of +employees and consultants, and customer lists. For the purposes of this +Agreement, except as expressly set forth in Section 17.2 below, the source code +of our Software will be deemed to be Cloud9's Confidential Information, +regardless of whether it is marked as such. + +15.2 Restrictions on Use and Disclosure. +Neither of us will use the other party's Confidential Information, except as +permitted under this Agreement. Each of us agrees to maintain in confidence and +protect the other party's Confidential Information using at least the same +degree of care as we use for its own information of a similar nature, but in all +events at least a reasonable degree of care. Each of us agrees to take all +reasonable precautions to prevent any unauthorized disclosure of the other's +Confidential Information, including, without limitation, disclosing Confidential +Information only to its employees, independent contractors, consultants, and +legal and financial advisors (collectively, "Representatives") (i) with a need +to know such information, (ii) who are parties to appropriate agreements +sufficient to comply with this Section 15, and (iii) who are informed of the +nondisclosure obligations imposed by this Section 15. Each of us will be +responsible for all acts and omissions of our Representatives. The foregoing +obligations won't restrict either of us from disclosing Confidential Information +of the other party pursuant to the order or requirement of a court, +administrative agency, or other governmental body, provided that the party +required to make such a disclosure gives reasonable notice to the other party to +enable them to contest such order or requirement. The restrictions set forth in +this Section 15 will survive the termination or expiration of this Agreement. + +15.3 Exclusions. +The restrictions set forth in Section 15.2 will not apply with respect to any +Confidential Information that: (i) was or becomes publicly known through no +fault of the receiving party; (ii) was rightfully known or becomes rightfully +known to the receiving party without confidential or proprietary restriction +from a source other than the disclosing party who has a right to disclose it; +(iii) is approved by the disclosing party for disclosure without restriction in +a written document which is signed by a duly authorized officer of such +disclosing party; or (iv) the receiving party independently develops without +access to or use of the other party's Confidential Information. + +16.Governing Law and Jurisdiction. +This Agreement will be governed by and interpreted in accordance with the laws +of the State of California, without giving effect to any principles of conflict +of laws. The parties expressly agree that the United Nations Convention on +Contracts for the International Sale of Goods and the Uniform Computer +Information Transactions Act will not apply to this Agreement. Any legal action +or proceeding arising under, related to or connected with this Agreement will +be brought exclusively in the federal (if they have jurisdiction) or state +courts located in San Francisco, California and the parties irrevocably consent +to the personal jurisdiction and venue there. + +17.Miscellaneous. + +17.1 Assignment. +You aren't allowed to assign or transfer any of your rights or obligations in +this Agreement, in whole or in part, by operation of law or otherwise, without +our prior written consent, and any attempt by you to do so without our consent +will be null and void.  We can assign this Agreement in its entirety, upon +notice to you but without the requirement to obtain consent, in connection with +a merger, acquisition, corporate reorganization, or sale of all or substantially +all of our business or assets. + +17.3 Severability. +In the event that any provision of this Agreement is deemed by a court of +competent jurisdiction to be illegal, invalid, or unenforceable, the court will +modify or reform this Agreement to give as much effect as possible to that +provision. Any provision that can't be modified or reformed in this way will be +deemed deleted, and the remaining provisions of this Agreement will continue in +full force and effect. + +17.4 Notices. +Any notice, request, demand or other communication required or permitted under +this Agreement should be in writing (e-mail counts), should reference this +Agreement, and will be deemed to be properly given: (i) upon receipt, if +delivered personally; (ii) upon confirmation of receipt by the intended +recipient, if by e-mail; (iii) five (5) business days after it is sent by +registered or certified mail, with written confirmation of receipt; or (iv) +three (3) business days after deposit with an internationally recognized express +courier, with written confirmation of receipt. Notices should be sent to the +address(es) set forth on the Invoice, unless we notify each other that those +addresses have changed. + +17.5 Waiver. +A party's obligations under this Agreement can only be waived in a writing +signed by an authorized representative of the other party, which waiver will be +effective only with respect to the specific obligation described. Any waiver or +failure to enforce any provision of this Agreement on one occasion will not be +deemed a waiver of any other provision or of such provision on any other +occasion. + +17.6 Force Majeure. +We will be excused from performing under this Agreement to the extent that we're +unable to perform due extraordinary causes beyond our reasonable control. That +might include things like acts of God, strikes, lockouts, riots, acts of war, +epidemics, communication line failure, and power failures. + +17.7 Independent Contractors. +We're each independent contractors with respect to the subject matter of this +Agreement. Nothing contained in this Agreement will be deemed or construed in +any manner whatsoever to create a partnership, joint venture, employment, agency, +fiduciary, or other similar relationship between us, and neither of us can bind +the other contractually. + +17.8 Amendments; +Entire Agreement. No modification, change, or amendment of this Agreement will +be binding upon the parties, unless we both agree to the change in a writing +signed by each of our authorized representatives. This Agreement, including each +Order Form and SOW, constitutes the entire agreement and understanding of the +parties with respect to its subject matter, and supersedes any and all prior or +contemporaneous understandings and agreements, whether oral or written, between +the parties with respect to its subject matter. + +17.9 No Other Terms. +Sometimes your accounting folks will send us purchase orders with lots of itty +bitty language attached that requires a microscope for us to read. Everybody +does it – we understand. But this Agreement is the only agreement between us, +and the terms of any purchase order, written terms or conditions, or other +document that you submit to us that contain terms that are different from, in +conflict with, or in addition to the terms of this Agreement, SOW or any Order +Form are hereby rejected by Cloud9, and will be void and of no effect. + +17.10 No Publicity Without Your Permission. +We may identify you as a customer to current and prospective clients. + +We won't use your name or logo in any advertising or marketing materials without +your permission, though; and if we ask for your permission, you always have the +right to say no. + From 148d1d0fb5a1d0036d35ef546279cf711106988b Mon Sep 17 00:00:00 2001 From: c9bot Date: Tue, 26 Apr 2016 01:14:01 +0200 Subject: [PATCH 053/104] c9-auto-bump 3.1.2347 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 07024a8a..f0200921 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2346", + "version": "3.1.2347", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From fdb503f3bbfecbfe8a913624030f812352839715 Mon Sep 17 00:00:00 2001 From: c9bot Date: Tue, 26 Apr 2016 02:23:28 +0200 Subject: [PATCH 054/104] c9-auto-bump 3.1.2348 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f0200921..5dd4fe9c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2347", + "version": "3.1.2348", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 67fd2c9995d5f959e44c2be113509720702ca578 Mon Sep 17 00:00:00 2001 From: c9bot Date: Tue, 26 Apr 2016 09:09:26 +0200 Subject: [PATCH 055/104] c9-auto-bump 3.1.2349 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5dd4fe9c..380f6b2d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2348", + "version": "3.1.2349", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From c9b3cd66175cfeced3372848415feee65d092e6a Mon Sep 17 00:00:00 2001 From: c9bot Date: Tue, 26 Apr 2016 10:06:06 +0200 Subject: [PATCH 056/104] c9-auto-bump 3.1.2350 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 380f6b2d..a2756b01 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2349", + "version": "3.1.2350", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 0dbcccf005da3e0cf27a134eeda71103086972de Mon Sep 17 00:00:00 2001 From: c9bot Date: Tue, 26 Apr 2016 10:13:06 +0200 Subject: [PATCH 057/104] c9-auto-bump 3.1.2351 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a2756b01..54fc316f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2350", + "version": "3.1.2351", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From bb6e0054cc66bfe947778cefb0e1970314d42aa0 Mon Sep 17 00:00:00 2001 From: c9bot Date: Tue, 26 Apr 2016 10:38:40 +0200 Subject: [PATCH 058/104] c9-auto-bump 3.1.2352 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 54fc316f..37e44d18 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2351", + "version": "3.1.2352", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 959c491edb468d27ed8765ac7d073369bd9f6b1f Mon Sep 17 00:00:00 2001 From: c9bot Date: Tue, 26 Apr 2016 17:45:13 +0200 Subject: [PATCH 059/104] c9-auto-bump 3.1.2353 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 37e44d18..56a0bbfc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2352", + "version": "3.1.2353", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 2afa1ad468616dcc73752b66afa60e5cee4afbee Mon Sep 17 00:00:00 2001 From: c9bot Date: Thu, 28 Apr 2016 10:05:28 +0200 Subject: [PATCH 060/104] c9-auto-bump 3.1.2354 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 56a0bbfc..ff6f2259 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2353", + "version": "3.1.2354", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 44af9283f61f8d706898d8381babc8e1a3664a31 Mon Sep 17 00:00:00 2001 From: c9bot Date: Thu, 28 Apr 2016 12:36:43 +0200 Subject: [PATCH 061/104] c9-auto-bump 3.1.2355 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ff6f2259..31b324e6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2354", + "version": "3.1.2355", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 73dd63194c0c8fff180666419d9887626e85a5d8 Mon Sep 17 00:00:00 2001 From: c9bot Date: Thu, 28 Apr 2016 12:53:10 +0200 Subject: [PATCH 062/104] c9-auto-bump 3.1.2356 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 31b324e6..b8d7b817 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2355", + "version": "3.1.2356", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 1950f57e1e23862cb77d02bd0fd9947bc2c4320e Mon Sep 17 00:00:00 2001 From: c9bot Date: Thu, 28 Apr 2016 13:45:51 +0200 Subject: [PATCH 063/104] c9-auto-bump 3.1.2357 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b8d7b817..48b763b8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2356", + "version": "3.1.2357", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 92a651ab40a3f1bc2b7c5eea8a306f04ce2c1daf Mon Sep 17 00:00:00 2001 From: Serkan Serttop Date: Tue, 26 Apr 2016 16:49:07 +0300 Subject: [PATCH 064/104] Fix missing slash for billing link. "dashboardUrl.match" always returns without the final slash --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 48b763b8..119521c6 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "c9.ide.preview.browser": "#897177be7f", "c9.ide.preview.markdown": "#c3174d86e0", "c9.ide.pubsub": "#99b7289040", - "c9.ide.readonly": "#a4605830c4", + "c9.ide.readonly": "#cfd951ec16", "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", "c9.ide.processlist": "#2b12cd1bdd", From 2786106e814e90722e01fe1227228892bb244a58 Mon Sep 17 00:00:00 2001 From: Chris Brown Date: Tue, 2 Feb 2016 10:33:44 +0000 Subject: [PATCH 065/104] Fixed a defect where running a process in non-debug mode destroys the debugger's reference to the process being debugged --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 119521c6..008455f0 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "c9.ide.find": "#e33fbaed2f", "c9.ide.find.infiles": "#c0a13737ef", "c9.ide.find.replace": "#810ebf8bfb", - "c9.ide.run.debug": "#ef40edcc3f", + "c9.ide.run.debug": "#9acb7f3178", "c9.automate": "#47e2c429c9", "c9.ide.ace.emmet": "#6dc4585e02", "c9.ide.ace.gotoline": "#a8ff07c8f4", From b20805f86e341ddd97850d3bde7106ed01a3b85a Mon Sep 17 00:00:00 2001 From: Atakan Eser Date: Wed, 27 Apr 2016 16:34:06 +0300 Subject: [PATCH 066/104] Update LICENSE-COMMERCIAL-USE fixed typo --- LICENSE-COMMERCIAL-USE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE-COMMERCIAL-USE b/LICENSE-COMMERCIAL-USE index e6f960c4..cebb28de 100644 --- a/LICENSE-COMMERCIAL-USE +++ b/LICENSE-COMMERCIAL-USE @@ -7,7 +7,7 @@ the Cloud9 SDK for commercial purposes, the following license shall apply. Congratulations! You’re on your way to a better coding experience. Cloud9 IDE, Inc.'s ("Cloud9", "we", or "us") Cloud9 OnPrem software helps you -build software fGaster and more efficiently by enabling distributed collaborative +build software faster and more efficiently by enabling distributed collaborative development for teams. Before you download and/or use our Cloud9 OnPrem software, we need you to agree to a special set of terms. Welcome to the Software License Agreement (the "Agreement"). From da07e791ec91a1c7042d84bc9bef631b8779e080 Mon Sep 17 00:00:00 2001 From: Chris Brown Date: Tue, 1 Dec 2015 13:57:03 +0000 Subject: [PATCH 067/104] Fixed error in Windows when server is restarted then the run button is clicked in the output pane from a previous run. --- node_modules/vfs-local/localfs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node_modules/vfs-local/localfs.js b/node_modules/vfs-local/localfs.js index 6885fefa..68b50bdf 100644 --- a/node_modules/vfs-local/localfs.js +++ b/node_modules/vfs-local/localfs.js @@ -2094,7 +2094,7 @@ module.exports = function setup(fsOptions) { // Kill the session with the same name before starting a new one if (options.kill) { session = sessions[options.session]; - if (session) + if (session && session.pty) session.pty.kill(); if (!options.command) From d83f9787dc8a1423e4f909e5f04d1302cdbb4b24 Mon Sep 17 00:00:00 2001 From: "David J. Malan" Date: Sun, 3 Apr 2016 22:58:55 -0400 Subject: [PATCH 068/104] Fixes left-padding in flat themes for a button whose caption is "". Previously, left-padding was 7px for .c9-menu-btnEmpty but 9px for .c9-menu-btnEmpty, the result of which was a 2px quirk when button was clicked. --- plugins/c9.ide.layout.classic/themes/flat-light.less | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/c9.ide.layout.classic/themes/flat-light.less b/plugins/c9.ide.layout.classic/themes/flat-light.less index 82317527..cdc401a8 100644 --- a/plugins/c9.ide.layout.classic/themes/flat-light.less +++ b/plugins/c9.ide.layout.classic/themes/flat-light.less @@ -33,6 +33,10 @@ padding-left: 33px !important; } +.c9-menu-btnEmpty { + padding-left: 9px; +} + .c9-menu-btnDown:not(.c9-menu-btnmenuDown){ box-shadow: none; border: 0; @@ -512,4 +516,4 @@ body .runner-form-header{ .runtestbtn .icon{ height: 21px; } -} \ No newline at end of file +} From b2a97238e82dbb45d787f54212b824bd1710ea5c Mon Sep 17 00:00:00 2001 From: Gerard Braad Date: Thu, 20 Aug 2015 14:57:46 +0800 Subject: [PATCH 069/104] Add npm start script --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index 008455f0..2ea476d7 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,9 @@ "chai": "~1.5.0", "mocha": "1.8.2" }, + "scripts": { + "start": "node server.js" + }, "devDependencies": {}, "licenses": [], "bundledDependencies": [ From c9a1efeeaa1b8f35ecd32ef33711f2ab7b9178df Mon Sep 17 00:00:00 2001 From: nightwing Date: Fri, 29 Apr 2016 01:35:37 +0400 Subject: [PATCH 070/104] fix confusing error when passing -a instead of -a : --- configs/standalone.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/standalone.js b/configs/standalone.js index bb6f596e..8b7e468c 100644 --- a/configs/standalone.js +++ b/configs/standalone.js @@ -105,7 +105,7 @@ module.exports = function(config, optimist) { console.log("Run using --listen localhost instead to only expose Cloud9 to localhost,"); console.log("or use -a username:password to setup HTTP authentication\n"); } - var auth = (argv.auth || ":").split(":"); + var auth = (argv.auth + "").split(":"); var plugins = [ { From 2faf44658c78441cb65166a1fdd047433047cdf2 Mon Sep 17 00:00:00 2001 From: nightwing Date: Fri, 29 Apr 2016 01:41:40 +0400 Subject: [PATCH 071/104] fix +13674 . command doesn't handle backspace in vim mode --- node_modules/ace/lib/ace/keyboard/vim.js | 30 ++++++++++++++---------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/node_modules/ace/lib/ace/keyboard/vim.js b/node_modules/ace/lib/ace/keyboard/vim.js index 9c295fb4..935a751e 100644 --- a/node_modules/ace/lib/ace/keyboard/vim.js +++ b/node_modules/ace/lib/ace/keyboard/vim.js @@ -154,17 +154,15 @@ define(function(require, exports, module) { return this.ace.inVirtualSelectionMode && this.ace.selection.index; }; this.onChange = function(delta) { - if (delta.action[0] == 'i') { - var change = { text: delta.lines }; - var curOp = this.curOp = this.curOp || {}; - if (!curOp.changeHandlers) - curOp.changeHandlers = this._eventRegistry["change"] && this._eventRegistry["change"].slice(); - if (this.virtualSelectionMode()) return; - if (!curOp.lastChange) { - curOp.lastChange = curOp.change = change; - } else { - curOp.lastChange.next = curOp.lastChange = change; - } + var change = { text: delta.action[0] == 'i' ? delta.lines : [] }; + var curOp = this.curOp = this.curOp || {}; + if (!curOp.changeHandlers) + curOp.changeHandlers = this._eventRegistry["change"] && this._eventRegistry["change"].slice(); + if (this.virtualSelectionMode()) return; + if (!curOp.lastChange) { + curOp.lastChange = curOp.change = change; + } else { + curOp.lastChange.next = curOp.lastChange = change; } this.$updateMarkers(delta); }; @@ -5693,6 +5691,10 @@ dom.importCssString(".normal-mode .ace_cursor{\ if (changeObj.origin == '+input' || changeObj.origin == 'paste' || changeObj.origin === undefined /* only in testing */) { var text = changeObj.text.join('\n'); + if (lastChange.maybeReset) { + lastChange.changes = []; + lastChange.maybeReset = false; + } lastChange.changes.push(text); } // Change objects may be chained with next. @@ -5715,7 +5717,7 @@ dom.importCssString(".normal-mode .ace_cursor{\ lastChange.expectCursorActivityForChange = false; } else { // Cursor moved outside the context of an edit. Reset the change. - lastChange.changes = []; + lastChange.maybeReset = true; } } else if (!cm.curOp.isVimOp) { handleExternalSelection(cm, vim); @@ -5779,6 +5781,10 @@ dom.importCssString(".normal-mode .ace_cursor{\ var keyName = CodeMirror.keyName(e); if (!keyName) { return; } function onKeyFound() { + if (lastChange.maybeReset) { + lastChange.changes = []; + lastChange.maybeReset = false; + } lastChange.changes.push(new InsertModeKey(keyName)); return true; } From 58d3cbab92f39f7fb0671015bf5976c4e7c1d982 Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 29 Apr 2016 04:29:22 +0200 Subject: [PATCH 072/104] c9-auto-bump 3.1.2358 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2ea476d7..e5d9f21c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2357", + "version": "3.1.2358", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From ed2257f25db1e17022aa5523f2015e79c7bf154e Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 29 Apr 2016 09:29:19 +0200 Subject: [PATCH 073/104] c9-auto-bump 3.1.2359 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e5d9f21c..2fa4521e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2358", + "version": "3.1.2359", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From be46407f88bdbf9734509b2a9f4ce128b407d82c Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 29 Apr 2016 09:54:33 +0200 Subject: [PATCH 074/104] c9-auto-bump 3.1.2360 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2fa4521e..8aa2d5fa 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2359", + "version": "3.1.2360", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 90023001280d2d1175df073490d6b51bd7c1045c Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 29 Apr 2016 10:09:54 +0200 Subject: [PATCH 075/104] c9-auto-bump 3.1.2361 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8aa2d5fa..cb1d65e9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2360", + "version": "3.1.2361", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 15a8b712f743e4d05484b78c30846e949cfe8910 Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 29 Apr 2016 10:12:50 +0200 Subject: [PATCH 076/104] c9-auto-bump 3.1.2362 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cb1d65e9..7cc201e3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2361", + "version": "3.1.2362", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From c61f465fd6746a1b48ff2a6c29a62c2d95dd11ea Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 29 Apr 2016 10:24:18 +0200 Subject: [PATCH 077/104] c9-auto-bump 3.1.2363 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7cc201e3..ba5fab02 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2362", + "version": "3.1.2363", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From ff2e366e5ad6abf7d9d2e631da7ee6eb837c1873 Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 29 Apr 2016 10:27:35 +0200 Subject: [PATCH 078/104] c9-auto-bump 3.1.2364 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ba5fab02..d433d863 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2363", + "version": "3.1.2364", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From ff2b9dc33722d5913db547de1c92aa5da05a1e50 Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 29 Apr 2016 10:36:03 +0200 Subject: [PATCH 079/104] c9-auto-bump 3.1.2365 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d433d863..4e152e71 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2364", + "version": "3.1.2365", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 0ff9f417166bd73f34e194891a780e421b91e5d0 Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 29 Apr 2016 11:14:14 +0200 Subject: [PATCH 080/104] c9-auto-bump 3.1.2366 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4e152e71..150de924 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2365", + "version": "3.1.2366", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From e01f6cad1a5fac5d55253bd8b5dc20ce8a64f072 Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 29 Apr 2016 14:40:17 +0200 Subject: [PATCH 081/104] c9-auto-bump 3.1.2367 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 150de924..55e86ae4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2366", + "version": "3.1.2367", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 822bff4e108bd684ce2bd2c079b61c9a92ca0768 Mon Sep 17 00:00:00 2001 From: basdewachter Date: Fri, 29 Apr 2016 15:31:05 +0200 Subject: [PATCH 082/104] add support for gitlab scm urls --- node_modules/c9/scm_url_parse.js | 4 ++ node_modules/c9/scm_url_parse_test.js | 99 +++++++++++++++++---------- 2 files changed, 65 insertions(+), 38 deletions(-) diff --git a/node_modules/c9/scm_url_parse.js b/node_modules/c9/scm_url_parse.js index 174e6c66..ced57767 100644 --- a/node_modules/c9/scm_url_parse.js +++ b/node_modules/c9/scm_url_parse.js @@ -13,6 +13,7 @@ define(function(require, exports, module) { "bitbucket.org": "bitbucket", "github.com": "github", "source.developers.google.com": "google", + "gitlab.com": "gitlab", }; var defaultProvider = "unknown"; @@ -75,6 +76,9 @@ define(function(require, exports, module) { case "bitbucket": scm = parsed.pathname.match(/\.git$/) ? "git": "hg"; break; + case "gitlab": + scm = "git"; + break; default: scm = parsed.pathname.match(/\.git$/) ? "git": "hg"; } diff --git a/node_modules/c9/scm_url_parse_test.js b/node_modules/c9/scm_url_parse_test.js index 726b0144..62c16561 100644 --- a/node_modules/c9/scm_url_parse_test.js +++ b/node_modules/c9/scm_url_parse_test.js @@ -16,57 +16,60 @@ describe(__filename, function() { describe("#parse", function() { it("should parse ssh url", function(done) { - var url = parse("git@github.com:fjakobs/lispjs.git"); - assert.equal(url.scm, "git"); - assert.equal(url.protocol, "ssh:"); - assert.equal(url.auth, "git"); - assert.equal(url.hostname, "github.com"); - assert.equal(url.pathname, "fjakobs/lispjs.git"); - done(); + var url = parse("git@github.com:fjakobs/lispjs.git"); + assert.equal(url.scm, "git"); + assert.equal(url.protocol, "ssh:"); + assert.equal(url.provider, "github"); + assert.equal(url.auth, "git"); + assert.equal(url.hostname, "github.com"); + assert.equal(url.pathname, "fjakobs/lispjs.git"); + done(); + }), - }), + it("should parse git url", function(done) { + var url = parse("git://github.com/fjakobs/lispjs.git"); + assert.equal(url.scm, "git"); + assert.equal(url.protocol, "git:"); + assert.equal(url.provider, "github"); + assert.equal(url.hostname, "github.com"); + assert.equal(url.pathname, "fjakobs/lispjs.git"); + done(); + }), - it("should parse git url", function(done) { - var url = parse("git://github.com/fjakobs/lispjs.git"); - assert.equal(url.scm, "git"); - assert.equal(url.protocol, "git:"); - assert.equal(url.hostname, "github.com"); - assert.equal(url.pathname, "fjakobs/lispjs.git"); - done(); + it("should parse https url", function(done) { + var url = parse("https://fjakobs@github.com/fjakobs/lispjs.git"); + assert.equal(url.protocol, "https:"); + assert.equal(url.scm, "git"); + assert.equal(url.auth, "fjakobs"); + assert.equal(url.provider, "github"); + assert.equal(url.hostname, "github.com"); + assert.equal(url.pathname, "fjakobs/lispjs.git"); + done(); - }), + }), - it("should parse https url", function(done) { - var url = parse("https://fjakobs@github.com/fjakobs/lispjs.git"); - assert.equal(url.protocol, "https:"); - assert.equal(url.scm, "git"); - assert.equal(url.auth, "fjakobs"); - assert.equal(url.hostname, "github.com"); - assert.equal(url.pathname, "fjakobs/lispjs.git"); - done(); - - }), - - it("should parse Bitbucket url", function(done) { - var url = parse("git@bitbucket.org/Richard/expressling.git"); - assert.equal(url.protocol, "ssh:"); - assert.equal(url.scm, "git"); - assert.equal(url.auth, "git"); - assert.equal(url.hostname, "bitbucket.org"); - assert.equal(url.pathname, "Richard/expressling.git"); - done(); - }); + it("should parse Bitbucket url", function(done) { + var url = parse("git@bitbucket.org/Richard/expressling.git"); + assert.equal(url.protocol, "ssh:"); + assert.equal(url.scm, "git"); + assert.equal(url.auth, "git"); + assert.equal(url.provider, "bitbucket"); + assert.equal(url.hostname, "bitbucket.org"); + assert.equal(url.pathname, "Richard/expressling.git"); + done(); + }); it("should parse Bitbucket hg ssh url", function(done) { var url = parse("ssh://hg@bitbucket.org/fjakobs/juhu"); assert.equal(url.protocol, "ssh:"); assert.equal(url.scm, "hg"); + assert.equal(url.provider, "bitbucket"); assert.equal(url.hostname, "bitbucket.org"); assert.equal(url.pathname, "fjakobs/juhu"); done(); }); - it("should parse github URL without .git", function(done) { + it("should parse Github url without .git", function(done) { var url = parse("https://github.com/arunoda/meteor-streams"); assert.equal(url.protocol, "https:"); assert.equal(url.scm, "git"); @@ -76,7 +79,27 @@ describe(__filename, function() { done(); }); - it("Should refuse a git url with dangerous shell chars in it", function() { + it("should parse Gitlab url", function(done) { + var url = parse("git@gitlab.com:bdewachter/testfiles.git"); + assert.equal(url.scm, "git"); + assert.equal(url.protocol, "ssh:"); + assert.equal(url.provider, "gitlab"); + assert.equal(url.hostname, "gitlab.com"); + assert.equal(url.pathname, "bdewachter/testfiles.git"); + done(); + }), + + it("should parse Gitlab url without .git", function(done) { + var url = parse("https://gitlab.com/bdewachter/testfiles.git"); + assert.equal(url.protocol, "https:"); + assert.equal(url.scm, "git"); + assert.equal(url.provider, "gitlab"); + assert.equal(url.hostname, "gitlab.com"); + assert.equal(url.pathname, "bdewachter/testfiles.git"); + done(); + }); + + it("should refuse a git url with dangerous shell chars in it", function() { var validUrls = [ "https://github.com/arunoda/meteor-streams", "https://fjakobs@github.com/fjakobs/lispjs.git", From c903b6261b2cf361f3f79e1fc0d8de05add220a8 Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 29 Apr 2016 20:12:07 +0200 Subject: [PATCH 083/104] c9-auto-bump 3.1.2368 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 55e86ae4..70451ab9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2367", + "version": "3.1.2368", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From f422338777f8a9cbe5f432c02bdea1f0c23714d0 Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 29 Apr 2016 20:33:19 +0200 Subject: [PATCH 084/104] c9-auto-bump 3.1.2369 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 70451ab9..57654288 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2368", + "version": "3.1.2369", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From d797e68dc13061a1e2219a10a55060f6e5f3bc12 Mon Sep 17 00:00:00 2001 From: c9bot Date: Fri, 29 Apr 2016 21:56:23 +0200 Subject: [PATCH 085/104] c9-auto-bump 3.1.2370 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 57654288..41e05601 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2369", + "version": "3.1.2370", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 9f437f4dbf97c7e97291d3b9f2e8f1574221716e Mon Sep 17 00:00:00 2001 From: c9bot Date: Sat, 30 Apr 2016 13:54:28 +0200 Subject: [PATCH 086/104] c9-auto-bump 3.1.2371 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 41e05601..412f146b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2370", + "version": "3.1.2371", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From c3c05c2666f6b4d0942dcfa6cfb74ea9c3c87a0e Mon Sep 17 00:00:00 2001 From: c9bot Date: Sat, 30 Apr 2016 16:13:48 +0200 Subject: [PATCH 087/104] c9-auto-bump 3.1.2372 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 412f146b..43444e39 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2371", + "version": "3.1.2372", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From bb7de445ffb951f5d69fc5cd3eab7f7a2a6b9b8a Mon Sep 17 00:00:00 2001 From: c9bot Date: Sat, 30 Apr 2016 17:09:20 +0200 Subject: [PATCH 088/104] c9-auto-bump 3.1.2373 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 43444e39..4cd3730c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2372", + "version": "3.1.2373", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 08fc5f16f4da96a19da96b160dfaa2ac0cb99d9d Mon Sep 17 00:00:00 2001 From: c9bot Date: Sun, 1 May 2016 00:12:27 +0200 Subject: [PATCH 089/104] c9-auto-bump 3.1.2374 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4cd3730c..44235ed8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2373", + "version": "3.1.2374", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 2a0d5d87828164fb60c6760b3c22076d38bb240d Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 10:33:44 +0200 Subject: [PATCH 090/104] c9-auto-bump 3.1.2375 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 44235ed8..d07fd863 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2374", + "version": "3.1.2375", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 9243c6ef4d5ad8200d43787fcc5c39b32cb46456 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 10:40:49 +0200 Subject: [PATCH 091/104] c9-auto-bump 3.1.2376 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d07fd863..8718573e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2375", + "version": "3.1.2376", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 52155396cd4a1e47d208c83e8efd7738839736f3 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 11:01:42 +0200 Subject: [PATCH 092/104] c9-auto-bump 3.1.2377 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8718573e..68500e6e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2376", + "version": "3.1.2377", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 76c0f2ceee03f654f00e980492e300ca9cc28af7 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 11:21:42 +0200 Subject: [PATCH 093/104] c9-auto-bump 3.1.2378 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 68500e6e..87acd8da 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2377", + "version": "3.1.2378", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From ab2fc90ea49b7b39626f124074f6709c317fa7e0 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 11:51:05 +0200 Subject: [PATCH 094/104] c9-auto-bump 3.1.2379 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 87acd8da..a6aa51e0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2378", + "version": "3.1.2379", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 6d351946be8d1d4f6fbce836712e97a63cdb8df4 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 11:57:14 +0200 Subject: [PATCH 095/104] c9-auto-bump 3.1.2380 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a6aa51e0..d910a535 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2379", + "version": "3.1.2380", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From f58c786d1cce335c1db5a32b9ff24860e2ce4562 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 12:01:06 +0200 Subject: [PATCH 096/104] c9-auto-bump 3.1.2381 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d910a535..2f629b27 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2380", + "version": "3.1.2381", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 477706839f71b7b9ff3ac440b6df996dbc0b1b69 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 12:07:20 +0200 Subject: [PATCH 097/104] c9-auto-bump 3.1.2382 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2f629b27..79b0afe9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2381", + "version": "3.1.2382", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 4e27ca643c1466a856ba940bb4525bd4ea5ea0a1 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 12:08:59 +0200 Subject: [PATCH 098/104] c9-auto-bump 3.1.2383 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 79b0afe9..62a48a91 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2382", + "version": "3.1.2383", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From b7dc319bc038ae06932772b2b507b2b6113db11b Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 12:09:42 +0200 Subject: [PATCH 099/104] c9-auto-bump 3.1.2384 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 62a48a91..36b3bfad 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2383", + "version": "3.1.2384", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 9fc4cafb3e810f684d15bf11a2ef64aea01e564d Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 12:58:05 +0200 Subject: [PATCH 100/104] c9-auto-bump 3.1.2385 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 36b3bfad..1d0188f7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2384", + "version": "3.1.2385", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 25b50cc614e8aadec1ae8c2387468c379ab8a3a2 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 13:11:53 +0200 Subject: [PATCH 101/104] c9-auto-bump 3.1.2386 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1d0188f7..ab1f8619 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2385", + "version": "3.1.2386", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From d234819bc3a960b11f89f2b1288f4fbbc3ebebda Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 14:23:03 +0200 Subject: [PATCH 102/104] c9-auto-bump 3.1.2387 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ab1f8619..7381925a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2386", + "version": "3.1.2387", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From ef4ec1d63bf9f77e74706054aa3c5047ddf8ad56 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 14:30:31 +0200 Subject: [PATCH 103/104] c9-auto-bump 3.1.2388 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7381925a..5def3a09 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2387", + "version": "3.1.2388", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9", From 13b88360cdcf8c1a1dc302ca272c559765ea9508 Mon Sep 17 00:00:00 2001 From: c9bot Date: Mon, 2 May 2016 15:02:15 +0200 Subject: [PATCH 104/104] c9-auto-bump 3.1.2389 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5def3a09..a1e2e490 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "c9", "description": "New Cloud9 Client", - "version": "3.1.2388", + "version": "3.1.2389", "author": "Ajax.org B.V. ", "private": true, "main": "bin/c9",