filetree

package
v0.35.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 18, 2022 License: MIT Imports: 11 Imported by: 0

README

FileTree Package

This package handles the representation of file trees. There are two ways to render files: one is to render them flat, so something like this:

dir1/file1
dir1/file2
file3

And the other is to render them as a tree

dir1/
  file1
  file2
file3

Internally we represent each of the above as a tree, but with the flat approach there's just a single root node and every path is a direct child of that root. Viewing in 'tree' mode (as opposed to 'flat' mode) allows for collapsing and expanding directories, and lets you perform actions on directories e.g. staging a whole directory. But it takes up more vertical space and sometimes you just want to have a flat view where you can go flick through your files one by one to see the diff.

This package is not concerned about rendering the tree: only representing its internal state.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CollapsedPaths

type CollapsedPaths struct {
	// contains filtered or unexported fields
}

func NewCollapsedPaths added in v0.35.0

func NewCollapsedPaths() *CollapsedPaths

func (*CollapsedPaths) Collapse added in v0.35.0

func (self *CollapsedPaths) Collapse(path string)

func (*CollapsedPaths) ExpandToPath

func (self *CollapsedPaths) ExpandToPath(path string)

func (*CollapsedPaths) IsCollapsed

func (self *CollapsedPaths) IsCollapsed(path string) bool

func (*CollapsedPaths) ToggleCollapsed

func (self *CollapsedPaths) ToggleCollapsed(path string)

type CommitFileNode

type CommitFileNode struct {
	Children         []*CommitFileNode
	File             *models.CommitFile
	Path             string // e.g. '/path/to/mydir'
	CompressionLevel int    // equal to the number of forward slashes you'll see in the path when it's rendered in tree mode
}

func BuildFlatTreeFromCommitFiles

func BuildFlatTreeFromCommitFiles(files []*models.CommitFile) *CommitFileNode

func BuildTreeFromCommitFiles

func BuildTreeFromCommitFiles(files []*models.CommitFile) *CommitFileNode

func (*CommitFileNode) Any

func (s *CommitFileNode) Any(test func(node *CommitFileNode) bool) bool

func (*CommitFileNode) AnyFile

func (s *CommitFileNode) AnyFile(test func(file *models.CommitFile) bool) bool

func (*CommitFileNode) Compress

func (s *CommitFileNode) Compress()

func (*CommitFileNode) Description

func (s *CommitFileNode) Description() string

func (*CommitFileNode) Every

func (s *CommitFileNode) Every(test func(node *CommitFileNode) bool) bool

func (*CommitFileNode) EveryFile

func (s *CommitFileNode) EveryFile(test func(file *models.CommitFile) bool) bool

func (*CommitFileNode) Flatten

func (n *CommitFileNode) Flatten(collapsedPaths *CollapsedPaths) []*CommitFileNode

func (*CommitFileNode) ForEachFile

func (s *CommitFileNode) ForEachFile(cb func(*models.CommitFile) error) error

func (*CommitFileNode) GetChildren

func (s *CommitFileNode) GetChildren() []INode

func (*CommitFileNode) GetCompressionLevel

func (s *CommitFileNode) GetCompressionLevel() int

func (*CommitFileNode) GetIndexForPath

func (node *CommitFileNode) GetIndexForPath(path string, collapsedPaths *CollapsedPaths) (int, bool)

func (*CommitFileNode) GetLeaves

func (s *CommitFileNode) GetLeaves() []*CommitFileNode

func (*CommitFileNode) GetNodeAtIndex

func (node *CommitFileNode) GetNodeAtIndex(index int, collapsedPaths *CollapsedPaths) *CommitFileNode

func (*CommitFileNode) GetPath

func (s *CommitFileNode) GetPath() string

func (*CommitFileNode) ID

func (s *CommitFileNode) ID() string

func (*CommitFileNode) IsLeaf

func (s *CommitFileNode) IsLeaf() bool

func (*CommitFileNode) IsNil added in v0.35.0

func (s *CommitFileNode) IsNil() bool

func (*CommitFileNode) NameAtDepth

func (s *CommitFileNode) NameAtDepth(depth int) string

func (*CommitFileNode) SetChildren

func (s *CommitFileNode) SetChildren(children []INode)

func (*CommitFileNode) SetCompressionLevel

func (s *CommitFileNode) SetCompressionLevel(level int)

