diff --git a/lib/core.js b/lib/core.js index d1fb3075..e8b2ca9a 100644 --- a/lib/core.js +++ b/lib/core.js @@ -73,6 +73,7 @@ const parseName = function(pkg) { // Fetch package info json from registry const fetchPackageInfo = async function(name, registry) { if (!registry) registry = env.registry; + log.debug(`fetchPackageInfo: ${name} registry=${registry}`); try { let pkgUrl = `${registry}/${name}`; log.debug(`http get ${pkgUrl}`); @@ -102,6 +103,7 @@ const fetchPackageInfo = async function(name, registry) { ] */ const fetchPackageDependencies = async function({ name, version, deep }) { + log.debug(`fetchPackageDependencies: ${name}@${version} deep=${deep}`); // a list of pending dependency {name, version} const pendingList = [{ name, version }]; // a list of processed dependency {name, version} @@ -123,22 +125,33 @@ const fetchPackageDependencies = async function({ name, version, deep }) { self: entry.name == name }; if (!validDep.module) { - // fetch package info - let pkgInfo = cachedPacakgeInfoDict[entry.name]; + // try fetching package info from cache + let { pkgInfo, upstream } = _.get(cachedPacakgeInfoDict, entry.name, { + pkgInfo: null, + upstream: false + }); + if (pkgInfo) { + validDep.upstream = upstream; + } + // try fetching package info from the default registry if (!pkgInfo) { pkgInfo = await fetchPackageInfo(entry.name); - if (pkgInfo) cachedPacakgeInfoDict[entry.name] = pkgInfo; + if (pkgInfo) { + validDep.upstream = false; + cachedPacakgeInfoDict[entry.name] = { pkgInfo, upstream: false }; + } } + // try fetching package info from the upstream registry if (!pkgInfo) { pkgInfo = await fetchPackageInfo(entry.name, env.upstreamRegistry); if (pkgInfo) { validDep.upstream = true; - cachedPacakgeInfoDict[entry.name] = pkgInfo; + cachedPacakgeInfoDict[entry.name] = { pkgInfo, upstream: true }; } } // handle package not exist if (!pkgInfo) { - log.warn(`package not found: ${entry.name}`); + log.warn(`invalid dep: ${entry.name}`); continue; } // verify version @@ -169,7 +182,11 @@ const fetchPackageDependencies = async function({ name, version, deep }) { } } validDeps.push(validDep); - log.debug(`- ${entry.name}@${entry.version}`); + log.debug( + `valid dep: ${entry.name}@${entry.version} ${ + validDep.module ? "module " : "" + }${validDep.upstream ? "upstream" : ""}` + ); } } return validDeps; diff --git a/test/test-cmd-deps.js b/test/test-cmd-deps.js index 3250e156..b863325a 100644 --- a/test/test-cmd-deps.js +++ b/test/test-cmd-deps.js @@ -142,7 +142,7 @@ describe("cmd-deps.js", function() { retCode.should.equal(0); stderr .captured() - .includes("package not found") + .includes("invalid dep") .should.be.ok(); }); it("deps pkg upstream", async function() {