github.com/andrewrech/lazygit@v0.8.1/pkg/gui/commit_files_panel.go (about)

     1  package gui
     2  
     3  import (
     4  	"github.com/jesseduffield/gocui"
     5  	"github.com/jesseduffield/lazygit/pkg/commands"
     6  )
     7  
     8  func (gui *Gui) getSelectedCommitFile(g *gocui.Gui) *commands.CommitFile {
     9  	selectedLine := gui.State.Panels.CommitFiles.SelectedLine
    10  	if selectedLine == -1 {
    11  		return nil
    12  	}
    13  
    14  	return gui.State.CommitFiles[selectedLine]
    15  }
    16  
    17  func (gui *Gui) handleCommitFileSelect(g *gocui.Gui, v *gocui.View) error {
    18  	commitFile := gui.getSelectedCommitFile(g)
    19  	if commitFile == nil {
    20  		return gui.renderString(g, "commitFiles", gui.Tr.SLocalize("NoCommiteFiles"))
    21  	}
    22  
    23  	if err := gui.focusPoint(0, gui.State.Panels.CommitFiles.SelectedLine, len(gui.State.CommitFiles), v); err != nil {
    24  		return err
    25  	}
    26  	commitText, err := gui.GitCommand.ShowCommitFile(commitFile.Sha, commitFile.Name)
    27  	if err != nil {
    28  		return err
    29  	}
    30  	return gui.renderString(g, "main", commitText)
    31  }
    32  
    33  func (gui *Gui) handleCommitFilesNextLine(g *gocui.Gui, v *gocui.View) error {
    34  	panelState := gui.State.Panels.CommitFiles
    35  	gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.CommitFiles), false)
    36  
    37  	return gui.handleCommitFileSelect(gui.g, v)
    38  }
    39  
    40  func (gui *Gui) handleCommitFilesPrevLine(g *gocui.Gui, v *gocui.View) error {
    41  	panelState := gui.State.Panels.CommitFiles
    42  	gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.CommitFiles), true)
    43  
    44  	return gui.handleCommitFileSelect(gui.g, v)
    45  }
    46  
    47  func (gui *Gui) handleSwitchToCommitsPanel(g *gocui.Gui, v *gocui.View) error {
    48  	commitsView, err := g.View("commits")
    49  	if err != nil {
    50  		return err
    51  	}
    52  	return gui.switchFocus(g, v, commitsView)
    53  }
    54  
    55  func (gui *Gui) handleCheckoutCommitFile(g *gocui.Gui, v *gocui.View) error {
    56  	file := gui.State.CommitFiles[gui.State.Panels.CommitFiles.SelectedLine]
    57  
    58  	if err := gui.GitCommand.CheckoutFile(file.Sha, file.Name); err != nil {
    59  		return gui.createErrorPanel(gui.g, err.Error())
    60  	}
    61  
    62  	return gui.refreshFiles()
    63  }
    64  
    65  func (gui *Gui) handleDiscardOldFileChange(g *gocui.Gui, v *gocui.View) error {
    66  	fileName := gui.State.CommitFiles[gui.State.Panels.CommitFiles.SelectedLine].Name
    67  
    68  	return gui.createConfirmationPanel(gui.g, v, gui.Tr.SLocalize("DiscardFileChangesTitle"), gui.Tr.SLocalize("DiscardFileChangesPrompt"), func(g *gocui.Gui, v *gocui.View) error {
    69  		return gui.WithWaitingStatus(gui.Tr.SLocalize("RebasingStatus"), func() error {
    70  			if err := gui.GitCommand.DiscardOldFileChanges(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, fileName); err != nil {
    71  				if err := gui.handleGenericMergeCommandResult(err); err != nil {
    72  					return err
    73  				}
    74  			}
    75  
    76  			return gui.refreshSidePanels(gui.g)
    77  		})
    78  	}, nil)
    79  }
    80  
    81  func (gui *Gui) refreshCommitFilesView() error {
    82  	commit := gui.getSelectedCommit(gui.g)
    83  	if commit == nil {
    84  		return nil
    85  	}
    86  
    87  	files, err := gui.GitCommand.GetCommitFiles(commit.Sha)
    88  	if err != nil {
    89  		return gui.createErrorPanel(gui.g, err.Error())
    90  	}
    91  
    92  	gui.State.CommitFiles = files
    93  
    94  	gui.refreshSelectedLine(&gui.State.Panels.CommitFiles.SelectedLine, len(gui.State.CommitFiles))
    95  
    96  	if err := gui.renderListPanel(gui.getCommitFilesView(), gui.State.CommitFiles); err != nil {
    97  		return err
    98  	}
    99  
   100  	return gui.handleCommitFileSelect(gui.g, gui.getCommitFilesView())
   101  }
   102  
   103  func (gui *Gui) handleOpenOldCommitFile(g *gocui.Gui, v *gocui.View) error {
   104  	file := gui.getSelectedCommitFile(g)
   105  	return gui.openFile(file.Name)
   106  }