From 6530480410b740b64d5536e86f25948c4c4deac4 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 4 Mar 2018 20:03:52 +0100
Subject: [PATCH] refactor: simplify detectPackageFiles

---
 lib/manager/bazel/detect.js  | 19 -------------------
 lib/manager/bazel/index.js   |  6 +++---
 lib/manager/docker/detect.js | 23 -----------------------
 lib/manager/docker/index.js  |  6 +++---
 lib/manager/index.js         | 15 +++++++++++++--
 lib/manager/meteor/detect.js | 19 -------------------
 lib/manager/meteor/index.js  |  6 +++---
 lib/manager/npm/index.js     |  2 +-
 lib/manager/nvm/index.js     |  2 +-
 lib/manager/travis/index.js  |  2 +-
 test/manager/index.spec.js   |  2 ++
 11 files changed, 27 insertions(+), 75 deletions(-)
 delete mode 100644 lib/manager/bazel/detect.js
 delete mode 100644 lib/manager/docker/detect.js
 delete mode 100644 lib/manager/meteor/detect.js

diff --git a/lib/manager/bazel/detect.js b/lib/manager/bazel/detect.js
deleted file mode 100644
index 5733855e23..0000000000
--- a/lib/manager/bazel/detect.js
+++ /dev/null
@@ -1,19 +0,0 @@
-module.exports = {
-  detectPackageFiles,
-};
-
-async function detectPackageFiles(config, fileList) {
-  logger.debug('bazel.detectPackageFiles()');
-  const packageFiles = [];
-  if (config.bazel.enabled) {
-    for (const file of fileList) {
-      if (file === 'WORKSPACE' || file.endsWith('/WORKSPACE')) {
-        const content = await platform.getFile(file);
-        if (content && content.match(/(^|\n)git_repository\(/)) {
-          packageFiles.push(file);
-        }
-      }
-    }
-  }
-  return packageFiles;
-}
diff --git a/lib/manager/bazel/index.js b/lib/manager/bazel/index.js
index 2781d0b590..dfab0a11b5 100644
--- a/lib/manager/bazel/index.js
+++ b/lib/manager/bazel/index.js
@@ -1,13 +1,13 @@
-const { detectPackageFiles } = require('./detect');
 const { extractDependencies } = require('./extract');
 const { getPackageUpdates } = require('./package');
 const { resolvePackageFile } = require('./resolve');
 const { setNewValue } = require('./update');
 
-const filePattern = '(^|/)WORKSPACE$';
+const filePattern = new RegExp('(^|/)WORKSPACE$');
+const contentPattern = new RegExp('(^|\\n)git_repository\\(');
 
 module.exports = {
-  detectPackageFiles,
+  contentPattern,
   extractDependencies,
   filePattern,
   getPackageUpdates,
diff --git a/lib/manager/docker/detect.js b/lib/manager/docker/detect.js
deleted file mode 100644
index c2c0bb3ba8..0000000000
--- a/lib/manager/docker/detect.js
+++ /dev/null
@@ -1,23 +0,0 @@
-module.exports = {
-  detectPackageFiles,
-};
-
-async function detectPackageFiles(config, fileList) {
-  logger.debug('docker.detectPackageFiles()');
-  const packageFiles = [];
-  if (config.docker.enabled) {
-    for (const file of fileList) {
-      if (file === 'Dockerfile' || file.endsWith('/Dockerfile')) {
-        const content = await platform.getFile(file);
-        if (content) {
-          if (content.match(/(^|\n)FROM .+\n/)) {
-            packageFiles.push(file);
-          }
-        } else {
-          logger.warn({ file }, 'No Dockerfile content');
-        }
-      }
-    }
-  }
-  return packageFiles;
-}
diff --git a/lib/manager/docker/index.js b/lib/manager/docker/index.js
index 897fa70065..e29d5de650 100644
--- a/lib/manager/docker/index.js
+++ b/lib/manager/docker/index.js
@@ -1,13 +1,13 @@
-const { detectPackageFiles } = require('./detect');
 const { extractDependencies } = require('./extract');
 const { getPackageUpdates } = require('./package');
 const { resolvePackageFile } = require('./resolve');
 const { setNewValue } = require('./update');
 
-const filePattern = '(^|/)Dockerfile$';
+const filePattern = new RegExp('(^|/)Dockerfile$');
+const contentPattern = new RegExp('(^|\\n)FROM .+\\n', 'i');
 
 module.exports = {
-  detectPackageFiles,
+  contentPattern,
   extractDependencies,
   filePattern,
   getPackageUpdates,
diff --git a/lib/manager/index.js b/lib/manager/index.js
index 5e9cf01f95..b550b8bf9a 100644
--- a/lib/manager/index.js
+++ b/lib/manager/index.js
@@ -30,13 +30,24 @@ async function detectPackageFiles(config) {
   );
   for (const manager of managerList) {
     logger.debug(`Detecting package files (${manager})`);
-    let files;
+    let files = [];
     if (managers[manager].detectPackageFiles) {
       files = await managers[manager].detectPackageFiles(config, fileList);
     } else {
-      files = fileList.filter(file =>
+      const allfiles = fileList.filter(file =>
         file.match(managers[manager].filePattern)
       );
+      for (const file of allfiles) {
+        const { contentPattern } = managers[manager];
+        if (contentPattern) {
+          const content = await platform.getFile(file);
+          if (content && content.match(contentPattern)) {
+            files.push(file);
+          }
+        } else {
+          files.push(file);
+        }
+      }
     }
     if (files.length) {
       logger.info({ manager, files }, `Detected package files`);
diff --git a/lib/manager/meteor/detect.js b/lib/manager/meteor/detect.js
deleted file mode 100644
index 079753a5f0..0000000000
--- a/lib/manager/meteor/detect.js
+++ /dev/null
@@ -1,19 +0,0 @@
-module.exports = {
-  detectPackageFiles,
-};
-
-async function detectPackageFiles(config, fileList) {
-  logger.debug('meteor.detectPackageFiles()');
-  const packageFiles = [];
-  if (config.meteor.enabled) {
-    for (const file of fileList) {
-      if (file === 'package.js' || file.endsWith('/package.js')) {
-        const content = await platform.getFile(file);
-        if (content && content.replace(/\s/g, '').includes('Npm.depends({')) {
-          packageFiles.push(file);
-        }
-      }
-    }
-  }
-  return packageFiles;
-}
diff --git a/lib/manager/meteor/index.js b/lib/manager/meteor/index.js
index 4b403b1384..ef29e697ce 100644
--- a/lib/manager/meteor/index.js
+++ b/lib/manager/meteor/index.js
@@ -1,13 +1,13 @@
-const { detectPackageFiles } = require('./detect');
 const { extractDependencies } = require('./extract');
 const { getPackageUpdates } = require('../npm/package');
 const { resolvePackageFile } = require('./resolve');
 const { setNewValue } = require('./update');
 
-const filePattern = '(^|/)package.js$';
+const filePattern = new RegExp('(^|/)package.js$');
+const contentPattern = new RegExp('(^|\\n)\\s*Npm.depends\\(\\s*{');
 
 module.exports = {
-  detectPackageFiles,
+  contentPattern,
   extractDependencies,
   filePattern,
   getPackageUpdates,
diff --git a/lib/manager/npm/index.js b/lib/manager/npm/index.js
index 2b9cb0953a..58f7fe187f 100644
--- a/lib/manager/npm/index.js
+++ b/lib/manager/npm/index.js
@@ -4,7 +4,7 @@ const { getPackageUpdates } = require('./package');
 const { resolvePackageFile } = require('./resolve');
 const { setNewValue } = require('./update');
 
-const filePattern = '(^|/)package.json$';
+const filePattern = new RegExp('(^|/)package.json$');
 
 module.exports = {
   detectPackageFiles,
diff --git a/lib/manager/nvm/index.js b/lib/manager/nvm/index.js
index 1994de8761..3e0c887284 100644
--- a/lib/manager/nvm/index.js
+++ b/lib/manager/nvm/index.js
@@ -3,7 +3,7 @@ const { getPackageUpdates } = require('./package');
 const { resolvePackageFile } = require('./resolve');
 const { setNewValue } = require('./update');
 
-const filePattern = '^.nvmrc$';
+const filePattern = new RegExp('^.nvmrc$');
 
 module.exports = {
   extractDependencies,
diff --git a/lib/manager/travis/index.js b/lib/manager/travis/index.js
index 7149d5974d..d3e12e07bf 100644
--- a/lib/manager/travis/index.js
+++ b/lib/manager/travis/index.js
@@ -3,7 +3,7 @@ const { getPackageUpdates } = require('./package');
 const { resolvePackageFile } = require('./resolve');
 const { setNewValue } = require('./update');
 
-const filePattern = '^.travis.yml$';
+const filePattern = new RegExp('^.travis.yml$');
 
 module.exports = {
   extractDependencies,
diff --git a/test/manager/index.spec.js b/test/manager/index.spec.js
index 8636d25396..03651df944 100644
--- a/test/manager/index.spec.js
+++ b/test/manager/index.spec.js
@@ -90,6 +90,7 @@ describe('manager', () => {
       platform.getFileList.mockReturnValueOnce([
         'WORKSPACE',
         'other/WORKSPACE',
+        'empty/WORKSPACE',
       ]);
       platform.getFile.mockReturnValueOnce('\n\ngit_repository(\n\n)\n');
       platform.getFile.mockReturnValueOnce(
@@ -98,6 +99,7 @@ describe('manager', () => {
           'utf8'
         )
       );
+      platform.getFile.mockReturnValueOnce('foo');
       const res = await manager.detectPackageFiles(config);
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(2);
-- 
GitLab