From b711e0c3aa03480a7d3b69e3e7a9346a00e3c774 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 31 Dec 2017 20:47:46 +0100
Subject: [PATCH] fix: handle 404 repos gracefully

---
 lib/platform/github/index.js          |  3 +++
 lib/workers/repository/error.js       |  3 +++
 test/platform/github/index.spec.js    | 14 ++++++++++++++
 test/workers/repository/error.spec.js |  1 +
 4 files changed, 21 insertions(+)

diff --git a/lib/platform/github/index.js b/lib/platform/github/index.js
index 3484477939..c2e232a1ec 100644
--- a/lib/platform/github/index.js
+++ b/lib/platform/github/index.js
@@ -106,6 +106,9 @@ async function initRepo(repoName, token, endpoint, forkMode, forkToken) {
       logger.info('Could not find allowed merge methods for repo');
     }
   } catch (err) /* istanbul ignore next */ {
+    if (err.statusCode === 404) {
+      throw new Error('not-found');
+    }
     logger.info({ err, res }, 'Unknown GitHub initRepo error');
     throw err;
   }
diff --git a/lib/workers/repository/error.js b/lib/workers/repository/error.js
index a4024ebd70..cae471f597 100644
--- a/lib/workers/repository/error.js
+++ b/lib/workers/repository/error.js
@@ -15,6 +15,9 @@ async function handleError(config, err) {
   } else if (err.message === 'archived') {
     logger.info('Repository is archived - skipping');
     return err.message;
+  } else if (err.message === 'not-found') {
+    logger.info('Repository is not found');
+    return err.message;
   } else if (err.message === 'fork') {
     logger.info('Repository is a fork and not manually configured - skipping');
     return err.message;
diff --git a/test/platform/github/index.spec.js b/test/platform/github/index.spec.js
index 76bec2dfc5..5f23181f58 100644
--- a/test/platform/github/index.spec.js
+++ b/test/platform/github/index.spec.js
@@ -339,6 +339,20 @@ describe('platform/github', () => {
       }
       expect(e).toBeDefined();
     });
+    it('throws not-found', async () => {
+      get.mockImplementationOnce(() =>
+        Promise.reject({
+          statusCode: 404,
+        })
+      );
+      let e;
+      try {
+        await github.initRepo('some/repo', 'token');
+      } catch (err) {
+        e = err;
+      }
+      expect(e).toBeDefined();
+    });
   });
   describe('getRepoForceRebase', () => {
     it('should detect repoForceRebase', async () => {
diff --git a/test/workers/repository/error.spec.js b/test/workers/repository/error.spec.js
index 916a72e69c..19c32a7e75 100644
--- a/test/workers/repository/error.spec.js
+++ b/test/workers/repository/error.spec.js
@@ -18,6 +18,7 @@ describe('workers/repository/error', () => {
       'loops>5',
       'config-validation',
       'archived',
+      'not-found',
     ];
     errors.forEach(err => {
       it(`errors ${err}`, async () => {
-- 
GitLab