diff --git a/tools/main.js b/tools/main.js index 4d853f10ae..ab885d7fe3 100644 --- a/tools/main.js +++ b/tools/main.js @@ -949,25 +949,15 @@ Fiber(function () { // Let's do some processing here. If the user/release file specified a // track, we need to display that correctly, and if they didn't, we should // make it clear that we are talking about the default track. - var releases = releaseName.split('@'); - var track; - var version; - if (releases.length === 1) { - track = catalog.DEFAULT_TRACK; - version = releases[0]; - } else { - track = releases[0]; - // Do we forbid '@' sign in release versions? I sure hope so, but let's - // be careful. - version = releases.slice(1).join("@"); - } var utils = require('./utils.js'); - var displayRelease = utils.displayRelease(track, version); + var trackAndVersion = utils.splitReleaseName(releaseName); + var displayRelease = utils.displayRelease( + trackAndVersion[0], trackAndVersion[1]); // Now, let's process this. if (releaseOverride) { Console.error(displayRelease + ": unknown release."); } else if (appDir) { - if (track !== catalog.DEFAULT_TRACK) { + if (trackAndVersion[0] !== catalog.DEFAULT_TRACK) { displayRelease = "Meteor release " + displayRelease; } if (catalog.refreshFailed) { @@ -979,9 +969,9 @@ Fiber(function () { "release, or go online."); } else { Console.error( -"This project says that it uses " + displayRelease + ", but you \n" + -"don't have that version of Meteor installed and the Meteor update \n" + -"servers don't have it either. Please edit the .meteor/release file in \n" + +"This project says that it uses " + displayRelease + ", but you don't have\n" + +"that version of Meteor installed and the Meteor update servers\n" + +"don't have it either. Please edit the .meteor/release file in\n" + "the project and change it to a valid Meteor release."); } } else { @@ -1332,7 +1322,7 @@ commandName + ": You're not in a Meteor project directory.\n" + if (command.requiresApp && release.current.isCheckout() && appRelease && appRelease !== "none") { var utils = require("./utils.js"); - var appReleaseParts = appRelease.split("@"); + var appReleaseParts = utils.splitReleaseName(appRelease); // For commands that work with apps, if we have overridden the // app's usual release by using a checkout, print a reminder banner. Console.warn( diff --git a/tools/tests/releases.js b/tools/tests/releases.js index e504808c2d..810b54c31e 100644 --- a/tools/tests/releases.js +++ b/tools/tests/releases.js @@ -59,7 +59,7 @@ selftest.define("springboard", ['checkout', 'net'], function () { // Suppose you ask for a release that doesn't exist. s.set('METEOR_TEST_FAIL_RELEASE_DOWNLOAD', 'not-found'); run = s.run("--release", "weird"); - run.readErr("weird: unknown release.\n"); + run.readErr("Meteor weird: unknown release.\n"); run.expectEnd(); run.expectExit(1); @@ -78,15 +78,15 @@ selftest.define("springboard", ['checkout', 'net'], function () { s.write(".meteor/release", "strange"); s.set('METEOR_TEST_FAIL_RELEASE_DOWNLOAD', 'not-found'); run = s.run(); - run.matchErr("version strange of Meteor"); - run.matchErr("valid Meteor release"); + run.matchErr("uses Meteor strange"); + run.matchErr("don't have it either"); run.expectExit(1); // You're offline and project asks for non-cached release. s.set('METEOR_TEST_FAIL_RELEASE_DOWNLOAD', 'offline'); run = s.run(); run.matchErr("offline"); - run.matchErr("version strange of Meteor"); + run.matchErr("it uses Meteor strange"); run.matchErr("don't have that version of Meteor installed"); run.matchErr("update servers"); run.expectExit(1); @@ -201,7 +201,7 @@ selftest.define("checkout", ['checkout'], function () { s.write(".meteor/release", "something"); run = s.run("list"); run.readErr("=> Running Meteor from a checkout"); - run.matchErr("project version (something)\n"); + run.matchErr("project version (Meteor something)\n"); run.expectExit(0); }); }); diff --git a/tools/utils.js b/tools/utils.js index 92e99cfab7..89774ac6d4 100644 --- a/tools/utils.js +++ b/tools/utils.js @@ -402,6 +402,22 @@ exports.displayRelease = function (track, version, options) { return track + '@' + version; }; +exports.splitReleaseName = function (releaseName) { + var parts = releaseName.split('@'); + var track, version; + if (parts.length === 1) { + var catalog = require('./catalog.js'); + track = catalog.DEFAULT_TRACK; + version = parts[0]; + } else { + track = parts[0]; + // Do we forbid '@' sign in release versions? I sure hope so, but let's + // be careful. + version = parts.slice(1).join("@"); + } + return [track, version]; +}; + // Calls cb with each subset of the array "total", with non-decreasing size, // until all subsets have been used or cb returns true. The array passed // to cb may be safely mutated or retained by cb.