mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-10-16 09:27:37 +03:00
Many people don't understand what this means, which is apparent from the amount of issues that got filed because of this. Let's get rid of it to avoid this confusion. People will have to configure their pager twice if they want to use it both on the command line and in lazygit, which I think is not a big deal.
128 lines
3.2 KiB
Go
128 lines
3.2 KiB
Go
package git_commands
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
|
|
gogit "github.com/jesseduffield/go-git/v5"
|
|
"github.com/jesseduffield/go-git/v5/config"
|
|
"github.com/jesseduffield/lazygit/pkg/commands/git_config"
|
|
"github.com/jesseduffield/lazygit/pkg/common"
|
|
"github.com/jesseduffield/lazygit/pkg/utils"
|
|
)
|
|
|
|
type ConfigCommands struct {
|
|
*common.Common
|
|
|
|
gitConfig git_config.IGitConfig
|
|
repo *gogit.Repository
|
|
}
|
|
|
|
func NewConfigCommands(
|
|
common *common.Common,
|
|
gitConfig git_config.IGitConfig,
|
|
repo *gogit.Repository,
|
|
) *ConfigCommands {
|
|
return &ConfigCommands{
|
|
Common: common,
|
|
gitConfig: gitConfig,
|
|
repo: repo,
|
|
}
|
|
}
|
|
|
|
func (self *ConfigCommands) ConfiguredPager() string {
|
|
if os.Getenv("GIT_PAGER") != "" {
|
|
return os.Getenv("GIT_PAGER")
|
|
}
|
|
if os.Getenv("PAGER") != "" {
|
|
return os.Getenv("PAGER")
|
|
}
|
|
output := self.gitConfig.Get("core.pager")
|
|
return strings.Split(output, "\n")[0]
|
|
}
|
|
|
|
func (self *ConfigCommands) GetPager(width int) string {
|
|
templateValues := map[string]string{
|
|
"columnWidth": strconv.Itoa(width/2 - 6),
|
|
}
|
|
|
|
pagerTemplate := string(self.UserConfig().Git.Paging.Pager)
|
|
return utils.ResolvePlaceholderString(pagerTemplate, templateValues)
|
|
}
|
|
|
|
type GpgConfigKey string
|
|
|
|
const (
|
|
CommitGpgSign GpgConfigKey = "commit.gpgSign"
|
|
TagGpgSign GpgConfigKey = "tag.gpgSign"
|
|
)
|
|
|
|
// NeedsGpgSubprocess tells us whether the user has gpg enabled for the specified action type
|
|
// and needs a subprocess because they have a process where they manually
|
|
// enter their password every time a GPG action is taken
|
|
func (self *ConfigCommands) NeedsGpgSubprocess(key GpgConfigKey) bool {
|
|
overrideGpg := self.UserConfig().Git.OverrideGpg
|
|
if overrideGpg {
|
|
return false
|
|
}
|
|
|
|
return self.gitConfig.GetBool(string(key))
|
|
}
|
|
|
|
func (self *ConfigCommands) NeedsGpgSubprocessForCommit() bool {
|
|
return self.NeedsGpgSubprocess(CommitGpgSign)
|
|
}
|
|
|
|
func (self *ConfigCommands) GetGpgTagSign() bool {
|
|
return self.gitConfig.GetBool(string(TagGpgSign))
|
|
}
|
|
|
|
func (self *ConfigCommands) GetCoreEditor() string {
|
|
return self.gitConfig.Get("core.editor")
|
|
}
|
|
|
|
// GetRemoteURL returns current repo remote url
|
|
func (self *ConfigCommands) GetRemoteURL() string {
|
|
return self.gitConfig.Get("remote.origin.url")
|
|
}
|
|
|
|
func (self *ConfigCommands) GetShowUntrackedFiles() string {
|
|
return self.gitConfig.Get("status.showUntrackedFiles")
|
|
}
|
|
|
|
// this determines whether the user has configured to push to the remote branch of the same name as the current or not
|
|
func (self *ConfigCommands) GetPushToCurrent() bool {
|
|
return self.gitConfig.Get("push.default") == "current"
|
|
}
|
|
|
|
// returns the repo's branches as specified in the git config
|
|
func (self *ConfigCommands) Branches() (map[string]*config.Branch, error) {
|
|
conf, err := self.repo.Config()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return conf.Branches, nil
|
|
}
|
|
|
|
func (self *ConfigCommands) GetGitFlowPrefixes() string {
|
|
return self.gitConfig.GetGeneral("--local --get-regexp gitflow.prefix")
|
|
}
|
|
|
|
func (self *ConfigCommands) GetCoreCommentChar() byte {
|
|
if commentCharStr := self.gitConfig.Get("core.commentChar"); len(commentCharStr) == 1 {
|
|
return commentCharStr[0]
|
|
}
|
|
|
|
return '#'
|
|
}
|
|
|
|
func (self *ConfigCommands) GetRebaseUpdateRefs() bool {
|
|
return self.gitConfig.GetBool("rebase.updateRefs")
|
|
}
|
|
|
|
func (self *ConfigCommands) DropConfigCache() {
|
|
self.gitConfig.DropCache()
|
|
}
|