models

package
v0.52.0 Latest Latest
Warning

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

Go to latest
Published: Jun 5, 2025 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// Conveniently for us, the todo package starts the enum at 1, and given
	// that it doesn't have a "none" value, we're setting ours to 0
	ActionNone todo.TodoCommand = 0
)
View Source
const EmptyTreeCommitHash = "4b825dc642cb6eb9a060e54bf8d69288fbee4904"

Special commit hash for empty tree object

Variables

This section is empty.

Functions

func IsHeadCommit added in v0.38.0

func IsHeadCommit(commits []*Commit, index int) bool

func SetStatusFields added in v0.36.0

func SetStatusFields(file *File, shortStatus string)

Types

type Author added in v0.39.3

type Author struct {
	Name  string
	Email string
}

A commit author

func (*Author) Combined added in v0.39.3

func (self *Author) Combined() string

type Branch

type Branch struct {
	Name string
	// the displayname is something like '(HEAD detached at 123asdf)', whereas in that case the name would be '123asdf'
	DisplayName string
	// indicator of when the branch was last checked out e.g. '2d', '3m'
	Recency string
	// how many commits ahead we are from the remote branch (how many commits we can push, assuming we push to our tracked remote branch)
	AheadForPull string
	// how many commits behind we are from the remote branch (how many commits we can pull)
	BehindForPull string
	// how many commits ahead we are from the branch we're pushing to (which might not be the same as our upstream branch in a triangular workflow)
	AheadForPush string
	// how many commits behind we are from the branch we're pushing to (which might not be the same as our upstream branch in a triangular workflow)
	BehindForPush string
	// whether the remote branch is 'gone' i.e. we're tracking a remote branch that has been deleted
	UpstreamGone bool
	// whether this is the current branch. Exactly one branch should have this be true
	Head         bool
	DetachedHead bool
	// if we have a named remote locally this will be the name of that remote e.g.
	// 'origin' or 'tiwood'. If we don't have the remote locally it'll look like
	// 'git@github.com:tiwood/lazygit.git'
	UpstreamRemote string
	UpstreamBranch string
	// subject line in commit message
	Subject string
	// commit hash
	CommitHash string

	// How far we have fallen behind our base branch. 0 means either not
	// determined yet, or up to date with base branch. (We don't need to
	// distinguish the two, as we don't draw anything in both cases.)
	BehindBaseBranch atomic.Int32
}

Branch : A git branch duplicating this for now

func (*Branch) Description

func (b *Branch) Description() string

func (*Branch) FullRefName added in v0.35.0

func (b *Branch) FullRefName() string

func (*Branch) FullUpstreamRefName added in v0.41.0

func (b *Branch) FullUpstreamRefName() string

func (*Branch) ID

func (b *Branch) ID() string

func (*Branch) IsAheadForPull added in v0.42.0

func (b *Branch) IsAheadForPull() bool

func (*Branch) IsBehindForPull added in v0.42.0

func (b *Branch) IsBehindForPull() bool

func (*Branch) IsBehindForPush added in v0.42.0

func (b *Branch) IsBehindForPush() bool

func (*Branch) IsRealBranch added in v0.30.1

func (b *Branch) IsRealBranch() bool

for when we're in a detached head state

func (*Branch) IsTrackingRemote added in v0.30.1

func (b *Branch) IsTrackingRemote() bool

func (*Branch) MatchesUpstream added in v0.30.1

func (b *Branch) MatchesUpstream() bool

func (*Branch) ParentRefName added in v0.35.0

func (b *Branch) ParentRefName() string

func (*Branch) RefName

func (b *Branch) RefName() string

func (*Branch) RemoteBranchNotStoredLocally added in v0.35.0

func (b *Branch) RemoteBranchNotStoredLocally() bool

func (*Branch) RemoteBranchStoredLocally added in v0.32.2

func (b *Branch) RemoteBranchStoredLocally() bool

we know that the remote branch is not stored locally based on our pushable/pullable count being question marks.

func (*Branch) ShortRefName added in v0.44.0

func (b *Branch) ShortRefName() string

func (*Branch) ShortUpstreamRefName added in v0.41.0

func (b *Branch) ShortUpstreamRefName() string

func (*Branch) URN added in v0.41.0

func (b *Branch) URN() string

type Commit

