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

Commit

Permalink
Add verbose logging option to WriteDepTree (#968)
Browse files Browse the repository at this point in the history
  • Loading branch information
ebati authored and carolynvs committed Aug 13, 2017
1 parent 7bc57a4 commit 4758d86
Show file tree
Hide file tree
Showing 9 changed files with 125 additions and 35 deletions.
38 changes: 33 additions & 5 deletions cmd/dep/ensure.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import (
"flag"
"fmt"
"go/build"
"io/ioutil"
"log"
"os"
"path/filepath"
"sort"
Expand Down Expand Up @@ -253,7 +255,11 @@ func (cmd *ensureCommand) runDefault(ctx *dep.Ctx, args []string, p *dep.Project
return nil
}

return errors.WithMessage(sw.Write(p.AbsRoot, sm, true), "grouped write of manifest, lock and vendor")
logger := ctx.Err
if !ctx.Verbose {
logger = log.New(ioutil.Discard, "", 0)
}
return errors.WithMessage(sw.Write(p.AbsRoot, sm, true, logger), "grouped write of manifest, lock and vendor")
}

solution, err := solver.Solve()
Expand All @@ -270,7 +276,11 @@ func (cmd *ensureCommand) runDefault(ctx *dep.Ctx, args []string, p *dep.Project
return sw.PrintPreparedActions(ctx.Out)
}

return errors.Wrap(sw.Write(p.AbsRoot, sm, false), "grouped write of manifest, lock and vendor")
logger := ctx.Err
if !ctx.Verbose {
logger = log.New(ioutil.Discard, "", 0)
}
return errors.Wrap(sw.Write(p.AbsRoot, sm, false, logger), "grouped write of manifest, lock and vendor")
}

