diff --git a/tools/main.js b/tools/main.js index 28766230be..33b0f7d888 100644 --- a/tools/main.js +++ b/tools/main.js @@ -776,6 +776,17 @@ Fiber(function () { } if (releaseName !== undefined) { + // First, if we know just by looking at our disk that this is a legacy + // pre-0.9.0 release, springboard to it immediately, before calling + // release.load (which will refresh the catalog because the release + // presumably doesn't exist on the new server, and this is a slow + // operation). + if (warehouse.releaseExistsInWarehouse(releaseName)) { + var manifest = warehouse.ensureReleaseExistsAndReturnManifest( + releaseName); + oldSpringboard(manifest.tools); + } + try { var rel = release.load(releaseName); } catch (e) { diff --git a/tools/warehouse.js b/tools/warehouse.js index 66c05ce723..f2dbe5a634 100644 --- a/tools/warehouse.js +++ b/tools/warehouse.js @@ -124,6 +124,13 @@ _.extend(warehouse, { return fs.existsSync(warehouse.getToolsDir(version)); }, + releaseExistsInWarehouse: function (version) { + var releasesDir = path.join(warehouse.getWarehouseDir(), 'releases'); + var releaseManifestPath = path.join(releasesDir, + version + '.release.json'); + return fs.existsSync(releaseManifestPath); + }, + _calculateNewPiecesForRelease: function (releaseManifest) { // newPieces.tools and newPieces.packages[PACKAGE] are either falsey (if // nothing is new), or an object with keys "version" and bool