From e50d9c1f05c6f6fa38cf026f230dde45da614f3b Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sat, 17 Mar 2018 06:07:39 +0100
Subject: [PATCH] feat: mirrorMode
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

adds feature mirrorMode, aimed for “shadowing” a target repository.
---
 lib/config/definitions.js             |  9 +++++++++
 lib/workers/repository/init/config.js | 19 +++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/lib/config/definitions.js b/lib/config/definitions.js
index b66fb0b600..ddf102736f 100644
--- a/lib/config/definitions.js
+++ b/lib/config/definitions.js
@@ -99,6 +99,15 @@ const options = [
     default: false,
     admin: true,
   },
+  {
+    name: 'mirrorMode',
+    description:
+      'Set to true if Renovate should use fork mode with a renovate.json in branch `renovate-config`',
+    stage: 'repository',
+    type: 'boolean',
+    default: false,
+    admin: true,
+  },
   // encryption
   {
     name: 'privateKey',
diff --git a/lib/workers/repository/init/config.js b/lib/workers/repository/init/config.js
index b99c3df553..c8802f571f 100644
--- a/lib/workers/repository/init/config.js
+++ b/lib/workers/repository/init/config.js
@@ -8,6 +8,25 @@ const presets = require('../../../config/presets');
 // Check for config in `renovate.json`
 async function mergeRenovateConfig(config) {
   let returnConfig = { ...config };
+  // istanbul ignore if
+  if (config.mirrorMode) {
+    logger.info('Repository is in mirror mode');
+    let renovateJson;
+    try {
+      renovateJson = JSON.parse(
+        await platform.getFile('renovate.json', 'renovate-config')
+      );
+      logger.info('Found mirror config');
+    } catch (err) {
+      logger.debug('No mirror config found - using default config');
+      renovateJson = { extends: ['config:base'] };
+    }
+    const migratedConfig = migrateAndValidate(config, renovateJson);
+    const resolvedConfig = await presets.resolveConfigPresets(migratedConfig);
+    returnConfig = mergeChildConfig(returnConfig, resolvedConfig);
+    returnConfig.renovateJsonPresent = true;
+    return returnConfig;
+  }
   const fileList = await platform.getFileList();
   let configFile;
   if (fileList.includes('renovate.json')) {
-- 
GitLab