summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Goodman <wagoodman@gmail.com>2021-02-15 13:13:08 -0500
committerAlex Goodman <wagoodman@gmail.com>2021-02-15 13:13:08 -0500
commitbcebe0491c8442c20fc0f70750294fe46d78351b (patch)
tree6f2e14fed47eb7f9779e68fa5135e276f3625c2d
parentae89e3dc2ca81401d8c8ad91f83a07d4473f4c26 (diff)
normalize application config and loggingupdate_views
-rw-r--r--cmd/analyze.go11
-rw-r--r--cmd/build.go2
-rw-r--r--cmd/root.go164
-rw-r--r--dive/filetree/comparer.go5
-rw-r--r--dive/filetree/efficiency.go10
-rw-r--r--dive/filetree/file_info.go13
-rw-r--r--dive/filetree/file_node.go7
-rw-r--r--dive/filetree/file_tree.go14
-rw-r--r--dive/image/docker/config.go3
-rw-r--r--dive/image/docker/manifest.go3
-rw-r--r--go.mod15
-rw-r--r--go.sum130
-rw-r--r--internal/log/log.go61
-rw-r--r--internal/log/nop.go19
-rw-r--r--internal/logger/logrus.go149
-rw-r--r--runtime/ci/evaluator.go6
-rw-r--r--runtime/config/application_config.go159
-rw-r--r--runtime/config/diff_config.go26
-rw-r--r--runtime/config/file_tree_config.go7
-rw-r--r--runtime/config/keybinding_config.go19
-rw-r--r--runtime/config/layer_view_config.go5
-rw-r--r--runtime/config/logging.go7
-rw-r--r--runtime/log.go11
-rw-r--r--runtime/logger/logger.go23
-rw-r--r--runtime/run.go25
-rw-r--r--runtime/ui/app.go59
-rw-r--r--runtime/ui/components/app_config.go44
-rw-r--r--runtime/ui/components/dive_application.go12
-rw-r--r--runtime/ui/components/filetree_primative.go44
-rw-r--r--runtime/ui/components/filter_primative.go12
-rw-r--r--runtime/ui/components/helpers/key_binding.go8
-rw-r--r--runtime/ui/components/keybinding_primitive.go14
-rw-r--r--runtime/ui/components/layer_details_view.go2
-rw-r--r--runtime/ui/components/layers_primative.go32
-rw-r--r--runtime/ui/components/visible_grid.go9
-rw-r--r--runtime/ui/components/wrapper_primative.go6
-rw-r--r--runtime/ui/constructors/key_config.go31
-rw-r--r--runtime/ui/viewmodels/filter_view_model.go6
-rw-r--r--runtime/ui/viewmodels/layers_view_model.go9
-rw-r--r--runtime/ui/viewmodels/tree_view_model.go12
-rw-r--r--utils/view.go20
41 files changed, 734 insertions, 480 deletions
diff --git a/cmd/analyze.go b/cmd/analyze.go
index 49883d6..65a6749 100644
--- a/cmd/analyze.go
+++ b/cmd/analyze.go
@@ -2,12 +2,12 @@ package cmd
import (
"fmt"
- "github.com/sirupsen/logrus"
- "github.com/spf13/viper"
- "github.com/wagoodman/dive/dive"
"os"
"github.com/spf13/cobra"
+ "github.com/spf13/viper"
+ "github.com/wagoodman/dive/dive"
+ "github.com/wagoodman/dive/internal/log"
"github.com/wagoodman/dive/runtime"
)
@@ -59,7 +59,7 @@ func doAnalyzeCmd(cmd *cobra.Command, args []string) {
ignoreErrors, err := cmd.PersistentFlags().GetBool("ignore-errors")
if err != nil {
- logrus.Error("unable to get 'ignore-errors' option:", err)
+ log.Error("unable to get 'ignore-errors' option:", err)
}
runtime.Run(runtime.Options{
@@ -69,5 +69,6 @@ func doAnalyzeCmd(cmd *cobra.Command, args []string) {
ExportFile: exportFile,
CiConfig: ciConfig,
IgnoreErrors: viper.GetBool("ignore-errors") || ignoreErrors,
- })
+ },
+ *appConfig)
}
diff --git a/cmd/build.go b/cmd/build.go
index 9c65fab..d49ad16 100644
--- a/cmd/build.go
+++ b/cmd/build.go
@@ -33,5 +33,5 @@ func doBuildCmd(cmd *cobra.Command, args []string) {
BuildArgs: args,
ExportFile: exportFile,
CiConfig: ciConfig,
- })
+ }, *appConfig)
}
diff --git a/cmd/root.go b/cmd/root.go
index 3f3466e..3aa7969 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -2,20 +2,20 @@ package cmd
import (
"fmt"
- "io/ioutil"
"os"
- "path"
"strings"
- "github.com/wagoodman/dive/dive"
- "github.com/wagoodman/dive/dive/filetree"
-
- "github.com/mitchellh/go-homedir"
- log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/viper"
+ "github.com/wagoodman/dive/dive"
+ "github.com/wagoodman/dive/dive/filetree"
+ "github.com/wagoodman/dive/internal/log"
+ "github.com/wagoodman/dive/internal/logger"
+ "github.com/wagoodman/dive/runtime"
+ "github.com/wagoodman/dive/runtime/config"
)
+var appConfig *config.ApplicationConfig
var cfgFile string
var exportFile string
var ciConfigFile string
@@ -60,12 +60,16 @@ func initCli() {
for _, key := range []string{"lowestEfficiency", "highestWastedBytes", "highestUserWastedPercent"} {
if err := ciConfig.BindPFlag(fmt.Sprintf("rules.%s", key), rootCmd.Flags().Lookup(key)); err != nil {
- log.Fatalf("Unable to bind '%s' flag: %v", key, err)
+ panic(fmt.Errorf("unable to bind '%s' flag: %v", key, err))
}
}
if err := ciConfig.BindPFlag("ignore-errors", rootCmd.PersistentFlags().Lookup("ignore-errors")); err != nil {
- log.Fatalf("Unable to bind 'ignore-errors' flag: %v", err)
+ panic(fmt.Errorf("unable to bind 'ignore-errors' flag: %w", err))
+ }
+
+ if err := viper.BindPFlag("source", rootCmd.PersistentFlags().Lookup("source")); err != nil {
+ panic(fmt.Errorf("unable to bind 'source' flag: %w", err))
}
}
@@ -73,143 +77,25 @@ func initCli() {
func initConfig() {
var err error
- //viper.SetDefault("log.level", log.InfoLevel.String())
- viper.SetDefault("log.level", "debug")
- viper.SetDefault("log.path", "./dive.log")
- viper.SetDefault("log.enabled", true)
- // keybindings: status view / global
- // keybindings: status view / global
- viper.SetDefault("keybinding.quit", "Ctrl+C")
- viper.SetDefault("keybinding.toggle-view", "Tab")
- viper.SetDefault("keybinding.filter-files", "Ctrl+f")
- // keybindings: layer view
- viper.SetDefault("keybinding.compare-all", "Ctrl+A")
- viper.SetDefault("keybinding.compare-layer", "Ctrl+L")
- // keybindings: filetree view
- viper.SetDefault("keybinding.toggle-collapse-dir", "Space")
- viper.SetDefault("keybinding.toggle-collapse-all-dir", "Ctrl+Space")
- viper.SetDefault("keybinding.toggle-filetree-attributes", "Ctrl+B")
- viper.SetDefault("keybinding.toggle-added-files", "Ctrl+A")
- viper.SetDefault("keybinding.toggle-removed-files", "Ctrl+R")
- viper.SetDefault("keybinding.toggle-modified-files", "Ctrl+N")
- viper.SetDefault("keybinding.toggle-unmodified-files", "Ctrl+U")
- viper.SetDefault("keybinding.toggle-wrap-tree", "Ctrl+P")
- viper.SetDefault("keybinding.page-up", "PgUp")
- viper.SetDefault("keybinding.page-down", "PgDn")
-
- viper.SetDefault("diff.hide", "")
-
- viper.SetDefault("layer.show-aggregated-changes", false)
-
- viper.SetDefault("filetree.collapse-dir", false)
- viper.SetDefault("filetree.pane-width", 0.5)
- viper.SetDefault("filetree.show-attributes", true)
-
- viper.SetDefault("container-engine", "docker")
- viper.SetDefault("ignore-errors", false)
-
- err = viper.BindPFlag("source", rootCmd.PersistentFlags().Lookup("source"))
+ appConfig, err = config.LoadApplicationConfig(viper.GetViper(), cfgFile)
if err != nil {
- fmt.Println(err)
- os.Exit(1)
- }
-
- viper.SetEnvPrefix("DIVE")
- // replace all - with _ when looking for matching environment variables
- viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
- viper.AutomaticEnv()
-
- // if config files are present, load them
- if cfgFile == "" {
- // default configs are ignored if not found
- filepathToCfg := getDefaultCfgFile()
- viper.SetConfigFile(filepathToCfg)
- } else {
- viper.SetConfigFile(cfgFile)
- }
- err = viper.ReadInConfig()
- if err == nil {
- fmt.Println("Using config file:", viper.ConfigFileUsed())
- } else if cfgFile != "" {
- fmt.Println(err)
- os.Exit(0)
+ panic(err)
}
- // set global defaults (for performance)
- filetree.GlobalFileTreeCollapse = viper.GetBool("filetree.collapse-dir")
+ // set global defaults
+ filetree.GlobalFileTreeCollapse = appConfig.FileTree.CollapseDir
}
// initLogging sets up the logging object with a formatter and location
func initLogging() {
- var logFileObj *os.File
- var err error
-
- if viper.GetBool("log.enabled") {
- logFileObj, err = os.OpenFile(viper.GetString("log.path"), os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
- log.SetOutput(logFileObj)
- } else {
- log.SetOutput(ioutil.Discard)
+ logCfg := logger.LogrusConfig{
+ EnableConsole: false,
+ EnableFile: appConfig.Log.Enabled,
+ FileLocation: appConfig.Log.Path,
+ Level: appConfig.Log.Level,
}
+ runtime.SetLogger(logger.NewLogrusLogger(logCfg))
- if err != nil {
- fmt.Fprintln(os.Stderr, err)
- }
-
- Formatter := new(log.TextFormatter)
- Formatter.DisableTimestamp = true
- log.SetFormatter(Formatter)
-
- level, err := log.ParseLevel(viper.GetString("log.level"))
- if err != nil {
- fmt.Fprintln(os.Stderr, err)
- }
-
- log.SetLevel(level)
- log.Debug("Starting Dive...")
- log.Debugf("config filepath: %s", viper.ConfigFileUsed())
- for k, v := range viper.AllSettings() {
- log.Debug("config value: ", k, " : ", v)
- }
-}
-
-// getDefaultCfgFile checks for config file in paths from xdg specs
-// and in $HOME/.config/dive/ directory
-// defaults to $HOME/.dive.yaml
-func getDefaultCfgFile() string {
- home, err := homedir.Dir()
- if err != nil {
- fmt.Println(err)
- os.Exit(0)
- }
-
- xdgHome := os.Getenv("XDG_CONFIG_HOME")
- xdgDirs := os.Getenv("XDG_CONFIG_DIRS")
- xdgPaths := append([]string{xdgHome}, strings.Split(xdgDirs, ":")...)
- allDirs := append(xdgPaths, path.Join(home, ".config"))
-
- for _, val := range allDirs {
- file := findInPath(val)
- if len(file) > 0 {
- return file
- }
- }
- return path.Join(home, ".dive.yaml")
-}
-
-// findInPath returns first "*.yaml" file in path's subdirectory "dive"
-// if not found returns empty string
-func findInPath(pathTo string) string {
- directory := path.Join(pathTo, "dive")
- files, err := ioutil.ReadDir(directory)
- if err != nil {
- return ""
- }
-
- for _, file := range files {
- filename := file.Name()
- if path.Ext(filename) == ".yaml" {
- return path.Join(directory, filename)
- }
- }
- return ""
+ log.Debug("starting dive")
+ log.Debug("config contents:\n", appConfig.String())
}
diff --git a/dive/filetree/comparer.go b/dive/filetree/comparer.go
index 1df52a7..29ebafc 100644
--- a/dive/filetree/comparer.go
+++ b/dive/filetree/comparer.go
@@ -2,7 +2,8 @@ package filetree
import (
"fmt"
- "github.com/sirupsen/logrus"
+
+ "github.com/wagoodman/dive/internal/log"
)
type TreeIndexKey struct {
@@ -77,7 +78,7 @@ func (cmp *Comparer) get(key TreeIndexKey) (*FileTree, []PathError, error) {
markPathErrors, err := newTree.CompareAndMark(cmp.refTrees[idx])
pathErrors = append(pathErrors, markPathErrors...)
if err != nil {
- logrus.Errorf("error while building tree: %+v", err)
+ log.Errorf("error while building tree: %+v", err)
return nil, nil, err
}
}
diff --git a/dive/filetree/efficiency.go b/dive/filetree/efficiency.go
index cdb6b4f..ac315a4 100644
--- a/dive/filetree/efficiency.go
+++ b/dive/filetree/efficiency.go
@@ -3,7 +3,7 @@ package filetree
import (
"sort"
- "github.com/sirupsen/logrus"
+ "github.com/wagoodman/dive/internal/log"
)
// EfficiencyData represents the storage and reference statistics for a given file tree path.
@@ -65,11 +65,11 @@ func Efficiency(trees []*FileTree) (float64, EfficiencySlice) {
stackedTree, failedPaths, err := StackTreeRange(trees, 0, currentTree-1)
if len(failedPaths) > 0 {
for _, path := range failedPaths {
- logrus.Errorf(path.String())
+ log.Errorf(path.String())
}
}
if err != nil {
- logrus.Errorf("unable to stack tree range: %+v", err)
+ log.Errorf("unable to stack tree range: %+v", err)
return err
}
@@ -81,7 +81,7 @@ func Efficiency(trees []*FileTree) (float64, EfficiencySlice) {
if previousTreeNode.Data.FileInfo.IsDir {
err = previousTreeNode.VisitDepthChildFirst(sizer, nil)
if err != nil {
- logrus.Errorf("unable to propagate whiteout dir: %+v", err)
+ log.Errorf("unable to propagate whiteout dir: %+v", err)
return err
}
}
@@ -109,7 +109,7 @@ func Efficiency(trees []*FileTree) (float64, EfficiencySlice) {
currentTree = idx
err := tree.VisitDepthChildFirst(visitor, visitEvaluator)
if err != nil {
- logrus.Errorf("unable to propagate ref tree: %+v", err)
+ log.Errorf("unable to propagate ref tree: %+v", err)
}
}
diff --git a/dive/filetree/file_info.go b/dive/filetree/file_info.go
index 788ac3c..60e573a 100644
--- a/dive/filetree/file_info.go
+++ b/dive/filetree/file_info.go
@@ -2,10 +2,11 @@ package filetree
import (
"archive/tar"
- "github.com/cespare/xxhash"
- "github.com/sirupsen/logrus"
"io"
"os"
+
+ "github.com/cespare/xxhash"
+ "github.com/wagoodman/dive/internal/log"
)
// FileInfo contains tar metadata for a specific FileNode
@@ -54,7 +55,7 @@ func NewFileInfo(realPath, path string, info os.FileInfo) FileInfo {
linkName, err = os.Readlink(realPath)
if err != nil {
- logrus.Panic("unable to read link:", realPath, err)
+ log.Errorf("unable to read link=%q : %+v", realPath, err)
}
} else if info.IsDir() {
@@ -69,7 +70,7 @@ func NewFileInfo(realPath, path string, info os.FileInfo) FileInfo {
if fileType != tar.TypeDir {
file, err := os.Open(realPath)
if err != nil {
- logrus.Panic("unable to read file:", realPath)
+ log.Errorf("unable to read file: %s", realPath)
}
defer file.Close()
hash = getHashFromReader(file)
@@ -127,7 +128,7 @@ func getHashFromReader(reader io.Reader) uint64 {
for {
n, err := reader.Read(buf)
if err != nil && err != io.EOF {
- logrus.Panic(err)
+ log.Error(err)
}
if n == 0 {
break
@@ -135,7 +136,7 @@ func getHashFromReader(reader io.Reader) uint64 {
_, err = h.Write(buf[:n])
if err != nil {
- logrus.Panic(err)
+ log.Error(err)
}
}
diff --git a/dive/filetree/file_node.go b/dive/filetree/file_node.go
index 106a34d..ec3b6fd 100644
--- a/dive/filetree/file_node.go
+++ b/dive/filetree/file_node.go
@@ -6,11 +6,10 @@ import (
"sort"
"strings"
- "github.com/sirupsen/logrus"
- "github.com/wagoodman/dive/runtime/ui/format"
-
"github.com/dustin/go-humanize"
"github.com/phayes/permbits"
+ "github.com/wagoodman/dive/internal/log"
+ "github.com/wagoodman/dive/runtime/ui/format"
)
const (
@@ -173,7 +172,7 @@ func (node *FileNode) MetadataString() string {
err := node.VisitDepthChildFirst(sizer, nil)
if err != nil {
- logrus.Errorf("unable to propagate node for metadata: %+v", err)
+ log.Errorf("unable to propagate node for metadata: %+v", err)
}
}
diff --git a/dive/filetree/file_tree.go b/dive/filetree/file_tree.go
index dc639de..edfb22f 100644
--- a/dive/filetree/file_tree.go
+++ b/dive/filetree/file_tree.go
@@ -6,8 +6,9 @@ import (
"sort"
"strings"
+ "github.com/wagoodman/dive/internal/log"
+
"github.com/google/uuid"
- "github.com/sirupsen/logrus"
)
const (
@@ -52,8 +53,7 @@ type renderParams struct {
isLast bool
}
-
- // renderStringTreeBetween returns a string representing the given tree between the given rows. Since each node
+// renderStringTreeBetween returns a string representing the given tree between the given rows. Since each node
// is rendered on its own line, the returned string shows the visible nodes not affected by a collapsed parent.
func (tree *FileTree) renderStringTreeBetween(startRow, stopRow int, showAttributes bool) string {
// generate a list of nodes to render
@@ -75,7 +75,7 @@ func (tree *FileTree) renderStringTreeBetween(startRow, stopRow int, showAttribu
// we should always visit nodes in order
sort.Strings(keys)
lastIndex := len(keys) - 1
- for ; lastIndex > 0; lastIndex--{
+ for ; lastIndex > 0; lastIndex-- {
key := keys[lastIndex]
if currentParams.node.Children[key].Data.ViewInfo.Hidden {
continue
@@ -158,7 +158,7 @@ func (tree *FileTree) VisibleSize() int {
}
err := tree.VisitDepthParentFirst(visitor, visitEvaluator)
if err != nil {
- logrus.Errorf("unable to determine visible tree size: %+v", err)
+ log.Errorf("unable to determine visible tree size: %+v", err)
}
// don't include root
@@ -191,7 +191,7 @@ func (tree *FileTree) Copy() *FileTree {
}, nil)
if err != nil {
- logrus.Errorf("unable to propagate tree on copy(): %+v", err)
+ log.Errorf("unable to propagate tree on copy(): %+v", err)
}
return newTree
@@ -393,7 +393,7 @@ func StackTreeRange(trees []*FileTree, start, stop int) (*FileTree, []PathError,
errors = append(errors, failedPaths...)
}
if err != nil {
- logrus.Errorf("could not stack tree range: %v", err)
+ log.Errorf("could not stack tree range: %v", err)
return nil, nil, err
}
}
diff --git a/dive/image/docker/config.go b/dive/image/docker/config.go
index 0efcb57..5b708bf 100644
--- a/dive/image/docker/config.go
+++ b/dive/image/docker/config.go
@@ -2,7 +2,6 @@ package docker
import (
"encoding/json"
- "github.com/sirupsen/logrus"
)
type config struct {
@@ -28,7 +27,7 @@ func newConfig(configBytes []byte) config {
var imageConfig config
err := json.Unmarshal(configBytes, &imageConfig)
if err != nil {
- logrus.Panic(err)
+ panic(err)
}
layerIdx := 0
diff --git a/dive/image/docker/manifest.go b/dive/image/docker/manifest.go
index b08ee05..98546f3 100644
--- a/dive/image/docker/manifest.go
+++ b/dive/image/docker/manifest.go
@@ -2,7 +2,6 @@ package docker
import (
"encoding/json"
- "github.com/sirupsen/logrus"
)
type manifest struct {
@@ -15,7 +14,7 @@ func newManifest(manifestBytes []byte) manifest {
var manifest []manifest
err := json.Unmarshal(manifestBytes, &manifest)
if err != nil {
- logrus.Panic(err)
+ panic(err)
}
return manifest[0]
}
diff --git a/go.mod b/go.mod
index 4df6b43..b92695a 100644
--- a/go.mod
+++ b/go.mod
@@ -3,28 +3,33 @@ module github.com/wagoodman/dive
go 1.13
require (
+ github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5 // indirect
github.com/OneOfOne/xxhash v1.2.8 // indirect
+ github.com/buildpacks/imgutil v0.0.0-20200805143852-1844b230530d // indirect
github.com/buildpacks/lifecycle v0.7.2
- github.com/buildpacks/pack v0.14.2
github.com/cespare/xxhash v1.1.0
+ github.com/containerd/containerd v1.3.3 // indirect
github.com/docker/cli v20.10.0-beta1+incompatible
github.com/docker/docker v1.4.2-0.20200221181110-62bd5a33f707
github.com/dustin/go-humanize v1.0.0
github.com/fsnotify/fsnotify v1.4.9 // indirect
github.com/gdamore/tcell/v2 v2.1.0
+ github.com/gogo/protobuf v1.3.1 // indirect
+ github.com/golang/mock v1.4.1 // indirect
github.com/golang/protobuf v1.4.3 // indirect
github.com/google/go-cmp v0.5.2 // indirect
+ github.com/google/go-containerregistry v0.0.0-20200313165449-955bf358a3d8 // indirect
github.com/google/uuid v1.1.2
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect
github.com/gorilla/mux v1.8.0 // indirect
- github.com/jroimartin/gocui v0.4.0
+ github.com/kr/text v0.2.0 // indirect
github.com/logrusorgru/aurora v2.0.3+incompatible
github.com/lunixbochs/vtclean v1.0.0
github.com/magiconair/properties v1.8.4 // indirect
github.com/mattn/go-colorable v0.1.8 // indirect
github.com/mitchellh/go-homedir v1.1.0
github.com/mitchellh/mapstructure v1.3.3 // indirect
- github.com/nsf/termbox-go v0.0.0-20200418040025-38ba6e5628f1 // indirect
+ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/pelletier/go-toml v1.8.1 // indirect
github.com/phayes/permbits v0.0.0-20190612203442-39d7c581d2ee
@@ -39,8 +44,8 @@ require (
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/viper v1.7.1
github.com/stretchr/testify v1.6.1 // indirect
+ github.com/x-cray/logrus-prefixed-formatter v0.5.2
gitlab.com/tslocum/cbind v0.1.4
- go.uber.org/zap v1.10.0
golang.org/x/net v0.0.0-20201029055024-942e2f445f3c
golang.org/x/sys v0.0.0-20201218084310-7d0127a74742 // indirect
golang.org/x/text v0.3.4 // indirect
@@ -51,7 +56,7 @@ require (
google.golang.org/protobuf v1.25.0 // indirect
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect
gopkg.in/ini.v1 v1.62.0 // indirect
- gopkg.in/yaml.v2 v2.3.0 // indirect
+ gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect
gotest.tools/v3 v3.0.3 // indirect
)
diff --git a/go.sum b/go.sum
index bf7e98e..de1c9d9 100644
--- a/go.sum
+++ b/go.sum
@@ -1,4 +1,3 @@
-bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
@@ -35,13 +34,9 @@ github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14=
-github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
-github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5 h1:ygIc8M6trr62pF5DucadTWGdEB4mEyvzi0e2nbcmcyA=
github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
-github.com/Microsoft/hcsshim v0.8.7 h1:ptnOoufxGSzauVTsdE+wMYnCWA301PdoN4xg5oRdZpg=
-github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ=
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8=
@@ -50,24 +45,16 @@ github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
-github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs=
-github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA=
-github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
+github.com/apex/log v1.1.2-0.20190827100214-baa5455d1012 h1:r9k3B0K539tmbDOdyCIuz/6qtn8q+lp+qvEStcFUIdM=
github.com/apex/log v1.1.2-0.20190827100214-baa5455d1012/go.mod h1:Ls949n1HFtXfbDcjiTTFQqkVUrte0puoIBfO3SVgwOA=
-github.com/apex/log v1.1.2 h1:bnDuVoi+o98wOdVqfEzNDlY0tcmBia7r4YkjS9EqGYk=
-github.com/apex/log v1.1.2/go.mod h1:SyfRweFO+TlkIJ3DVizTSeI1xk7jOIIqOnUPZQTTsww=
-github.com/apex/logs v0.0.3/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo=
github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE=
github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=