mirror of
https://github.com/jesseduffield/lazygit.git
synced 2024-11-24 08:52:21 +02:00
92 lines
2.3 KiB
Go
92 lines
2.3 KiB
Go
package commands
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
)
|
|
|
|
// Push pushes to a branch
|
|
func (c *GitCommand) Push(branchName string, force bool, upstream string, args string, promptUserForCredential func(string) string) error {
|
|
followTagsFlag := "--follow-tags"
|
|
if c.GetConfigValue("push.followTags") == "false" {
|
|
followTagsFlag = ""
|
|
}
|
|
|
|
forceFlag := ""
|
|
if force {
|
|
forceFlag = "--force-with-lease"
|
|
}
|
|
|
|
setUpstreamArg := ""
|
|
if upstream != "" {
|
|
setUpstreamArg = "--set-upstream " + c.OSCommand.Quote(upstream)
|
|
}
|
|
|
|
cmd := fmt.Sprintf("git push %s %s %s %s", followTagsFlag, forceFlag, setUpstreamArg, args)
|
|
return c.OSCommand.DetectUnamePass(cmd, promptUserForCredential)
|
|
}
|
|
|
|
type FetchOptions struct {
|
|
PromptUserForCredential func(string) string
|
|
RemoteName string
|
|
BranchName string
|
|
}
|
|
|
|
// Fetch fetch git repo
|
|
func (c *GitCommand) Fetch(opts FetchOptions) error {
|
|
command := "git fetch"
|
|
|
|
if opts.RemoteName != "" {
|
|
command = fmt.Sprintf("%s %s", command, c.OSCommand.Quote(opts.RemoteName))
|
|
}
|
|
if opts.BranchName != "" {
|
|
command = fmt.Sprintf("%s %s", command, c.OSCommand.Quote(opts.BranchName))
|
|
}
|
|
|
|
return c.OSCommand.DetectUnamePass(command, func(question string) string {
|
|
if opts.PromptUserForCredential != nil {
|
|
return opts.PromptUserForCredential(question)
|
|
}
|
|
return "\n"
|
|
})
|
|
}
|
|
|
|
func (c *GitCommand) FastForward(branchName string, remoteName string, remoteBranchName string, promptUserForCredential func(string) string) error {
|
|
command := fmt.Sprintf("git fetch %s %s:%s", c.OSCommand.Quote(remoteName), c.OSCommand.Quote(remoteBranchName), c.OSCommand.Quote(branchName))
|
|
return c.OSCommand.DetectUnamePass(command, promptUserForCredential)
|
|
}
|
|
|
|
func (c *GitCommand) FetchRemote(remoteName string, promptUserForCredential func(string) string) error {
|
|
command := fmt.Sprintf("git fetch %s", c.OSCommand.Quote(remoteName))
|
|
return c.OSCommand.DetectUnamePass(command, promptUserForCredential)
|
|
}
|
|
|
|
func (c *GitCommand) GetPullMode(mode string) string {
|
|
if mode != "auto" {
|
|
return mode
|
|
}
|
|
|
|
var isRebase bool
|
|
var isFf bool
|
|
var wg sync.WaitGroup
|
|
|
|
wg.Add(2)
|
|
go func() {
|
|
isRebase = c.GetConfigValue("pull.rebase") == "true"
|
|
wg.Done()
|
|
}()
|
|
go func() {
|
|
isFf = c.GetConfigValue("pull.ff") == "only"
|
|
wg.Done()
|
|
}()
|
|
wg.Wait()
|
|
|
|
if isRebase {
|
|
return "rebase"
|
|
} else if isFf {
|
|
return "ff-only"
|
|
} else {
|
|
return "merge"
|
|
}
|
|
}
|