func (*CommitFileNode) Size

func (node *CommitFileNode) Size(collapsedPaths *CollapsedPaths) int

func (*CommitFileNode) Sort

func (s *CommitFileNode) Sort()

type CommitFileTree added in v0.35.0

type CommitFileTree struct {
	// contains filtered or unexported fields
}

func NewCommitFileTree added in v0.35.0

func NewCommitFileTree(getFiles func() []*models.CommitFile, log *logrus.Entry, showTree bool) *CommitFileTree

func (*CommitFileTree) CollapsedPaths added in v0.35.0

func (self *CommitFileTree) CollapsedPaths() *CollapsedPaths

func (*CommitFileTree) ExpandToPath added in v0.35.0

func (self *CommitFileTree) ExpandToPath(path string)

func (*CommitFileTree) Get added in v0.35.0

func (self *CommitFileTree) Get(index int) *CommitFileNode

func (*CommitFileTree) GetAllFiles added in v0.35.0

func (self *CommitFileTree) GetAllFiles() []*models.CommitFile

func (*CommitFileTree) GetAllItems added in v0.35.0

func (self *CommitFileTree) GetAllItems() []*CommitFileNode

func (*CommitFileTree) GetFile added in v0.35.0

func (self *CommitFileTree) GetFile(path string) *models.CommitFile

func (*CommitFileTree) GetIndexForPath added in v0.35.0

func (self *CommitFileTree) GetIndexForPath(path string) (int, bool)

func (*CommitFileTree) InTreeMode added in v0.35.0

func (self *CommitFileTree) InTreeMode() bool

func (*CommitFileTree) IsCollapsed added in v0.35.0

func (self *CommitFileTree) IsCollapsed(path string) bool

func (*CommitFileTree) Len added in v0.35.0

func (self *CommitFileTree) Len() int

func (*CommitFileTree) SetTree added in v0.35.0

func (self *CommitFileTree) SetTree()

func (*CommitFileTree) ToggleCollapsed added in v0.35.0

func (self *CommitFileTree) ToggleCollapsed(path string)

func (*CommitFileTree) ToggleShowTree added in v0.35.0

func (self *CommitFileTree) ToggleShowTree()

func (*CommitFileTree) Tree added in v0.35.0

func (self *CommitFileTree) Tree() INode

type CommitFileTreeViewModel added in v0.35.0

type CommitFileTreeViewModel struct {
	sync.RWMutex
	ICommitFileTree
	types.IListCursor
	// contains filtered or unexported fields
}

func NewCommitFileTreeViewModel added in v0.35.0

func NewCommitFileTreeViewModel(getFiles func() []*models.CommitFile, log *logrus.Entry, showTree bool) *CommitFileTreeViewModel

func (*CommitFileTreeViewModel) GetCanRebase added in v0.35.0

func (self *CommitFileTreeViewModel) GetCanRebase() bool

func (*CommitFileTreeViewModel) GetRef added in v0.35.0

func (self *CommitFileTreeViewModel) GetRef() types.Ref

func (*CommitFileTreeViewModel) GetSelected added in v0.35.0

func (self *CommitFileTreeViewModel) GetSelected() *CommitFileNode

func (*CommitFileTreeViewModel) GetSelectedFile added in v0.35.0

func (self *CommitFileTreeViewModel) GetSelectedFile() *models.CommitFile

func (*CommitFileTreeViewModel) GetSelectedPath added in v0.35.0

func (self *CommitFileTreeViewModel) GetSelectedPath() string

func (*CommitFileTreeViewModel) SetCanRebase added in v0.35.0

func (self *CommitFileTreeViewModel) SetCanRebase(canRebase bool)

func (*CommitFileTreeViewModel) SetRef added in v0.35.0

func (self *CommitFileTreeViewModel) SetRef(ref types.Ref)

func (*CommitFileTreeViewModel) ToggleShowTree added in v0.35.0

func (self *CommitFileTreeViewModel) ToggleShowTree()

duplicated from file_tree_view_model.go. Generics will help here

type FileNode

type FileNode struct {
	Children         []*FileNode
	File             *models.File
	Path             string // e.g. '/path/to/mydir'
	CompressionLevel int    // equal to the number of forward slashes you'll see in the path when it's rendered in tree mode
}

func BuildFlatTreeFromFiles

