From 8319b1df52d3d1ebf3df8e848a101f5ba413e229 Mon Sep 17 00:00:00 2001
From: Yanis Benson <yanis.benson@gmail.com>
Date: Fri, 13 Aug 2021 15:10:24 +0300
Subject: [PATCH] fix: remove double hyphens from branch names (#11186)

Removes double or more hyphens from branch names and replaces with a single hyphen.

Closes #8260

BREAKING CHANGE: Branches with double hyphens will be changed to single hyphens, which can result in some existing PRs being autoclosed and replacements opened.
---
 lib/workers/repository/updates/branch-name.spec.ts | 12 ++++++++++--
 lib/workers/repository/updates/branch-name.ts      |  5 ++++-
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/lib/workers/repository/updates/branch-name.spec.ts b/lib/workers/repository/updates/branch-name.spec.ts
index ff816d07f1..115b60c7b1 100644
--- a/lib/workers/repository/updates/branch-name.spec.ts
+++ b/lib/workers/repository/updates/branch-name.spec.ts
@@ -225,11 +225,11 @@ describe(getName(), () => {
         },
         {
           upgrade: { branchName: 'renovate/bad-branch-^-name3' },
-          expectedBranchName: 'renovate/bad-branch---name3',
+          expectedBranchName: 'renovate/bad-branch-name3',
         },
         {
           upgrade: { branchName: 'renovate/bad-branch-name : 4' },
-          expectedBranchName: 'renovate/bad-branch-name---4',
+          expectedBranchName: 'renovate/bad-branch-name-4',
         },
         {
           upgrade: { branchName: 'renovate/bad-branch-name5/' },
@@ -251,6 +251,14 @@ describe(getName(), () => {
           upgrade: { branchName: 'renovate/bad-branch-name9.' },
           expectedBranchName: 'renovate/bad-branch-name9',
         },
+        {
+          upgrade: { branchName: 'renovate/bad-branch--name10' },
+          expectedBranchName: 'renovate/bad-branch-name10',
+        },
+        {
+          upgrade: { branchName: 'renovate/bad--branch---name11' },
+          expectedBranchName: 'renovate/bad-branch-name11',
+        },
       ];
       fixtures.forEach((fixture) => {
         generateBranchName(fixture.upgrade);
diff --git a/lib/workers/repository/updates/branch-name.ts b/lib/workers/repository/updates/branch-name.ts
index 78454f101f..e56e2da710 100644
--- a/lib/workers/repository/updates/branch-name.ts
+++ b/lib/workers/repository/updates/branch-name.ts
@@ -7,6 +7,7 @@ import * as template from '../../../util/template';
 
 const MIN_HASH_LENGTH = 6;
 
+const RE_MULTIPLE_DASH = /--+/g;
 /**
  * Clean git branch name
  *
@@ -14,12 +15,14 @@ const MIN_HASH_LENGTH = 6;
  * - leading dot/leading dot after slash
  * - trailing dot
  * - whitespace
+ * - chained dashes(breaks markdown comments) are replaced by single dash
  */
 function cleanBranchName(branchName: string): string {
   return cleanGitRef(branchName)
     .replace(/^\.|\.$/, '') // leading or trailing dot
     .replace(/\/\./g, '/') // leading dot after slash
-    .replace(/\s/g, ''); // whitespace
+    .replace(/\s/g, '') // whitespace
+    .replace(RE_MULTIPLE_DASH, '-'); // chained dashes
 }
 
 /* eslint-disable no-param-reassign */
-- 
GitLab