mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-01-08 04:04:22 +02:00
lazyload commits
This commit is contained in:
parent
d647a96ed5
commit
282f08df36
@ -46,7 +46,7 @@ func NewCommitListBuilder(log *logrus.Entry, gitCommand *GitCommand, osCommand *
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetCommits obtains the commits of the current branch
|
// GetCommits obtains the commits of the current branch
|
||||||
func (c *CommitListBuilder) GetCommits() ([]*Commit, error) {
|
func (c *CommitListBuilder) GetCommits(limit bool) ([]*Commit, error) {
|
||||||
commits := []*Commit{}
|
commits := []*Commit{}
|
||||||
var rebasingCommits []*Commit
|
var rebasingCommits []*Commit
|
||||||
rebaseMode, err := c.GitCommand.RebaseMode()
|
rebaseMode, err := c.GitCommand.RebaseMode()
|
||||||
@ -65,7 +65,7 @@ func (c *CommitListBuilder) GetCommits() ([]*Commit, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
unpushedCommits := c.getUnpushedCommits()
|
unpushedCommits := c.getUnpushedCommits()
|
||||||
log := c.getLog()
|
log := c.getLog(limit)
|
||||||
|
|
||||||
// now we can split it up and turn it into commits
|
// now we can split it up and turn it into commits
|
||||||
for _, line := range utils.SplitLines(log) {
|
for _, line := range utils.SplitLines(log) {
|
||||||
@ -281,12 +281,15 @@ func (c *CommitListBuilder) getUnpushedCommits() map[string]bool {
|
|||||||
return pushables
|
return pushables
|
||||||
}
|
}
|
||||||
|
|
||||||
// getLog gets the git log (currently limited to 30 commits for performance
|
// getLog gets the git log.
|
||||||
// until we work out lazy loading
|
func (c *CommitListBuilder) getLog(limit bool) string {
|
||||||
func (c *CommitListBuilder) getLog() string {
|
limitFlag := ""
|
||||||
// currently limiting to 30 for performance reasons
|
if limit {
|
||||||
// TODO: add lazyloading when you scroll down
|
limitFlag = "-30"
|
||||||
result, err := c.OSCommand.RunCommandWithOutput("git log --oneline -30")
|
}
|
||||||
|
|
||||||
|
c.Log.Warn(fmt.Sprintf("git log --oneline %s", limitFlag))
|
||||||
|
result, err := c.OSCommand.RunCommandWithOutput(fmt.Sprintf("git log --oneline %s", limitFlag))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// assume if there is an error there are no commits yet for this branch
|
// assume if there is an error there are no commits yet for this branch
|
||||||
return ""
|
return ""
|
||||||
|
@ -188,7 +188,7 @@ func TestCommitListBuilderGetLog(t *testing.T) {
|
|||||||
t.Run(s.testName, func(t *testing.T) {
|
t.Run(s.testName, func(t *testing.T) {
|
||||||
c := NewDummyCommitListBuilder()
|
c := NewDummyCommitListBuilder()
|
||||||
c.OSCommand.SetCommand(s.command)
|
c.OSCommand.SetCommand(s.command)
|
||||||
s.test(c.getLog())
|
s.test(c.getLog(true))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -312,7 +312,7 @@ func TestCommitListBuilderGetCommits(t *testing.T) {
|
|||||||
t.Run(s.testName, func(t *testing.T) {
|
t.Run(s.testName, func(t *testing.T) {
|
||||||
c := NewDummyCommitListBuilder()
|
c := NewDummyCommitListBuilder()
|
||||||
c.OSCommand.SetCommand(s.command)
|
c.OSCommand.SetCommand(s.command)
|
||||||
s.test(c.GetCommits())
|
s.test(c.GetCommits(true))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,16 @@ func (gui *Gui) handleCommitSelect(g *gocui.Gui, v *gocui.View) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
state := gui.State.Panels.Commits
|
||||||
|
if state.SelectedLine > 20 && state.LimitCommits {
|
||||||
|
state.LimitCommits = false
|
||||||
|
go func() {
|
||||||
|
if err := gui.refreshCommitsWithLimit(); err != nil {
|
||||||
|
_ = gui.createErrorPanel(gui.g, err.Error())
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
gui.getMainView().Title = "Patch"
|
gui.getMainView().Title = "Patch"
|
||||||
gui.getSecondaryView().Title = "Custom Patch"
|
gui.getSecondaryView().Title = "Custom Patch"
|
||||||
gui.State.Panels.LineByLine = nil
|
gui.State.Panels.LineByLine = nil
|
||||||
@ -64,15 +74,12 @@ func (gui *Gui) handleCommitSelect(g *gocui.Gui, v *gocui.View) error {
|
|||||||
|
|
||||||
func (gui *Gui) refreshCommits(g *gocui.Gui) error {
|
func (gui *Gui) refreshCommits(g *gocui.Gui) error {
|
||||||
g.Update(func(*gocui.Gui) error {
|
g.Update(func(*gocui.Gui) error {
|
||||||
builder, err := commands.NewCommitListBuilder(gui.Log, gui.GitCommand, gui.OSCommand, gui.Tr, gui.State.CherryPickedCommits, gui.State.DiffEntries)
|
// I think this is here for the sake of some kind of rebasing thing
|
||||||
if err != nil {
|
gui.refreshStatus(g)
|
||||||
|
|
||||||
|
if err := gui.refreshCommitsWithLimit(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
commits, err := builder.GetCommits()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
gui.State.Commits = commits
|
|
||||||
|
|
||||||
// doing this async because it shouldn't hold anything up
|
// doing this async because it shouldn't hold anything up
|
||||||
go func() {
|
go func() {
|
||||||
@ -81,12 +88,6 @@ func (gui *Gui) refreshCommits(g *gocui.Gui) error {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
gui.refreshStatus(g)
|
|
||||||
if gui.getCommitsView().Context == "branch-commits" {
|
|
||||||
if err := gui.renderBranchCommitsWithSelection(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if g.CurrentView() == gui.getCommitFilesView() || (g.CurrentView() == gui.getMainView() || gui.State.MainContext == "patch-building") {
|
if g.CurrentView() == gui.getCommitFilesView() || (g.CurrentView() == gui.getMainView() || gui.State.MainContext == "patch-building") {
|
||||||
return gui.refreshCommitFilesView()
|
return gui.refreshCommitFilesView()
|
||||||
}
|
}
|
||||||
@ -95,6 +96,27 @@ func (gui *Gui) refreshCommits(g *gocui.Gui) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (gui *Gui) refreshCommitsWithLimit() error {
|
||||||
|
builder, err := commands.NewCommitListBuilder(gui.Log, gui.GitCommand, gui.OSCommand, gui.Tr, gui.State.CherryPickedCommits, gui.State.DiffEntries)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
commits, err := builder.GetCommits(gui.State.Panels.Commits.LimitCommits)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
gui.State.Commits = commits
|
||||||
|
|
||||||
|
if gui.getCommitsView().Context == "branch-commits" {
|
||||||
|
if err := gui.renderBranchCommitsWithSelection(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// specific functions
|
// specific functions
|
||||||
|
|
||||||
func (gui *Gui) handleResetToCommit(g *gocui.Gui, commitView *gocui.View) error {
|
func (gui *Gui) handleResetToCommit(g *gocui.Gui, commitView *gocui.View) error {
|
||||||
|
@ -128,6 +128,7 @@ type tagsPanelState struct {
|
|||||||
type commitPanelState struct {
|
type commitPanelState struct {
|
||||||
SelectedLine int
|
SelectedLine int
|
||||||
SpecificDiffMode bool
|
SpecificDiffMode bool
|
||||||
|
LimitCommits bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type reflogCommitPanelState struct {
|
type reflogCommitPanelState struct {
|
||||||
@ -212,7 +213,7 @@ func NewGui(log *logrus.Entry, gitCommand *commands.GitCommand, oSCommand *comma
|
|||||||
Remotes: &remotePanelState{SelectedLine: 0},
|
Remotes: &remotePanelState{SelectedLine: 0},
|
||||||
RemoteBranches: &remoteBranchesState{SelectedLine: -1},
|
RemoteBranches: &remoteBranchesState{SelectedLine: -1},
|
||||||
Tags: &tagsPanelState{SelectedLine: -1},
|
Tags: &tagsPanelState{SelectedLine: -1},
|
||||||
Commits: &commitPanelState{SelectedLine: -1},
|
Commits: &commitPanelState{SelectedLine: -1, LimitCommits: true},
|
||||||
ReflogCommits: &reflogCommitPanelState{SelectedLine: 0}, // TODO: might need to make -1
|
ReflogCommits: &reflogCommitPanelState{SelectedLine: 0}, // TODO: might need to make -1
|
||||||
CommitFiles: &commitFilesPanelState{SelectedLine: -1},
|
CommitFiles: &commitFilesPanelState{SelectedLine: -1},
|
||||||
Stash: &stashPanelState{SelectedLine: -1},
|
Stash: &stashPanelState{SelectedLine: -1},
|
||||||
|
Loading…
Reference in New Issue
Block a user