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  }