type Commit struct {
	Name          string
	Tags          []string
	ExtraInfo     string // something like 'HEAD -> master, tag: v0.15.2'
	AuthorName    string // something like 'Jesse Duffield'
	AuthorEmail   string // something like 'jessedduffield@gmail.com'
	UnixTimestamp int64

	Status     CommitStatus
	Action     todo.TodoCommand
	Divergence Divergence // set to DivergenceNone unless we are showing the divergence view
	// contains filtered or unexported fields
}

Commit : A git commit

func NewCommit added in v0.50.0

func NewCommit(hashPool *utils.StringPool, opts NewCommitOpts) *Commit

func (*Commit) Description

func (c *Commit) Description() string

func (*Commit) FullRefName added in v0.35.0

func (c *Commit) FullRefName() string

func (*Commit) Hash added in v0.42.0

func (c *Commit) Hash() string

func (*Commit) HashPtr added in v0.50.0

func (c *Commit) HashPtr() *string

func (*Commit) ID

func (c *Commit) ID() string

func (*Commit) IsFirstCommit added in v0.35.0

func (c *Commit) IsFirstCommit() bool

func (*Commit) IsMerge

func (c *Commit) IsMerge() bool

func (*Commit) IsTODO added in v0.35.0

func (c *Commit) IsTODO() bool

returns true if this commit is not actually in the git log but instead is from a TODO file for an interactive rebase.

func (*Commit) ParentPtrs added in v0.50.0

func (c *Commit) ParentPtrs() []*string

func (*Commit) ParentRefName added in v0.35.0

func (c *Commit) ParentRefName() string

func (*Commit) Parents added in v0.30.1

func (c *Commit) Parents() []string

func (*Commit) RefName

func (c *Commit) RefName() string

func (*Commit) ShortHash added in v0.42.0

func (c *Commit) ShortHash() string

func (*Commit) ShortRefName added in v0.44.0

func (c *Commit) ShortRefName() string

type CommitFile

type CommitFile struct {
	Path string

	ChangeStatus string // e.g. 'A' for added or 'M' for modified. This is based on the result from git diff --name-status
}

CommitFile : A git commit file

func (*CommitFile) Added added in v0.39.0

func (f *CommitFile) Added() bool

func (*CommitFile) Deleted added in v0.39.0

func (f *CommitFile) Deleted() bool

func (*CommitFile) Description

func (f *CommitFile) Description() string

func (*CommitFile) GetPath added in v0.39.0

func (f *CommitFile) GetPath() string

func (*CommitFile) ID

func (f *CommitFile) ID() string

type CommitStatus added in v0.38.0

type CommitStatus uint8
const (
	StatusNone CommitStatus = iota
	StatusUnpushed
	StatusPushed
	StatusMerged
	StatusRebasing
	StatusCherryPickingOrReverting
	StatusConflicted
	StatusReflog
)

type Divergence added in v0.41.0

type Divergence uint8
const (
	DivergenceNone Divergence = iota
	DivergenceLeft
	DivergenceRight
)

For a divergence log (left/right comparison of two refs) this is set to either DivergenceLeft or DivergenceRight for each commit; for normal commit views it is always DivergenceNone.

type EffectiveWorkingTreeState added in v0.50.0

type EffectiveWorkingTreeState int
const (
	// this means we're neither rebasing nor merging, cherry-picking, or reverting
	WORKING_TREE_STATE_NONE EffectiveWorkingTreeState = iota
	WORKING_TREE_STATE_REBASING
	WORKING_TREE_STATE_MERGING
	WORKING_TREE_STATE_CHERRY_PICKING
	WORKING_TREE_STATE_REVERTING
)

type File

type File struct {
	Path                    string
	PreviousPath            string
	HasStagedChanges        bool
	HasUnstagedChanges      bool
	Tracked                 bool
	Added                   bool
	Deleted                 bool
	HasMergeConflicts       bool
	HasInlineMergeConflicts bool
	DisplayString           string
	ShortStatus             string // e.g. 'AD', ' A', 'M ', '??'
	LinesDeleted            int
	LinesAdded              int

	// If true, this must be a worktree folder
	IsWorktree bool
}

File : A file from git status duplicating this for now

func (*File) Description

func (f *File) Description() string

func (*File) GetHasStagedChanges added in v0.27.1

func (f *File) GetHasStagedChanges() bool

func (*File) GetHasUnstagedChanges added in v0.27.1

func (f *File) GetHasUnstagedChanges() bool

func (*File) GetIsFile added in v0.36.0

