mirror of
https://gitea.com/gitea/tea
synced 2024-11-14 18:12:50 +00:00
Add preference flag_defaults.remote
, refactor (#466)
This is a refactor of the code last touched in #458, making the control flow less backwards. Additionally, this adds a preference `preferences.flag_defaults.remote` that allows to skip this heuristic and set a custom fixed default value for the `--remote` flag. I'm not sure this is actually needed, I can revert that commit. Co-authored-by: Norwin <git@nroo.de> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Andrew Thornton <art27@cantab.net> Reviewed-on: https://gitea.com/gitea/tea/pulls/466 Reviewed-by: 6543 <6543@obermui.de> Reviewed-by: Andrew Thornton <art27@cantab.net> Co-authored-by: Norwin <noerw@noreply.gitea.io> Co-committed-by: Norwin <noerw@noreply.gitea.io>
This commit is contained in:
parent
d06f35482e
commit
6663d9f19b
@ -17,10 +17,20 @@ import (
|
|||||||
"gopkg.in/yaml.v2"
|
"gopkg.in/yaml.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// FlagDefaults defines all flags that can be overridden with a default value
|
||||||
|
// via the config file
|
||||||
|
type FlagDefaults struct {
|
||||||
|
// Prefer a specific git remote to use for selecting a repository on gitea,
|
||||||
|
// instead of relying on the remote associated with main/master/trunk branch.
|
||||||
|
// The --remote flag still has precedence over this value.
|
||||||
|
Remote string `yaml:"remote"`
|
||||||
|
}
|
||||||
|
|
||||||
// Preferences that are stored in and read from the config file
|
// Preferences that are stored in and read from the config file
|
||||||
type Preferences struct {
|
type Preferences struct {
|
||||||
// Prefer using an external text editor over inline multiline prompts
|
// Prefer using an external text editor over inline multiline prompts
|
||||||
Editor bool `yaml:"editor"`
|
Editor bool `yaml:"editor"`
|
||||||
|
FlagDefaults FlagDefaults `yaml:"flag_defaults"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// LocalConfig represents local configurations
|
// LocalConfig represents local configurations
|
||||||
@ -64,6 +74,7 @@ func GetConfigPath() string {
|
|||||||
|
|
||||||
// GetPreferences returns preferences based on the config file
|
// GetPreferences returns preferences based on the config file
|
||||||
func GetPreferences() Preferences {
|
func GetPreferences() Preferences {
|
||||||
|
loadConfig()
|
||||||
return config.Prefs
|
return config.Prefs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,6 +99,10 @@ func InitCommand(ctx *cli.Context) *TeaContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(remoteFlag) == 0 {
|
||||||
|
remoteFlag = config.GetPreferences().FlagDefaults.Remote
|
||||||
|
}
|
||||||
|
|
||||||
// try to read local git repo & extract context: if repoFlag specifies a valid path, read repo in that dir,
|
// try to read local git repo & extract context: if repoFlag specifies a valid path, read repo in that dir,
|
||||||
// otherwise attempt PWD. if no repo is found, continue with default login
|
// otherwise attempt PWD. if no repo is found, continue with default login
|
||||||
if c.LocalRepo, c.Login, c.RepoSlug, err = contextFromLocalRepo(repoPath, remoteFlag); err != nil {
|
if c.LocalRepo, c.Login, c.RepoSlug, err = contextFromLocalRepo(repoPath, remoteFlag); err != nil {
|
||||||
@ -158,28 +162,34 @@ func contextFromLocalRepo(repoPath, remoteValue string) (*git.TeaRepo, *config.L
|
|||||||
return repo, nil, "", errors.New("No remote(s) found in this Git repository")
|
return repo, nil, "", errors.New("No remote(s) found in this Git repository")
|
||||||
}
|
}
|
||||||
|
|
||||||
// if only one remote exists
|
// When no preferred value is given, choose a remote to find a
|
||||||
if len(gitConfig.Remotes) >= 1 && len(remoteValue) == 0 {
|
// matching login based on its URL.
|
||||||
for remote := range gitConfig.Remotes {
|
if len(gitConfig.Remotes) > 1 && len(remoteValue) == 0 {
|
||||||
remoteValue = remote
|
// if master branch is present, use it as the default remote
|
||||||
}
|
mainBranches := []string{"main", "master", "trunk"}
|
||||||
if len(gitConfig.Remotes) > 1 {
|
for _, b := range mainBranches {
|
||||||
// prefer origin if there is multiple remotes
|
masterBranch, ok := gitConfig.Branches[b]
|
||||||
_, ok := gitConfig.Remotes["origin"]
|
|
||||||
if ok {
|
if ok {
|
||||||
|
if len(masterBranch.Remote) > 0 {
|
||||||
|
remoteValue = masterBranch.Remote
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if no branch has matched, default to origin or upstream remote.
|
||||||
|
if len(remoteValue) == 0 {
|
||||||
|
if _, ok := gitConfig.Remotes["upstream"]; ok {
|
||||||
|
remoteValue = "upstream"
|
||||||
|
} else if _, ok := gitConfig.Remotes["origin"]; ok {
|
||||||
remoteValue = "origin"
|
remoteValue = "origin"
|
||||||
}
|
}
|
||||||
// if master branch is present, use it as the default remote
|
}
|
||||||
mainBranches := []string{"main", "master", "trunk"}
|
}
|
||||||
for _, b := range mainBranches {
|
// make sure a remote is selected
|
||||||
masterBranch, ok := gitConfig.Branches[b]
|
if len(remoteValue) == 0 {
|
||||||
if ok {
|
for remote := range gitConfig.Remotes {
|
||||||
if len(masterBranch.Remote) > 0 {
|
remoteValue = remote
|
||||||
remoteValue = masterBranch.Remote
|
break
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user