Skip to content
This repository was archived by the owner on Sep 9, 2020. It is now read-only.

Commit 83e2ed5

Browse files
Edward Mullerjessfraz
Edward Muller
authored andcommitted
change project data function to return a struct
Signed-off-by: Jess Frazelle <[email protected]>
1 parent 6f2a43e commit 83e2ed5

File tree

2 files changed

+76
-31
lines changed

2 files changed

+76
-31
lines changed

init.go

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -97,26 +97,26 @@ func runInit(args []string) error {
9797
}
9898
defer sm.Release()
9999

100-
packages, processed, notondisk, ondisk, err := getProjectDependencies(pkgT, cpr, sm)
100+
pd, err := getProjectData(pkgT, cpr, sm)
101101
if err != nil {
102102
return err
103103
}
104104
m := manifest{
105-
Dependencies: packages,
105+
Dependencies: pd.constraints,
106106
}
107107

108108
// Make an initial lock from what knowledge we've collected about the
109109
// versions on disk
110110
l := lock{
111-
P: make([]gps.LockedProject, 0, len(ondisk)),
111+
P: make([]gps.LockedProject, 0, len(pd.ondisk)),
112112
}
113113

114-
for pr, v := range ondisk {
114+
for pr, v := range pd.ondisk {
115115
// That we have to chop off these path prefixes is a symptom of
116116
// a problem in gps itself
117-
pkgs := make([]string, 0, len(processed[pr]))
117+
pkgs := make([]string, 0, len(pd.dependencies[pr]))
118118
prslash := string(pr) + "/"
119-
for _, pkg := range processed[pr] {
119+
for _, pkg := range pd.dependencies[pr] {
120120
if pkg == string(pr) {
121121
pkgs = append(pkgs, ".")
122122
} else {
@@ -130,7 +130,7 @@ func runInit(args []string) error {
130130
}
131131

132132
var l2 *lock
133-
if len(notondisk) > 0 {
133+
if len(pd.notondisk) > 0 {
134134
vlogf("Solving...")
135135
params := gps.SolveParameters{
136136
RootDir: root,
@@ -252,14 +252,21 @@ func hasImportPathPrefix(s, prefix string) bool {
252252
return strings.HasPrefix(s, prefix+"/")
253253
}
254254

255-
func getProjectDependencies(pkgT gps.PackageTree, cpr string, sm *gps.SourceMgr) (dependencies gps.ProjectConstraints, processed map[gps.ProjectRoot][]string, notondisk map[gps.ProjectRoot]bool, ondisk map[gps.ProjectRoot]gps.Version, err error) {
255+
type projectData struct {
256+
constraints gps.ProjectConstraints // constraints that could be found
257+
dependencies map[gps.ProjectRoot][]string // all dependencies (imports) found by project root
258+
notondisk map[gps.ProjectRoot]bool // projects that were not found on disk
259+
ondisk map[gps.ProjectRoot]gps.Version // projects that were found on disk
260+
}
261+
262+
func getProjectData(pkgT gps.PackageTree, cpr string, sm *gps.SourceMgr) (projectData, error) {
256263
vlogf("Building dependency graph...")
257264

258-
dependencies = make(gps.ProjectConstraints)
259-
processed = make(map[gps.ProjectRoot][]string)
265+
constraints := make(gps.ProjectConstraints)
266+
dependencies := make(map[gps.ProjectRoot][]string)
260267
packages := make(map[string]bool)
261-
notondisk = make(map[gps.ProjectRoot]bool)
262-
ondisk = make(map[gps.ProjectRoot]gps.Version)
268+
notondisk := make(map[gps.ProjectRoot]bool)
269+
ondisk := make(map[gps.ProjectRoot]gps.Version)
263270
for _, v := range pkgT.Packages {
264271
// TODO: Some errors maybe should not be skipped ;-)
265272
if v.Err != nil {
@@ -278,20 +285,20 @@ func getProjectDependencies(pkgT gps.PackageTree, cpr string, sm *gps.SourceMgr)
278285
}
279286
pr, err := sm.DeduceProjectRoot(ip)
280287
if err != nil {
281-
return dependencies, processed, notondisk, ondisk, errors.Wrap(err, "sm.DeduceProjectRoot") // TODO: Skip and report ?
288+
return projectData{}, errors.Wrap(err, "sm.DeduceProjectRoot") // TODO: Skip and report ?
282289
}
283290

284291
packages[ip] = true
285-
if _, ok := processed[pr]; ok {
286-
if !contains(processed[pr], ip) {
287-
processed[pr] = append(processed[pr], ip)
292+
if _, ok := dependencies[pr]; ok {
293+
if !contains(dependencies[pr], ip) {
294+
dependencies[pr] = append(dependencies[pr], ip)
288295
}
289296

290297
continue
291298
}
292299
vlogf("Package %q has import %q, analyzing...", v.P.ImportPath, ip)
293300

294-
processed[pr] = []string{ip}
301+
dependencies[pr] = []string{ip}
295302
v, err := depContext.versionInWorkspace(pr)
296303
if err != nil {
297304
notondisk[pr] = true
@@ -309,7 +316,7 @@ func getProjectDependencies(pkgT gps.PackageTree, cpr string, sm *gps.SourceMgr)
309316
pp.Constraint = c
310317
}
311318

312-
dependencies[pr] = pp
319+
constraints[pr] = pp
313320
}
314321
}
315322

@@ -380,12 +387,12 @@ func getProjectDependencies(pkgT gps.PackageTree, cpr string, sm *gps.SourceMgr)
380387
return nil
381388
}
382389

383-
if _, ok := processed[pr]; ok {
384-
if !contains(processed[pr], pkg) {
385-
processed[pr] = append(processed[pr], pkg)
390+
if _, ok := dependencies[pr]; ok {
391+
if !contains(dependencies[pr], pkg) {
392+
dependencies[pr] = append(dependencies[pr], pkg)
386393
}
387394
} else {
388-
processed[pr] = []string{pkg}
395+
dependencies[pr] = []string{pkg}
389396
}
390397

391398
// project must be on disk at this point; question is
@@ -425,9 +432,15 @@ func getProjectDependencies(pkgT gps.PackageTree, cpr string, sm *gps.SourceMgr)
425432
for pkg := range packages {
426433
err := dft(pkg)
427434
if err != nil {
428-
return dependencies, processed, notondisk, ondisk, err // already errors.Wrap()'d internally
435+
return projectData{}, err // already errors.Wrap()'d internally
429436
}
430437
}
431438

432-
return dependencies, processed, notondisk, ondisk, nil
439+
pd := projectData{
440+
constraints: constraints,
441+
dependencies: dependencies,
442+
notondisk: notondisk,
443+
ondisk: ondisk,
444+
}
445+
return pd, nil
433446
}

remove.go

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ package main
66

77
import (
88
"fmt"
9+
"log"
10+
"os"
11+
"path/filepath"
912

1013
"github.com/pkg/errors"
1114
"github.com/sdboyer/gps"
@@ -55,16 +58,14 @@ func runRemove(args []string) error {
5558
if err != nil {
5659
return errors.Wrap(err, "determineProjectRoot")
5760
}
58-
fmt.Printf("cpr: %#v\n", cpr)
5961

6062
pkgT, err := gps.ListPackages(p.absroot, cpr)
6163
if err != nil {
6264
return errors.Wrap(err, "gps.ListPackages")
6365
}
64-
fmt.Printf("package tree: %#v\n", pkgT)
6566

6667
// get the list of packages
67-
packages, _, _, _, err := getProjectDependencies(pkgT, cpr, sm)
68+
pd, err := getProjectData(pkgT, cpr, sm)
6869
if err != nil {
6970
return err
7071
}
@@ -78,11 +79,42 @@ func runRemove(args []string) error {
7879
* - Actual solver behavior: ?
7980
*/
8081

81-
// check if we are using the package
82-
_, using := packages[gps.ProjectRoot(arg)]
83-
fmt.Printf("using package %s: %t\n", arg, using)
82+
if _, found := pd.dependencies[gps.ProjectRoot(arg)]; found {
83+
//TODO: Tell the user where it is in use?
84+
return fmt.Errorf("not removing '%s' because it is in use", arg)
85+
}
86+
delete(p.m.Dependencies, gps.ProjectRoot(arg))
8487
}
85-
fmt.Printf("packages: %#v", packages)
8688

89+
params := gps.SolveParameters{
90+
RootDir: p.absroot,
91+
RootPackageTree: pkgT,
92+
Manifest: p.m,
93+
Lock: p.l,
94+
}
95+
96+
if *verbose {
97+
params.Trace = true
98+
params.TraceLogger = log.New(os.Stderr, "", 0)
99+
}
100+
s, err := gps.Prepare(params, sm)
101+
if err != nil {
102+
return errors.Wrap(err, "prepare solver")
103+
}
104+
105+
soln, err := s.Solve()
106+
if err != nil {
107+
handleAllTheFailuresOfTheWorld(err)
108+
return err
109+
}
110+
111+
p.l = lockFromInterface(soln)
112+
113+
if err := writeFile(filepath.Join(p.absroot, manifestName), p.m); err != nil {
114+
return errors.Wrap(err, "writeFile for manifest")
115+
}
116+
if err := writeFile(filepath.Join(p.absroot, lockName), p.l); err != nil {
117+
return errors.Wrap(err, "writeFile for lock")
118+
}
87119
return nil
88120
}

0 commit comments

Comments
 (0)