1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-06-15 00:15:32 +02:00

progress on refactor

This commit is contained in:
Jesse Duffield
2018-08-13 20:26:02 +10:00
parent f9c39ad64b
commit 97cff65612
23 changed files with 1104 additions and 1086 deletions

View File

@ -38,13 +38,6 @@ func (c *GitCommand) SetupGit() {
c.setupWorktree()
}
// GitIgnore adds a file to the .gitignore of the repo
func (c *GitCommand) GitIgnore(filename string) {
if _, err := c.OSCommand.RunDirectCommand("echo '" + filename + "' >> .gitignore"); err != nil {
panic(err)
}
}
// GetStashEntries stash entryies
func (c *GitCommand) GetStashEntries() []StashEntry {
stashEntries := make([]StashEntry, 0)
@ -78,10 +71,10 @@ func includes(array []string, str string) bool {
}
// GetStatusFiles git status files
func (c *GitCommand) GetStatusFiles() []GitFile {
func (c *GitCommand) GetStatusFiles() []File {
statusOutput, _ := c.GitStatus()
statusStrings := utils.SplitLines(statusOutput)
gitFiles := make([]GitFile, 0)
files := make([]File, 0)
for _, statusString := range statusStrings {
change := statusString[0:2]
@ -89,7 +82,7 @@ func (c *GitCommand) GetStatusFiles() []GitFile {
unstagedChange := statusString[1:2]
filename := statusString[3:]
tracked := !includes([]string{"??", "A "}, change)
gitFile := GitFile{
file := File{
Name: filename,
DisplayString: statusString,
HasStagedChanges: !includes([]string{" ", "U", "?"}, stagedChange),
@ -98,10 +91,10 @@ func (c *GitCommand) GetStatusFiles() []GitFile {
Deleted: unstagedChange == "D" || stagedChange == "D",
HasMergeConflicts: change == "UU",
}
gitFiles = append(gitFiles, gitFile)
files = append(files, file)
}
c.Log.Info(gitFiles) // TODO: use a dumper-esque log here
return gitFiles
c.Log.Info(files) // TODO: use a dumper-esque log here
return files
}
// StashDo modify stash
@ -124,19 +117,19 @@ func (c *GitCommand) StashSave(message string) (string, error) {
}
// MergeStatusFiles merge status files
func (c *GitCommand) MergeStatusFiles(oldGitFiles, newGitFiles []GitFile) []GitFile {
if len(oldGitFiles) == 0 {
return newGitFiles
func (c *GitCommand) MergeStatusFiles(oldFiles, newFiles []File) []File {
if len(oldFiles) == 0 {
return newFiles
}
appendedIndexes := make([]int, 0)
// retain position of files we already could see
result := make([]GitFile, 0)
for _, oldGitFile := range oldGitFiles {
for newIndex, newGitFile := range newGitFiles {
if oldGitFile.Name == newGitFile.Name {
result = append(result, newGitFile)
result := make([]File, 0)
for _, oldFile := range oldFiles {
for newIndex, newFile := range newFiles {
if oldFile.Name == newFile.Name {
result = append(result, newFile)
appendedIndexes = append(appendedIndexes, newIndex)
break
}
@ -144,9 +137,9 @@ func (c *GitCommand) MergeStatusFiles(oldGitFiles, newGitFiles []GitFile) []GitF
}
// append any new files to the end
for index, newGitFile := range newGitFiles {
for index, newFile := range newFiles {
if !includesInt(appendedIndexes, index) {
result = append(result, newGitFile)
result = append(result, newFile)
}
}
@ -217,17 +210,6 @@ func (c *GitCommand) GetCommitsToPush() []string {
return utils.SplitLines(pushables)
}
// BranchIncluded states whether a branch is included in a list of branches,
// with a case insensitive comparison on name
func (c *GitCommand) BranchIncluded(branchName string, branches []Branch) bool {
for _, existingBranch := range branches {
if strings.ToLower(existingBranch.Name) == strings.ToLower(branchName) {
return true
}
}
return false
}
// RenameCommit renames the topmost commit with the given name
func (c *GitCommand) RenameCommit(name string) (string, error) {
return c.OSCommand.RunDirectCommand("git commit --allow-empty --amend -m \"" + name + "\"")
@ -268,25 +250,26 @@ func (c *GitCommand) AbortMerge() (string, error) {
return c.OSCommand.RunDirectCommand("git merge --abort")
}
// GitCommit commit to git
func (c *GitCommand) GitCommit(g *gocui.Gui, message string) (string, error) {
// Commit commit to git
func (c *GitCommand) Commit(g *gocui.Gui, message string) (*exec.Cmd, error) {
command := "git commit -m \"" + message + "\""
gpgsign, _ := gitconfig.Global("commit.gpgsign")
if gpgsign != "" {
sub, err := c.OSCommand.RunSubProcess("git", "commit")
return "", nil
return c.OSCommand.PrepareSubProcess("git", "commit")
}
return c.OSCommand.RunDirectCommand(command)
// TODO: make these runDirectCommand functions just return an error
_, err := c.OSCommand.RunDirectCommand(command)
return nil, err
}
// GitPull pull from repo
func (c *GitCommand) GitPull() (string, error) {
// Pull pull from repo
func (c *GitCommand) Pull() (string, error) {
return c.OSCommand.RunCommand("git pull --no-edit")
}
// GitPush push to a branch
func (c *GitCommand) GitPush() (string, error) {
return c.OSCommand.RunDirectCommand("git push -u origin " + state.Branches[0].Name)
// Push push to a branch
func (c *GitCommand) Push(branchName string) (string, error) {
return c.OSCommand.RunDirectCommand("git push -u origin " + branchName)
}
// SquashPreviousTwoCommits squashes a commit down to the one below it
@ -364,7 +347,7 @@ func (c *GitCommand) IsInMergeState() (bool, error) {
}
// RemoveFile directly
func (c *GitCommand) RemoveFile(file GitFile) error {
func (c *GitCommand) RemoveFile(file File) error {
// if the file isn't tracked, we assume you want to delete it
if !file.Tracked {
_, err := c.OSCommand.RunCommand("rm -rf ./" + file.Name)
@ -384,10 +367,15 @@ func (c *GitCommand) Checkout(branch string, force bool) (string, error) {
return c.OSCommand.RunCommand("git checkout " + forceArg + branch)
}
// AddPatch runs a subprocess for adding a patch by patch
// AddPatch prepares a subprocess for adding a patch by patch
// this will eventually be swapped out for a better solution inside the Gui
func (c *GitCommand) AddPatch(g *gocui.Gui, filename string) (*exec.Cmd, error) {
return c.OSCommand.RunSubProcess("git", "add", "--patch", filename)
func (c *GitCommand) AddPatch(filename string) (*exec.Cmd, error) {
return c.OSCommand.PrepareSubProcess("git", "add", "--patch", filename)
}
// PrepareCommitSubProcess prepares a subprocess for `git commit`
func (c *GitCommand) PrepareCommitSubProcess() (*exec.Cmd, error) {
return c.OSCommand.PrepareSubProcess("git", "commit")
}
// GetBranchGraph gets the color-formatted graph of the log for the given branch
@ -428,11 +416,11 @@ func includesInt(list []int, a int) bool {
// GetCommits obtains the commits of the current branch
func (c *GitCommand) GetCommits() []Commit {
pushables := gogit.GetCommitsToPush()
log := getLog()
pushables := c.GetCommitsToPush()
log := c.GetLog()
commits := make([]Commit, 0)
// now we can split it up and turn it into commits
lines := utils.RplitLines(log)
lines := utils.SplitLines(log)
for _, line := range lines {
splitLine := strings.Split(line, " ")
sha := splitLine[0]
@ -477,7 +465,7 @@ func (c *GitCommand) Show(sha string) string {
}
// Diff returns the diff of a file
func (c *GitCommand) Diff(file GitFile) string {
func (c *GitCommand) Diff(file File) string {
cachedArg := ""
if file.HasStagedChanges && !file.HasUnstagedChanges {
cachedArg = "--cached "