func BuildFlatTreeFromFiles(files []*models.File) *FileNode

func BuildTreeFromFiles

func BuildTreeFromFiles(files []*models.File) *FileNode

func (*FileNode) Any

func (s *FileNode) Any(test func(node *FileNode) bool) bool

func (*FileNode) AnyFile

func (s *FileNode) AnyFile(test func(file *models.File) bool) bool

func (*FileNode) Compress

func (s *FileNode) Compress()

func (*FileNode) Description

func (s *FileNode) Description() string

func (*FileNode) Flatten

func (n *FileNode) Flatten(collapsedPaths *CollapsedPaths) []*FileNode

func (*FileNode) ForEachFile

func (s *FileNode) ForEachFile(cb func(*models.File) error) error

func (*FileNode) GetChildren

func (s *FileNode) GetChildren() []INode

func (*FileNode) GetCompressionLevel

func (s *FileNode) GetCompressionLevel() int

func (*FileNode) GetFilePathsMatching added in v0.35.0

func (node *FileNode) GetFilePathsMatching(test func(*models.File) bool) []string

func (*FileNode) GetHasInlineMergeConflicts

func (s *FileNode) GetHasInlineMergeConflicts() bool

func (*FileNode) GetHasStagedChanges

func (s *FileNode) GetHasStagedChanges() bool

func (*FileNode) GetHasUnstagedChanges

func (s *FileNode) GetHasUnstagedChanges() bool

func (*FileNode) GetIndexForPath

func (node *FileNode) GetIndexForPath(path string, collapsedPaths *CollapsedPaths) (int, bool)

func (*FileNode) GetIsTracked

func (s *FileNode) GetIsTracked() bool

func (*FileNode) GetLeaves

func (s *FileNode) GetLeaves() []*FileNode

func (*FileNode) GetNodeAtIndex

func (node *FileNode) GetNodeAtIndex(index int, collapsedPaths *CollapsedPaths) *FileNode

func (*FileNode) GetPath

func (s *FileNode) GetPath() string

func (*FileNode) GetPreviousPath added in v0.35.0

func (s *FileNode) GetPreviousPath() string

func (*FileNode) ID

func (s *FileNode) ID() string

func (*FileNode) IsLeaf

func (s *FileNode) IsLeaf() bool

func (*FileNode) IsNil added in v0.35.0

func (s *FileNode) IsNil() bool

interfaces values whose concrete value is nil are not themselves nil hence the existence of this method

func (*FileNode) NameAtDepth

func (s *FileNode) NameAtDepth(depth int) string

func (*FileNode) SetChildren

func (s *FileNode) SetChildren(children []INode)

func (*FileNode) SetCompressionLevel

func (s *FileNode) SetCompressionLevel(level int)

func (*FileNode) Size

func (node *FileNode) Size(collapsedPaths *CollapsedPaths) int

func (*FileNode) Sort

func (s *FileNode) Sort()

type FileTree added in v0.35.0

type FileTree struct {
	// contains filtered or unexported fields
}

func NewFileTree added in v0.35.0

func NewFileTree(getFiles func() []*models.File, log *logrus.Entry, showTree bool) *FileTree

func (*FileTree) CollapsedPaths added in v0.35.0

func (self *FileTree) CollapsedPaths() *CollapsedPaths

func (*FileTree) ExpandToPath added in v0.35.0

func (self *FileTree) ExpandToPath(path string)

func (*FileTree) FilterFiles added in v0.35.0

func (self *FileTree) FilterFiles(test func(*models.File) bool) []*models.File

func (*FileTree) Get added in v0.35.0

func (self *FileTree) Get(index int) *FileNode

func (*FileTree) GetAllFiles added in v0.35.0

func (self *FileTree) GetAllFiles() []*models.File

func (*FileTree) GetAllItems added in v0.35.0

func (self *FileTree) GetAllItems() []*FileNode

note: this gets all items when the filter is taken into consideration. There may be hidden files that aren't included here. Files off the screen however will be included

func (*FileTree) GetFile added in v0.35.0

func (self *FileTree) GetFile(path string) *models.File

func (*FileTree) GetFilter added in v0.35.0

func (self *FileTree) GetFilter() FileTreeDisplayFilter

func (*FileTree) GetIndexForPath added in v0.35.0

