From 3a329b9e13dfa761bea03cd06c701c7ff24f9505 Mon Sep 17 00:00:00 2001 From: Carolyn Van Slyck Date: Wed, 27 Dec 2017 18:51:01 -0600 Subject: [PATCH 1/4] NEEDS REVIEW: DO NOT MERGE This is a prototype for keeping track of the path through the selection process to a project. It is used to help dep ignore "stale" transitive constraints: constraints that when created applied to a descendent but should no longer apply now that that the project has moved to another location in the dependency graph. Questions: * I put bmi on atomWithPackages because it already had a bmi method to recreate the original bmi. Not sure if it's safe to live there considering the comments on the original bmi function about avoiding copys of the package list. So it may need to shift elsewhere or path should be be split out from the bmi struct so that it can be attached directly to an atom. * Is a non-bimodal solve ever a possibility in dep (outside of the unit tests?). I think we could drop "dep.isTransitive" in favor of using bmi.path exclusively but the unit tests have a non-bimodal set of tests that cause this to fail. --- gps/identifier.go | 20 ++++--------- gps/rootdata.go | 4 +-- gps/satisfy.go | 43 ++++++++++++++------------- gps/selection.go | 10 +++++-- gps/solve_basic_test.go | 5 ++-- gps/solve_failures.go | 52 ++++++++++++++++----------------- gps/solver.go | 64 +++++++++++++++++++++++------------------ gps/trace.go | 4 +-- 8 files changed, 103 insertions(+), 99 deletions(-) diff --git a/gps/identifier.go b/gps/identifier.go index cf3ca23513..d3c0833932 100644 --- a/gps/identifier.go +++ b/gps/identifier.go @@ -177,6 +177,8 @@ type bimodalIdentifier struct { prefv Version // Indicates that the bmi came from the root project originally fromRoot bool + // The path to the atom in the graph, e.g. root -> foo -> bar + path []atom } type atom struct { @@ -190,20 +192,8 @@ var nilpa = atom{ } type atomWithPackages struct { - a atom - pl []string -} - -// bmi converts an atomWithPackages into a bimodalIdentifier. -// -// This is mostly intended for (read-only) trace use, so the package list slice -// is not copied. It is the callers responsibility to not modify the pl slice, -// lest that backpropagate and cause inconsistencies. -func (awp atomWithPackages) bmi() bimodalIdentifier { - return bimodalIdentifier{ - id: awp.a.id, - pl: awp.pl, - } + a atom + bmi bimodalIdentifier } // completeDep (name hopefully to change) provides the whole picture of a @@ -221,6 +211,6 @@ type completeDep struct { // fully-realized atom as the depender (the tail/source of the edge), and a set // of requirements that any atom to be attached at the head/target must satisfy. type dependency struct { - depender atom + depender atomWithPackages dep completeDep } diff --git a/gps/rootdata.go b/gps/rootdata.go index ee78bdf265..20550d7ca6 100644 --- a/gps/rootdata.go +++ b/gps/rootdata.go @@ -198,7 +198,7 @@ func (rd rootdata) rootAtom() atomWithPackages { sort.Strings(list) return atomWithPackages{ - a: a, - pl: list, + a: a, + bmi: bimodalIdentifier{id: a.id, pl: list}, } } diff --git a/gps/satisfy.go b/gps/satisfy.go index abac0ea7ef..555e2b6887 100644 --- a/gps/satisfy.go +++ b/gps/satisfy.go @@ -11,8 +11,7 @@ package gps // The goal is to determine whether selecting the atom would result in a state // where all the solver requirements are still satisfied. func (s *solver) check(a atomWithPackages, pkgonly bool) error { - pa := a.a - if nilpa == pa { + if nilpa == a.a { // This shouldn't be able to happen, but if it does, it unequivocally // indicates a logical bug somewhere, so blowing up is preferable panic("canary - checking version of empty ProjectAtom") @@ -30,7 +29,7 @@ func (s *solver) check(a atomWithPackages, pkgonly bool) error { // If we're pkgonly, then base atom was already determined to be allowable, // so we can skip the checkAtomAllowable step. if !pkgonly { - if err = s.checkAtomAllowable(pa); err != nil { + if err = s.checkAtomAllowable(a); err != nil { return err } } @@ -78,24 +77,24 @@ func (s *solver) check(a atomWithPackages, pkgonly bool) error { // checkAtomAllowable ensures that an atom itself is acceptable with respect to // the constraints established by the current solution. -func (s *solver) checkAtomAllowable(pa atom) error { - constraint := s.sel.getConstraint(pa.id) - if s.vUnify.matches(pa.id, constraint, pa.v) { +func (s *solver) checkAtomAllowable(awp atomWithPackages) error { + constraint := s.sel.getConstraint(awp.a.id, awp.bmi) + if s.vUnify.matches(awp.a.id, constraint, awp.a.v) { return nil } // TODO(sdboyer) collect constraint failure reason (wait...aren't we, below?) - deps := s.sel.getDependenciesOn(pa.id) + deps := s.sel.getDependenciesOn(awp.a.id) var failparent []dependency for _, dep := range deps { - if !s.vUnify.matches(pa.id, dep.dep.Constraint, pa.v) { - s.fail(dep.depender.id) + if !s.vUnify.matches(awp.a.id, dep.dep.Constraint, awp.a.v) { + s.fail(dep.depender.a.id) failparent = append(failparent, dep) } } err := &versionNotAllowedFailure{ - goal: pa, + goal: awp.a, failparent: failparent, c: constraint, } @@ -120,14 +119,14 @@ func (s *solver) checkRequiredPackagesExist(a atomWithPackages) error { for _, dep := range deps { for _, pkg := range dep.dep.pl { if errdep, seen := fp[pkg]; seen { - errdep.deppers = append(errdep.deppers, dep.depender) + errdep.deppers = append(errdep.deppers, dep.depender.a) fp[pkg] = errdep } else { perr, has := ptree.Packages[pkg] if !has || perr.Err != nil { fp[pkg] = errDeppers{ err: perr.Err, - deppers: []atom{dep.depender}, + deppers: []atom{dep.depender.a}, } } } @@ -147,7 +146,7 @@ func (s *solver) checkRequiredPackagesExist(a atomWithPackages) error { // given dep are valid with respect to existing constraints. func (s *solver) checkDepsConstraintsAllowable(a atomWithPackages, cdep completeDep) error { dep := cdep.workingConstraint - constraint := s.sel.getConstraint(dep.Ident) + constraint := s.sel.getConstraint(dep.Ident, a.bmi) // Ensure the constraint expressed by the dep has at least some possible // intersection with the intersection of existing constraints. if s.vUnify.matchesAny(dep.Ident, constraint, dep.Constraint) { @@ -160,7 +159,7 @@ func (s *solver) checkDepsConstraintsAllowable(a atomWithPackages, cdep complete var nofailsib []dependency for _, sibling := range siblings { if !s.vUnify.matchesAny(dep.Ident, sibling.dep.Constraint, dep.Constraint) { - s.fail(sibling.depender.id) + s.fail(sibling.depender.a.id) failsib = append(failsib, sibling) } else { nofailsib = append(nofailsib, sibling) @@ -168,7 +167,7 @@ func (s *solver) checkDepsConstraintsAllowable(a atomWithPackages, cdep complete } return &disjointConstraintFailure{ - goal: dependency{depender: a.a, dep: cdep}, + goal: dependency{depender: a, dep: cdep}, failsib: failsib, nofailsib: nofailsib, c: constraint, @@ -185,7 +184,7 @@ func (s *solver) checkDepsDisallowsSelected(a atomWithPackages, cdep completeDep s.fail(dep.Ident) return &constraintNotAllowedFailure{ - goal: dependency{depender: a.a, dep: cdep}, + goal: dependency{depender: a, dep: cdep}, v: selected.a.v, } } @@ -206,7 +205,7 @@ func (s *solver) checkIdentMatches(a atomWithPackages, cdep completeDep) error { // Fail all the other deps, as there's no way atom can ever be // compatible with them for _, d := range deps { - s.fail(d.depender.id) + s.fail(d.depender.a.id) } return &sourceMismatchFailure{ @@ -236,7 +235,7 @@ func (s *solver) checkRootCaseConflicts(a atomWithPackages, cdep completeDep) er curid, _ := s.sel.getIdentFor(current) deps := s.sel.getDependenciesOn(curid) for _, d := range deps { - s.fail(d.depender.id) + s.fail(d.depender.a.id) } // If a project has multiple packages that import each other, we treat that @@ -260,13 +259,13 @@ func (s *solver) checkRootCaseConflicts(a atomWithPackages, cdep completeDep) er if current == a.a.id.ProjectRoot { return &wrongCaseFailure{ correct: pr, - goal: dependency{depender: a.a, dep: cdep}, + goal: dependency{depender: a, dep: cdep}, badcase: deps, } } return &caseMismatchFailure{ - goal: dependency{depender: a.a, dep: cdep}, + goal: dependency{depender: a, dep: cdep}, current: current, failsib: deps, } @@ -289,7 +288,7 @@ func (s *solver) checkPackageImportsFromDepExist(a atomWithPackages, cdep comple e := &depHasProblemPackagesFailure{ goal: dependency{ - depender: a.a, + depender: a, dep: cdep, }, v: sel.a.v, @@ -329,7 +328,7 @@ func (s *solver) checkRevisionExists(a atomWithPackages, cdep completeDep) error return &nonexistentRevisionFailure{ goal: dependency{ - depender: a.a, + depender: a, dep: cdep, }, r: r, diff --git a/gps/selection.go b/gps/selection.go index a74c60ae8d..ea77035e1f 100644 --- a/gps/selection.go +++ b/gps/selection.go @@ -134,7 +134,7 @@ func (s *selection) getSelectedPackagesIn(id ProjectIdentifier) map[string]int { uniq := make(map[string]int) for _, p := range s.projects { if p.a.a.id.eq(id) { - for _, pkg := range p.a.pl { + for _, pkg := range p.a.bmi.pl { uniq[pkg] = uniq[pkg] + 1 } } @@ -143,12 +143,18 @@ func (s *selection) getSelectedPackagesIn(id ProjectIdentifier) map[string]int { return uniq } -func (s *selection) getConstraint(id ProjectIdentifier) Constraint { +func (s *selection) getConstraint(id ProjectIdentifier, bmi bimodalIdentifier) Constraint { deps, exists := s.deps[id.ProjectRoot] if !exists || len(deps) == 0 { return any } + // Enable quick lookup of where in the depgraph a constraint was defined + ancestors := map[ProjectRoot]bool{} + for _, ancestor := range bmi.path { + ancestors[ancestor.id.ProjectRoot] = true + } + // TODO(sdboyer) recomputing this sucks and is quite wasteful. Precompute/cache it // on changes to the constraint set, instead. diff --git a/gps/solve_basic_test.go b/gps/solve_basic_test.go index 910b9d622b..d457aa4c0c 100644 --- a/gps/solve_basic_test.go +++ b/gps/solve_basic_test.go @@ -226,14 +226,15 @@ func mkDepspec(pi string, deps ...string) depspec { func mkDep(atom, pdep string, pl ...string) dependency { return dependency{ - depender: mkAtom(atom), + depender: atomWithPackages{a: mkAtom(atom)}, dep: mkCDep(pdep, pl...), } } func mkADep(atom, pdep string, c Constraint, pl ...string) dependency { return dependency{ - depender: mkAtom(atom), + // TODO(carolynvs): I don't think we need to set the bmi (specifically the path to the atom) in the fixture data. + depender: atomWithPackages{a: mkAtom(atom)}, dep: completeDep{ workingConstraint: workingConstraint{ Ident: ProjectIdentifier{ diff --git a/gps/solve_failures.go b/gps/solve_failures.go index 05daedd707..1026bdc139 100644 --- a/gps/solve_failures.go +++ b/gps/solve_failures.go @@ -78,16 +78,16 @@ type caseMismatchFailure struct { func (e *caseMismatchFailure) Error() string { if len(e.failsib) == 1 { str := "Could not introduce %s due to a case-only variation: it depends on %q, but %q was already established as the case variant for that project root by depender %s" - return fmt.Sprintf(str, a2vs(e.goal.depender), e.goal.dep.Ident.ProjectRoot, e.current, a2vs(e.failsib[0].depender)) + return fmt.Sprintf(str, a2vs(e.goal.depender.a), e.goal.dep.Ident.ProjectRoot, e.current, a2vs(e.failsib[0].depender.a)) } var buf bytes.Buffer str := "Could not introduce %s due to a case-only variation: it depends on %q, but %q was already established as the case variant for that project root by the following other dependers:\n" - fmt.Fprintf(&buf, str, a2vs(e.goal.depender), e.goal.dep.Ident.ProjectRoot, e.current) + fmt.Fprintf(&buf, str, a2vs(e.goal.depender.a), e.goal.dep.Ident.ProjectRoot, e.current) for _, c := range e.failsib { - fmt.Fprintf(&buf, "\t%s\n", a2vs(c.depender)) + fmt.Fprintf(&buf, "\t%s\n", a2vs(c.depender.a)) } return buf.String() @@ -97,7 +97,7 @@ func (e *caseMismatchFailure) traceString() string { var buf bytes.Buffer fmt.Fprintf(&buf, "case-only variation in dependency on %q; %q already established by:\n", e.goal.dep.Ident.ProjectRoot, e.current) for _, f := range e.failsib { - fmt.Fprintf(&buf, "%s\n", a2vs(f.depender)) + fmt.Fprintf(&buf, "%s\n", a2vs(f.depender.a)) } return buf.String() @@ -122,16 +122,16 @@ type wrongCaseFailure struct { func (e *wrongCaseFailure) Error() string { if len(e.badcase) == 1 { str := "Could not introduce %s; imports amongst its packages establish %q as the canonical casing for root, but %s tried to import it as %q" - return fmt.Sprintf(str, a2vs(e.goal.depender), e.correct, a2vs(e.badcase[0].depender), e.badcase[0].dep.Ident.ProjectRoot) + return fmt.Sprintf(str, a2vs(e.goal.depender.a), e.correct, a2vs(e.badcase[0].depender.a), e.badcase[0].dep.Ident.ProjectRoot) } var buf bytes.Buffer str := "Could not introduce %s; imports amongst its packages establish %q as the canonical casing for root, but the following projects tried to import it as %q" - fmt.Fprintf(&buf, str, a2vs(e.goal.depender), e.correct, e.badcase[0].dep.Ident.ProjectRoot) + fmt.Fprintf(&buf, str, a2vs(e.goal.depender.a), e.correct, e.badcase[0].dep.Ident.ProjectRoot) for _, c := range e.badcase { - fmt.Fprintf(&buf, "\t%s\n", a2vs(c.depender)) + fmt.Fprintf(&buf, "\t%s\n", a2vs(c.depender.a)) } return buf.String() @@ -141,7 +141,7 @@ func (e *wrongCaseFailure) traceString() string { var buf bytes.Buffer fmt.Fprintf(&buf, "internal imports establish %q as correct casing; %q was used by:\n", e.correct, e.goal.dep.Ident.ProjectRoot) for _, f := range e.badcase { - fmt.Fprintf(&buf, "%s\n", a2vs(f.depender)) + fmt.Fprintf(&buf, "%s\n", a2vs(f.depender.a)) } return buf.String() @@ -171,7 +171,7 @@ type disjointConstraintFailure struct { func (e *disjointConstraintFailure) Error() string { if len(e.failsib) == 1 { str := "Could not introduce %s, as it has a dependency on %s with constraint %s, which has no overlap with existing constraint %s from %s" - return fmt.Sprintf(str, a2vs(e.goal.depender), e.goal.dep.Ident, e.goal.dep.Constraint.String(), e.failsib[0].dep.Constraint.String(), a2vs(e.failsib[0].depender)) + return fmt.Sprintf(str, a2vs(e.goal.depender.a), e.goal.dep.Ident, e.goal.dep.Constraint.String(), e.failsib[0].dep.Constraint.String(), a2vs(e.failsib[0].depender.a)) } var buf bytes.Buffer @@ -181,16 +181,16 @@ func (e *disjointConstraintFailure) Error() string { sibs = e.failsib str := "Could not introduce %s, as it has a dependency on %s with constraint %s, which has no overlap with the following existing constraints:\n" - fmt.Fprintf(&buf, str, a2vs(e.goal.depender), e.goal.dep.Ident, e.goal.dep.Constraint.String()) + fmt.Fprintf(&buf, str, a2vs(e.goal.depender.a), e.goal.dep.Ident, e.goal.dep.Constraint.String()) } else { sibs = e.nofailsib str := "Could not introduce %s, as it has a dependency on %s with constraint %s, which does not overlap with the intersection of existing constraints from other currently selected packages:\n" - fmt.Fprintf(&buf, str, a2vs(e.goal.depender), e.goal.dep.Ident, e.goal.dep.Constraint.String()) + fmt.Fprintf(&buf, str, a2vs(e.goal.depender.a), e.goal.dep.Ident, e.goal.dep.Constraint.String()) } for _, c := range sibs { - fmt.Fprintf(&buf, "\t%s from %s\n", c.dep.Constraint.String(), a2vs(c.depender)) + fmt.Fprintf(&buf, "\t%s from %s\n", c.dep.Constraint.String(), a2vs(c.depender.a)) } return buf.String() @@ -204,7 +204,7 @@ func (e *disjointConstraintFailure) traceString() string { &buf, "%s from %s (no overlap)\n", f.dep.Constraint.String(), - a2vs(f.depender), + a2vs(f.depender.a), ) } for _, f := range e.nofailsib { @@ -212,7 +212,7 @@ func (e *disjointConstraintFailure) traceString() string { &buf, "%s from %s (some overlap)\n", f.dep.Constraint.String(), - a2vs(f.depender), + a2vs(f.depender.a), ) } @@ -234,7 +234,7 @@ type constraintNotAllowedFailure struct { func (e *constraintNotAllowedFailure) Error() string { return fmt.Sprintf( "Could not introduce %s, as it has a dependency on %s with constraint %s, which does not allow the currently selected version of %s", - a2vs(e.goal.depender), + a2vs(e.goal.depender.a), e.goal.dep.Ident, e.goal.dep.Constraint, e.v, @@ -244,7 +244,7 @@ func (e *constraintNotAllowedFailure) Error() string { func (e *constraintNotAllowedFailure) traceString() string { return fmt.Sprintf( "%s depends on %s with %s, but that's already selected at %s", - a2vs(e.goal.depender), + a2vs(e.goal.depender.a), e.goal.dep.Ident.ProjectRoot, e.goal.dep.Constraint, e.v, @@ -274,7 +274,7 @@ func (e *versionNotAllowedFailure) Error() string { "Could not introduce %s, as it is not allowed by constraint %s from project %s.", a2vs(e.goal), e.failparent[0].dep.Constraint.String(), - e.failparent[0].depender.id, + e.failparent[0].depender.a.id, ) } @@ -283,7 +283,7 @@ func (e *versionNotAllowedFailure) Error() string { fmt.Fprintf(&buf, "Could not introduce %s, as it is not allowed by constraints from the following projects:\n", a2vs(e.goal)) for _, f := range e.failparent { - fmt.Fprintf(&buf, "\t%s from %s\n", f.dep.Constraint.String(), a2vs(f.depender)) + fmt.Fprintf(&buf, "\t%s from %s\n", f.dep.Constraint.String(), a2vs(f.depender.a)) } return buf.String() @@ -294,7 +294,7 @@ func (e *versionNotAllowedFailure) traceString() string { fmt.Fprintf(&buf, "%s not allowed by constraint %s:\n", a2vs(e.goal), e.c.String()) for _, f := range e.failparent { - fmt.Fprintf(&buf, " %s from %s\n", f.dep.Constraint.String(), a2vs(f.depender)) + fmt.Fprintf(&buf, " %s from %s\n", f.dep.Constraint.String(), a2vs(f.depender.a)) } return buf.String() @@ -333,7 +333,7 @@ type sourceMismatchFailure struct { func (e *sourceMismatchFailure) Error() string { var cur []string for _, c := range e.sel { - cur = append(cur, string(c.depender.id.ProjectRoot)) + cur = append(cur, string(c.depender.a.id.ProjectRoot)) } str := "Could not introduce %s, as it depends on %s from %s, but %s is already marked as coming from %s by %s" @@ -346,7 +346,7 @@ func (e *sourceMismatchFailure) traceString() string { fmt.Fprintf(&buf, " %s from %s\n", e.mismatch, e.prob.id) for _, dep := range e.sel { - fmt.Fprintf(&buf, " %s from %s\n", e.current, dep.depender.id) + fmt.Fprintf(&buf, " %s from %s\n", e.current, dep.depender.a.id) } return buf.String() @@ -485,7 +485,7 @@ func (e *depHasProblemPackagesFailure) Error() string { return fmt.Sprintf( "Could not introduce %s, as it requires package %s from %s, but in version %s that package %s", - a2vs(e.goal.depender), + a2vs(e.goal.depender.a), pkg, e.goal.dep.Ident, e.v, @@ -496,7 +496,7 @@ func (e *depHasProblemPackagesFailure) Error() string { var buf bytes.Buffer fmt.Fprintf( &buf, "Could not introduce %s, as it requires problematic packages from %s (current version %s):", - a2vs(e.goal.depender), + a2vs(e.goal.depender.a), e.goal.dep.Ident, e.v, ) @@ -526,7 +526,7 @@ func (e *depHasProblemPackagesFailure) traceString() string { fmt.Fprintf( &buf, "%s depping on %s at %s has problem subpkg(s):", - a2vs(e.goal.depender), + a2vs(e.goal.depender.a), e.goal.dep.Ident, e.v, ) @@ -556,7 +556,7 @@ type nonexistentRevisionFailure struct { func (e *nonexistentRevisionFailure) Error() string { return fmt.Sprintf( "Could not introduce %s, as it requires %s at revision %s, but that revision does not exist", - a2vs(e.goal.depender), + a2vs(e.goal.depender.a), e.goal.dep.Ident, e.r, ) @@ -565,7 +565,7 @@ func (e *nonexistentRevisionFailure) Error() string { func (e *nonexistentRevisionFailure) traceString() string { return fmt.Sprintf( "%s wants missing rev %s of %s", - a2vs(e.goal.depender), + a2vs(e.goal.depender.a), e.r, e.goal.dep.Ident, ) diff --git a/gps/solver.go b/gps/solver.go index bede9d53b4..678b4b065b 100644 --- a/gps/solver.go +++ b/gps/solver.go @@ -538,7 +538,7 @@ func (s *solver) solve(ctx context.Context) (map[atom]map[string]struct{}, error id: queue.id, v: queue.current(), }, - pl: bmi.pl, + bmi: bmi, } err = s.selectAtom(awp, false) s.mtr.pop() @@ -566,7 +566,7 @@ func (s *solver) solve(ctx context.Context) (map[atom]map[string]struct{}, error id: bmi.id, v: awp.a.v, }, - pl: bmi.pl, + bmi: bmi, } s.traceCheckPkgs(bmi) @@ -610,7 +610,7 @@ func (s *solver) solve(ctx context.Context) (map[atom]map[string]struct{}, error projs[sel.a.a] = pm } - for _, path := range sel.a.pl { + for _, path := range sel.a.bmi.pl { pm[path] = struct{}{} } } @@ -644,9 +644,12 @@ func (s *solver) selectRoot() error { go s.b.SyncSourceFor(dep.Ident) } - s.sel.pushDep(dependency{depender: awp.a, dep: dep}) + s.sel.pushDep(dependency{ + depender: awp, + dep: dep, + }) // Add all to unselected queue - heap.Push(s.unsel, bimodalIdentifier{id: dep.Ident, pl: dep.pl, fromRoot: true}) + heap.Push(s.unsel, bimodalIdentifier{id: dep.Ident, pl: dep.pl, fromRoot: true, path: []atom{awp.a}}) } s.traceSelectRoot(s.rd.rpt, deps) @@ -677,7 +680,7 @@ func (s *solver) getImportsAndConstraintsOf(a atomWithPackages) ([]string, []com // Use maps to dedupe the unique internal and external packages. exmap, inmap := make(map[string]struct{}), make(map[string]struct{}) - for _, pkg := range a.pl { + for _, pkg := range a.bmi.pl { inmap[pkg] = struct{}{} for _, ipkg := range rm[pkg].Internal { inmap[ipkg] = struct{}{} @@ -687,8 +690,8 @@ func (s *solver) getImportsAndConstraintsOf(a atomWithPackages) ([]string, []com var pl []string // If lens are the same, then the map must have the same contents as the // slice; no need to build a new one. - if len(inmap) == len(a.pl) { - pl = a.pl + if len(inmap) == len(a.bmi.pl) { + pl = a.bmi.pl } else { pl = make([]string, 0, len(inmap)) for pkg := range inmap { @@ -699,7 +702,7 @@ func (s *solver) getImportsAndConstraintsOf(a atomWithPackages) ([]string, []com // Add to the list those packages that are reached by the packages // explicitly listed in the atom - for _, pkg := range a.pl { + for _, pkg := range a.bmi.pl { // Skip ignored packages if s.rd.ir.IsIgnored(pkg) { continue @@ -827,7 +830,7 @@ func (s *solver) createVersionQueue(bmi bimodalIdentifier) (*versionQueue, error var lockv Version if len(s.rd.rlm) > 0 { - lockv, err = s.getLockVersionIfValid(id) + lockv, err = s.getLockVersionIfValid(id, bmi) if err != nil { // Can only get an error here if an upgrade was expressly requested on // code that exists only in vendor @@ -844,11 +847,11 @@ func (s *solver) createVersionQueue(bmi bimodalIdentifier) (*versionQueue, error // TODO(sdboyer) nested loop; prime candidate for a cache somewhere for _, dep := range s.sel.getDependenciesOn(bmi.id) { // Skip the root, of course - if s.rd.isRoot(dep.depender.id.ProjectRoot) { + if s.rd.isRoot(dep.depender.a.id.ProjectRoot) { continue } - _, l, err := s.b.GetManifestAndLock(dep.depender.id, dep.depender.v, s.rd.an) + _, l, err := s.b.GetManifestAndLock(dep.depender.a.id, dep.depender.a.v, s.rd.an) if err != nil || l == nil { // err being non-nil really shouldn't be possible, but the lock // being nil is quite likely @@ -902,7 +905,7 @@ func (s *solver) createVersionQueue(bmi bimodalIdentifier) (*versionQueue, error // TODO(sdboyer) while this does work, it bypasses the interface-implied guarantees // of the version queue, and is therefore not a great strategy for API // coherency. Folding this in to a formal interface would be better. - if tc, ok := s.sel.getConstraint(bmi.id).(Revision); ok && q.pi[0] != tc { + if tc, ok := s.sel.getConstraint(bmi.id, bmi).(Revision); ok && q.pi[0] != tc { // We know this is the only thing that could possibly match, so put it // in at the front - if it isn't there already. // TODO(sdboyer) existence of the revision is guaranteed by checkRevisionExists(); restore that call. @@ -911,7 +914,7 @@ func (s *solver) createVersionQueue(bmi bimodalIdentifier) (*versionQueue, error // Having assembled the queue, search it for a valid version. s.traceCheckQueue(q, bmi, false, 1) - return q, s.findValidVersion(q, bmi.pl) + return q, s.findValidVersion(q, bmi) } // findValidVersion walks through a versionQueue until it finds a version that @@ -920,7 +923,7 @@ func (s *solver) createVersionQueue(bmi bimodalIdentifier) (*versionQueue, error // The satisfiability checks triggered from here are constrained to operate only // on those dependencies induced by the list of packages given in the second // parameter. -func (s *solver) findValidVersion(q *versionQueue, pl []string) error { +func (s *solver) findValidVersion(q *versionQueue, bmi bimodalIdentifier) error { if nil == q.current() { // this case should not be reachable, but reflects improper solver state // if it is, so panic immediately @@ -937,7 +940,7 @@ func (s *solver) findValidVersion(q *versionQueue, pl []string) error { id: q.id, v: cur, }, - pl: pl, + bmi: bmi, }, false) if err == nil { // we have a good version, can return safely @@ -954,7 +957,7 @@ func (s *solver) findValidVersion(q *versionQueue, pl []string) error { } } - s.fail(s.sel.getDependenciesOn(q.id)[0].depender.id) + s.fail(s.sel.getDependenciesOn(q.id)[0].depender.a.id) // Return a compound error of all the new errors encountered during this // attempt to find a new, valid version @@ -973,7 +976,7 @@ func (s *solver) findValidVersion(q *versionQueue, pl []string) error { // // If any of these three conditions are true (or if the id cannot be found in // the root lock), then no atom will be returned. -func (s *solver) getLockVersionIfValid(id ProjectIdentifier) (Version, error) { +func (s *solver) getLockVersionIfValid(id ProjectIdentifier, bmi bimodalIdentifier) (Version, error) { // If the project is specifically marked for changes, then don't look for a // locked version. if _, explicit := s.rd.chng[id.ProjectRoot]; explicit || s.rd.chngall { @@ -1004,7 +1007,7 @@ func (s *solver) getLockVersionIfValid(id ProjectIdentifier) (Version, error) { return nil, nil } - constraint := s.sel.getConstraint(id) + constraint := s.sel.getConstraint(id, bmi) v := lp.Version() if !constraint.Matches(v) { var found bool @@ -1082,7 +1085,7 @@ func (s *solver) backtrack(ctx context.Context) (bool, error) { } return false, err } - s.traceBacktrack(awp.bmi(), !proj) + s.traceBacktrack(awp.bmi, !proj) } } @@ -1102,7 +1105,7 @@ func (s *solver) backtrack(ctx context.Context) (bool, error) { } return false, err } - s.traceBacktrack(awp.bmi(), !proj) + s.traceBacktrack(awp.bmi, !proj) } if !q.id.eq(awp.a.id) { @@ -1113,8 +1116,8 @@ func (s *solver) backtrack(ctx context.Context) (bool, error) { // TODO(sdboyer) is it feasible to make available the failure reason here? if q.advance(nil) == nil && !q.isExhausted() { // Search for another acceptable version of this failed dep in its queue - s.traceCheckQueue(q, awp.bmi(), true, 0) - if s.findValidVersion(q, awp.pl) == nil { + s.traceCheckQueue(q, awp.bmi, true, 0) + if s.findValidVersion(q, awp.bmi) == nil { // Found one! Put it back on the selected queue and stop // backtracking @@ -1131,7 +1134,7 @@ func (s *solver) backtrack(ctx context.Context) (bool, error) { } } - s.traceBacktrack(awp.bmi(), false) + s.traceBacktrack(awp.bmi, false) // No solution found; continue backtracking after popping the queue // we just inspected off the list @@ -1251,7 +1254,7 @@ func (s *solver) selectAtom(a atomWithPackages, pkgonly bool) error { s.mtr.push("select-atom") s.unsel.remove(bimodalIdentifier{ id: a.a.id, - pl: a.pl, + pl: a.bmi.pl, }) pl, deps, err := s.getImportsAndConstraintsOf(a) @@ -1265,7 +1268,7 @@ func (s *solver) selectAtom(a atomWithPackages, pkgonly bool) error { } // Assign the new internal package list into the atom, then push it onto the // selection stack - a.pl = pl + a.bmi.pl = pl s.sel.pushSelection(a, pkgonly) // If this atom has a lock, pull it out so that we can potentially inject @@ -1307,7 +1310,11 @@ func (s *solver) selectAtom(a atomWithPackages, pkgonly bool) error { go s.b.SyncSourceFor(dep.Ident) } - s.sel.pushDep(dependency{depender: a.a, dep: dep}) + s.sel.pushDep(dependency{ + depender: a, + dep: dep, + }) + // Go through all the packages introduced on this dep, selecting only // the ones where the only depper on them is what the preceding line just // pushed in. Then, put those into the unselected queue. @@ -1335,6 +1342,7 @@ func (s *solver) selectAtom(a atomWithPackages, pkgonly bool) error { // This puts in a preferred version if one's in the map, else // drops in the zero value (nil) prefv: lmap[dep.Ident], + path: append(a.bmi.path, a.a), } heap.Push(s.unsel, bmi) } @@ -1350,7 +1358,7 @@ func (s *solver) unselectLast() (atomWithPackages, bool, error) { s.mtr.push("unselect") defer s.mtr.pop() awp, first := s.sel.popSelection() - heap.Push(s.unsel, bimodalIdentifier{id: awp.a.id, pl: awp.pl}) + heap.Push(s.unsel, bimodalIdentifier{id: awp.a.id, pl: awp.bmi.pl, path: awp.bmi.path}) _, deps, err := s.getImportsAndConstraintsOf(awp) if err != nil { diff --git a/gps/trace.go b/gps/trace.go index 4c579d30aa..bfd0bf6b7a 100644 --- a/gps/trace.go +++ b/gps/trace.go @@ -140,9 +140,9 @@ func (s *solver) traceSelect(awp atomWithPackages, pkgonly bool) { var msg string if pkgonly { - msg = fmt.Sprintf("%s%s include %v more pkgs from %s", innerIndent, successChar, len(awp.pl), a2vs(awp.a)) + msg = fmt.Sprintf("%s%s include %v more pkgs from %s", innerIndent, successChar, len(awp.bmi.pl), a2vs(awp.a)) } else { - msg = fmt.Sprintf("%s select %s w/%v pkgs", successChar, a2vs(awp.a), len(awp.pl)) + msg = fmt.Sprintf("%s select %s w/%v pkgs", successChar, a2vs(awp.a), len(awp.bmi.pl)) } prefix := getprei(len(s.sel.projects) - 1) From 19531528fc8064fb3f656318a3af383bf3c3187e Mon Sep 17 00:00:00 2001 From: Carolyn Van Slyck Date: Thu, 18 Jan 2018 14:29:04 -0600 Subject: [PATCH 2/4] Ignore NoGoCode errors from required packages --- gps/hash.go | 20 +++++++++++++++++--- gps/hash_test.go | 32 ++++++++++++++++---------------- gps/identifier.go | 4 ++++ gps/rootdata.go | 18 ++++++++++++------ gps/satisfy.go | 23 +++++++++++++++++++++++ gps/solver.go | 25 +++++++++++++++---------- 6 files changed, 87 insertions(+), 35 deletions(-) diff --git a/gps/hash.go b/gps/hash.go index 556933bcf3..2716cac348 100644 --- a/gps/hash.go +++ b/gps/hash.go @@ -16,7 +16,8 @@ import ( // string headers used to demarcate sections in hash input creation const ( hhConstraints = "-CONSTRAINTS-" - hhImportsReqs = "-IMPORTS/REQS-" + hhImports = "-IMPORTS-" + hhRequires = "-REQUIRES-" hhIgnores = "-IGNORES-" hhOverrides = "-OVERRIDES-" hhAnalyzer = "-ANALYZER-" @@ -68,12 +69,25 @@ func (s *solver) writeHashingInputs(w io.Writer) { } // Write out each discrete import, including those derived from requires. - writeString(hhImportsReqs) - imports := s.rd.externalImportList(s.stdLibFn) + depList := s.rd.externalImportList(s.stdLibFn) + var imports, requires []string + for pr, fromRequired := range depList { + if fromRequired { + requires = append(requires, pr) + } else { + imports = append(imports, pr) + } + } + writeString(hhImports) sort.Strings(imports) for _, im := range imports { writeString(im) } + writeString(hhRequires) + sort.Strings(requires) + for _, req := range requires { + writeString(req) + } // Add ignores, skipping any that point under the current project root; // those will have already been implicitly incorporated by the import diff --git a/gps/hash_test.go b/gps/hash_test.go index 1be02f6870..0ac51df9a6 100644 --- a/gps/hash_test.go +++ b/gps/hash_test.go @@ -41,7 +41,7 @@ func TestHashInputs(t *testing.T) { "sv-1.0.0", "b", "sv-1.0.0", - hhImportsReqs, + hhImports, "a", "b", hhIgnores, @@ -91,7 +91,7 @@ func TestHashInputsReqsIgs(t *testing.T) { "sv-1.0.0", "b", "sv-1.0.0", - hhImportsReqs, + hhImports, "a", "b", hhIgnores, @@ -133,7 +133,7 @@ func TestHashInputsReqsIgs(t *testing.T) { "sv-1.0.0", "b", "sv-1.0.0", - hhImportsReqs, + hhImports, "a", "b", "baz", @@ -173,7 +173,7 @@ func TestHashInputsReqsIgs(t *testing.T) { "sv-1.0.0", "b", "sv-1.0.0", - hhImportsReqs, + hhImports, "a", "b", "baz", @@ -231,7 +231,7 @@ func TestHashInputsOverrides(t *testing.T) { "sv-1.0.0", "b", "sv-1.0.0", - hhImportsReqs, + hhImports, "a", "b", hhIgnores, @@ -261,7 +261,7 @@ func TestHashInputsOverrides(t *testing.T) { "c", "car", "any-*", // Any isn't included under the override, but IS for the constraint b/c it's equivalent - hhImportsReqs, + hhImports, "a", "b", "c", @@ -291,7 +291,7 @@ func TestHashInputsOverrides(t *testing.T) { "c", "car", "any-*", // Any isn't included under the override, but IS for the constraint b/c it's equivalent - hhImportsReqs, + hhImports, "a", "b", "c", @@ -319,7 +319,7 @@ func TestHashInputsOverrides(t *testing.T) { "c", "car", "any-*", - hhImportsReqs, + hhImports, "a", "b", "c", @@ -349,7 +349,7 @@ func TestHashInputsOverrides(t *testing.T) { "c", "car", "any-*", - hhImportsReqs, + hhImports, "a", "b", "c", @@ -378,7 +378,7 @@ func TestHashInputsOverrides(t *testing.T) { "sv-1.0.0", "b", "sv-1.0.0", - hhImportsReqs, + hhImports, "a", "b", hhIgnores, @@ -407,7 +407,7 @@ func TestHashInputsOverrides(t *testing.T) { "sv-1.0.0", "b", "sv-1.0.0", - hhImportsReqs, + hhImports, "a", "b", hhIgnores, @@ -436,7 +436,7 @@ func TestHashInputsOverrides(t *testing.T) { "pv-fluglehorn", "b", "sv-1.0.0", - hhImportsReqs, + hhImports, "a", "b", hhIgnores, @@ -468,7 +468,7 @@ func TestHashInputsOverrides(t *testing.T) { "sv-1.0.0", "b", "sv-1.0.0", - hhImportsReqs, + hhImports, "a", "b", hhIgnores, @@ -501,7 +501,7 @@ func TestHashInputsOverrides(t *testing.T) { "pv-fluglehorn", "b", "sv-1.0.0", - hhImportsReqs, + hhImports, "a", "b", hhIgnores, @@ -621,7 +621,7 @@ func TestHashInputsIneffectualWildcardIgs(t *testing.T) { "sv-1.0.0", "b", "sv-1.0.0", - hhImportsReqs, + hhImports, "a", "b", hhIgnores, @@ -644,7 +644,7 @@ func TestHashInputsIneffectualWildcardIgs(t *testing.T) { "sv-1.0.0", "b", "sv-1.0.0", - hhImportsReqs, + hhImports, "a", "b", hhIgnores, diff --git a/gps/identifier.go b/gps/identifier.go index d3c0833932..7b80f0915f 100644 --- a/gps/identifier.go +++ b/gps/identifier.go @@ -179,6 +179,8 @@ type bimodalIdentifier struct { fromRoot bool // The path to the atom in the graph, e.g. root -> foo -> bar path []atom + // Indicates that the bmi originated from a require, vs an import + fromRequired bool } type atom struct { @@ -203,6 +205,8 @@ type atomWithPackages struct { type completeDep struct { // The base workingConstraint workingConstraint + // Indicates that the bmi originated from a require, vs an import + fromRequired bool // The specific packages required from the ProjectDep pl []string } diff --git a/gps/rootdata.go b/gps/rootdata.go index 20550d7ca6..adc3953008 100644 --- a/gps/rootdata.go +++ b/gps/rootdata.go @@ -50,13 +50,20 @@ type rootdata struct { an ProjectAnalyzer } -// externalImportList returns a list of the unique imports from the root data. +// externalImportList returns a map of imports and a flag specifying if the project is from a required. // Ignores and requires are taken into consideration, stdlib is excluded, and // errors within the local set of package are not backpropagated. -func (rd rootdata) externalImportList(stdLibFn func(string) bool) []string { +func (rd rootdata) externalImportList(stdLibFn func(string) bool) map[string]bool { + // projectRoot -> fromRequired (false = import, true = required) + imports := map[string]bool{} + rm, _ := rd.rpt.ToReachMap(true, true, false, rd.ir) reach := rm.FlattenFn(stdLibFn) + for _, r := range reach { + imports[r] = false + } + // If there are any requires, slide them into the reach list, as well. if len(rd.req) > 0 { // Make a map of imports that are both in the import path list and the @@ -70,13 +77,12 @@ func (rd rootdata) externalImportList(stdLibFn func(string) bool) []string { for r := range rd.req { if !skip[r] { - reach = append(reach, r) + imports[r] = true } } } - sort.Strings(reach) - return reach + return imports } func (rd rootdata) getApplicableConstraints(stdLibFn func(string) bool) []workingConstraint { @@ -112,7 +118,7 @@ func (rd rootdata) getApplicableConstraints(stdLibFn func(string) bool) []workin // Walk all dep import paths we have to consider and mark the corresponding // wc entry in the trie, if any - for _, im := range rd.externalImportList(stdLibFn) { + for im := range rd.externalImportList(stdLibFn) { if stdLibFn(im) { continue } diff --git a/gps/satisfy.go b/gps/satisfy.go index 555e2b6887..e71cc7d9df 100644 --- a/gps/satisfy.go +++ b/gps/satisfy.go @@ -4,6 +4,10 @@ package gps +import ( + "go/build" +) + // check performs constraint checks on the provided atom. The set of checks // differ slightly depending on whether the atom is pkgonly, or if it's the // entire project being added for the first time. @@ -124,6 +128,9 @@ func (s *solver) checkRequiredPackagesExist(a atomWithPackages) error { } else { perr, has := ptree.Packages[pkg] if !has || perr.Err != nil { + if shouldIgnorePackageError(a, perr.Err) { + continue + } fp[pkg] = errDeppers{ err: perr.Err, deppers: []atom{dep.depender.a}, @@ -299,6 +306,9 @@ func (s *solver) checkPackageImportsFromDepExist(a atomWithPackages, cdep comple perr, has := ptree.Packages[pkg] if !has || perr.Err != nil { if has { + if shouldIgnorePackageError(a, perr.Err) { + continue + } e.prob[pkg] = perr.Err } else { e.prob[pkg] = nil @@ -334,3 +344,16 @@ func (s *solver) checkRevisionExists(a atomWithPackages, cdep completeDep) error r: r, } } + +// shouldAllowPackageError determines if a an error for a dependency should be overlooked. +// The following package errors should be ignored: +// * The package originated from a "require" and the package does not contain Go code. +func shouldIgnorePackageError(a atomWithPackages, err error) bool { + // Allow a package to not have go code only when it originated from a require, and not an import. + if a.bmi.fromRequired { + _, isNoGoErr := err.(*build.NoGoError) + return isNoGoErr + } + + return false +} diff --git a/gps/solver.go b/gps/solver.go index 678b4b065b..ac243fa7bf 100644 --- a/gps/solver.go +++ b/gps/solver.go @@ -419,7 +419,7 @@ func ValidateParams(params SolveParameters, sm SourceManager) error { deducePkgsGroup.Done() } - for _, ip := range rd.externalImportList(paths.IsStandardImportPath) { + for ip := range rd.externalImportList(paths.IsStandardImportPath) { deducePkgsGroup.Add(1) go deducePkg(ip, sm) } @@ -649,7 +649,7 @@ func (s *solver) selectRoot() error { dep: dep, }) // Add all to unselected queue - heap.Push(s.unsel, bimodalIdentifier{id: dep.Ident, pl: dep.pl, fromRoot: true, path: []atom{awp.a}}) + heap.Push(s.unsel, bimodalIdentifier{id: dep.Ident, fromRequired: dep.fromRequired, pl: dep.pl, fromRoot: true}) } s.traceSelectRoot(s.rd.rpt, deps) @@ -713,6 +713,9 @@ func (s *solver) getImportsAndConstraintsOf(a atomWithPackages) ([]string, []com // Missing package here *should* only happen if the target pkg was // poisoned; check the errors map. if importErr, eexists := em[pkg]; eexists { + if shouldIgnorePackageError(a, importErr.Err) { + continue + } return nil, nil, importErr } @@ -725,11 +728,10 @@ func (s *solver) getImportsAndConstraintsOf(a atomWithPackages) ([]string, []com } } - reach := make([]string, 0, len(exmap)) + reach := make(map[string]bool, len(exmap)) for pkg := range exmap { - reach = append(reach, pkg) + reach[pkg] = true } - sort.Strings(reach) deps := s.rd.ovr.overrideAll(m.DependencyConstraints()) cd, err := s.intersectConstraintsWithImports(deps, reach) @@ -740,7 +742,7 @@ func (s *solver) getImportsAndConstraintsOf(a atomWithPackages) ([]string, []com // externally reached packages, and creates a []completeDep that is guaranteed // to include all packages named by import reach, using constraints where they // are available, or Any() where they are not. -func (s *solver) intersectConstraintsWithImports(deps []workingConstraint, reach []string) ([]completeDep, error) { +func (s *solver) intersectConstraintsWithImports(deps []workingConstraint, imports map[string]bool) ([]completeDep, error) { // Create a radix tree with all the projects we know from the manifest xt := radix.New() for _, dep := range deps { @@ -750,7 +752,7 @@ func (s *solver) intersectConstraintsWithImports(deps []workingConstraint, reach // Step through the reached packages; if they have prefix matches in // the trie, assume (mostly) it's a correct correspondence. dmap := make(map[ProjectRoot]completeDep) - for _, rp := range reach { + for rp, fromRequired := range imports { // If it's a stdlib-shaped package, skip it. if s.stdLibFn(rp) { continue @@ -770,6 +772,7 @@ func (s *solver) intersectConstraintsWithImports(deps []workingConstraint, reach dmap[dep.Ident.ProjectRoot] = completeDep{ workingConstraint: dep, pl: []string{rp}, + fromRequired: fromRequired, } } continue @@ -791,6 +794,7 @@ func (s *solver) intersectConstraintsWithImports(deps []workingConstraint, reach // And also put the complete dep into the dmap dmap[root] = completeDep{ workingConstraint: pd, + fromRequired: fromRequired, pl: []string{rp}, } } @@ -1337,8 +1341,9 @@ func (s *solver) selectAtom(a atomWithPackages, pkgonly bool) error { // alternate source, and one without. See #969. id, _ := s.sel.getIdentFor(dep.Ident.ProjectRoot) bmi := bimodalIdentifier{ - id: id, - pl: newp, + id: id, + pl: newp, + fromRequired: dep.fromRequired, // This puts in a preferred version if one's in the map, else // drops in the zero value (nil) prefv: lmap[dep.Ident], @@ -1358,7 +1363,7 @@ func (s *solver) unselectLast() (atomWithPackages, bool, error) { s.mtr.push("unselect") defer s.mtr.pop() awp, first := s.sel.popSelection() - heap.Push(s.unsel, bimodalIdentifier{id: awp.a.id, pl: awp.bmi.pl, path: awp.bmi.path}) + heap.Push(s.unsel, bimodalIdentifier{id: awp.a.id, pl: awp.bmi.pl, fromRequired: awp.bmi.fromRequired, path: awp.bmi.path}) _, deps, err := s.getImportsAndConstraintsOf(awp) if err != nil { From 8788c937417234306ccdc059577a613e3e71e403 Mon Sep 17 00:00:00 2001 From: Carolyn Van Slyck Date: Thu, 18 Jan 2018 14:49:56 -0600 Subject: [PATCH 3/4] Bump solver version to 2 --- analyzer.go | 2 +- analyzer_test.go | 4 ++-- cmd/dep/root_analyzer.go | 2 +- .../add/all-new-double-spec/final/Gopkg.lock | 4 ++-- .../ensure/add/all-new-double/final/Gopkg.lock | 4 ++-- .../ensure/add/all-new-spec/final/Gopkg.lock | 4 ++-- .../ensure/add/all-new/final/Gopkg.lock | 4 ++-- .../ensure/add/desync/final/Gopkg.lock | 4 ++-- .../add/errs/double-diff-spec/final/Gopkg.lock | 4 ++-- .../add/errs/self-add/case2/final/Gopkg.lock | 4 ++-- .../ensure/add/exists-imports/final/Gopkg.lock | 4 ++-- .../exists-manifest-constraint/final/Gopkg.lock | 4 ++-- .../default/hasheq-novendor-dry/final/Gopkg.lock | 4 ++-- .../hasheq-novendor-dry/initial/Gopkg.lock | 4 ++-- .../default/hasheq-novendor/final/Gopkg.lock | 4 ++-- .../ensure/default/hasheq/final/Gopkg.lock | 4 ++-- .../hashneq-novendor-dry/final/Gopkg.lock | 2 +- .../hashneq-novendor-dry/initial/Gopkg.lock | 2 +- .../ensure/empty/case1/final/Gopkg.lock | 4 ++-- .../ensure/empty/case2/final/Gopkg.lock | 4 ++-- .../ensure/empty/case3/final/Gopkg.lock | 4 ++-- .../ensure/pkg-errors/case1/final/Gopkg.lock | 4 ++-- .../pkg-ignored/wildcard-ignore/final/Gopkg.lock | 4 ++-- .../pkg-ignored/wildcard-ignore/stdout.txt | 5 +++-- .../wildcard-other-root/final/Gopkg.lock | 4 ++-- .../pkg-ignored/wildcard-other-root/stdout.txt | 5 +++-- .../ensure/update/case1/final/Gopkg.lock | 4 ++-- .../ensure/update/desync/final/Gopkg.lock | 4 ++-- .../ensure/update/novendor/final/Gopkg.lock | 4 ++-- .../harness_tests/init/case1/final/Gopkg.lock | 4 ++-- .../harness_tests/init/case2/final/Gopkg.lock | 4 ++-- .../harness_tests/init/case3/final/Gopkg.lock | 4 ++-- .../harness_tests/init/case4/final/Gopkg.lock | 4 ++-- .../init/glide/case1/final/Gopkg.lock | 4 ++-- .../init/glide/case2/final/Gopkg.lock | 4 ++-- .../init/glide/case4/final/Gopkg.lock | 4 ++-- .../init/glock/case1/final/Gopkg.lock | 4 ++-- .../init/godep/case1/final/Gopkg.lock | 4 ++-- .../init/govend/case1/final/Gopkg.lock | 4 ++-- .../init/govendor/case1/final/Gopkg.lock | 4 ++-- .../init/gvt/case1/final/Gopkg.lock | 4 ++-- .../init/skip-hidden/final/Gopkg.lock | 4 ++-- .../init/vndr/case1/final/Gopkg.lock | 4 ++-- .../status/case1/dot/final/Gopkg.lock | 4 ++-- .../status/case1/json/final/Gopkg.lock | 4 ++-- .../status/case1/table/final/Gopkg.lock | 4 ++-- .../status/case1/template/final/Gopkg.lock | 4 ++-- .../status/override_constraint/final/Gopkg.lock | 4 ++-- .../status/revision_constraint/final/Gopkg.lock | 4 ++-- gps/hash_test.go | 16 ++++++++++++++++ gps/rootdata_test.go | 8 ++++---- gps/solver.go | 2 ++ 52 files changed, 118 insertions(+), 98 deletions(-) diff --git a/analyzer.go b/analyzer.go index 1d0b920ec5..bb715d86f7 100644 --- a/analyzer.go +++ b/analyzer.go @@ -48,6 +48,6 @@ func (a Analyzer) DeriveManifestAndLock(path string, n gps.ProjectRoot) (gps.Man func (a Analyzer) Info() gps.ProjectAnalyzerInfo { return gps.ProjectAnalyzerInfo{ Name: "dep", - Version: 1, + Version: gps.SolverVersion, } } diff --git a/analyzer_test.go b/analyzer_test.go index 40b7307422..1b8308e1b3 100644 --- a/analyzer_test.go +++ b/analyzer_test.go @@ -107,7 +107,7 @@ func TestAnalyzerInfo(t *testing.T) { info := a.Info() - if info.Name != "dep" || info.Version != 1 { - t.Fatalf("expected name to be 'dep' and version to be 1: name -> %q vers -> %d", info.Name, info.Version) + if info.Name != "dep" || info.Version != 2 { + t.Fatalf("expected name to be 'dep' and version to be 2: name -> %q vers -> %d", info.Name, info.Version) } } diff --git a/cmd/dep/root_analyzer.go b/cmd/dep/root_analyzer.go index 76d410fe6e..f4d6ab5b04 100644 --- a/cmd/dep/root_analyzer.go +++ b/cmd/dep/root_analyzer.go @@ -204,6 +204,6 @@ func (a *rootAnalyzer) FinalizeRootManifestAndLock(m *dep.Manifest, l *dep.Lock, func (a *rootAnalyzer) Info() gps.ProjectAnalyzerInfo { return gps.ProjectAnalyzerInfo{ Name: "dep", - Version: 1, + Version: gps.SolverVersion, } } diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/final/Gopkg.lock index eddb25596a..e2aed20943 100644 --- a/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double-spec/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "645b5b52e1bfb9e3db1cefde758485e009edfe5bad611b490582d94467f9c1b0" + analyzer-version = 2 + inputs-digest = "6f7325449b0a6001070f60acdfe1ff0e4ce0cd968416557c261d6a3edc70a5a1" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/final/Gopkg.lock index 8481da4451..d95e9d8806 100644 --- a/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-double/final/Gopkg.lock @@ -18,7 +18,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "432bc141db9511df4e1b5754c6c4d8cf4dd8b4f8d5a13fd7d189c17c14e000b7" + analyzer-version = 2 + inputs-digest = "608de3caed8b6c56161445eca6fa7732028271808f6d5684a23fe883f969d507" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/final/Gopkg.lock index eddb25596a..e2aed20943 100644 --- a/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new-spec/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "645b5b52e1bfb9e3db1cefde758485e009edfe5bad611b490582d94467f9c1b0" + analyzer-version = 2 + inputs-digest = "6f7325449b0a6001070f60acdfe1ff0e4ce0cd968416557c261d6a3edc70a5a1" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/all-new/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/all-new/final/Gopkg.lock index 5531a3e128..1a2cee90b6 100644 --- a/cmd/dep/testdata/harness_tests/ensure/add/all-new/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/add/all-new/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "8f0b74fd1169808bd0e31dd7ad6c601c7b8f7ef25eec9e8a45e72b8a384ebb5c" + analyzer-version = 2 + inputs-digest = "dd2d82465aacf2c5e433353bddfc6a1015cda248e7ba57610f2683dc373a81f4" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/desync/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/desync/final/Gopkg.lock index a9d0374ee3..b2d3d021ca 100644 --- a/cmd/dep/testdata/harness_tests/ensure/add/desync/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/add/desync/final/Gopkg.lock @@ -21,7 +21,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "86240895e0ee5788e7e8bb56e0d77afd58009a491b69f6835e546db9e5dacfcd" + analyzer-version = 2 + inputs-digest = "e0815a054bb39387215ea8f7f2cdfa2f4796a4c86fb21b06a0cebc5c92a3c180" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/final/Gopkg.lock index 66ef021c68..94fae01a02 100644 --- a/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/double-diff-spec/final/Gopkg.lock @@ -9,7 +9,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "342afd8c8a616d084eb7b67bf3a891710eca3ce5abc3cf60af0dae4ccfdcd001" + analyzer-version = 2 + inputs-digest = "873e09dd7923308d8050742b50e0803da0241a3af52f9ec63643476304f9618d" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case2/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case2/final/Gopkg.lock index bef2d0092e..c50f461bb2 100644 --- a/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case2/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/add/errs/self-add/case2/final/Gopkg.lock @@ -3,7 +3,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "ab4fef131ee828e96ba67d31a7d690bd5f2f42040c6766b1b12fe856f87e0ff7" + analyzer-version = 2 + inputs-digest = "e15611a472d165d76907171674e7dfbee8f87ba99c2db426cc98a36ca71ec965" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/final/Gopkg.lock index 66ef021c68..94fae01a02 100644 --- a/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/add/exists-imports/final/Gopkg.lock @@ -9,7 +9,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "342afd8c8a616d084eb7b67bf3a891710eca3ce5abc3cf60af0dae4ccfdcd001" + analyzer-version = 2 + inputs-digest = "873e09dd7923308d8050742b50e0803da0241a3af52f9ec63643476304f9618d" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/final/Gopkg.lock index e235bce702..bb60cd025f 100644 --- a/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/add/exists-manifest-constraint/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "d1fe1d4f4dd98b75908b524bd73d43a4b9e3ce0b9522ea6ce9d6c9ea15190c1d" + analyzer-version = 2 + inputs-digest = "9d2aa051d9a08629d657b8a9764a0b1390a5ba9475455fda1089abd805a8b845" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/final/Gopkg.lock index c7f497e7a1..3926ccc79d 100644 --- a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/final/Gopkg.lock @@ -9,7 +9,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + analyzer-version = 2 + inputs-digest = "2304e215ecdeb7cdf402ddc0e1f4adee4e7a84949d34a2e55ac578b3b6700df6" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/initial/Gopkg.lock index c7f497e7a1..3926ccc79d 100644 --- a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/initial/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor-dry/initial/Gopkg.lock @@ -9,7 +9,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + analyzer-version = 2 + inputs-digest = "2304e215ecdeb7cdf402ddc0e1f4adee4e7a84949d34a2e55ac578b3b6700df6" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/final/Gopkg.lock index c7f497e7a1..3926ccc79d 100644 --- a/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq-novendor/final/Gopkg.lock @@ -9,7 +9,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + analyzer-version = 2 + inputs-digest = "2304e215ecdeb7cdf402ddc0e1f4adee4e7a84949d34a2e55ac578b3b6700df6" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hasheq/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/hasheq/final/Gopkg.lock index c7f497e7a1..3926ccc79d 100644 --- a/cmd/dep/testdata/harness_tests/ensure/default/hasheq/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/default/hasheq/final/Gopkg.lock @@ -9,7 +9,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + analyzer-version = 2 + inputs-digest = "2304e215ecdeb7cdf402ddc0e1f4adee4e7a84949d34a2e55ac578b3b6700df6" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/final/Gopkg.lock index 11cb12c378..5231aff981 100644 --- a/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/final/Gopkg.lock @@ -9,7 +9,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 + analyzer-version = 2 # manually modified hash digest, it will not match any known inputs inputs-digest = "94b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" diff --git a/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/initial/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/initial/Gopkg.lock index 11cb12c378..5231aff981 100644 --- a/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/initial/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/default/hashneq-novendor-dry/initial/Gopkg.lock @@ -9,7 +9,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 + analyzer-version = 2 # manually modified hash digest, it will not match any known inputs inputs-digest = "94b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" solver-name = "gps-cdcl" diff --git a/cmd/dep/testdata/harness_tests/ensure/empty/case1/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/empty/case1/final/Gopkg.lock index c7f497e7a1..3926ccc79d 100644 --- a/cmd/dep/testdata/harness_tests/ensure/empty/case1/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/empty/case1/final/Gopkg.lock @@ -9,7 +9,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + analyzer-version = 2 + inputs-digest = "2304e215ecdeb7cdf402ddc0e1f4adee4e7a84949d34a2e55ac578b3b6700df6" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/empty/case2/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/empty/case2/final/Gopkg.lock index a783451f80..e632b7f849 100644 --- a/cmd/dep/testdata/harness_tests/ensure/empty/case2/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/empty/case2/final/Gopkg.lock @@ -9,7 +9,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "e7725ea56516a42a641aaaf5d48754258d9f3c59949cb8a0e8a21b1ab6e07179" + analyzer-version = 2 + inputs-digest = "0a6ea83f32b678bc9b493f2a19311ddd18386469327d4ced10ef0dfe1f24b0b1" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/empty/case3/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/empty/case3/final/Gopkg.lock index d2153e3747..61859ba4d5 100644 --- a/cmd/dep/testdata/harness_tests/ensure/empty/case3/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/empty/case3/final/Gopkg.lock @@ -9,7 +9,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "e5c16e09ed6f0a1a2b3cf472c34b7fd50861dd070e81d5e623f72e8173f0c065" + analyzer-version = 2 + inputs-digest = "f19e1ec3f0a05fd73e23a1f72ab9f39c7bcc78ab70e0bfdb2b1555df7449a308" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case1/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case1/final/Gopkg.lock index bef2d0092e..c50f461bb2 100644 --- a/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case1/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/pkg-errors/case1/final/Gopkg.lock @@ -3,7 +3,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "ab4fef131ee828e96ba67d31a7d690bd5f2f42040c6766b1b12fe856f87e0ff7" + analyzer-version = 2 + inputs-digest = "e15611a472d165d76907171674e7dfbee8f87ba99c2db426cc98a36ca71ec965" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/final/Gopkg.lock index 1e637dd503..5d9d0b0ee5 100644 --- a/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/final/Gopkg.lock @@ -9,7 +9,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "5210e61a67f6e64dabb1eb8f28df2dbeeedfca1588c102067a6ec8a35e0b15f9" + analyzer-version = 2 + inputs-digest = "b3a13fc6ac7f14aa988833ff72bd9b77e9ae049428eb2e4239dfcc35fd21bd9a" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/stdout.txt b/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/stdout.txt index 74542e41e5..a288df4c6a 100644 --- a/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/stdout.txt +++ b/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-ignore/stdout.txt @@ -1,11 +1,12 @@ -CONSTRAINTS- github.com/sdboyer/deptest b-master --IMPORTS/REQS- +-IMPORTS- github.com/sdboyer/deptest +-REQUIRES- -IGNORES- -OVERRIDES- -ANALYZER- dep -1 +2 diff --git a/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/final/Gopkg.lock index 53e42dcc48..ea0479bbd9 100644 --- a/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/final/Gopkg.lock @@ -3,7 +3,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "b02b7a80e20404724ba5dbffab28e772017b03800916327f58bff0da86071b6a" + analyzer-version = 2 + inputs-digest = "7d692d7145bbfc7b7567d992da79cd232147c3f5f984ecc7c8fa1c364f00e303" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/stdout.txt b/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/stdout.txt index a273de0e56..858b9bf2a9 100644 --- a/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/stdout.txt +++ b/cmd/dep/testdata/harness_tests/ensure/pkg-ignored/wildcard-other-root/stdout.txt @@ -1,9 +1,10 @@ -CONSTRAINTS- --IMPORTS/REQS- +-IMPORTS- +-REQUIRES- -IGNORES- github.com/sdboyer/deptest* -OVERRIDES- -ANALYZER- dep -1 +2 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/case1/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/update/case1/final/Gopkg.lock index 1a7b1983f3..6c5cfb93e9 100644 --- a/cmd/dep/testdata/harness_tests/ensure/update/case1/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/update/case1/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" + analyzer-version = 2 + inputs-digest = "bc0bd4933abeb7e3d12e1097931f7d0690ba29cb0db2fba81e1be0bcb92114a0" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/desync/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/update/desync/final/Gopkg.lock index 1a7b1983f3..6c5cfb93e9 100644 --- a/cmd/dep/testdata/harness_tests/ensure/update/desync/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/update/desync/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" + analyzer-version = 2 + inputs-digest = "bc0bd4933abeb7e3d12e1097931f7d0690ba29cb0db2fba81e1be0bcb92114a0" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/ensure/update/novendor/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/ensure/update/novendor/final/Gopkg.lock index c7f497e7a1..3926ccc79d 100644 --- a/cmd/dep/testdata/harness_tests/ensure/update/novendor/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/ensure/update/novendor/final/Gopkg.lock @@ -9,7 +9,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + analyzer-version = 2 + inputs-digest = "2304e215ecdeb7cdf402ddc0e1f4adee4e7a84949d34a2e55ac578b3b6700df6" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/init/case1/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/init/case1/final/Gopkg.lock index 15b4e08bac..bb0535fe65 100644 --- a/cmd/dep/testdata/harness_tests/init/case1/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/init/case1/final/Gopkg.lock @@ -14,7 +14,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" + analyzer-version = 2 + inputs-digest = "bc0bd4933abeb7e3d12e1097931f7d0690ba29cb0db2fba81e1be0bcb92114a0" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/init/case2/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/init/case2/final/Gopkg.lock index 608d5a8d97..93a5db662d 100644 --- a/cmd/dep/testdata/harness_tests/init/case2/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/init/case2/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "ced51326ad990b11098d8076d0f7d72d89eee1ba6e8dacc7bc73be05cddac438" + analyzer-version = 2 + inputs-digest = "db35b7cd62d7fa70480d1ba31ff1ed6aeeb5cb37bfbb07a3f479666ea9e2b995" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/init/case3/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/init/case3/final/Gopkg.lock index c4f18284da..a0d22d0341 100644 --- a/cmd/dep/testdata/harness_tests/init/case3/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/init/case3/final/Gopkg.lock @@ -14,7 +14,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "af9a783a5430dabcaaf44683c09e2b729e1c0d61f13bfdf6677c4fd0b41387ca" + analyzer-version = 2 + inputs-digest = "f1b556b9eb5a00d2928e92ceb097d364fe41d8337ebb01db76df79faa820aa1f" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/init/case4/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/init/case4/final/Gopkg.lock index e076e162c8..c4b29bf7bb 100644 --- a/cmd/dep/testdata/harness_tests/init/case4/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/init/case4/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "a6ba2237d28d125b55fc6c86e94e33363f1dfd880d471118d36d7587398c30b4" + analyzer-version = 2 + inputs-digest = "05fe6e86a940f1d0d3d129d3c5e78e089629038d7d5568d19e47100122010bb9" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/init/glide/case1/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/init/glide/case1/final/Gopkg.lock index 7455467c42..7d1da1549a 100644 --- a/cmd/dep/testdata/harness_tests/init/glide/case1/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/init/glide/case1/final/Gopkg.lock @@ -20,7 +20,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "def34af0f7cd619e1601eb68bdabf399c9b36a79c2081306adefa0ced03d182b" + analyzer-version = 2 + inputs-digest = "93723887fe16f0197aefe5fdfe551df94706da0459da22e61ff2c1b05041e702" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/init/glide/case2/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/init/glide/case2/final/Gopkg.lock index ac445c05d2..aebadc02d1 100644 --- a/cmd/dep/testdata/harness_tests/init/glide/case2/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/init/glide/case2/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "1ed417a0bec57ffe988fae1cba8f3d49994fb893394d61844e0b3c96d69573fe" + analyzer-version = 2 + inputs-digest = "41a6b8b70a448d7d4ddc9d8c460865b3bace75de1d20fd8078ec6f1786b5d8bd" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/init/glide/case4/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/init/glide/case4/final/Gopkg.lock index 1aadf7f962..17e1101f29 100644 --- a/cmd/dep/testdata/harness_tests/init/glide/case4/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/init/glide/case4/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "1ed417a0bec57ffe988fae1cba8f3d49994fb893394d61844e0b3c96d69573fe" + analyzer-version = 2 + inputs-digest = "41a6b8b70a448d7d4ddc9d8c460865b3bace75de1d20fd8078ec6f1786b5d8bd" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/init/glock/case1/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/init/glock/case1/final/Gopkg.lock index ac445c05d2..aebadc02d1 100644 --- a/cmd/dep/testdata/harness_tests/init/glock/case1/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/init/glock/case1/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "1ed417a0bec57ffe988fae1cba8f3d49994fb893394d61844e0b3c96d69573fe" + analyzer-version = 2 + inputs-digest = "41a6b8b70a448d7d4ddc9d8c460865b3bace75de1d20fd8078ec6f1786b5d8bd" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/init/godep/case1/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/init/godep/case1/final/Gopkg.lock index ac445c05d2..aebadc02d1 100644 --- a/cmd/dep/testdata/harness_tests/init/godep/case1/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/init/godep/case1/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "1ed417a0bec57ffe988fae1cba8f3d49994fb893394d61844e0b3c96d69573fe" + analyzer-version = 2 + inputs-digest = "41a6b8b70a448d7d4ddc9d8c460865b3bace75de1d20fd8078ec6f1786b5d8bd" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/init/govend/case1/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/init/govend/case1/final/Gopkg.lock index ac445c05d2..aebadc02d1 100644 --- a/cmd/dep/testdata/harness_tests/init/govend/case1/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/init/govend/case1/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "1ed417a0bec57ffe988fae1cba8f3d49994fb893394d61844e0b3c96d69573fe" + analyzer-version = 2 + inputs-digest = "41a6b8b70a448d7d4ddc9d8c460865b3bace75de1d20fd8078ec6f1786b5d8bd" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/init/govendor/case1/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/init/govendor/case1/final/Gopkg.lock index 529e48897d..8124a26616 100644 --- a/cmd/dep/testdata/harness_tests/init/govendor/case1/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/init/govendor/case1/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "9cc662f2e1b80c8df205d9d667fe2c47825a06961ceae378f44a8290d01dd359" + analyzer-version = 2 + inputs-digest = "fcf5545863c346b43f2beff07be7f6cef92440115e74b98b5355919163afe4ce" solver-name = "gps-cdcl" solver-version = 1 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 1eb5e5e887..011e2d0bd9 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 @@ -22,7 +22,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "d1681978cbca0e845950451461e0d69b58c5e896d9fd10ec5c159a4db3175161" + analyzer-version = 2 + inputs-digest = "0cd9025fc4004cb66bd82ff18cc5a7f8a2890f55373fd53f308abc48fb7c5d78" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/init/skip-hidden/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/init/skip-hidden/final/Gopkg.lock index c7f497e7a1..3926ccc79d 100644 --- a/cmd/dep/testdata/harness_tests/init/skip-hidden/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/init/skip-hidden/final/Gopkg.lock @@ -9,7 +9,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "14b07b05e0f01051b03887ab2bf80b516bc5510ea92f75f76c894b1745d8850c" + analyzer-version = 2 + inputs-digest = "2304e215ecdeb7cdf402ddc0e1f4adee4e7a84949d34a2e55ac578b3b6700df6" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/init/vndr/case1/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/init/vndr/case1/final/Gopkg.lock index ac445c05d2..aebadc02d1 100644 --- a/cmd/dep/testdata/harness_tests/init/vndr/case1/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/init/vndr/case1/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "1ed417a0bec57ffe988fae1cba8f3d49994fb893394d61844e0b3c96d69573fe" + analyzer-version = 2 + inputs-digest = "41a6b8b70a448d7d4ddc9d8c460865b3bace75de1d20fd8078ec6f1786b5d8bd" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/status/case1/dot/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/status/case1/dot/final/Gopkg.lock index 77278d07bc..803fcfecd5 100644 --- a/cmd/dep/testdata/harness_tests/status/case1/dot/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/status/case1/dot/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" + analyzer-version = 2 + inputs-digest = "bc0bd4933abeb7e3d12e1097931f7d0690ba29cb0db2fba81e1be0bcb92114a0" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/status/case1/json/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/status/case1/json/final/Gopkg.lock index 77278d07bc..803fcfecd5 100644 --- a/cmd/dep/testdata/harness_tests/status/case1/json/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/status/case1/json/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" + analyzer-version = 2 + inputs-digest = "bc0bd4933abeb7e3d12e1097931f7d0690ba29cb0db2fba81e1be0bcb92114a0" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/status/case1/table/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/status/case1/table/final/Gopkg.lock index 77278d07bc..803fcfecd5 100644 --- a/cmd/dep/testdata/harness_tests/status/case1/table/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/status/case1/table/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" + analyzer-version = 2 + inputs-digest = "bc0bd4933abeb7e3d12e1097931f7d0690ba29cb0db2fba81e1be0bcb92114a0" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/status/case1/template/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/status/case1/template/final/Gopkg.lock index 77278d07bc..803fcfecd5 100644 --- a/cmd/dep/testdata/harness_tests/status/case1/template/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/status/case1/template/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "1b381263a360eafafe3ef7f9be626672668d17250a3c9a8debd169d1b5e2eebb" + analyzer-version = 2 + inputs-digest = "bc0bd4933abeb7e3d12e1097931f7d0690ba29cb0db2fba81e1be0bcb92114a0" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/status/override_constraint/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/status/override_constraint/final/Gopkg.lock index f987a57915..97f39af64b 100644 --- a/cmd/dep/testdata/harness_tests/status/override_constraint/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/status/override_constraint/final/Gopkg.lock @@ -15,7 +15,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "1c4444f47ab5d5c484634d1a0c95d99beb879a37337bc0d7aecbd97cf79b6cb1" + analyzer-version = 2 + inputs-digest = "0ec42c7d47cd8e2179ab14c0fe9d67bd3d9304d78b31454b5037b37cb3f47e2c" solver-name = "gps-cdcl" solver-version = 1 diff --git a/cmd/dep/testdata/harness_tests/status/revision_constraint/final/Gopkg.lock b/cmd/dep/testdata/harness_tests/status/revision_constraint/final/Gopkg.lock index 204b990861..c88ca141f9 100644 --- a/cmd/dep/testdata/harness_tests/status/revision_constraint/final/Gopkg.lock +++ b/cmd/dep/testdata/harness_tests/status/revision_constraint/final/Gopkg.lock @@ -14,7 +14,7 @@ [solve-meta] analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "a64abd431f23d6fbc8d83aef311d33ab12b3a6c74a46c271e89c2542c98bbb9a" + analyzer-version = 2 + inputs-digest = "6c494d1713709d50b46c65f142015c2917ceb88cf03f7b2240f822019b743a4a" solver-name = "gps-cdcl" solver-version = 1 diff --git a/gps/hash_test.go b/gps/hash_test.go index 0ac51df9a6..374d5d10d2 100644 --- a/gps/hash_test.go +++ b/gps/hash_test.go @@ -44,6 +44,7 @@ func TestHashInputs(t *testing.T) { hhImports, "a", "b", + hhRequires, hhIgnores, hhOverrides, hhAnalyzer, @@ -94,6 +95,7 @@ func TestHashInputsReqsIgs(t *testing.T) { hhImports, "a", "b", + hhRequires, hhIgnores, "bar", "foo", @@ -136,6 +138,7 @@ func TestHashInputsReqsIgs(t *testing.T) { hhImports, "a", "b", + hhRequires, "baz", "qux", hhIgnores, @@ -176,6 +179,7 @@ func TestHashInputsReqsIgs(t *testing.T) { hhImports, "a", "b", + hhRequires, "baz", "qux", hhIgnores, @@ -234,6 +238,7 @@ func TestHashInputsOverrides(t *testing.T) { hhImports, "a", "b", + hhRequires, hhIgnores, hhOverrides, "c", @@ -264,6 +269,7 @@ func TestHashInputsOverrides(t *testing.T) { hhImports, "a", "b", + hhRequires, "c", hhIgnores, hhOverrides, @@ -295,6 +301,7 @@ func TestHashInputsOverrides(t *testing.T) { "a", "b", "c", + hhRequires, hhIgnores, hhOverrides, "c", @@ -323,6 +330,7 @@ func TestHashInputsOverrides(t *testing.T) { "a", "b", "c", + hhRequires, hhIgnores, hhOverrides, "c", @@ -353,6 +361,7 @@ func TestHashInputsOverrides(t *testing.T) { "a", "b", "c", + hhRequires, hhIgnores, hhOverrides, "c", @@ -381,6 +390,7 @@ func TestHashInputsOverrides(t *testing.T) { hhImports, "a", "b", + hhRequires, hhIgnores, hhOverrides, "c", @@ -410,6 +420,7 @@ func TestHashInputsOverrides(t *testing.T) { hhImports, "a", "b", + hhRequires, hhIgnores, hhOverrides, "c", @@ -439,6 +450,7 @@ func TestHashInputsOverrides(t *testing.T) { hhImports, "a", "b", + hhRequires, hhIgnores, hhOverrides, "a", @@ -471,6 +483,7 @@ func TestHashInputsOverrides(t *testing.T) { hhImports, "a", "b", + hhRequires, hhIgnores, hhOverrides, "a", @@ -504,6 +517,7 @@ func TestHashInputsOverrides(t *testing.T) { hhImports, "a", "b", + hhRequires, hhIgnores, hhOverrides, "a", @@ -624,6 +638,7 @@ func TestHashInputsIneffectualWildcardIgs(t *testing.T) { hhImports, "a", "b", + hhRequires, hhIgnores, hhOverrides, hhAnalyzer, @@ -647,6 +662,7 @@ func TestHashInputsIneffectualWildcardIgs(t *testing.T) { hhImports, "a", "b", + hhRequires, hhIgnores, "foobar*", "foozapbar*", diff --git a/gps/rootdata_test.go b/gps/rootdata_test.go index 381fe8c481..475cdbcac3 100644 --- a/gps/rootdata_test.go +++ b/gps/rootdata_test.go @@ -29,7 +29,7 @@ func TestRootdataExternalImports(t *testing.T) { } rd := is.(*solver).rd - want := []string{"a", "b"} + want := map[string]bool{"a": false, "b": false} got := rd.externalImportList(params.stdLibFn) if !reflect.DeepEqual(want, got) { t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %s\n\t(WNT): %s", got, want) @@ -38,7 +38,7 @@ func TestRootdataExternalImports(t *testing.T) { // Add a require rd.req["c"] = true - want = []string{"a", "b", "c"} + want = map[string]bool{"a": false, "b": false, "c": true} got = rd.externalImportList(params.stdLibFn) if !reflect.DeepEqual(want, got) { t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %s\n\t(WNT): %s", got, want) @@ -49,7 +49,7 @@ func TestRootdataExternalImports(t *testing.T) { poe.P.Imports = []string{"a", "b", "c"} rd.rpt.Packages["root"] = poe - // should still be the same + want = map[string]bool{"a": false, "b": false, "c": false} got = rd.externalImportList(params.stdLibFn) if !reflect.DeepEqual(want, got) { t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %s\n\t(WNT): %s", got, want) @@ -59,7 +59,7 @@ func TestRootdataExternalImports(t *testing.T) { // combination impossible) rd.ir = pkgtree.NewIgnoredRuleset([]string{"b"}) - want = []string{"a", "c"} + want = map[string]bool{"a": false, "c": false} got = rd.externalImportList(params.stdLibFn) if !reflect.DeepEqual(want, got) { t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %s\n\t(WNT): %s", got, want) diff --git a/gps/solver.go b/gps/solver.go index ac243fa7bf..63381d8ef9 100644 --- a/gps/solver.go +++ b/gps/solver.go @@ -20,6 +20,8 @@ import ( "github.com/pkg/errors" ) +const SolverVersion = 2 + var rootRev = Revision("") // SolveParameters hold all arguments to a solver run. From 60af0f11707fde343def95c376828c787a272d5c Mon Sep 17 00:00:00 2001 From: Carolyn Van Slyck Date: Thu, 18 Jan 2018 15:33:18 -0600 Subject: [PATCH 4/4] Make codeclimate happy --- gps/rootdata_test.go | 8 ++++---- gps/solver.go | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/gps/rootdata_test.go b/gps/rootdata_test.go index 475cdbcac3..2065f77890 100644 --- a/gps/rootdata_test.go +++ b/gps/rootdata_test.go @@ -32,7 +32,7 @@ func TestRootdataExternalImports(t *testing.T) { want := map[string]bool{"a": false, "b": false} got := rd.externalImportList(params.stdLibFn) if !reflect.DeepEqual(want, got) { - t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %s\n\t(WNT): %s", got, want) + t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %v\n\t(WNT): %v", got, want) } // Add a require @@ -41,7 +41,7 @@ func TestRootdataExternalImports(t *testing.T) { want = map[string]bool{"a": false, "b": false, "c": true} got = rd.externalImportList(params.stdLibFn) if !reflect.DeepEqual(want, got) { - t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %s\n\t(WNT): %s", got, want) + t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %v\n\t(WNT): %v", got, want) } // Add same path as import @@ -52,7 +52,7 @@ func TestRootdataExternalImports(t *testing.T) { want = map[string]bool{"a": false, "b": false, "c": false} got = rd.externalImportList(params.stdLibFn) if !reflect.DeepEqual(want, got) { - t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %s\n\t(WNT): %s", got, want) + t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %v\n\t(WNT): %v", got, want) } // Add an ignore, but not on the required path (Prepare makes that @@ -62,7 +62,7 @@ func TestRootdataExternalImports(t *testing.T) { want = map[string]bool{"a": false, "c": false} got = rd.externalImportList(params.stdLibFn) if !reflect.DeepEqual(want, got) { - t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %s\n\t(WNT): %s", got, want) + t.Errorf("Unexpected return from rootdata.externalImportList:\n\t(GOT): %v\n\t(WNT): %v", got, want) } } diff --git a/gps/solver.go b/gps/solver.go index 63381d8ef9..ed23b1f1af 100644 --- a/gps/solver.go +++ b/gps/solver.go @@ -20,6 +20,7 @@ import ( "github.com/pkg/errors" ) +// SolverVersion is the current version of the solver/hashing algorithm. const SolverVersion = 2 var rootRev = Revision("")