From f1073965ab8cdc1b982d5e9fb8568a6571976d4b Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Mon, 14 Oct 2019 16:55:49 +0200
Subject: [PATCH] fix(gomod): skip indirect dependencies (#4650)

Skip any go.mod dependencies ending in // indirect

Closes #4586, Supercedes #4615
---
 lib/manager/gomod/extract.ts                          |  4 ++--
 test/manager/gomod/__snapshots__/extract.spec.ts.snap | 10 ----------
 test/manager/gomod/__snapshots__/update.spec.ts.snap  |  6 +++---
 test/manager/gomod/_fixtures/1/go.mod                 |  2 +-
 test/manager/gomod/_fixtures/2/go.mod                 |  2 +-
 test/manager/gomod/extract.spec.ts                    |  2 +-
 6 files changed, 8 insertions(+), 18 deletions(-)

diff --git a/lib/manager/gomod/extract.ts b/lib/manager/gomod/extract.ts
index 625cd5b4ed..a684bbffcf 100644
--- a/lib/manager/gomod/extract.ts
+++ b/lib/manager/gomod/extract.ts
@@ -54,7 +54,7 @@ export function extractPackageFile(content: string): PackageFile | null {
         deps.push(dep);
       }
       const requireMatch = line.match(/^require\s+([^\s]+)\s+([^\s]+)/);
-      if (requireMatch) {
+      if (requireMatch && !line.endsWith('// indirect')) {
         logger.trace({ lineNumber }, `require line: "${line}"`);
         const dep = getDep(lineNumber, requireMatch, 'require');
         deps.push(dep);
@@ -66,7 +66,7 @@ export function extractPackageFile(content: string): PackageFile | null {
           line = lines[lineNumber];
           const multiMatch = line.match(/^\s+([^\s]+)\s+([^\s]+)/);
           logger.trace(`reqLine: "${line}"`);
-          if (multiMatch) {
+          if (multiMatch && !line.endsWith('// indirect')) {
             logger.trace({ lineNumber }, `require line: "${line}"`);
             const dep = getDep(lineNumber, multiMatch, 'require');
             dep.managerData.multiLine = true;
diff --git a/test/manager/gomod/__snapshots__/extract.spec.ts.snap b/test/manager/gomod/__snapshots__/extract.spec.ts.snap
index 526d8af0ff..7ba5ee243c 100644
--- a/test/manager/gomod/__snapshots__/extract.spec.ts.snap
+++ b/test/manager/gomod/__snapshots__/extract.spec.ts.snap
@@ -717,16 +717,6 @@ Array [
       "lineNumber": 3,
     },
   },
-  Object {
-    "currentValue": "v1.0.0",
-    "datasource": "go",
-    "depName": "github.com/davecgh/go-spew",
-    "depNameShort": "davecgh/go-spew",
-    "depType": "require",
-    "managerData": Object {
-      "lineNumber": 4,
-    },
-  },
   Object {
     "currentValue": "v1.0.0",
     "datasource": "go",
diff --git a/test/manager/gomod/__snapshots__/update.spec.ts.snap b/test/manager/gomod/__snapshots__/update.spec.ts.snap
index ddc3707e96..d4b790db6c 100644
--- a/test/manager/gomod/__snapshots__/update.spec.ts.snap
+++ b/test/manager/gomod/__snapshots__/update.spec.ts.snap
@@ -5,7 +5,7 @@ exports[`manager/gomod/update updateDependency replaces major gopkg.in updates 1
 
 require github.com/pkg/errors v0.7.0
 require github.com/aws/aws-sdk-go v1.15.21
-require github.com/davecgh/go-spew v1.0.0
+require github.com/davecgh/go-spew v1.0.0 // indirect
 require golang.org/x/foo v1.0.0
 require github.com/rarkins/foo abcdef1
 require gopkg.in/russross/blackfriday.v2 v2.0.0
@@ -79,7 +79,7 @@ require (
 	gopkg.in/src-d/go-git.v4 v4.0.0-20180807092216-43d17e14b714
 	gopkg.in/warnings.v0 v0.1.2
 	gopkg.in/yaml.v2 v2.2.1
-
+	golang.org/x/net v0.0.0-20191003171128-d98b1b443823 // indirect
 )
 "
 `;
@@ -89,7 +89,7 @@ exports[`manager/gomod/update updateDependency replaces two values in one file 1
 
 require github.com/pkg/errors v0.8.0
 require github.com/aws/aws-sdk-go v1.15.36
-require github.com/davecgh/go-spew v1.0.0
+require github.com/davecgh/go-spew v1.0.0 // indirect
 require golang.org/x/foo v1.0.0
 require github.com/rarkins/foo abcdef1
 require gopkg.in/russross/blackfriday.v1 v1.0.0
diff --git a/test/manager/gomod/_fixtures/1/go.mod b/test/manager/gomod/_fixtures/1/go.mod
index 479f73c809..914afa7d5f 100644
--- a/test/manager/gomod/_fixtures/1/go.mod
+++ b/test/manager/gomod/_fixtures/1/go.mod
@@ -2,7 +2,7 @@ module github.com/renovate-tests/gomod1
 
 require github.com/pkg/errors v0.7.0
 require github.com/aws/aws-sdk-go v1.15.21
-require github.com/davecgh/go-spew v1.0.0
+require github.com/davecgh/go-spew v1.0.0 // indirect
 require golang.org/x/foo v1.0.0
 require github.com/rarkins/foo abcdef1
 require gopkg.in/russross/blackfriday.v1 v1.0.0
diff --git a/test/manager/gomod/_fixtures/2/go.mod b/test/manager/gomod/_fixtures/2/go.mod
index 6be860e0cc..d09cab9977 100644
--- a/test/manager/gomod/_fixtures/2/go.mod
+++ b/test/manager/gomod/_fixtures/2/go.mod
@@ -59,5 +59,5 @@ require (
 	gopkg.in/src-d/go-git.v4 v4.0.0-20180807092216-43d17e14b714
 	gopkg.in/warnings.v0 v0.1.2
 	gopkg.in/yaml.v2 v2.2.1
-
+	golang.org/x/net v0.0.0-20191003171128-d98b1b443823 // indirect
 )
diff --git a/test/manager/gomod/extract.spec.ts b/test/manager/gomod/extract.spec.ts
index 405070a926..99a8e0081e 100644
--- a/test/manager/gomod/extract.spec.ts
+++ b/test/manager/gomod/extract.spec.ts
@@ -12,7 +12,7 @@ describe('lib/manager/gomod/extract', () => {
     it('extracts single-line requires', () => {
       const res = extractPackageFile(gomod1).deps;
       expect(res).toMatchSnapshot();
-      expect(res).toHaveLength(8);
+      expect(res).toHaveLength(7);
       expect(res.filter(e => e.skipReason)).toHaveLength(1);
       expect(res.filter(e => e.depType === 'replace')).toHaveLength(1);
     });
-- 
GitLab