func (self *FileTree) GetIndexForPath(path string) (int, bool)

func (*FileTree) InTreeMode added in v0.35.0

func (self *FileTree) InTreeMode() bool

func (*FileTree) IsCollapsed added in v0.35.0

func (self *FileTree) IsCollapsed(path string) bool

func (*FileTree) Len added in v0.35.0

func (self *FileTree) Len() int

func (*FileTree) SetFilter added in v0.35.0

func (self *FileTree) SetFilter(filter FileTreeDisplayFilter)

func (*FileTree) SetTree added in v0.35.0

func (self *FileTree) SetTree()

func (*FileTree) ToggleCollapsed added in v0.35.0

func (self *FileTree) ToggleCollapsed(path string)

func (*FileTree) ToggleShowTree added in v0.35.0

func (self *FileTree) ToggleShowTree()

func (*FileTree) Tree added in v0.35.0

func (self *FileTree) Tree() INode

type FileTreeDisplayFilter added in v0.35.0

type FileTreeDisplayFilter int
const (
	DisplayAll FileTreeDisplayFilter = iota
	DisplayStaged
	DisplayUnstaged
	// this shows files with merge conflicts
	DisplayConflicted
)

type FileTreeViewModel added in v0.35.0

type FileTreeViewModel struct {
	sync.RWMutex
	IFileTree
	types.IListCursor
}

This combines our FileTree struct with a cursor that retains information about which item is selected. It also contains logic for repositioning that cursor after the files are refreshed

func NewFileTreeViewModel added in v0.35.0

func NewFileTreeViewModel(getFiles func() []*models.File, log *logrus.Entry, showTree bool) *FileTreeViewModel

func (*FileTreeViewModel) GetSelected added in v0.35.0

func (self *FileTreeViewModel) GetSelected() *FileNode

func (*FileTreeViewModel) GetSelectedFile added in v0.35.0

func (self *FileTreeViewModel) GetSelectedFile() *models.File

func (*FileTreeViewModel) GetSelectedPath added in v0.35.0

func (self *FileTreeViewModel) GetSelectedPath() string

func (*FileTreeViewModel) SetFilter added in v0.35.0

func (self *FileTreeViewModel) SetFilter(filter FileTreeDisplayFilter)

func (*FileTreeViewModel) SetTree added in v0.35.0

func (self *FileTreeViewModel) SetTree()

func (*FileTreeViewModel) ToggleShowTree added in v0.35.0

func (self *FileTreeViewModel) ToggleShowTree()

If we're going from flat to tree we want to select the same file. If we're going from tree to flat and we have a file selected we want to select that. If instead we've selected a directory we need to select the first file in that directory.

type ICommitFileTree added in v0.35.0

type ICommitFileTree interface {
	ITree

	Get(index int) *CommitFileNode
	GetFile(path string) *models.CommitFile
	GetAllItems() []*CommitFileNode
	GetAllFiles() []*models.CommitFile
}

type ICommitFileTreeViewModel added in v0.35.0

type ICommitFileTreeViewModel interface {
	ICommitFileTree
	types.IListCursor

	GetRef() types.Ref
	SetRef(types.Ref)
	GetCanRebase() bool
	SetCanRebase(bool)
}

type IFileTree added in v0.35.0

type IFileTree interface {
	ITree

	FilterFiles(test func(*models.File) bool) []*models.File
	SetFilter(filter FileTreeDisplayFilter)
	Get(index int) *FileNode
	GetFile(path string) *models.File
	GetAllItems() []*FileNode
	GetAllFiles() []*models.File
	GetFilter() FileTreeDisplayFilter
}

type IFileTreeViewModel added in v0.35.0

type IFileTreeViewModel interface {
	IFileTree
	types.IListCursor
}

type INode

type INode interface {
	IsNil() bool
	IsLeaf() bool
	GetPath() string
	GetChildren() []INode
	SetChildren([]INode)
	GetCompressionLevel() int
	SetCompressionLevel(int)
}

type ITree added in v0.35.0

type ITree interface {
	InTreeMode() bool
	ExpandToPath(path string)
	ToggleShowTree()
	GetIndexForPath(path string) (int, bool)
	Len() int
	SetTree()
	IsCollapsed(path string) bool
	ToggleCollapsed(path string)
	Tree() INode
	CollapsedPaths() *CollapsedPaths
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL