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
import (
"archive/tar"
"fmt"
"sort"
"strings"
"github.com/fatih/color"
"fmt"
"github.com/phayes/permbits"
"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 (
@ -16,11 +16,11 @@ const (
)
type FileNode struct {
Tree *FileTree
Parent *FileNode
Name string
Data NodeData
Children map[string]*FileNode
Tree *FileTree
Parent *FileNode
Name string
Data NodeData
Children map[string]*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)
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 {
@ -161,7 +161,7 @@ func (node *FileNode) VisitDepthParentFirst(visiter Visiter, evaluator VisitEval
}
// never visit the root node
if node != node.Tree.Root{
if node != node.Tree.Root {
err = visiter(node)
if err != nil {
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 {

View File

@ -32,7 +32,7 @@ func NewCommandView(name string, gui *gocui.Gui) (commandview *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
view.view = v
@ -80,8 +80,7 @@ func (view *CommandView) KeyHelp() string {
func (view *CommandView) Render() error {
view.gui.Update(func(g *gocui.Gui) error {
view.view.Clear()
fmt.Fprintln(view.view, "Filter: ")
fmt.Fprintln(view.view, "")
return nil
})

View File

@ -4,9 +4,6 @@ import (
"errors"
"fmt"
"regexp"
"strings"
"strings"
"github.com/fatih/color"
@ -108,12 +105,6 @@ func (view *FileTreeView) setLayer(layerIndex int) error {
}
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.TreeIndex = 0
view.ModelTree = newTree
@ -197,31 +188,61 @@ func (view *FileTreeView) toggleShowDiffType(diffType filetree.DiffType) error {
}
func filterRegex() *regexp.Regexp {
debugPrint("Entered filterRegex()")
if Views.Command == nil || Views.Command.view == nil {
return nil
}
var filterBytes []byte
read, err := Views.Command.view.Read(filterBytes)
if read > 0 && err == nil {
regex, err := regexp.Compile(string(filterBytes))
if err == nil {
return regex
filterString := strings.TrimSpace(Views.Command.view.Buffer())
if len(filterString) < 1 {
debugPrint(fmt.Sprintf("returing nil from fitlerRegex() because string is too short (%s)", filterString))
return nil
}
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() {
regex := filterRegex()
if regex == nil {
debugPrint("Nil regex in updateViewTree()")
}
// keep the view selection in parity with the current DiffType selection
view.ModelTree.VisitDepthChildFirst(func(node *filetree.FileNode) error {
node.Data.ViewInfo.Hidden = view.HiddenDiffTypes[node.Data.DiffType]
if regex != nil {
match := regex.Find([]byte(node.Path()))
node.Data.ViewInfo.Hidden = match != nil
visibleChild := false
for _, child := range node.Children {
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
}, nil)

View File

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