From 10012f343ad9ad89e8e56a1fc28b7ed1ec8bae0b Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Wed, 9 May 2018 09:45:10 +0200
Subject: [PATCH] fix: manager -> lernaClient

---
 lib/manager/npm/extract/monorepo.js           |  1 +
 lib/manager/npm/post-update/index.js          | 25 ++++++++++++-------
 lib/manager/npm/post-update/lerna.js          | 10 ++++----
 .../__snapshots__/monorepo.spec.js.snap       |  4 +++
 test/workers/branch/lock-files/index.spec.js  |  6 ++---
 5 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/lib/manager/npm/extract/monorepo.js b/lib/manager/npm/extract/monorepo.js
index da1a4a81bb..6b4ca6b9e2 100644
--- a/lib/manager/npm/extract/monorepo.js
+++ b/lib/manager/npm/extract/monorepo.js
@@ -48,6 +48,7 @@ function detectMonorepos(packageFiles) {
           name => name !== subPackage.packageJsonName
         );
         subPackage.lernaDir = lernaDir;
+        subPackage.lernaClient = lernaClient;
         subPackage.yarnLock = subPackage.yarnLock || yarnLock;
         subPackage.npmLock = subPackage.npmLock || npmLock;
       }
diff --git a/lib/manager/npm/post-update/index.js b/lib/manager/npm/post-update/index.js
index 0aa80cf48a..466d4fb677 100644
--- a/lib/manager/npm/post-update/index.js
+++ b/lib/manager/npm/post-update/index.js
@@ -30,7 +30,10 @@ function determineLockFileDirs(config, packageFiles) {
       // TODO: support lerna
       // Return every directory that contains a lockfile
       for (const packageFile of packageFiles.npm) {
-        if (packageFile.lernaDir) {
+        if (
+          packageFile.lernaDir &&
+          (packageFile.npmLock || packageFile.yarnLock)
+        ) {
           lernaDirs.push(packageFile.lernaDir);
         } else {
           yarnLockDirs.push(packageFile.yarnLock);
@@ -63,7 +66,7 @@ function determineLockFileDirs(config, packageFiles) {
     logger.debug(`Checking ${p.name} for lock files`);
     const packageFile = getPackageFile(p.name);
     // lerna first
-    if (packageFile.lernaDir) {
+    if (packageFile.lernaDir && (packageFile.npmLock || packageFile.yarnLock)) {
       logger.debug(`${packageFile.packageFile} has lerna lock file`);
       lernaDirs.push(packageFile.lernaDir);
     } else {
@@ -520,17 +523,21 @@ async function getAdditionalFiles(config, packageFiles) {
   }
 
   if (dirs.lernaDirs && dirs.lernaDirs.length) {
-    let manager;
     let lockFile;
     if (config.lernaClient === 'npm') {
-      manager = 'npm';
-      lockFile = 'package-lock.json';
+      lockFile = config.npmLock || 'package-lock.json';
     } else {
-      manager = 'yarn';
-      lockFile = 'yarn.lock';
+      lockFile = config.yarnLock || 'yarn.lock';
     }
-    logger.debug({ manager, lockFile }, 'Generating lock files using lerna');
-    const res = await lerna.generateLockFiles(manager, config.tmpDir.path, env);
+    logger.debug(
+      { lernaClient: config.lernaClient, lockFile },
+      'Generating lock files using lerna'
+    );
+    const res = await lerna.generateLockFiles(
+      config.lernaClient,
+      config.tmpDir.path,
+      env
+    );
     // istanbul ignore else
     if (res.error) {
       // istanbul ignore if
diff --git a/lib/manager/npm/post-update/lerna.js b/lib/manager/npm/post-update/lerna.js
index f20cd0dd49..2e80f9e217 100644
--- a/lib/manager/npm/post-update/lerna.js
+++ b/lib/manager/npm/post-update/lerna.js
@@ -4,8 +4,8 @@ module.exports = {
   generateLockFiles,
 };
 
-async function generateLockFiles(manager, tmpDir, env) {
-  logger.debug(`Spawning lerna to create lock files`);
+async function generateLockFiles(lernaClient, tmpDir, env) {
+  logger.debug(`Spawning lerna with ${lernaClient} to create lock files`);
   let stdout;
   let stderr;
   try {
@@ -22,10 +22,10 @@ async function generateLockFiles(manager, tmpDir, env) {
     lernaVersion = lernaVersion || 'latest';
     logger.debug('Using lerna version ' + lernaVersion);
     const params =
-      manager === 'npm'
+      lernaClient === 'npm'
         ? '--package-lock-only'
         : '--ignore-scripts --ignore-engines --ignore-platform --mutex network:31879';
-    const cmd = `${manager} install ${params} && npx lerna@${lernaVersion} bootstrap -- ${params}`;
+    const cmd = `${lernaClient} install ${params} && npx lerna@${lernaVersion} bootstrap -- ${params}`;
     logger.debug({ cmd });
     // TODO: Switch to native util.promisify once using only node 8
     ({ stdout, stderr } = await exec(cmd, {
@@ -38,7 +38,7 @@ async function generateLockFiles(manager, tmpDir, env) {
     const duration = process.hrtime(startTime);
     const seconds = Math.round(duration[0] + duration[1] / 1e9);
     logger.info(
-      { type: 'lerna', seconds, manager, stdout, stderr },
+      { type: 'lerna', seconds, lernaClient, stdout, stderr },
       'Generated lockfile'
     );
   } catch (err) /* istanbul ignore next */ {
diff --git a/test/manager/npm/extract/__snapshots__/monorepo.spec.js.snap b/test/manager/npm/extract/__snapshots__/monorepo.spec.js.snap
index afa5ecca68..df1c4fda7c 100644
--- a/test/manager/npm/extract/__snapshots__/monorepo.spec.js.snap
+++ b/test/manager/npm/extract/__snapshots__/monorepo.spec.js.snap
@@ -10,6 +10,7 @@ Array [
     "packageFile": "package.json",
   },
   Object {
+    "lernaClient": undefined,
     "lernaDir": ".",
     "monorepoPackages": Array [
       "@org/b",
@@ -20,6 +21,7 @@ Array [
     "yarnLock": undefined,
   },
   Object {
+    "lernaClient": undefined,
     "lernaDir": ".",
     "monorepoPackages": Array [
       "@org/a",
@@ -46,6 +48,7 @@ Array [
     ],
   },
   Object {
+    "lernaClient": "yarn",
     "lernaDir": ".",
     "monorepoPackages": Array [
       "@org/b",
@@ -56,6 +59,7 @@ Array [
     "yarnLock": undefined,
   },
   Object {
+    "lernaClient": "yarn",
     "lernaDir": ".",
     "monorepoPackages": Array [
       "@org/a",
diff --git a/test/workers/branch/lock-files/index.spec.js b/test/workers/branch/lock-files/index.spec.js
index cc3622e87f..5cca0fad0c 100644
--- a/test/workers/branch/lock-files/index.spec.js
+++ b/test/workers/branch/lock-files/index.spec.js
@@ -97,7 +97,7 @@ describe('manager/npm/post-update', () => {
       expect(res.yarnLockDirs[0]).toEqual('.');
     });
     it('returns root directory if using lerna package lock', () => {
-      config.lernaLockFile = 'yarn';
+      config.lernaClient = 'yarn';
       config.upgrades = [{}];
       config.packageFiles = [
         {
@@ -364,7 +364,7 @@ describe('manager/npm/post-update', () => {
         lernaDirs: ['.'],
       });
       config.packageFiles = [];
-      config.lernaLockFile = 'npm';
+      config.lernaClient = 'npm';
       lerna.generateLockFiles.mockReturnValueOnce({ error: false });
       const res = await getAdditionalFiles(config);
       expect(res).toMatchSnapshot();
@@ -377,7 +377,7 @@ describe('manager/npm/post-update', () => {
         pnpmShrinkwrapDirs: [],
         lernaDirs: ['.'],
       });
-      config.lernaLockFile = 'yarn';
+      config.lernaClient = 'yarn';
       lerna.generateLockFiles.mockReturnValueOnce({ error: true });
       const res = await getAdditionalFiles(config);
       expect(res).toMatchSnapshot();
-- 
GitLab