File: file_node.go

package info (click to toggle)
lazygit 0.57.0%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,748 kB
  • sloc: sh: 153; makefile: 76
file content (73 lines) | stat: -rw-r--r-- 1,648 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package filetree

import (
	"github.com/jesseduffield/lazygit/pkg/commands/models"
	"github.com/jesseduffield/lazygit/pkg/gui/mergeconflicts"
)

// FileNode wraps a node and provides some file-specific methods for it.
type FileNode struct {
	*Node[models.File]
}

var _ models.IFile = &FileNode{}

func NewFileNode(node *Node[models.File]) *FileNode {
	if node == nil {
		return nil
	}

	return &FileNode{Node: node}
}

// returns the underlying node, without any file-specific methods attached
func (self *FileNode) Raw() *Node[models.File] {
	if self == nil {
		return nil
	}

	return self.Node
}

func (self *FileNode) GetHasUnstagedChanges() bool {
	return self.SomeFile(func(file *models.File) bool { return file.HasUnstagedChanges })
}

func (self *FileNode) GetHasStagedOrTrackedChanges() bool {
	if !self.GetHasStagedChanges() {
		return self.SomeFile(func(t *models.File) bool {
			return t.Tracked
		})
	}
	return true
}

func (self *FileNode) GetHasStagedChanges() bool {
	return self.SomeFile(func(file *models.File) bool { return file.HasStagedChanges })
}

func (self *FileNode) GetHasInlineMergeConflicts() bool {
	return self.SomeFile(func(file *models.File) bool {
		if !file.HasInlineMergeConflicts {
			return false
		}
		hasConflicts, _ := mergeconflicts.FileHasConflictMarkers(file.Path)
		return hasConflicts
	})
}

func (self *FileNode) GetIsTracked() bool {
	return self.SomeFile(func(file *models.File) bool { return file.Tracked })
}

func (self *FileNode) GetIsFile() bool {
	return self.IsFile()
}

func (self *FileNode) GetPreviousPath() string {
	if self.File == nil {
		return ""
	}

	return self.File.PreviousPath
}