From 79608dffaa69d29cdebecd97e47a273615b3100d Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Wed, 15 Apr 2020 10:33:00 +0200
Subject: [PATCH] fix: allow parentDir/baseDir in branchName (#5967)

---
 lib/config/common.ts                          |  2 +-
 .../repository/process/lookup/rollback.ts     |  2 +-
 .../repository/updates/branchify.spec.ts      |  2 +
 lib/workers/repository/updates/branchify.ts   | 14 ++++
 .../repository/updates/generate.spec.ts       | 75 +------------------
 lib/workers/repository/updates/generate.ts    | 14 ----
 6 files changed, 21 insertions(+), 88 deletions(-)

diff --git a/lib/config/common.ts b/lib/config/common.ts
index 2e6469e29b..2d17cb5fc1 100644
--- a/lib/config/common.ts
+++ b/lib/config/common.ts
@@ -140,7 +140,7 @@ export interface RenovateConfig
   masterIssueChecks?: Record<string, string>;
   masterIssueRebaseAllOpen?: boolean;
   masterIssueTitle?: string;
-
+  packageFile?: string;
   packageRules?: PackageRule[];
   prConcurrentLimit?: number;
   prHourlyLimit?: number;
diff --git a/lib/workers/repository/process/lookup/rollback.ts b/lib/workers/repository/process/lookup/rollback.ts
index ab030b66d7..e7a74ce49d 100644
--- a/lib/workers/repository/process/lookup/rollback.ts
+++ b/lib/workers/repository/process/lookup/rollback.ts
@@ -5,7 +5,7 @@ import { LookupUpdate } from '../../../../manager/common';
 export interface RollbackConfig {
   currentValue?: string;
   depName?: string;
-  packageFile: string;
+  packageFile?: string;
   versioning: string;
 }
 
diff --git a/lib/workers/repository/updates/branchify.spec.ts b/lib/workers/repository/updates/branchify.spec.ts
index dd793fee8a..fc76231228 100644
--- a/lib/workers/repository/updates/branchify.spec.ts
+++ b/lib/workers/repository/updates/branchify.spec.ts
@@ -29,6 +29,7 @@ describe('workers/repository/updates/branchify', () => {
           version: '1.1.0',
           prTitle: 'some-title',
           updateType: 'minor',
+          packageFile: 'foo/package.json',
         },
       ]);
       config.repoIsOnboarded = true;
@@ -48,6 +49,7 @@ describe('workers/repository/updates/branchify', () => {
           groupName: 'some packages',
           group: {},
           separateMajorMinor: true,
+          packageFile: 'package.json',
         },
         {
           depName: 'foo',
diff --git a/lib/workers/repository/updates/branchify.ts b/lib/workers/repository/updates/branchify.ts
index 9ab9f15a72..b96aa920c1 100644
--- a/lib/workers/repository/updates/branchify.ts
+++ b/lib/workers/repository/updates/branchify.ts
@@ -46,6 +46,20 @@ export async function branchifyUpgrades(
   const branchUpgrades: Record<string, BranchUpgradeConfig[]> = {};
   const branches: BranchConfig[] = [];
   for (const u of updates) {
+    // extract parentDir and baseDir from packageFile
+    if (u.packageFile) {
+      const packagePath = u.packageFile.split('/');
+      if (packagePath.length > 0) {
+        packagePath.splice(-1, 1);
+      }
+      if (packagePath.length > 0) {
+        u.parentDir = packagePath[packagePath.length - 1];
+        u.baseDir = packagePath.join('/');
+      } else {
+        u.parentDir = '';
+        u.baseDir = '';
+      }
+    }
     const update: BranchUpgradeConfig = { ...u } as any;
     // Massage legacy vars just in case
     update.currentVersion = update.currentValue;
diff --git a/lib/workers/repository/updates/generate.spec.ts b/lib/workers/repository/updates/generate.spec.ts
index 999768cdd3..641bc50954 100644
--- a/lib/workers/repository/updates/generate.spec.ts
+++ b/lib/workers/repository/updates/generate.spec.ts
@@ -266,84 +266,13 @@ describe('workers/repository/updates/generate', () => {
         'chore(package): update dependency some-dep to v1.2.0'
       );
     });
-    it('scopes monorepo commits', () => {
-      const branch = [
-        partial<BranchUpgradeConfig>({
-          ...defaultConfig,
-          depName: 'some-dep',
-          packageFile: 'foo/package.json',
-          semanticCommits: true,
-          semanticCommitType: 'chore',
-          semanticCommitScope: '{{parentDir}}',
-          lazyGrouping: true,
-          newValue: '1.2.0',
-          isSingleVersion: true,
-          toVersion: '1.2.0',
-          foo: 1,
-          group: {
-            foo: 2,
-          },
-        }),
-      ];
-      const res = generateBranchConfig(branch);
-      expect(res.prTitle).toEqual(
-        'chore(foo): update dependency some-dep to v1.2.0'
-      );
-    });
-    it('scopes monorepo commits', () => {
-      const branch = [
-        partial<BranchUpgradeConfig>({
-          ...defaultConfig,
-          depName: 'some-dep',
-          packageFile: 'foo/package.json',
-          semanticCommits: true,
-          semanticCommitType: 'chore',
-          semanticCommitScope: '{{baseDir}}',
-          lazyGrouping: true,
-          newValue: '1.2.0',
-          isSingleVersion: true,
-          toVersion: '1.2.0',
-          foo: 1,
-          group: {
-            foo: 2,
-          },
-        }),
-      ];
-      const res = generateBranchConfig(branch);
-      expect(res.prTitle).toEqual(
-        'chore(foo): update dependency some-dep to v1.2.0'
-      );
-    });
-    it('scopes monorepo commits', () => {
-      const branch = [
-        partial<BranchUpgradeConfig>({
-          ...defaultConfig,
-          depName: 'some-dep',
-          packageFile: 'package.json',
-          semanticCommits: true,
-          semanticCommitType: 'chore',
-          semanticCommitScope: '{{parentDir}}',
-          lazyGrouping: true,
-          newValue: '1.2.0',
-          isSingleVersion: true,
-          toVersion: '1.2.0',
-          foo: 1,
-          group: {
-            foo: 2,
-          },
-        }),
-      ];
-      const res = generateBranchConfig(branch);
-      expect(res.prTitle).toEqual(
-        'chore(): update dependency some-dep to v1.2.0'
-      );
-    });
     it('scopes monorepo commits', () => {
       const branch = [
         partial<BranchUpgradeConfig>({
           ...defaultConfig,
           depName: 'some-dep',
           packageFile: 'package.json',
+          baseDir: '',
           semanticCommits: true,
           semanticCommitType: 'chore',
           semanticCommitScope: '{{baseDir}}',
@@ -369,6 +298,7 @@ describe('workers/repository/updates/generate', () => {
           commitBodyTable: false,
           depName: 'some-dep',
           packageFile: 'foo/bar/package.json',
+          parentDir: 'bar',
           semanticCommits: true,
           semanticCommitType: 'chore',
           semanticCommitScope: '{{parentDir}}',
@@ -393,6 +323,7 @@ describe('workers/repository/updates/generate', () => {
           ...defaultConfig,
           depName: 'some-dep',
           packageFile: 'foo/bar/package.json',
+          baseDir: 'foo/bar',
           semanticCommits: true,
           semanticCommitType: 'chore',
           semanticCommitScope: '{{baseDir}}',
diff --git a/lib/workers/repository/updates/generate.ts b/lib/workers/repository/updates/generate.ts
index 32cfc898e5..5ff3bf83db 100644
--- a/lib/workers/repository/updates/generate.ts
+++ b/lib/workers/repository/updates/generate.ts
@@ -169,20 +169,6 @@ export function generateBranchConfig(
     } else if (semver.valid(toVersions[0])) {
       upgrade.isRange = false;
     }
-    // extract parentDir and baseDir from packageFile
-    if (upgrade.packageFile) {
-      const packagePath = upgrade.packageFile.split('/');
-      if (packagePath.length > 0) {
-        packagePath.splice(-1, 1);
-      }
-      if (packagePath.length > 0) {
-        upgrade.parentDir = packagePath[packagePath.length - 1];
-        upgrade.baseDir = packagePath.join('/');
-      } else {
-        upgrade.parentDir = '';
-        upgrade.baseDir = '';
-      }
-    }
     // Use templates to generate strings
     logger.trace('Compiling branchName: ' + upgrade.branchName);
     upgrade.branchName = template.compile(upgrade.branchName, upgrade);
-- 
GitLab