From e469cf1a6a4a9f9b89be555b97b60f01b9fe7564 Mon Sep 17 00:00:00 2001
From: Hutson Betts <hutson@hyper-expanse.net>
Date: Sun, 2 Sep 2018 14:13:23 -0500
Subject: [PATCH] feat(gitlab): ignore archived repositories (#2461)

Ignore archived GitLab repositories.

Closes #2437
---
 lib/platform/gitlab/index.js       | 18 ++++++++++++++++--
 test/platform/gitlab/index.spec.js | 10 ++++++++++
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/lib/platform/gitlab/index.js b/lib/platform/gitlab/index.js
index 8af5dd8396..23887b3538 100644
--- a/lib/platform/gitlab/index.js
+++ b/lib/platform/gitlab/index.js
@@ -106,8 +106,15 @@ async function initRepo({ repository, token, endpoint, gitAuthor }) {
       throw new Error('Invalid gitAuthor');
     }
   }
+  let res;
   try {
-    const res = await get(`projects/${config.repository}`);
+    res = await get(`projects/${config.repository}`);
+    if (res.body.archived) {
+      logger.info(
+        'Repository is archived - throwing error to abort renovation'
+      );
+      throw new Error('archived');
+    }
     config.defaultBranch = res.body.default_branch;
     config.baseBranch = config.defaultBranch;
     logger.debug(`${repository} default branch = ${config.baseBranch}`);
@@ -117,7 +124,14 @@ async function initRepo({ repository, token, endpoint, gitAuthor }) {
     delete config.fileList;
     await Promise.all([getPrList(), getFileList()]);
   } catch (err) {
-    logger.error({ err }, `GitLab init error`);
+    logger.debug('Caught initRepo error');
+    if (err.message === 'archived') {
+      throw err;
+    }
+    logger.info(
+      { err, message: err.message, body: res ? res.body : undefined },
+      'Unknown GitLab initRepo error'
+    );
     throw err;
   }
   return {};
diff --git a/test/platform/gitlab/index.spec.js b/test/platform/gitlab/index.spec.js
index 7b62abd838..525e639ce3 100644
--- a/test/platform/gitlab/index.spec.js
+++ b/test/platform/gitlab/index.spec.js
@@ -142,6 +142,16 @@ describe('platform/gitlab', () => {
       }
       expect(err.message).toBe('always error');
     });
+    it('should throw an error if repository is archived', async () => {
+      get.mockReturnValue({ body: { archived: true } });
+      let err;
+      try {
+        await gitlab.initRepo({ repository: 'some/repo', token: 'sometoken' });
+      } catch (e) {
+        err = e;
+      }
+      expect(err.message).toBe('archived');
+    });
   });
   describe('getRepoForceRebase', () => {
     it('should return false', () => {
-- 
GitLab