github.com/golang/dep@v0.5.4/gps/verify/helper_types_test.go (about) 1 // Copyright 2018 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package verify 6 7 import ( 8 "github.com/golang/dep/gps" 9 "github.com/golang/dep/gps/pkgtree" 10 ) 11 12 // mkPI creates a ProjectIdentifier with the ProjectRoot as the provided 13 // string, and the Source unset. 14 // 15 // Call normalize() on the returned value if you need the Source to be be 16 // equal to the ProjectRoot. 17 func mkPI(root string) gps.ProjectIdentifier { 18 return gps.ProjectIdentifier{ 19 ProjectRoot: gps.ProjectRoot(root), 20 } 21 } 22 23 type safeLock struct { 24 p []gps.LockedProject 25 i []string 26 } 27 28 func (sl safeLock) InputImports() []string { 29 return sl.i 30 } 31 32 func (sl safeLock) Projects() []gps.LockedProject { 33 return sl.p 34 } 35 36 func (sl safeLock) dup() safeLock { 37 sl2 := safeLock{ 38 i: make([]string, len(sl.i)), 39 p: make([]gps.LockedProject, 0, len(sl.p)), 40 } 41 copy(sl2.i, sl.i) 42 43 for _, lp := range sl.p { 44 // Only for use with VerifiableProjects. 45 sl2.p = append(sl2.p, lp.(VerifiableProject).dup()) 46 } 47 48 return sl2 49 } 50 51 func (vp VerifiableProject) dup() VerifiableProject { 52 pkglist := make([]string, len(vp.Packages())) 53 copy(pkglist, vp.Packages()) 54 hashbytes := make([]byte, len(vp.Digest.Digest)) 55 copy(hashbytes, vp.Digest.Digest) 56 57 return VerifiableProject{ 58 LockedProject: gps.NewLockedProject(vp.Ident(), vp.Version(), pkglist), 59 PruneOpts: vp.PruneOpts, 60 Digest: VersionedDigest{ 61 HashVersion: vp.Digest.HashVersion, 62 Digest: hashbytes, 63 }, 64 } 65 } 66 67 // simpleRootManifest exists so that we have a safe value to swap into solver 68 // params when a nil Manifest is provided. 69 type simpleRootManifest struct { 70 c, ovr gps.ProjectConstraints 71 ig *pkgtree.IgnoredRuleset 72 req map[string]bool 73 } 74 75 func (m simpleRootManifest) DependencyConstraints() gps.ProjectConstraints { 76 return m.c 77 } 78 func (m simpleRootManifest) Overrides() gps.ProjectConstraints { 79 return m.ovr 80 } 81 func (m simpleRootManifest) IgnoredPackages() *pkgtree.IgnoredRuleset { 82 return m.ig 83 } 84 func (m simpleRootManifest) RequiredPackages() map[string]bool { 85 return m.req 86 } 87 88 func (m simpleRootManifest) dup() simpleRootManifest { 89 m2 := simpleRootManifest{ 90 c: make(gps.ProjectConstraints), 91 ovr: make(gps.ProjectConstraints), 92 ig: pkgtree.NewIgnoredRuleset(m.ig.ToSlice()), 93 req: make(map[string]bool), 94 } 95 96 for k, v := range m.c { 97 m2.c[k] = v 98 } 99 100 for k, v := range m.ovr { 101 m2.ovr[k] = v 102 } 103 104 for k := range m.req { 105 m2.req[k] = true 106 } 107 108 return m2 109 } 110 111 func newVerifiableProject(id gps.ProjectIdentifier, v gps.Version, pkgs []string) VerifiableProject { 112 return VerifiableProject{ 113 LockedProject: gps.NewLockedProject(id, v, pkgs), 114 Digest: VersionedDigest{ 115 HashVersion: HashVersion, 116 Digest: []byte("something"), 117 }, 118 } 119 }