diff --git a/dive/filetree/file_info.go b/dive/filetree/file_info.go index 4ea3887..788ac3c 100644 --- a/dive/filetree/file_info.go +++ b/dive/filetree/file_info.go @@ -49,7 +49,7 @@ func NewFileInfo(realPath, path string, info os.FileInfo) FileInfo { var linkName string var size int64 - if info.Mode() & os.ModeSymlink != 0 { + if info.Mode()&os.ModeSymlink != 0 { fileType = tar.TypeSymlink linkName, err = os.Readlink(realPath) @@ -83,9 +83,9 @@ func NewFileInfo(realPath, path string, info os.FileInfo) FileInfo { Size: size, Mode: info.Mode(), // todo: support UID/GID - Uid: -1, - Gid: -1, - IsDir: info.IsDir(), + Uid: -1, + Gid: -1, + IsDir: info.IsDir(), } } diff --git a/dive/image/docker/image_archive.go b/dive/image/docker/image_archive.go index 8d93301..dd4b38d 100644 --- a/dive/image/docker/image_archive.go +++ b/dive/image/docker/image_archive.go @@ -12,14 +12,14 @@ import ( ) type ImageArchive struct { - manifest manifest - config config - layerMap map[string]*filetree.FileTree + manifest manifest + config config + layerMap map[string]*filetree.FileTree } func NewImageArchive(tarFile io.ReadCloser) (*ImageArchive, error) { img := &ImageArchive{ - layerMap: make(map[string]*filetree.FileTree), + layerMap: make(map[string]*filetree.FileTree), } tarReader := tar.NewReader(tarFile) @@ -179,9 +179,8 @@ func (img *ImageArchive) ToImage() (*image.Image, error) { layers = append(layers, dockerLayer.ToLayer()) } - return &image.Image{ - Trees: trees, + Trees: trees, Layers: layers, }, nil diff --git a/dive/image/docker/image_archive_analysis_test.go b/dive/image/docker/image_archive_analysis_test.go index 65a8daf..5d9aacc 100644 --- a/dive/image/docker/image_archive_analysis_test.go +++ b/dive/image/docker/image_archive_analysis_test.go @@ -26,12 +26,12 @@ func analysisFromImageTar(t *testing.T, path string) *image.AnalysisResult { func Test_Analysis(t *testing.T) { table := map[string]struct { - efficiency float64 - sizeBytes uint64 - userSizeBytes uint64 - wastedBytes uint64 - wastedPercent float64 - path string + efficiency float64 + sizeBytes uint64 + userSizeBytes uint64 + wastedBytes uint64 + wastedPercent float64 + path string }{ "docker-image": {0.9844212134184309, 1220598, 66237, 32025, 0.4834911001404049, "../../../.data/test-docker-image.tar"}, } diff --git a/dive/image/docker/layer.go b/dive/image/docker/layer.go index 4e46933..408fea1 100644 --- a/dive/image/docker/layer.go +++ b/dive/image/docker/layer.go @@ -14,7 +14,6 @@ type layer struct { tree *filetree.FileTree } - // String represents a layer in a columnar format. func (l *layer) ToLayer() *image.Layer { id := strings.Split(l.tree.Name, "/")[0] @@ -25,7 +24,7 @@ func (l *layer) ToLayer() *image.Layer { Size: l.history.Size, Tree: l.tree, // todo: query docker api for tags - Names: []string{"(unavailable)"}, - Digest: l.history.ID, + Names: []string{"(unavailable)"}, + Digest: l.history.ID, } } diff --git a/dive/image/docker/resolver.go b/dive/image/docker/resolver.go index 38cfa45..461bbf9 100644 --- a/dive/image/docker/resolver.go +++ b/dive/image/docker/resolver.go @@ -13,7 +13,7 @@ import ( "golang.org/x/net/context" ) -type resolver struct {} +type resolver struct{} func NewResolver() *resolver { return &resolver{} @@ -100,4 +100,3 @@ func (r *resolver) fetchArchive(id string) (io.ReadCloser, error) { return readCloser, nil } - diff --git a/dive/image/layer.go b/dive/image/layer.go index 70354ad..550eba1 100644 --- a/dive/image/layer.go +++ b/dive/image/layer.go @@ -11,13 +11,13 @@ const ( ) type Layer struct { - Id string - Index int + Id string + Index int Command string - Size uint64 - Tree *filetree.FileTree - Names []string - Digest string + Size uint64 + Tree *filetree.FileTree + Names []string + Digest string } func (l *Layer) ShortId() string { diff --git a/dive/image/podman/image_directory.go b/dive/image/podman/image_directory.go index 9cad70c..3f6949b 100644 --- a/dive/image/podman/image_directory.go +++ b/dive/image/podman/image_directory.go @@ -20,8 +20,8 @@ type ImageDirectoryRef struct { func NewImageDirectoryRef(img *podmanImage.Image) (*ImageDirectoryRef, error) { imgDirRef := &ImageDirectoryRef{ layerOrder: make([]string, 0), - treeMap: make(map[string]*filetree.FileTree), - layerMap: make(map[string]*podmanImage.Image), + treeMap: make(map[string]*filetree.FileTree), + layerMap: make(map[string]*podmanImage.Image), } ctx := context.TODO() @@ -41,7 +41,7 @@ func NewImageDirectoryRef(img *podmanImage.Image) (*ImageDirectoryRef, error) { if !exists { return nil, fmt.Errorf("graph has no upper dir") } - + if _, err := os.Stat(rootDir); os.IsNotExist(err) { return nil, fmt.Errorf("graph root dir does not exist: %s", rootDir) } @@ -67,7 +67,7 @@ func NewImageDirectoryRef(img *podmanImage.Image) (*ImageDirectoryRef, error) { return imgDirRef, nil } -func processLayer(name, rootDir string) (*filetree.FileTree, error) { +func processLayer(name, rootDir string) (*filetree.FileTree, error) { tree := filetree.NewFileTree() tree.Name = name @@ -76,7 +76,7 @@ func processLayer(name, rootDir string) (*filetree.FileTree, error) { return err } // add this file to the tree... - relativeImagePath := "/"+strings.TrimPrefix(strings.TrimPrefix(path, rootDir), "/") + relativeImagePath := "/" + strings.TrimPrefix(strings.TrimPrefix(path, rootDir), "/") fileInfo := filetree.NewFileInfo(path, relativeImagePath, info) tree.FileSize += uint64(fileInfo.Size) @@ -111,15 +111,15 @@ func (img *ImageDirectoryRef) ToImage() (*image.Image, error) { // as you iterate chronologically through history (ignoring history items that have no layer contents) // Note: history is not required metadata in an OCI image! podmanLayer := layer{ - obj: img.layerMap[id], - index: layerIdx, - tree: trees[layerIdx], + obj: img.layerMap[id], + index: layerIdx, + tree: trees[layerIdx], } layers = append(layers, podmanLayer.ToLayer()) } return &image.Image{ - Trees: trees, + Trees: trees, Layers: layers, }, nil diff --git a/dive/image/podman/layer.go b/dive/image/podman/layer.go index b59eab5..5fdbd43 100644 --- a/dive/image/podman/layer.go +++ b/dive/image/podman/layer.go @@ -11,10 +11,10 @@ import ( // Layer represents a Docker image layer and metadata type layer struct { - obj *podmanImage.Image - history *podmanImage.History - index int - tree *filetree.FileTree + obj *podmanImage.Image + history *podmanImage.History + index int + tree *filetree.FileTree } func (l *layer) getHistory() (*podmanImage.History, error) { diff --git a/dive/image/podman/resolver.go b/dive/image/podman/resolver.go index 2a9126d..37f5253 100644 --- a/dive/image/podman/resolver.go +++ b/dive/image/podman/resolver.go @@ -11,7 +11,7 @@ import ( "os" ) -type resolver struct {} +type resolver struct{} func NewResolver() *resolver { return &resolver{} @@ -25,7 +25,6 @@ func (r *resolver) Build(args []string) (*image.Image, error) { return r.Fetch(id) } - func (r *resolver) Fetch(id string) (*image.Image, error) { img, err := r.resolveFromDisk(id) if err == nil { @@ -57,18 +56,18 @@ func (r *resolver) resolveFromDisk(id string) (*image.Image, error) { return nil, err } - ImageLoop: - for _, candidateImage := range images { - for _, name := range candidateImage.Names() { - if name == id { - img, err = NewImageDirectoryRef(candidateImage) - if err != nil { - return nil, err - } - break ImageLoop +ImageLoop: + for _, candidateImage := range images { + for _, name := range candidateImage.Names() { + if name == id { + img, err = NewImageDirectoryRef(candidateImage) + if err != nil { + return nil, err } + break ImageLoop } } + } if img == nil { return nil, fmt.Errorf("could not find image by name: '%s'", id) @@ -108,7 +107,7 @@ func (r *resolver) fetchDockerArchive(id string) (string, error) { return "", err } - for _, item:= range images { + for _, item := range images { for _, name := range item.Names() { if name == id { file, err := ioutil.TempFile(os.TempDir(), "dive-resolver-tar") diff --git a/runtime/export/export.go b/runtime/export/export.go index 44e09d7..4c32b67 100644 --- a/runtime/export/export.go +++ b/runtime/export/export.go @@ -14,10 +14,10 @@ type export struct { func NewExport(analysis *diveImage.AnalysisResult) *export { data := export{ Layer: make([]layer, len(analysis.Layers)), - Image: image { + Image: image{ InefficientFiles: make([]fileReference, len(analysis.Inefficiencies)), - SizeBytes: analysis.SizeBytes, - EfficiencyScore: analysis.Efficiency, + SizeBytes: analysis.SizeBytes, + EfficiencyScore: analysis.Efficiency, InefficientBytes: analysis.WastedBytes, }, } diff --git a/runtime/ui/details_controller.go b/runtime/ui/details_controller.go index 61ca251..0b9de63 100644 --- a/runtime/ui/details_controller.go +++ b/runtime/ui/details_controller.go @@ -134,7 +134,7 @@ func (controller *DetailsController) Render() error { if currentLayer.Names != nil && len(currentLayer.Names) > 0 { lines = append(lines, Formatting.Header("Tags: ")+strings.Join(currentLayer.Names, ", ")) } else { - lines = append(lines, Formatting.Header("Tags: ")+ "(none)") + lines = append(lines, Formatting.Header("Tags: ")+"(none)") } lines = append(lines, Formatting.Header("Id: ")+currentLayer.Id) lines = append(lines, Formatting.Header("Digest: ")+currentLayer.Digest) diff --git a/runtime/ui/filetree_viewmodel_test.go b/runtime/ui/filetree_viewmodel_test.go index a2228f7..df0e0ca 100644 --- a/runtime/ui/filetree_viewmodel_test.go +++ b/runtime/ui/filetree_viewmodel_test.go @@ -72,8 +72,6 @@ func assertTestData(t *testing.T, actualBytes []byte) { helperCheckDiff(t, expectedBytes, actualBytes) } - - func initializeTestViewModel(t *testing.T) *FileTreeViewModel { result := docker.TestAnalysisFromArchive(t, "../../.data/test-docker-image.tar") diff --git a/runtime/ui/ui.go b/runtime/ui/ui.go index 0e6c3d2..3b2075a 100644 --- a/runtime/ui/ui.go +++ b/runtime/ui/ui.go @@ -131,7 +131,6 @@ func toggleFilterView(g *gocui.Gui, v *gocui.View) error { return err } - return nil }