diff --git a/lib/core/Manager.js b/lib/core/Manager.js index 329cfe08..528b1a61 100644 --- a/lib/core/Manager.js +++ b/lib/core/Manager.js @@ -387,7 +387,7 @@ Manager.prototype._dissect = function () { }; Manager.prototype._extendNotification = function (notification, decEndpoint) { - notification.from = decEndpoint.name || decEndpoint.registryName || decEndpoint.resolverName; + // Add endpoint to the data notification.data = notification.data || {}; notification.data.endpoint = { name: decEndpoint.name, @@ -395,6 +395,12 @@ Manager.prototype._extendNotification = function (notification, decEndpoint) { target: decEndpoint.target }; + // Add from + notification.from = decEndpoint.name || decEndpoint.registryName; + if (!notification.from && notification.data.resolver) { + notification.from = notification.data.resolver.getName(); + } + return notification; }; diff --git a/lib/core/PackageRepository.js b/lib/core/PackageRepository.js index e1469043..8309b79f 100644 --- a/lib/core/PackageRepository.js +++ b/lib/core/PackageRepository.js @@ -23,7 +23,9 @@ function PackageRepository(config) { // ----------------- PackageRepository.prototype.fetch = function (decEndpoint) { - var res; + var resolver; + var pkgMeta; + var canonicalPkg; var deferred = Q.defer(); var that = this; @@ -31,29 +33,26 @@ PackageRepository.prototype.fetch = function (decEndpoint) { resolverFactory(decEndpoint, this._registryClient, this._config) // Decide if we retrieve from the cache or not // Also decide we if validate the cached entry or not - .then(function (resolver) { - res = resolver; - - // Set the resolver name in the decEndpoint - decEndpoint.resolverName = resolver.getName(); + .then(function (res) { + resolver = res; // If force flag is used, bypass cache if (that._config.force) { - deferred.notify({ - level: 'action', - id: 'resolve', - message: resolver.getSource() + '#' + resolver.getTarget() + return that._resolve(resolver) + // We have to listen to the progress and return it back + // otherwise it won't be propagated (wtf?) + .progress(function (notification) { + return notification; }); - return that._resolve(resolver); } // Note that we use the resolver methods to query the // cache because transformations/normalisations can occur return that._resolveCache.retrieve(resolver.getSource(), resolver.getTarget()) // Decide if we can use the one from the resolve cache - .spread(function (canonicalPkg, pkgMeta) { + .spread(function (canonical, meta) { // If there's no package in the cache - if (!canonicalPkg) { + if (!canonical) { // And the offline flag is passed, error out if (that._config.offline) { throw createError('No cached version for ' + resolver.getSource() + '#' + resolver.getTarget(), 'ENOCACHE', { @@ -64,25 +63,20 @@ PackageRepository.prototype.fetch = function (decEndpoint) { // Otherwise, we have to resolve it deferred.notify({ level: 'info', - id: 'uncached', - message: 'No cached version for ' + resolver.getSource() + '#' + resolver.getTarget() - }); - deferred.notify({ - level: 'action', - id: 'resolve', - message: resolver.getSource() + '#' + resolver.getTarget() + id: 'not-cached', + message: resolver.getSource() + (resolver.getTarget() ? '#' + resolver.getTarget() : '') }); return that._resolve(resolver); } + canonicalPkg = canonical; + pkgMeta = meta; + deferred.notify({ level: 'info', id: 'cached', - message: resolver.getSource() + (pkgMeta._release ? '#' + pkgMeta._release: '') + ' entry', - data: { - pkgMeta: pkgMeta - } + message: resolver.getSource() + (pkgMeta._release ? '#' + pkgMeta._release : '') }); // If offline flag is used, use directly the cached one @@ -94,11 +88,9 @@ PackageRepository.prototype.fetch = function (decEndpoint) { process.nextTick(function () { deferred.notify({ level: 'action', - id: 'check', - message: resolver.getSource() + '#' + resolver.getTarget() + ' for newer version', - data: { - pkgMeta: pkgMeta - } + id: 'validate', + message: (pkgMeta._release ? pkgMeta._release + ' against ': '') + + resolver.getSource() + (resolver.getTarget() ? '#' + resolver.getTarget() : '') }); }); @@ -114,15 +106,7 @@ PackageRepository.prototype.fetch = function (decEndpoint) { deferred.notify({ type: 'info', id: 'new', - message: 'version for ' + resolver.getSource() + '#' + resolver.getTarget(), - data: { - pkgMeta: pkgMeta - } - }); - deferred.notify({ - level: 'action', - id: 'resolve', - message: resolver.getSource() + '#' + resolver.getTarget() + message: 'version for ' + resolver.getSource() + '#' + resolver.getTarget() }); return that._resolve(resolver); @@ -130,12 +114,21 @@ PackageRepository.prototype.fetch = function (decEndpoint) { }); }) .then(deferred.resolve, deferred.reject, function (notification) { - // Store the resolver info for each notification - notification.resolver = { - name: res.getName(), - source: res.getSource(), - target: res.getTarget() - }; + // Store the resolver info in each notification + if (resolver) { + notification.resolver = { + name: resolver.getName(), + source: resolver.getSource(), + target: resolver.getTarget() + }; + } + + // Store the canonical package and it's meta in each notification + if (canonicalPkg) { + notification.data = notification.data || {}; + notification.data.canonicalPkg = canonicalPkg; + notification.data.pkgMeta = pkgMeta; + } deferred.notify(notification); }); @@ -153,8 +146,18 @@ PackageRepository.prototype.empty = function (name) { // --------------------- PackageRepository.prototype._resolve = function (resolver) { + var deferred = Q.defer(); + + process.nextTick(function () { + deferred.notify({ + level: 'action', + id: 'resolve', + message: resolver.getSource() + '#' + resolver.getTarget() + }); + }); + // Resolve the resolver - return resolver.resolve() + resolver.resolve() // Store in the cache .then(function (canonicalPkg) { return this._resolveCache.store(canonicalPkg, resolver.getPkgMeta()); @@ -162,7 +165,10 @@ PackageRepository.prototype._resolve = function (resolver) { // Resolve promise with canonical package and package meta .then(function (dir) { return [dir, resolver.getPkgMeta()]; - }.bind(this)); + }.bind(this)) + .then(deferred.resolve, deferred.reject, deferred.notify); + + return deferred.promise; }; module.exports = PackageRepository; diff --git a/package.json b/package.json index d4221e6e..84ca2067 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "glob": "~3.2.1", "junk": "~0.2.0", "mkdirp": "~0.3.5", - "mout": "~0.4.0", + "mout": "~0.6.0", "ncp": "~0.4.2", "nopt": "~2.1.1", "q": "~0.9.2",