mirror of https://gitlab.com/gitlab-org/cli.git
197 lines
5.0 KiB
Go
197 lines
5.0 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/MakeNowJust/heredoc"
|
|
"github.com/spf13/cobra"
|
|
|
|
"gitlab.com/gitlab-org/cli/commands/cmdutils"
|
|
"gitlab.com/gitlab-org/cli/internal/config"
|
|
"gitlab.com/gitlab-org/cli/pkg/glinstance"
|
|
)
|
|
|
|
var isGlobal bool
|
|
|
|
func NewCmdConfig(f *cmdutils.Factory) *cobra.Command {
|
|
configCmd := &cobra.Command{
|
|
Use: "config [flags]",
|
|
Short: `Set and get glab settings`,
|
|
Long: heredoc.Docf(`Get and set key/value strings.
|
|
|
|
Current respected settings:
|
|
|
|
- token: Your GitLab access token, defaults to environment variables
|
|
- gitlab_uri: if unset, defaults to %[1]shttps://gitlab.com%[1]s
|
|
- browser: if unset, defaults to environment variables
|
|
- editor: if unset, defaults to environment variables.
|
|
- visual: alternative for editor. if unset, defaults to environment variables.
|
|
- glamour_style: Your desired Markdown renderer style. Options are dark, light, notty. Custom styles are allowed using [glamour](https://github.com/charmbracelet/glamour#styles)
|
|
- glab_pager: Your desired pager command to use (e.g. less -R)
|
|
`, "`"),
|
|
Aliases: []string{"conf"},
|
|
}
|
|
|
|
configCmd.Flags().BoolVarP(&isGlobal, "global", "g", false, "use global config file")
|
|
|
|
configCmd.AddCommand(NewCmdConfigGet(f))
|
|
configCmd.AddCommand(NewCmdConfigSet(f))
|
|
configCmd.AddCommand(NewCmdConfigInit(f))
|
|
|
|
// TODO: deprecate `config init` command since it's been replaced by `auth login`
|
|
// targetedVersion: 1.12.0
|
|
|
|
return configCmd
|
|
}
|
|
|
|
func NewCmdConfigGet(f *cmdutils.Factory) *cobra.Command {
|
|
var hostname string
|
|
|
|
cmd := &cobra.Command{
|
|
Use: "get <key>",
|
|
Short: "Prints the value of a given configuration key.",
|
|
Long: ``,
|
|
Example: `
|
|
$ glab config get editor
|
|
vim
|
|
$ glab config get glamour_style
|
|
notty
|
|
`,
|
|
Args: cobra.ExactArgs(1),
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
cfg, err := f.Config()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
val, err := cfg.Get(hostname, args[0])
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if val != "" {
|
|
fmt.Fprintf(f.IO.StdOut, "%s\n", val)
|
|
}
|
|
return nil
|
|
},
|
|
}
|
|
|
|
cmd.Flags().StringVarP(&hostname, "host", "h", "", "Get per-host setting")
|
|
cmd.Flags().BoolP("global", "g", false, "Read from global config file (~/.config/glab-cli/config.yml). [Default: looks through Environment variables → Local → Global]")
|
|
|
|
return cmd
|
|
}
|
|
|
|
func NewCmdConfigSet(f *cmdutils.Factory) *cobra.Command {
|
|
var hostname string
|
|
|
|
cmd := &cobra.Command{
|
|
Use: "set <key> <value>",
|
|
Short: "Updates configuration with the value of a given key",
|
|
Long: `Update the configuration by setting a key to a value.
|
|
Use glab config set --global if you want to set a global config.
|
|
Specifying the --hostname flag also saves in the global config file
|
|
`,
|
|
Example: `
|
|
glab config set editor vim
|
|
glab config set token xxxxx -h gitlab.com
|
|
`,
|
|
Args: cobra.ExactArgs(2),
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
cfg, err := f.Config()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
localCfg, _ := cfg.Local()
|
|
|
|
key, value := args[0], args[1]
|
|
if isGlobal || hostname != "" {
|
|
err = cfg.Set(hostname, key, value)
|
|
} else {
|
|
err = localCfg.Set(key, value)
|
|
}
|
|
|
|
if err != nil {
|
|
return fmt.Errorf("failed to set %q to %q: %w", key, value, err)
|
|
}
|
|
|
|
if isGlobal || hostname != "" {
|
|
err = cfg.Write()
|
|
} else {
|
|
err = localCfg.Write()
|
|
}
|
|
|
|
if err != nil {
|
|
return fmt.Errorf("failed to write config to disk: %w", err)
|
|
}
|
|
return nil
|
|
},
|
|
}
|
|
|
|
cmd.Flags().StringVarP(&hostname, "host", "h", "", "Set per-host setting")
|
|
cmd.Flags().BoolVarP(&isGlobal, "global", "g", false, "write to global ~/.config/glab-cli/config.yml file rather than the repository .glab-cli/config/config")
|
|
return cmd
|
|
}
|
|
|
|
func NewCmdConfigInit(f *cmdutils.Factory) *cobra.Command {
|
|
configInitCmd := &cobra.Command{
|
|
Use: "init",
|
|
Short: "Shows a prompt to set basic glab configuration",
|
|
Long: heredoc.Docf(`
|
|
Update the configuration by setting a key to a value.
|
|
|
|
Examples:
|
|
|
|
%[1]splaintext
|
|
$ glab config init
|
|
? Enter default GitLab Host (Current Value: https://gitlab.com):
|
|
%[1]s
|
|
`,"```"),
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
return configInit(f)
|
|
},
|
|
}
|
|
configInitCmd.Deprecated = "use `glab auth login` which is secure and has additional options."
|
|
return configInitCmd
|
|
}
|
|
|
|
func configInit(f *cmdutils.Factory) error {
|
|
var host string
|
|
cfg, err := f.Config()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
baseRepo, err := f.BaseRepo()
|
|
if err != nil {
|
|
host = glinstance.Default()
|
|
} else {
|
|
host = baseRepo.RepoHost()
|
|
}
|
|
host, err = config.Prompt(fmt.Sprintf("Enter Gitlab Host (Current Value: %s): ", host), host)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
host, protocol := glinstance.StripHostProtocol(host)
|
|
err = cfg.Set(host, "api_protocol", protocol)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
token, _ := cfg.Get(host, "token")
|
|
token, err = config.Prompt("Enter Gitlab Token: ", token)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = cfg.Set(host, "token", token)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
if cfg.Write() != nil {
|
|
return err
|
|
}
|
|
fmt.Fprintf(f.IO.StdOut, "%s Configuration updated", f.IO.Color().GreenCheck())
|
|
return nil
|
|
}
|