mostly working

This commit is contained in:
Will Murphy 2018-06-24 15:04:29 -04:00
parent ef2c76930f
commit 789643261f
4 changed files with 61 additions and 39 deletions

View File

@ -1,14 +1,14 @@
package filetree package filetree
import ( import (
"archive/tar"
"fmt"
"sort" "sort"
"strings" "strings"
"github.com/fatih/color"
"fmt"
"github.com/phayes/permbits"
"github.com/dustin/go-humanize" "github.com/dustin/go-humanize"
"github.com/wagoodman/docker-image-explorer/_vendor-20180604210951/github.com/Microsoft/go-winio/archive/tar" "github.com/fatih/color"
"github.com/phayes/permbits"
) )
const ( const (
@ -16,11 +16,11 @@ const (
) )
type FileNode struct { type FileNode struct {
Tree *FileTree Tree *FileTree
Parent *FileNode Parent *FileNode
Name string Name string
Data NodeData Data NodeData
Children map[string]*FileNode Children map[string]*FileNode
} }
func NewNode(parent *FileNode, name string, data FileInfo) (node *FileNode) { func NewNode(parent *FileNode, name string, data FileInfo) (node *FileNode) {
@ -125,7 +125,7 @@ func (node *FileNode) MetadataString() string {
userGroup := fmt.Sprintf("%d:%d", user, group) userGroup := fmt.Sprintf("%d:%d", user, group)
size := humanize.Bytes(uint64(node.Data.FileInfo.TarHeader.FileInfo().Size())) size := humanize.Bytes(uint64(node.Data.FileInfo.TarHeader.FileInfo().Size()))
return style.Sprint(fmt.Sprintf(AttributeFormat,dir, fileMode, userGroup, size)) return style.Sprint(fmt.Sprintf(AttributeFormat, dir, fileMode, userGroup, size))
} }
func (node *FileNode) VisitDepthChildFirst(visiter Visiter, evaluator VisitEvaluator) error { func (node *FileNode) VisitDepthChildFirst(visiter Visiter, evaluator VisitEvaluator) error {
@ -161,7 +161,7 @@ func (node *FileNode) VisitDepthParentFirst(visiter Visiter, evaluator VisitEval
} }
// never visit the root node // never visit the root node
if node != node.Tree.Root{ if node != node.Tree.Root {
err = visiter(node) err = visiter(node)
if err != nil { if err != nil {
return err return err
@ -225,7 +225,7 @@ func (node *FileNode) deriveDiffType(diffType DiffType) error {
} }
return node.AssignDiffType(myDiffType) return node.AssignDiffType(myDiffType)
} }
func (node *FileNode) AssignDiffType(diffType DiffType) error { func (node *FileNode) AssignDiffType(diffType DiffType) error {

View File

@ -32,7 +32,7 @@ func NewCommandView(name string, gui *gocui.Gui) (commandview *CommandView) {
return commandview return commandview
} }
func (view *CommandView) Setup(v *gocui.View) error { func (view *CommandView) Setup(v *gocui.View, header *gocui.View) error {
// set view options // set view options
view.view = v view.view = v
@ -80,8 +80,7 @@ func (view *CommandView) KeyHelp() string {
func (view *CommandView) Render() error { func (view *CommandView) Render() error {
view.gui.Update(func(g *gocui.Gui) error { view.gui.Update(func(g *gocui.Gui) error {
view.view.Clear() fmt.Fprintln(view.view, "")
fmt.Fprintln(view.view, "Filter: ")
return nil return nil
}) })

View File

@ -4,9 +4,6 @@ import (
"errors" "errors"
"fmt" "fmt"
"regexp" "regexp"
"strings"
"strings" "strings"
"github.com/fatih/color" "github.com/fatih/color"
@ -108,12 +105,6 @@ func (view *FileTreeView) setLayer(layerIndex int) error {
} }
view.ModelTree.VisitDepthChildFirst(visitor, nil) view.ModelTree.VisitDepthChildFirst(visitor, nil)
if debug {
v, _ := view.gui.View("debug")
v.Clear()
_, _ = fmt.Fprintln(v, view.RefTrees[layerIndex])
}
view.view.SetCursor(0, 0) view.view.SetCursor(0, 0)
view.TreeIndex = 0 view.TreeIndex = 0
view.ModelTree = newTree view.ModelTree = newTree
@ -197,31 +188,61 @@ func (view *FileTreeView) toggleShowDiffType(diffType filetree.DiffType) error {
} }
func filterRegex() *regexp.Regexp { func filterRegex() *regexp.Regexp {
debugPrint("Entered filterRegex()")
if Views.Command == nil || Views.Command.view == nil { if Views.Command == nil || Views.Command.view == nil {
return nil return nil
} }
var filterBytes []byte filterString := strings.TrimSpace(Views.Command.view.Buffer())
read, err := Views.Command.view.Read(filterBytes) if len(filterString) < 1 {
if read > 0 && err == nil { debugPrint(fmt.Sprintf("returing nil from fitlerRegex() because string is too short (%s)", filterString))
regex, err := regexp.Compile(string(filterBytes)) return nil
if err == nil { }
return regex
debugPrint("Compiling regex from " + filterString)
regex, err := regexp.Compile(filterString)
if err != nil {
debugPrint("Returning nil from filterRegex")
return nil
}
return regex
}
func debugPrint(s string) {
if debug && Views.Tree != nil && Views.Tree.gui != nil {
v, _ := Views.Tree.gui.View("debug")
if v != nil {
if len(v.ViewBuffer()) > 100 {
v.Clear()
}
_, _ = fmt.Fprintln(v, s)
} }
} }
if read > 0 && err != nil {
panic(err)
}
return nil
} }
func (view *FileTreeView) updateViewTree() { func (view *FileTreeView) updateViewTree() {
regex := filterRegex() regex := filterRegex()
if regex == nil {
debugPrint("Nil regex in updateViewTree()")
}
// keep the view selection in parity with the current DiffType selection // keep the view selection in parity with the current DiffType selection
view.ModelTree.VisitDepthChildFirst(func(node *filetree.FileNode) error { view.ModelTree.VisitDepthChildFirst(func(node *filetree.FileNode) error {
node.Data.ViewInfo.Hidden = view.HiddenDiffTypes[node.Data.DiffType] node.Data.ViewInfo.Hidden = view.HiddenDiffTypes[node.Data.DiffType]
if regex != nil { visibleChild := false
match := regex.Find([]byte(node.Path())) for _, child := range node.Children {
node.Data.ViewInfo.Hidden = match != nil if !child.Data.ViewInfo.Hidden {
visibleChild = true
}
}
if regex != nil && !visibleChild {
match := regex.FindString(node.Path())
node.Data.ViewInfo.Hidden = len(match) == 0
debugPrint(fmt.Sprintf("Not nil regex, match was %s", string(match)))
if len(match) == 0 {
debugPrint(fmt.Sprintf("Hiding '%s' because of failure to match /%v/", node.Path(), regex))
} else {
debugPrint(fmt.Sprintf("Showing '%s' because of matching /%v/", node.Path(), regex))
}
} }
return nil return nil
}, nil) }, nil)

View File

@ -10,7 +10,7 @@ import (
"github.com/wagoodman/docker-image-explorer/image" "github.com/wagoodman/docker-image-explorer/image"
) )
const debug = false const debug = true
var Formatting struct { var Formatting struct {
Header func(...interface{}) string Header func(...interface{}) string
@ -45,12 +45,14 @@ func toggleView(g *gocui.Gui, v *gocui.View) error {
} }
func focusFilterView(g *gocui.Gui, v *gocui.View) error { func focusFilterView(g *gocui.Gui, v *gocui.View) error {
debugPrint("focusFilterView()")
_, err := g.SetCurrentView(Views.Command.Name) _, err := g.SetCurrentView(Views.Command.Name)
Render() Render()
return err return err
} }
func returnToTreeView(g *gocui.Gui, v *gocui.View) error { func returnToTreeView(g *gocui.Gui, v *gocui.View) error {
debugPrint("returnToTreeView()")
_, err := g.SetCurrentView(Views.Tree.Name) _, err := g.SetCurrentView(Views.Tree.Name)
Render() Render()
return err return err
@ -177,7 +179,7 @@ func layout(g *gocui.Gui) error {
if err != gocui.ErrUnknownView { if err != gocui.ErrUnknownView {
return err return err
} }
Views.Command.Setup(view) Views.Command.Setup(view, nil)
} }