diff --git a/internal/importers/godep/importer.go b/internal/importers/godep/importer.go index c3389d8cb5..0d0879a531 100644 --- a/internal/importers/godep/importer.go +++ b/internal/importers/godep/importer.go @@ -10,6 +10,7 @@ import ( "log" "os" "path/filepath" + "strings" "github.com/golang/dep" "github.com/golang/dep/gps" @@ -31,7 +32,8 @@ func NewImporter(logger *log.Logger, verbose bool, sm gps.SourceManager) *Import } type godepJSON struct { - Imports []godepPackage `json:"Deps"` + Required []string `json:"Packages"` + Imports []godepPackage `json:"Deps"` } type godepPackage struct { @@ -113,5 +115,14 @@ func (g *Importer) convert(pr gps.ProjectRoot) (*dep.Manifest, *dep.Lock) { } g.ImportPackages(packages, true) + required := make([]string, 0, len(g.json.Required)) + for _, req := range g.json.Required { + if !strings.HasPrefix(req, ".") { // ignore project packages + required = append(required, req) + } + } + if len(required) > 0 { + g.Manifest.Required = required + } return g.Manifest, g.Lock } diff --git a/internal/importers/godep/importer_test.go b/internal/importers/godep/importer_test.go index ec9969f8ba..92b99f34f7 100644 --- a/internal/importers/godep/importer_test.go +++ b/internal/importers/godep/importer_test.go @@ -77,6 +77,22 @@ func TestGodepConfig_Convert(t *testing.T) { }, }, }, + "package with requirements": { + importertest.TestCase{ + WantRequired: []string{importertest.Project}, + }, + godepJSON{ + Required: []string{importertest.Project}, + }, + }, + "package with local requirements": { + importertest.TestCase{ + WantRequired: nil, + }, + godepJSON{ + Required: []string{"./..."}, + }, + }, } for name, testCase := range testCases { diff --git a/internal/importers/importertest/testcase.go b/internal/importers/importertest/testcase.go index 415ed596dc..176a2ba1b8 100644 --- a/internal/importers/importertest/testcase.go +++ b/internal/importers/importertest/testcase.go @@ -27,6 +27,7 @@ type TestCase struct { WantRevision gps.Revision WantVersion string WantIgnored []string + WantRequired []string WantWarning string } @@ -71,6 +72,11 @@ func (tc TestCase) validate(manifest *dep.Manifest, lock *dep.Lock, output *byte manifest.Ignored, tc.WantIgnored) } + if !equalSlice(manifest.Required, tc.WantRequired) { + return errors.Errorf("unexpected set of required projects: \n\t(GOT) %#v \n\t(WNT) %#v", + manifest.Required, tc.WantRequired) + } + wantConstraintCount := 0 if tc.WantConstraint != "" { wantConstraintCount = 1