From 1cfc27fb29c6369b42d99a51e06e680f1539e819 Mon Sep 17 00:00:00 2001 From: Michael Gokhman Date: Wed, 20 Sep 2017 16:15:40 +0300 Subject: [PATCH] import alternate repo url from gb/gvt manifest --- .../init/gvt/case1/final/Gopkg.lock | 9 ++++++- .../init/gvt/case1/final/Gopkg.toml | 8 ++++++ .../init/gvt/case1/initial/main.go | 8 ++++-- .../init/gvt/case1/initial/vendor/manifest | 8 +++++- internal/importers/base/importer.go | 27 ++++++++++++++++++- internal/importers/gvt/importer.go | 7 +++-- internal/importers/gvt/importer_test.go | 18 +++++++++++++ 7 files changed, 76 insertions(+), 9 deletions(-) diff --git a/cmd/dep/testdata/harness_tests/init/gvt/case1/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/init/gvt/case1/final/Gopkg.lock index 74c44abc9d..6b38e621f9 100644 --- a/cmd/dep/testdata/harness_tests/init/gvt/case1/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/init/gvt/case1/final/Gopkg.lock @@ -5,6 +5,7 @@ name = "github.com/sdboyer/deptest" packages = ["."] revision = "3f4c3bea144e112a69bbe5d8d01c1b09a544253f" + source = "https://github.com/carolynvs/deptest" version = "v0.8.1" [[projects]] @@ -13,9 +14,15 @@ revision = "5c607206be5decd28e6263ffffdcee067266015e" version = "v2.0.0" +[[projects]] + branch = "v2" + name = "gopkg.in/yaml.v2" + packages = ["."] + revision = "f7716cbe52baa25d2e9b0d0da546fcf909fc16b4" + [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "1caabc68a242bf012bf5e10e30d21e342beb7e338707a6fd08f0398c18548e32" + inputs-digest = "9ee70d58a0bc986cfb1d57a351786e9cf1bfc2ca763ce17f601a6529aebe65d1" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/init/gvt/case1/final/Gopkg.toml b/cmd/dep/testdata/harness_tests/init/gvt/case1/final/Gopkg.toml index 898e622122..4b67f82f25 100644 --- a/cmd/dep/testdata/harness_tests/init/gvt/case1/final/Gopkg.toml +++ b/cmd/dep/testdata/harness_tests/init/gvt/case1/final/Gopkg.toml @@ -1,3 +1,11 @@ +[[constraint]] + name = "github.com/sdboyer/deptest" + source = "https://github.com/carolynvs/deptest" + [[constraint]] name = "github.com/sdboyer/deptestdos" + +[[constraint]] + branch = "v2" + name = "gopkg.in/yaml.v2" diff --git a/cmd/dep/testdata/harness_tests/init/gvt/case1/initial/main.go b/cmd/dep/testdata/harness_tests/init/gvt/case1/initial/main.go index 2b2c7c396e..6d893af2ff 100644 --- a/cmd/dep/testdata/harness_tests/init/gvt/case1/initial/main.go +++ b/cmd/dep/testdata/harness_tests/init/gvt/case1/initial/main.go @@ -7,10 +7,14 @@ package main import ( "fmt" + "github.com/sdboyer/deptest" "github.com/sdboyer/deptestdos" + "gopkg.in/yaml.v2" ) func main() { - var x deptestdos.Bar - fmt.Println(x) + var a deptestdos.Bar + var b yaml.MapItem + var c deptest.Foo + fmt.Println(a, b, c) } diff --git a/cmd/dep/testdata/harness_tests/init/gvt/case1/initial/vendor/manifest b/cmd/dep/testdata/harness_tests/init/gvt/case1/initial/vendor/manifest index 2ab367604c..628df3cf33 100644 --- a/cmd/dep/testdata/harness_tests/init/gvt/case1/initial/vendor/manifest +++ b/cmd/dep/testdata/harness_tests/init/gvt/case1/initial/vendor/manifest @@ -3,7 +3,7 @@ "dependencies": [ { "importpath": "github.com/sdboyer/deptest", - "repository": "https://github.com/sdboyer/deptest", + "repository": "https://github.com/carolynvs/deptest", "revision": "3f4c3bea144e112a69bbe5d8d01c1b09a544253f", "branch": "HEAD" }, @@ -12,6 +12,12 @@ "repository": "https://github.com/sdboyer/deptestdos", "revision": "5c607206be5decd28e6263ffffdcee067266015eXXX", "branch": "master" + }, + { + "importpath": "gopkg.in/yaml.v2", + "repository": "https://gopkg.in/yaml.v2", + "revision": "f7716cbe52baa25d2e9b0d0da546fcf909fc16b4", + "branch": "v2" } ] } diff --git a/internal/importers/base/importer.go b/internal/importers/base/importer.go index 0a572fea6d..62883fc9b6 100644 --- a/internal/importers/base/importer.go +++ b/internal/importers/base/importer.go @@ -180,10 +180,18 @@ func (i *Importer) ImportPackages(packages []ImportedPackage, defaultConstraintF } for _, prj := range projects { + source := prj.Source + if len(source) > 0 { + isDefault, err := i.isDefaultSource(prj.Root, source) + if err == nil && isDefault { + source = "" + } + } + pc := gps.ProjectConstraint{ Ident: gps.ProjectIdentifier{ ProjectRoot: prj.Root, - Source: prj.Source, + Source: source, }, } @@ -291,3 +299,20 @@ func (i *Importer) convertToConstraint(v gps.Version) gps.Constraint { } return v } + +func (i *Importer) isDefaultSource(projectRoot gps.ProjectRoot, sourceURL string) (bool, error) { + if sourceURL == "https://"+string(projectRoot) { + return true, nil + } + + sourceURLs, err := i.sm.SourceURLsForPath(string(projectRoot)) + if err != nil { + return false, err + } + // The first url in the slice will be the default one (usually https://...) + if len(sourceURLs) > 0 && sourceURL == sourceURLs[0].String() { + return true, nil + } + + return false, nil +} diff --git a/internal/importers/gvt/importer.go b/internal/importers/gvt/importer.go index 92cd61b6c4..b0a968d9b8 100644 --- a/internal/importers/gvt/importer.go +++ b/internal/importers/gvt/importer.go @@ -103,7 +103,7 @@ func (g *Importer) convert(pr gps.ProjectRoot) (*dep.Manifest, *dep.Lock, error) var contstraintHint = "" if pkg.Branch == "HEAD" { // gb-vendor sets "branch" to "HEAD", if the package was feteched via -tag or -revision, - // we we pass the revision as the constraint hint + // we pass the revision as the constraint hint contstraintHint = pkg.Revision } else if pkg.Branch != "master" { // both gvt & gb-vendor set "branch" to "master" unless a different branch was requested. @@ -112,9 +112,8 @@ func (g *Importer) convert(pr gps.ProjectRoot) (*dep.Manifest, *dep.Lock, error) } ip := base.ImportedPackage{ - Name: pkg.ImportPath, - //TODO: temporarly ignore .Repository. see https://github.com/golang/dep/pull/1166 - // Source: pkg.Repository, + Name: pkg.ImportPath, + Source: pkg.Repository, LockHint: pkg.Revision, ConstraintHint: contstraintHint, } diff --git a/internal/importers/gvt/importer_test.go b/internal/importers/gvt/importer_test.go index 443e1eb723..e927af8dbf 100644 --- a/internal/importers/gvt/importer_test.go +++ b/internal/importers/gvt/importer_test.go @@ -70,6 +70,24 @@ func TestGvtConfig_Convert(t *testing.T) { }, }, }, + "package with alternate repository": { + importertest.TestCase{ + WantConstraint: importertest.V1Constraint, + WantRevision: importertest.V1Rev, + WantVersion: importertest.V1Tag, + WantSourceRepo: importertest.ProjectSrc, + }, + gvtManifest{ + Deps: []gvtPkg{ + { + ImportPath: importertest.Project, + Repository: importertest.ProjectSrc, + Revision: importertest.V1Rev, + Branch: "master", + }, + }, + }, + }, "missing package name": { importertest.TestCase{ WantConvertErr: true,