From 69b264cf01b9535c18c47cfd183a0581f7c6fd68 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 13 May 2018 23:06:27 +0200
Subject: [PATCH] =?UTF-8?q?fix(npm):=20don=E2=80=99t=20read=20npmrc=20file?=
 =?UTF-8?q?s=20if=20ignoreNpmrcFiles=3Dtrue?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 lib/manager/npm/extract/index.js              | 15 +++++++------
 lib/manager/npm/post-update/index.js          |  6 +-----
 .../repository/extract/manager-files.js       |  7 ++++++-
 lib/workers/repository/init/config.js         |  2 +-
 test/manager/npm/extract/index.spec.js        | 21 +++++++++++++------
 5 files changed, 32 insertions(+), 19 deletions(-)

diff --git a/lib/manager/npm/extract/index.js b/lib/manager/npm/extract/index.js
index bf147185dd..8ab423c9fc 100644
--- a/lib/manager/npm/extract/index.js
+++ b/lib/manager/npm/extract/index.js
@@ -9,7 +9,7 @@ module.exports = {
   postExtract,
 };
 
-async function extractDependencies(content, packageFile) {
+async function extractDependencies(content, packageFile, config) {
   logger.debug(`npm.extractDependencies(${packageFile})`);
   logger.trace({ content });
   const deps = [];
@@ -46,11 +46,14 @@ async function extractDependencies(content, packageFile) {
   delete lockFiles.packageLock;
   delete lockFiles.shrinkwrapJson;
 
-  let npmrc = await platform.getFile(
-    upath.join(path.dirname(packageFile), '.npmrc')
-  );
-  if (!npmrc) {
-    npmrc = undefined;
+  let npmrc;
+  if (!config.ignoreNpmrcFile) {
+    npmrc = await platform.getFile(
+      upath.join(path.dirname(packageFile), '.npmrc')
+    );
+    if (!npmrc) {
+      npmrc = undefined;
+    }
   }
 
   let lernaDir;
diff --git a/lib/manager/npm/post-update/index.js b/lib/manager/npm/post-update/index.js
index 1594cd5855..f9ae03ad91 100644
--- a/lib/manager/npm/post-update/index.js
+++ b/lib/manager/npm/post-update/index.js
@@ -169,11 +169,7 @@ async function writeExistingFiles(config, packageFiles) {
         );
       }
     }
-    let { npmrc } = config;
-    if (packageFile.npmrc && !config.ignoreNpmrc) {
-      logger.debug('Using package.json .npmrc');
-      npmrc = npmrc || packageFile.npmrc;
-    }
+    const npmrc = packageFile.npmrc || config.npmrc;
     if (npmrc) {
       await fs.outputFile(upath.join(basedir, '.npmrc'), npmrc);
     }
diff --git a/lib/workers/repository/extract/manager-files.js b/lib/workers/repository/extract/manager-files.js
index 4f118298ef..f54d3ed3df 100644
--- a/lib/workers/repository/extract/manager-files.js
+++ b/lib/workers/repository/extract/manager-files.js
@@ -41,7 +41,12 @@ async function getManagerPackageFiles(config, managerConfig) {
   const packageFiles = [];
   for (const packageFile of matchedFiles) {
     const content = await platform.getFile(packageFile);
-    const res = await extractDependencies(manager, content, packageFile);
+    const res = await extractDependencies(
+      manager,
+      content,
+      packageFile,
+      config
+    );
     if (res) {
       packageFiles.push({
         packageFile,
diff --git a/lib/workers/repository/init/config.js b/lib/workers/repository/init/config.js
index 432a392992..a2d1d28969 100644
--- a/lib/workers/repository/init/config.js
+++ b/lib/workers/repository/init/config.js
@@ -22,7 +22,7 @@ async function mergeRenovateConfig(config) {
     const migratedConfig = await migrateAndValidate(config, renovateJson);
     const resolvedConfig = await presets.resolveConfigPresets(migratedConfig);
     if (resolvedConfig.npmrc) {
-      resolvedConfig.ignoreNpmrc = true;
+      resolvedConfig.ignoreNpmrcFile = true;
     }
     returnConfig = mergeChildConfig(returnConfig, resolvedConfig);
     returnConfig.renovateJsonPresent = true;
diff --git a/test/manager/npm/extract/index.spec.js b/test/manager/npm/extract/index.spec.js
index d10e126b65..64d62bbf6b 100644
--- a/test/manager/npm/extract/index.spec.js
+++ b/test/manager/npm/extract/index.spec.js
@@ -19,25 +19,32 @@ describe('manager/npm/extract', () => {
     it('returns null if cannot parse', async () => {
       const res = await npmExtract.extractDependencies(
         'not json',
-        'package.json'
+        'package.json',
+        {}
       );
       expect(res).toBe(null);
     });
     it('returns null if no deps', async () => {
-      const res = await npmExtract.extractDependencies('{}', 'package.json');
+      const res = await npmExtract.extractDependencies(
+        '{}',
+        'package.json',
+        {}
+      );
       expect(res).toBe(null);
     });
     it('handles invalid', async () => {
       const res = await npmExtract.extractDependencies(
         '{"dependencies": true, "devDependencies": []}',
-        'package.json'
+        'package.json',
+        {}
       );
       expect(res).toBe(null);
     });
     it('returns an array of dependencies', async () => {
       const res = await npmExtract.extractDependencies(
         input01Content,
-        'package.json'
+        'package.json',
+        {}
       );
       expect(res).toMatchSnapshot();
     });
@@ -50,7 +57,8 @@ describe('manager/npm/extract', () => {
       });
       const res = await npmExtract.extractDependencies(
         input01Content,
-        'package.json'
+        'package.json',
+        {}
       );
       expect(res).toMatchSnapshot();
     });
@@ -63,7 +71,8 @@ describe('manager/npm/extract', () => {
       });
       const res = await npmExtract.extractDependencies(
         input01Content,
-        'package.json'
+        'package.json',
+        {}
       );
       expect(res).toMatchSnapshot();
     });
-- 
GitLab