From a2c39b91fd95693a6bb5970c7d192382ca8fb1f2 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Fri, 12 Nov 2021 16:36:54 +0100
Subject: [PATCH] fix: branchName massage hyphens (#12622)

---
 lib/workers/repository/updates/branch-name.spec.ts | 6 +++++-
 lib/workers/repository/updates/branch-name.ts      | 2 ++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/lib/workers/repository/updates/branch-name.spec.ts b/lib/workers/repository/updates/branch-name.spec.ts
index 3475b73287..a1436ee7c3 100644
--- a/lib/workers/repository/updates/branch-name.spec.ts
+++ b/lib/workers/repository/updates/branch-name.spec.ts
@@ -220,7 +220,7 @@ describe('workers/repository/updates/branch-name', () => {
         },
         {
           upgrade: { branchName: 'renovate/~bad-branch-name2' },
-          expectedBranchName: 'renovate/-bad-branch-name2',
+          expectedBranchName: 'renovate/bad-branch-name2',
         },
         {
           upgrade: { branchName: 'renovate/bad-branch-^-name3' },
@@ -258,6 +258,10 @@ describe('workers/repository/updates/branch-name', () => {
           upgrade: { branchName: 'renovate/bad--branch---name11' },
           expectedBranchName: 'renovate/bad-branch-name11',
         },
+        {
+          upgrade: { branchName: 'renovate-/[start]-something-[end]' },
+          expectedBranchName: 'renovate/start-something-end',
+        },
       ];
       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 15433fb94b..7e45f0802d 100644
--- a/lib/workers/repository/updates/branch-name.ts
+++ b/lib/workers/repository/updates/branch-name.ts
@@ -24,6 +24,8 @@ function cleanBranchName(branchName: string): string {
     .replace(regEx(/\/\./g), '/') // leading dot after slash
     .replace(regEx(/\s/g), '') // whitespace
     .replace(regEx(/[[\]?:\\^~]/g), '-') // massage out all these characters: : ? [ \ ^ ~
+    .replace(regEx(/(^|\/)-+/g), '$1') // leading dashes
+    .replace(regEx(/-+(\/|$)/g), '$1') // trailing dashes
     .replace(RE_MULTIPLE_DASH, '-'); // chained dashes
 }
 
-- 
GitLab