func (f *File) GetIsFile() bool

func (*File) GetIsTracked added in v0.27.1

func (f *File) GetIsTracked() bool

func (*File) GetMergeStateDescription added in v0.49.0

func (f *File) GetMergeStateDescription(tr *i18n.TranslationSet) string

func (*File) GetPath added in v0.27.1

func (f *File) GetPath() string

func (*File) GetPreviousPath added in v0.35.0

func (f *File) GetPreviousPath() string

func (*File) ID

func (f *File) ID() string

func (*File) IsRename

func (f *File) IsRename() bool

func (*File) IsSubmodule

func (f *File) IsSubmodule(configs []*SubmoduleConfig) bool

func (*File) Matches

func (f *File) Matches(f2 *File) bool

returns true if the file names are the same or if a file rename includes the filename of the other

func (*File) Names

func (f *File) Names() []string

Names returns an array containing just the filename, or in the case of a rename, the after filename and the before filename

func (*File) SubmoduleConfig

func (f *File) SubmoduleConfig(configs []*SubmoduleConfig) *SubmoduleConfig

type IFile added in v0.27.1

type IFile interface {
	GetHasUnstagedChanges() bool
	GetHasStagedChanges() bool
	GetIsTracked() bool
	GetPath() string
	GetPreviousPath() string
	GetIsFile() bool
}

sometimes we need to deal with either a node (which contains a file) or an actual file

type NewCommitOpts added in v0.50.0

type NewCommitOpts struct {
	Hash          string
	Name          string
	Status        CommitStatus
	Action        todo.TodoCommand
	Tags          []string
	ExtraInfo     string
	AuthorName    string
	AuthorEmail   string
	UnixTimestamp int64
	Divergence    Divergence
	Parents       []string
}

type Remote

type Remote struct {
	Name     string
	Urls     []string
	Branches []*RemoteBranch
}

Remote : A git remote

func (*Remote) Description

func (r *Remote) Description() string

func (*Remote) ID

func (r *Remote) ID() string

func (*Remote) RefName

func (r *Remote) RefName() string

func (*Remote) URN added in v0.41.0

func (r *Remote) URN() string

type RemoteBranch

type RemoteBranch struct {
	Name       string
	RemoteName string
}

Remote Branch : A git remote branch

func (*RemoteBranch) Description

func (r *RemoteBranch) Description() string

func (*RemoteBranch) FullName

func (r *RemoteBranch) FullName() string

func (*RemoteBranch) FullRefName added in v0.35.0

func (r *RemoteBranch) FullRefName() string

func (*RemoteBranch) ID

func (r *RemoteBranch) ID() string

func (*RemoteBranch) ParentRefName added in v0.35.0

func (r *RemoteBranch) ParentRefName() string

func (*RemoteBranch) RefName

func (r *RemoteBranch) RefName() string

func (*RemoteBranch) ShortRefName added in v0.44.0

func (r *RemoteBranch) ShortRefName() string

type StashEntry

type StashEntry struct {
	Index   int
	Recency string
	Name    string
}

StashEntry : A git stash entry

func (*StashEntry) Description

func (s *StashEntry) Description() string

func (*StashEntry) FullRefName added in v0.35.0

func (s *StashEntry) FullRefName() string

func (*StashEntry) ID

func (s *StashEntry) ID() string

func (*StashEntry) ParentRefName added in v0.35.0

func (s *StashEntry) ParentRefName() string

func (*StashEntry) RefName

func (s *StashEntry) RefName() string

func (*StashEntry) ShortRefName added in v0.44.0

func (s *StashEntry) ShortRefName() string

type StatusFields added in v0.36.0

type StatusFields struct {
	HasStagedChanges        bool
	HasUnstagedChanges      bool
	Tracked                 bool
	Deleted                 bool
	Added                   bool
	HasMergeConflicts       bool
	HasInlineMergeConflicts bool
	ShortStatus             string
}

type SubmoduleConfig

type SubmoduleConfig struct {
	Name string
	Path string
	Url  string

	ParentModule *SubmoduleConfig // nil if top-level
}

func (*SubmoduleConfig) Description

func (r *SubmoduleConfig) Description() string

func (*SubmoduleConfig) FullName added in v0.41.0

func (r *SubmoduleConfig) FullName() string

func (*SubmoduleConfig) FullPath added in v0.41.0

func (r *SubmoduleConfig) FullPath() string