func (cmd *ensureCommand) runVendorOnly(ctx *dep.Ctx, args []string, p *dep.Project, sm gps.SourceManager, params gps.SolveParameters) error {
Expand All @@ -290,10 +300,20 @@ func (cmd *ensureCommand) runVendorOnly(ctx *dep.Ctx, args []string, p *dep.Proj

if cmd.dryRun {
ctx.Out.Printf("Would have populated vendor/ directory from %s", dep.LockName)
if ctx.Verbose {
err := sw.PrintPreparedActions(ctx.Err)
if err != nil {
return errors.WithMessage(err, "prepared actions")
}
}
return nil
}

return errors.WithMessage(sw.Write(p.AbsRoot, sm, true), "grouped write of manifest, lock and vendor")
logger := ctx.Err
if !ctx.Verbose {
logger = log.New(ioutil.Discard, "", 0)
}
return errors.WithMessage(sw.Write(p.AbsRoot, sm, true, logger), "grouped write of manifest, lock and vendor")
}

func (cmd *ensureCommand) runUpdate(ctx *dep.Ctx, args []string, p *dep.Project, sm gps.SourceManager, params gps.SolveParameters) error {
Expand Down Expand Up @@ -380,7 +400,11 @@ func (cmd *ensureCommand) runUpdate(ctx *dep.Ctx, args []string, p *dep.Project,
return sw.PrintPreparedActions(ctx.Out)
}

return errors.Wrap(sw.Write(p.AbsRoot, sm, false), "grouped write of manifest, lock and vendor")
logger := ctx.Err
if !ctx.Verbose {
logger = log.New(ioutil.Discard, "", 0)
}
return errors.Wrap(sw.Write(p.AbsRoot, sm, false, logger), "grouped write of manifest, lock and vendor")
}

func (cmd *ensureCommand) runAdd(ctx *dep.Ctx, args []string, p *dep.Project, sm gps.SourceManager, params gps.SolveParameters) error {
Expand Down Expand Up @@ -626,7 +650,11 @@ func (cmd *ensureCommand) runAdd(ctx *dep.Ctx, args []string, p *dep.Project, sm
return sw.PrintPreparedActions(ctx.Out)
}

if err := errors.Wrap(sw.Write(p.AbsRoot, sm, true), "grouped write of manifest, lock and vendor"); err != nil {
logger := ctx.Err
if !ctx.Verbose {
logger = log.New(ioutil.Discard, "", 0)
}
if err := errors.Wrap(sw.Write(p.AbsRoot, sm, true, logger), "grouped write of manifest, lock and vendor"); err != nil {
return err
}

Expand Down
8 changes: 7 additions & 1 deletion cmd/dep/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ package main

import (
"flag"
"io/ioutil"
"log"
"os"
"path/filepath"
"time"
Expand Down Expand Up @@ -203,7 +205,11 @@ func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error {
return err
}

if err := sw.Write(root, sm, !cmd.noExamples); err != nil {
logger := ctx.Err
if !ctx.Verbose {
logger = log.New(ioutil.Discard, "", 0)
}
if err := sw.Write(root, sm, !cmd.noExamples, logger); err != nil {
return errors.Wrap(err, "safe write of manifest and lock")
}

Expand Down
2 changes: 1 addition & 1 deletion cmd/dep/prune.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ func pruneProject(p *dep.Project, sm gps.SourceManager, logger *log.Logger) erro
}
defer os.RemoveAll(td)

if err := gps.WriteDepTree(td, p.Lock, sm, true); err != nil {
if err := gps.WriteDepTree(td, p.Lock, sm, true, logger); err != nil {
return err
}

Expand Down
6 changes: 6 additions & 0 deletions internal/gps/lock.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package gps

import (
"bytes"
"fmt"
"sort"
)

Expand Down Expand Up @@ -195,6 +196,11 @@ func (lp LockedProject) Packages() []string {
return lp.pkgs
}

func (lp LockedProject) String() string {
return fmt.Sprintf("%s@%s with packages: %v",
lp.Ident().errString(), lp.Version(), lp.pkgs)
}

type safeLock struct {
h []byte
p []LockedProject
Expand Down
51 changes: 51 additions & 0 deletions internal/gps/lock_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,3 +128,54 @@ func TestLocksAreEq(t *testing.T) {
t.Error("should fail when individual lp were not eq")
}
}

func TestLockedProjectsString(t *testing.T) {
tt := []struct {
name string
lp LockedProject
want string
}{
{
name: "full info",
lp: NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0"), []string{"gps"}),
want: "github.com/sdboyer/gps@v0.10.0 with packages: [gps]",
},
{
name: "empty package list",
lp: NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0"), []string{}),
want: "github.com/sdboyer/gps@v0.10.0 with packages: []",
},
{
name: "nil package",
lp: NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0"), nil),
want: "github.com/sdboyer/gps@v0.10.0 with packages: []",
},
{
name: "with source",
lp: NewLockedProject(
ProjectIdentifier{ProjectRoot: "github.com/sdboyer/gps", Source: "github.com/another/repo"},
NewVersion("v0.10.0"), []string{"."}),
want: "github.com/sdboyer/gps (from github.com/another/repo)@v0.10.0 with packages: [.]",
},
{
name: "version pair",
lp: NewLockedProject(mkPI("github.com/sdboyer/gps"), NewVersion("v0.10.0").Pair("278a227dfc3d595a33a77ff3f841fd8ca1bc8cd0"), []string{"gps"}),
want: "github.com/sdboyer/gps@v0.10.0 with packages: [gps]",
},
{
name: "revision only",
lp: NewLockedProject(mkPI("github.com/sdboyer/gps"), Revision("278a227dfc3d595a33a77ff3f841fd8ca1bc8cd0"), []string{"gps"}),
want: "github.com/sdboyer/gps@278a227dfc3d595a33a77ff3f841fd8ca1bc8cd0 with packages: [gps]",
},
}

for _, tc := range tt {
t.Run(tc.name, func(t *testing.T) {
s := tc.lp.String()
if tc.want != s {
t.Fatalf("want %s, got %s", tc.want, s)
}
})
}

}
6 changes: 4 additions & 2 deletions internal/gps/result.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package gps

import (
"fmt"
"log"
"os"
"path/filepath"
)
Expand Down Expand Up @@ -51,7 +52,7 @@ type solution struct {
// It requires a SourceManager to do the work, and takes a flag indicating
// whether or not to strip vendor directories contained in the exported
// dependencies.
func WriteDepTree(basedir string, l Lock, sm SourceManager, sv bool) error {
func WriteDepTree(basedir string, l Lock, sm SourceManager, sv bool, logger *log.Logger) error {
if l == nil {
return fmt.Errorf("must provide non-nil Lock to WriteDepTree")
}
Expand All @@ -65,10 +66,11 @@ func WriteDepTree(basedir string, l Lock, sm SourceManager, sv bool) error {
for _, p := range l.Projects() {
to := filepath.FromSlash(filepath.Join(basedir, string(p.Ident().ProjectRoot)))

logger.Printf("Writing out %s@%s", p.Ident().errString(), p.Version())
err = sm.ExportProject(p.Ident(), p.Version(), to)
if err != nil {
removeAll(basedir)
return fmt.Errorf("error while exporting %s: %s", p.Ident().ProjectRoot, err)
return fmt.Errorf("error while exporting %s@%s: %s", p.Ident().errString(), p.Version(), err)
}
if sv {
filepath.Walk(to, stripVendor)
Expand Down
9 changes: 6 additions & 3 deletions internal/gps/result_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,15 @@ package gps

import (
"io/ioutil"
"log"
"os"
"path"
"path/filepath"
"testing"
)

var discardLogger = log.New(ioutil.Discard, "", 0)

var basicResult solution

func pi(n string) ProjectIdentifier {
Expand Down Expand Up @@ -90,12 +93,12 @@ func testWriteDepTree(t *testing.T) {
}

// nil lock/result should err immediately
err = WriteDepTree(tmp, nil, sm, true)
err = WriteDepTree(tmp, nil, sm, true, discardLogger)
if err == nil {
t.Errorf("Should error if nil lock is passed to WriteDepTree")
}

err = WriteDepTree(tmp, r, sm, true)
err = WriteDepTree(tmp, r, sm, true, discardLogger)
if err != nil {
t.Errorf("Unexpected error while creating vendor tree: %s", err)
}
Expand Down Expand Up @@ -143,7 +146,7 @@ func BenchmarkCreateVendorTree(b *testing.B) {
// ease manual inspection
os.RemoveAll(exp)
b.StartTimer()
err = WriteDepTree(exp, r, sm, true)
err = WriteDepTree(exp, r, sm, true, discardLogger)
b.StopTimer()
if err != nil {
b.Errorf("unexpected error after %v iterations: %s", i, err)
Expand Down
12 changes: 3 additions & 9 deletions txn_writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ func (sw SafeWriter) validate(root string, sm gps.SourceManager) error {
// operations succeeded. It also does its best to roll back if any moves fail.
// This mostly guarantees that dep cannot exit with a partial write that would
// leave an undefined state on disk.
func (sw *SafeWriter) Write(root string, sm gps.SourceManager, examples bool) error {
func (sw *SafeWriter) Write(root string, sm gps.SourceManager, examples bool, logger *log.Logger) error {
err := sw.validate(root, sm)
if err != nil {
return err
Expand Down Expand Up @@ -313,7 +313,7 @@ func (sw *SafeWriter) Write(root string, sm gps.SourceManager, examples bool) er
}

if sw.writeVendor {
err = gps.WriteDepTree(filepath.Join(td, "vendor"), sw.lock, sm, true)
err = gps.WriteDepTree(filepath.Join(td, "vendor"), sw.lock, sm, true, logger)
if err != nil {
return errors.Wrap(err, "error while writing out vendor tree")
}
Expand Down Expand Up @@ -449,13 +449,7 @@ func (sw *SafeWriter) PrintPreparedActions(output *log.Logger) error {
if sw.writeVendor {
output.Println("Would have written the following projects to the vendor directory:")
for _, project := range sw.lock.Projects() {
prj := project.Ident()
rev, _, _ := gps.VersionComponentStrings(project.Version())
if prj.Source == "" {
output.Printf("%s@%s\n", prj.ProjectRoot, rev)
} else {
output.Printf("%s -> %s@%s\n", prj.ProjectRoot, prj.Source, rev)
}
output.Println(project)
}
}

Expand Down
Loading

0 comments on commit 4758d86

Please sign in to comment.