diff --git a/src/extensibility/node/ExtensionManagerDomain.js b/src/extensibility/node/ExtensionManagerDomain.js index b6732e5fdf5..818779b33f8 100644 --- a/src/extensibility/node/ExtensionManagerDomain.js +++ b/src/extensibility/node/ExtensionManagerDomain.js @@ -70,7 +70,7 @@ var pendingDownloads = {}; */ function validateName(name) { // "This must be a unique, lowercase alpha-numeric name without spaces. It may include "." or "_" or "-" characters." - if (/^[a-z._\-]+$/.exec(name)) { + if (/^[a-z0-9._\-]+$/.exec(name)) { return true; } return false; @@ -104,7 +104,7 @@ function _cmdValidate(path, callback) { } var callbackCalled = false; var metadata; - var foundMain = false; + var foundMainIn = null; var errors = []; var commonPrefix = null; @@ -183,7 +183,7 @@ function _cmdValidate(path, callback) { } }); } else if (fileName === "main.js") { - foundMain = true; + foundMainIn = commonPrefix; } }) .on("end", function () { @@ -195,7 +195,7 @@ function _cmdValidate(path, callback) { return; } - if (!foundMain) { + if (foundMainIn === null || foundMainIn !== commonPrefix) { errors.push([Errors.MISSING_MAIN, path]); } diff --git a/src/extensibility/node/spec/Validation.spec.js b/src/extensibility/node/spec/Validation.spec.js index de73ad0823e..dc380652f11 100644 --- a/src/extensibility/node/spec/Validation.spec.js +++ b/src/extensibility/node/spec/Validation.spec.js @@ -49,6 +49,7 @@ var basicValidExtension = path.join(testFilesDirectory, "basic-valid-extension.z oneLevelDown = path.join(testFilesDirectory, "one-level-extension-master.zip"), bogusTopDir = path.join(testFilesDirectory, "bogus-top-dir.zip"), badname = path.join(testFilesDirectory, "badname.zip"), + mainInDirectory = path.join(testFilesDirectory, "main-in-directory.zip"), invalidVersion = path.join(testFilesDirectory, "invalid-version.zip"); describe("Package Validation", function () { @@ -168,4 +169,14 @@ describe("Package Validation", function () { done(); }); }); + + it("should complain about files that don't have main in the top dir", function (done) { + ExtensionsDomain._cmdValidate(mainInDirectory, function (err, result) { + expect(err).toBeNull(); + var errors = result.errors; + expect(errors.length).toEqual(1); + expect(errors[0][0]).toEqual("MISSING_MAIN"); + done(); + }); + }); }); \ No newline at end of file diff --git a/tasks/update-sprint-number.js b/tasks/update-sprint-number.js index 18d612b1a68..10b563dc042 100644 --- a/tasks/update-sprint-number.js +++ b/tasks/update-sprint-number.js @@ -20,7 +20,8 @@ * DEALINGS IN THE SOFTWARE. * */ - /*global module, require*/ +/*global module, require*/ + module.exports = function (grunt) { "use strict"; @@ -31,14 +32,15 @@ module.exports = function (grunt) { grunt.registerTask('update-sprint-number', function () { var path = "package.json", packageJSON = grunt.file.readJSON(path), - sprint = grunt.option("sprint") || 0; + sprint = grunt.option("sprint") || 0, + versionNumberRegexp = /([0-9]+\.)([0-9]+)([\.\-a-zA-Z0-9]*)?/; if (!sprint) { grunt.fail.fatal("Please specify a sprint. e.g. grunt update-sprint-number --sprint=21"); } - packageJSON.version = packageJSON.version.replace(/([0-9]+\.)([0-9]+)([\.\-a-zA-Z0-9]*)?/, "$1" + sprint + "$3"); - packageJSON.apiVersion = packageJSON.apiVersion.replace(/([0-9]+\.)([0-9]+)([\.\-a-zA-Z0-9]*)?/, "$1" + sprint + "$3"); + packageJSON.version = packageJSON.version.replace(versionNumberRegexp, "$1" + sprint + "$3"); + packageJSON.apiVersion = packageJSON.apiVersion.replace(versionNumberRegexp, "$1" + sprint + "$3"); common.writeJSON(grunt, path, packageJSON); }); diff --git a/test/spec/extension-test-files/main-in-directory.zip b/test/spec/extension-test-files/main-in-directory.zip new file mode 100644 index 00000000000..87c7c1aa07d Binary files /dev/null and b/test/spec/extension-test-files/main-in-directory.zip differ