diff --git a/cmd/dep/status.go b/cmd/dep/status.go index 5f06029132..f272dbf339 100644 --- a/cmd/dep/status.go +++ b/cmd/dep/status.go @@ -460,7 +460,7 @@ func runStatusAll(ctx *dep.Ctx, out outputter, p *dep.Project, sm gps.SourceMana } else { bs.Constraint = gps.Any() for _, c := range cm[bs.ProjectRoot] { - bs.Constraint = c.Intersect(bs.Constraint) + bs.Constraint = c.Constraint.Intersect(bs.Constraint) } } @@ -643,9 +643,20 @@ func formatVersion(v gps.Version) string { return v.String() } +// projectConstraint stores ProjectRoot and Constraint for that project. +type projectConstraint struct { + Project gps.ProjectRoot + Constraint gps.Constraint +} + +// constraintsCollection is a map of ProjectRoot(dependency) and a collection of +// projectConstraint for the dependencies. This can be used to find constraints +// on a dependency and the projects that apply those constraints. +type constraintsCollection map[string][]projectConstraint + // collectConstraints collects constraints declared by all the dependencies. -func collectConstraints(ctx *dep.Ctx, p *dep.Project, sm gps.SourceManager) map[string][]gps.Constraint { - constraintCollection := make(map[string][]gps.Constraint) +func collectConstraints(ctx *dep.Ctx, p *dep.Project, sm gps.SourceManager) constraintsCollection { + constraintCollection := make(constraintsCollection) // Get direct deps of the root project. _, directDeps, err := getDirectDependencies(sm, p) @@ -669,7 +680,10 @@ func collectConstraints(ctx *dep.Ctx, p *dep.Project, sm gps.SourceManager) map[ // Iterate through the project constraints to get individual dependency // project and constraint values. for pr, pp := range pc { - constraintCollection[string(pr)] = append(constraintCollection[string(pr)], pp.Constraint) + constraintCollection[string(pr)] = append( + constraintCollection[string(pr)], + projectConstraint{proj.Ident().ProjectRoot, pp.Constraint}, + ) } } diff --git a/cmd/dep/status_test.go b/cmd/dep/status_test.go index af5e12e6ce..2e337ff715 100644 --- a/cmd/dep/status_test.go +++ b/cmd/dep/status_test.go @@ -300,7 +300,7 @@ func TestCollectConstraints(t *testing.T) { cases := []struct { name string project dep.Project - wantConstraints map[string][]gps.Constraint + wantConstraints constraintsCollection }{ { name: "without any constraints", @@ -315,7 +315,7 @@ func TestCollectConstraints(t *testing.T) { }, }, }, - wantConstraints: map[string][]gps.Constraint{}, + wantConstraints: constraintsCollection{}, }, { name: "with multiple constraints", @@ -340,10 +340,17 @@ func TestCollectConstraints(t *testing.T) { }, }, }, - wantConstraints: map[string][]gps.Constraint{ - "github.com/sdboyer/deptest": []gps.Constraint{ver1, ver08}, - "github.com/sdboyer/deptestdos": []gps.Constraint{ver2}, - "github.com/sdboyer/dep-test": []gps.Constraint{ver1}, + wantConstraints: constraintsCollection{ + "github.com/sdboyer/deptest": []projectConstraint{ + {"github.com/darkowlzz/deptest-project-1", ver1}, + {"github.com/darkowlzz/deptest-project-2", ver08}, + }, + "github.com/sdboyer/deptestdos": []projectConstraint{ + {"github.com/darkowlzz/deptest-project-2", ver2}, + }, + "github.com/sdboyer/dep-test": []projectConstraint{ + {"github.com/darkowlzz/deptest-project-2", ver1}, + }, }, }, { @@ -364,8 +371,10 @@ func TestCollectConstraints(t *testing.T) { }, }, }, - wantConstraints: map[string][]gps.Constraint{ - "github.com/sdboyer/deptest": []gps.Constraint{ver1}, + wantConstraints: constraintsCollection{ + "github.com/sdboyer/deptest": []projectConstraint{ + {"github.com/darkowlzz/deptest-project-1", ver1}, + }, }, }, }