From 1e747648896b5a3ac83a6dab75e688b3c3703c99 Mon Sep 17 00:00:00 2001
From: Sergei Zharinov <zharinov@users.noreply.github.com>
Date: Sun, 2 Oct 2022 09:39:43 +0300
Subject: [PATCH] refactor(git): Refactor push-related error handling (#18075)

---
 lib/util/git/errors.spec.ts | 15 ++++++++++++---
 lib/util/git/index.ts       |  3 ++-
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/lib/util/git/errors.spec.ts b/lib/util/git/errors.spec.ts
index 39d3f95faa..19e3696a6e 100644
--- a/lib/util/git/errors.spec.ts
+++ b/lib/util/git/errors.spec.ts
@@ -1,11 +1,20 @@
 import { bulkChangesDisallowed } from './error';
 
+const errorMsg = `
+To https://github.com/the-org/st-mono.git
+!\t:refs/renovate/branches/renovate/foo\t[remote failure] (remote failed to report status)
+!\t:refs/renovate/branches/renovate/bar\t[remote failure] (remote failed to report status)
+Done
+Pushing to https://github.com/foo/bar.git
+POST git-receive-pack (1234 bytes)
+remote: Repository policies do not allow pushes that update more than 2 branches or tags.
+error: failed to push some refs to 'https://github.com/foo/bar.git'
+`.trimStart();
+
 describe('util/git/errors', () => {
   describe('bulkChangesDisallowed', () => {
     it('should match the expected error', () => {
-      const err = new Error(
-        "To https://github.com/the-org/st-mono.git\n!\t:refs/renovate/branches/renovate/Dependencies-mobile-ios-minor\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/database-mongodb-4.x\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-add-field-major-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-add-field-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-count-characters-major-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-count-characters-pin-dependencies\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-count-characters-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-counter-major-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-counter-pin-dependencies\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-counter-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-header-major-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-header-pin-dependencies\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-header-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-mega-menu-major-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-mega-menu-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-nav-scroller-major-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-nav-scroller-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-quantity-counter-major-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-scrollspy-major-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-scrollspy-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-show-animation-major-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-show-animation-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-step-form-major-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-sticky-block-major-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-sticky-block-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-switch-major-web-shared-norm\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-switch-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-toggle-state-major-web-shared-norm\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-toggle-state-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-video-bg-major-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-video-bg-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-video-player-major-web-shared-norm\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/hs-video-player-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/infrastructure-mongodbatlas-1.x\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/infrastructure-random-3.x\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/web-blog-vapor-leaf-4.x\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/web-blog-vapor-vapor-4.x\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/web-shared-major-web-shared-dev\t[remote failure] (remote failed to report status)\n!\t:refs/renovate/branches/renovate/web-shared-web-shared-dev\t[remote failure] (remote failed to report status)\nDone\nPushing to https://github.com/the-org/st-mono.git\nPOST git-receive-pack (5863 bytes)\nremote: Repository policies do not allow pushes that update more than 2 branches or tags.\nerror: failed to push some refs to 'https://github.com/the-org/st-mono.git'\n"
-      );
+      const err = new Error(errorMsg);
       expect(bulkChangesDisallowed(err)).toBe(true);
     });
   });
diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts
index 93cfad07e0..98544d3855 100644
--- a/lib/util/git/index.ts
+++ b/lib/util/git/index.ts
@@ -1193,7 +1193,8 @@ export async function clearRenovateRefs(): Promise<void> {
     try {
       const pushOpts = ['--delete', 'origin', ...obsoleteRefs];
       await git.push(pushOpts);
-    } catch (err) /* istanbul ignore next */ {
+    } catch (err) {
+      /* istanbul ignore else */
       if (bulkChangesDisallowed(err)) {
         for (const ref of obsoleteRefs) {
           const pushOpts = ['--delete', 'origin', ref];
-- 
GitLab