func (*SubmoduleConfig) GitDirPath added in v0.41.0

func (r *SubmoduleConfig) GitDirPath(repoGitDirPath string) string

func (*SubmoduleConfig) ID

func (r *SubmoduleConfig) ID() string

func (*SubmoduleConfig) RefName

func (r *SubmoduleConfig) RefName() string

type Tag

type Tag struct {
	Name string
	// this is either the first line of the message of an annotated tag, or the
	// first line of a commit message for a lightweight tag
	Message string
}

Tag : A git tag

func (*Tag) Description

func (t *Tag) Description() string

func (*Tag) FullRefName added in v0.35.0

func (t *Tag) FullRefName() string

func (*Tag) ID

func (t *Tag) ID() string

func (*Tag) ParentRefName added in v0.35.0

func (t *Tag) ParentRefName() string

func (*Tag) RefName

func (t *Tag) RefName() string

func (*Tag) ShortRefName added in v0.44.0

func (t *Tag) ShortRefName() string

func (*Tag) URN added in v0.41.0

func (t *Tag) URN() string

type WorkingTreeState added in v0.50.0

type WorkingTreeState struct {
	Rebasing      bool
	Merging       bool
	CherryPicking bool
	Reverting     bool
}

The state of the working tree. Several of these can be true at once. In particular, the concrete multi-state combinations that can occur in practice are Rebasing+CherryPicking, and Rebasing+Reverting. Theoretically, I guess Rebasing+Merging could also happen, but it probably won't in practice.

func (WorkingTreeState) Any added in v0.50.0

func (self WorkingTreeState) Any() bool

func (WorkingTreeState) CanShowTodos added in v0.50.0

func (self WorkingTreeState) CanShowTodos() bool

func (WorkingTreeState) CanSkip added in v0.50.0

func (self WorkingTreeState) CanSkip() bool

func (WorkingTreeState) CommandName added in v0.50.0

func (self WorkingTreeState) CommandName() string

func (WorkingTreeState) Effective added in v0.50.0

Effective returns the "current" state; if several states are true at once, this is the one that should be displayed in status views, and it's the one that the user can continue or abort.

As an example, if you are stopped in an interactive rebase, and then you perform a cherry-pick, and the cherry-pick conflicts, then both WorkingTreeState.Rebasing and WorkingTreeState.CherryPicking are true. The effective state is cherry-picking, because that's the one you can continue or abort. It is not possible to continue the rebase without first aborting the cherry-pick.

func (WorkingTreeState) LowerCaseTitle added in v0.50.0

func (self WorkingTreeState) LowerCaseTitle(tr *i18n.TranslationSet) string

func (WorkingTreeState) None added in v0.50.0

func (self WorkingTreeState) None() bool

func (WorkingTreeState) OptionsMapTitle added in v0.50.0

func (self WorkingTreeState) OptionsMapTitle(tr *i18n.TranslationSet) string

func (WorkingTreeState) OptionsMenuTitle added in v0.50.0

func (self WorkingTreeState) OptionsMenuTitle(tr *i18n.TranslationSet) string

func (WorkingTreeState) Title added in v0.50.0

func (self WorkingTreeState) Title(tr *i18n.TranslationSet) string

type Worktree added in v0.40.0

type Worktree struct {
	// if false, this is a linked worktree
	IsMain bool
	// if true, this is the worktree that is currently checked out
	IsCurrent bool
	// path to the directory of the worktree i.e. the directory that contains all the user's files
	Path string
	// if true, the path is not found
	IsPathMissing bool
	// path of the git directory for this worktree. The equivalent of the .git directory
	// in the main worktree. For linked worktrees this would be <repo_path>/.git/worktrees/<name>
	GitDir string
	// If the worktree has a branch checked out, this field will be set to the branch name.
	// A branch is considered 'checked out' if:
	// * the worktree is directly on the branch
	// * the worktree is mid-rebase on the branch
	// * the worktree is mid-bisect on the branch
	Branch string
	// based on the path, but uniquified. Not the same name that git uses in the worktrees/ folder (no good reason for this,
	// I just prefer my naming convention better)
	Name string
}

A git worktree

func (*Worktree) Description added in v0.40.0

func (w *Worktree) Description() string

func (*Worktree) ID added in v0.40.0

func (w *Worktree) ID() string

func (*Worktree) RefName added in v0.40.0

func (w *Worktree) RefName() string

Jump to

Keyboard shortcuts

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