From 5b3d7a9f86297ce35d3a68e3390e91f10c976a61 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Fri, 30 Mar 2018 07:38:38 +0200
Subject: [PATCH] refactor: use common manager resolve function

---
 lib/manager/bazel/index.js          |  2 --
 lib/manager/bazel/resolve.js        | 18 ------------------
 lib/manager/circleci/index.js       |  4 ++--
 lib/manager/circleci/resolve.js     | 19 -------------------
 lib/manager/docker-compose/index.js |  2 ++
 lib/manager/index.js                | 28 ++++++++++++++++++++++------
 lib/manager/meteor/index.js         |  2 --
 lib/manager/meteor/resolve.js       | 18 ------------------
 lib/manager/nvm/index.js            |  4 ++--
 lib/manager/nvm/resolve.js          | 19 -------------------
 lib/manager/travis/index.js         |  4 ++--
 lib/manager/travis/resolve.js       | 19 -------------------
 12 files changed, 30 insertions(+), 109 deletions(-)
 delete mode 100644 lib/manager/bazel/resolve.js
 delete mode 100644 lib/manager/circleci/resolve.js
 delete mode 100644 lib/manager/meteor/resolve.js
 delete mode 100644 lib/manager/nvm/resolve.js
 delete mode 100644 lib/manager/travis/resolve.js

diff --git a/lib/manager/bazel/index.js b/lib/manager/bazel/index.js
index 2b8661f14c..9dff093317 100644
--- a/lib/manager/bazel/index.js
+++ b/lib/manager/bazel/index.js
@@ -1,6 +1,5 @@
 const { extractDependencies } = require('./extract');
 const { getPackageUpdates } = require('./package');
-const { resolvePackageFile } = require('./resolve');
 const { updateDependency } = require('./update');
 
 const filePattern = new RegExp('(^|/)WORKSPACE$');
@@ -11,6 +10,5 @@ module.exports = {
   extractDependencies,
   filePattern,
   getPackageUpdates,
-  resolvePackageFile,
   updateDependency,
 };
diff --git a/lib/manager/bazel/resolve.js b/lib/manager/bazel/resolve.js
deleted file mode 100644
index 95dbb2415e..0000000000
--- a/lib/manager/bazel/resolve.js
+++ /dev/null
@@ -1,18 +0,0 @@
-const configParser = require('../../config');
-
-module.exports = {
-  resolvePackageFile,
-};
-
-async function resolvePackageFile(config, inputFile) {
-  const packageFile = configParser.mergeChildConfig(config.bazel, inputFile);
-  logger.debug(
-    `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}`
-  );
-  packageFile.content = await platform.getFile(packageFile.packageFile);
-  if (!packageFile.content) {
-    logger.debug('No packageFile content');
-    return null;
-  }
-  return packageFile;
-}
diff --git a/lib/manager/circleci/index.js b/lib/manager/circleci/index.js
index 12f9387763..068d2f113c 100644
--- a/lib/manager/circleci/index.js
+++ b/lib/manager/circleci/index.js
@@ -1,16 +1,16 @@
 const { extractDependencies } = require('./extract');
 const { getPackageUpdates } = require('../docker/package');
-const { resolvePackageFile } = require('./resolve');
 const { updateDependency } = require('./update');
 
 const filePattern = new RegExp('^.circleci/config.yml$');
 const contentPattern = new RegExp('(^|\\n)\\s*- image: ');
+const parentManager = 'docker';
 
 module.exports = {
   contentPattern,
   extractDependencies,
   filePattern,
   getPackageUpdates,
-  resolvePackageFile,
+  parentManager,
   updateDependency,
 };
diff --git a/lib/manager/circleci/resolve.js b/lib/manager/circleci/resolve.js
deleted file mode 100644
index 0e45b03da8..0000000000
--- a/lib/manager/circleci/resolve.js
+++ /dev/null
@@ -1,19 +0,0 @@
-const { mergeChildConfig } = require('../../config');
-
-module.exports = {
-  resolvePackageFile,
-};
-
-async function resolvePackageFile(config, inputFile) {
-  const composeConfig = mergeChildConfig(config.docker, config.circleci);
-  const packageFile = mergeChildConfig(composeConfig, inputFile);
-  logger.debug(
-    `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}`
-  );
-  packageFile.content = await platform.getFile(packageFile.packageFile);
-  if (!packageFile.content) {
-    logger.debug('No packageFile content');
-    return null;
-  }
-  return packageFile;
-}
diff --git a/lib/manager/docker-compose/index.js b/lib/manager/docker-compose/index.js
index a496cca168..3f5ed7f32a 100644
--- a/lib/manager/docker-compose/index.js
+++ b/lib/manager/docker-compose/index.js
@@ -5,12 +5,14 @@ const { updateDependency } = require('./update');
 
 const filePattern = new RegExp('(^|/)docker-compose[^/]*\\.ya?ml$');
 const contentPattern = new RegExp('(^|\\n)\\s*image:');
+const parentManager = 'docker';
 
 module.exports = {
   contentPattern,
   extractDependencies,
   filePattern,
   getPackageUpdates,
+  parentManager,
   resolvePackageFile,
   updateDependency,
 };
diff --git a/lib/manager/index.js b/lib/manager/index.js
index 295c903747..3868e48f2f 100644
--- a/lib/manager/index.js
+++ b/lib/manager/index.js
@@ -159,11 +159,12 @@ async function resolvePackageFiles(config) {
       ? config.packageFiles
       : await detectPackageFiles(config);
   logger.debug({ allPackageFiles }, 'allPackageFiles');
-  function resolvePackageFile(p) {
-    const packageFile = typeof p === 'string' ? { packageFile: p } : p;
+  async function resolvePackageFile(p) {
+    let packageFile = typeof p === 'string' ? { packageFile: p } : p;
     const fileName = packageFile.packageFile.split('/').pop();
     packageFile.manager = packageFile.manager || getManager(fileName);
-    if (!packageFile.manager) {
+    const { manager } = packageFile;
+    if (!manager) {
       // Config error
       const error = new Error('config-validation');
       error.configFile = packageFile.packageFile;
@@ -172,10 +173,25 @@ async function resolvePackageFiles(config) {
         'Please correct the file name in your packageFiles array';
       throw error;
     }
-    return managers[packageFile.manager].resolvePackageFile(
-      config,
-      packageFile
+    if (managers[manager].resolvePackageFile) {
+      return managers[manager].resolvePackageFile(config, packageFile);
+    }
+    const { parentManager } = managers[manager];
+    const parentManagerConfig = parentManager ? config[parentManager] : {};
+    const managerConfig = mergeChildConfig(
+      parentManagerConfig,
+      config[manager]
+    );
+    packageFile = mergeChildConfig(managerConfig, packageFile);
+    logger.debug(
+      `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}`
     );
+    packageFile.content = await platform.getFile(packageFile.packageFile);
+    if (!packageFile.content) {
+      logger.debug('No packageFile content');
+      return null;
+    }
+    return packageFile;
   }
   // TODO: throttle how many we resolve in parallel
   const queue = allPackageFiles.map(p => resolvePackageFile(p));
diff --git a/lib/manager/meteor/index.js b/lib/manager/meteor/index.js
index fab391044a..8b13499f40 100644
--- a/lib/manager/meteor/index.js
+++ b/lib/manager/meteor/index.js
@@ -1,6 +1,5 @@
 const { extractDependencies } = require('./extract');
 const { getPackageUpdates } = require('../npm/package');
-const { resolvePackageFile } = require('./resolve');
 const { updateDependency } = require('./update');
 
 const filePattern = new RegExp('(^|/)package.js$');
@@ -11,6 +10,5 @@ module.exports = {
   extractDependencies,
   filePattern,
   getPackageUpdates,
-  resolvePackageFile,
   updateDependency,
 };
diff --git a/lib/manager/meteor/resolve.js b/lib/manager/meteor/resolve.js
deleted file mode 100644
index e44ae381f0..0000000000
--- a/lib/manager/meteor/resolve.js
+++ /dev/null
@@ -1,18 +0,0 @@
-const configParser = require('../../config');
-
-module.exports = {
-  resolvePackageFile,
-};
-
-async function resolvePackageFile(config, inputFile) {
-  const packageFile = configParser.mergeChildConfig(config.meteor, inputFile);
-  logger.debug(
-    `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}`
-  );
-  packageFile.content = await platform.getFile(packageFile.packageFile);
-  if (!packageFile.content) {
-    logger.debug('No packageFile content');
-    return null;
-  }
-  return packageFile;
-}
diff --git a/lib/manager/nvm/index.js b/lib/manager/nvm/index.js
index 91e5d8175f..57f3860c91 100644
--- a/lib/manager/nvm/index.js
+++ b/lib/manager/nvm/index.js
@@ -1,14 +1,14 @@
 const { extractDependencies } = require('./extract');
 const { getPackageUpdates } = require('./package');
-const { resolvePackageFile } = require('./resolve');
 const { updateDependency } = require('./update');
 
 const filePattern = new RegExp('^.nvmrc$');
+const parentManager = 'node';
 
 module.exports = {
   extractDependencies,
   filePattern,
   getPackageUpdates,
-  resolvePackageFile,
+  parentManager,
   updateDependency,
 };
diff --git a/lib/manager/nvm/resolve.js b/lib/manager/nvm/resolve.js
deleted file mode 100644
index f39498a03f..0000000000
--- a/lib/manager/nvm/resolve.js
+++ /dev/null
@@ -1,19 +0,0 @@
-const { mergeChildConfig } = require('../../config');
-
-module.exports = {
-  resolvePackageFile,
-};
-
-async function resolvePackageFile(config, inputFile) {
-  const nvmConfig = mergeChildConfig(config.node, config.nvm);
-  const packageFile = mergeChildConfig(nvmConfig, inputFile);
-  logger.debug(
-    `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}`
-  );
-  packageFile.content = await platform.getFile(packageFile.packageFile);
-  if (!packageFile.content) {
-    logger.debug('No packageFile content');
-    return null;
-  }
-  return packageFile;
-}
diff --git a/lib/manager/travis/index.js b/lib/manager/travis/index.js
index 243cfe117a..4feb1b8da0 100644
--- a/lib/manager/travis/index.js
+++ b/lib/manager/travis/index.js
@@ -1,16 +1,16 @@
 const { extractDependencies } = require('./extract');
 const { getPackageUpdates } = require('./package');
-const { resolvePackageFile } = require('./resolve');
 const { updateDependency } = require('./update');
 
 const filePattern = new RegExp('^.travis.yml$');
 const contentPattern = new RegExp('(^|\\n)node_js:\\n');
+const parentManager = 'node';
 
 module.exports = {
   contentPattern,
   extractDependencies,
   filePattern,
   getPackageUpdates,
-  resolvePackageFile,
+  parentManager,
   updateDependency,
 };
diff --git a/lib/manager/travis/resolve.js b/lib/manager/travis/resolve.js
deleted file mode 100644
index 7690135862..0000000000
--- a/lib/manager/travis/resolve.js
+++ /dev/null
@@ -1,19 +0,0 @@
-const { mergeChildConfig } = require('../../config');
-
-module.exports = {
-  resolvePackageFile,
-};
-
-async function resolvePackageFile(config, inputFile) {
-  const travisConfig = mergeChildConfig(config.node, config.travis);
-  const packageFile = mergeChildConfig(travisConfig, inputFile);
-  logger.debug(
-    `Resolving packageFile ${JSON.stringify(packageFile.packageFile)}`
-  );
-  packageFile.content = await platform.getFile(packageFile.packageFile);
-  if (!packageFile.content) {
-    logger.debug('No packageFile content');
-    return null;
-  }
-  return packageFile;
-}
-- 
GitLab