diff --git a/lib/core/Manager.js b/lib/core/Manager.js index ebd543515..dac6333a9 100644 --- a/lib/core/Manager.js +++ b/lib/core/Manager.js @@ -678,6 +678,8 @@ Manager.prototype._electSuitable = function (name, semvers, nonSemvers) { var save; var choices; var picks = []; + var versionRegex = /(?:[\d\w]\.){2}[\d\w](?:.)*/; + var picksReleases; // If there are both semver and non-semver, there's no way // to figure out the suitable one @@ -833,14 +835,21 @@ Manager.prototype._electSuitable = function (name, semvers, nonSemvers) { }); choices = picks.map(function (pick, index) { return index + 1; }); + picksReleases = picks.map(function(pick) { return pick.pkgMeta._release; }); return Q.nfcall(this._logger.prompt.bind(this._logger), { type: 'input', message: 'Answer', validate: function (choice) { + var invalidChoice = 'Invalid choice'; + + if (choice.match(versionRegex)) { + return picksReleases.indexOf(choice) != -1 ? true : invalidChoice; + } + choice = Number(mout.string.trim(choice.trim(), '!')); if (!choice || choice < 1 || choice > picks.length) { - return 'Invalid choice'; + return invalidChoice; } return true; @@ -852,8 +861,13 @@ Manager.prototype._electSuitable = function (name, semvers, nonSemvers) { // Sanitize choice choice = choice.trim(); save = /^!/.test(choice) || /!$/.test(choice); // Save if prefixed or suffixed with ! - choice = Number(mout.string.trim(choice, '!')); - pick = picks[choice - 1]; + + if (choice.match(versionRegex)) { + pick = picks[picksReleases.indexOf(choice)]; + } else { + choice = Number(mout.string.trim(choice, '!')); + pick = picks[choice - 1]; + } // Save resolution if (save) {