提交 2699a6b7 编写于 作者: J Jingwen Owen Ou

Parse more global flags from by following...

Parse more global flags from by following https://github.com/github/hub/blob/1.12-stable/lib/hub/commands.rb#L961-L995
上级 0bbfad69
......@@ -12,7 +12,7 @@ import (
type Args struct {
Executable string
ConfigParam map[string]string
GlobalFlags []string
Command string
Params []string
beforeChain []*cmd.Cmd
......@@ -160,17 +160,34 @@ func (a *Args) HasFlags(flags ...string) bool {
func NewArgs(args []string) *Args {
var (
globalFlag flag.FlagSet
version bool
help bool
noop bool
configParam mapValue = make(mapValue)
globalFlag flag.FlagSet
noop bool
configParam mapValue = make(mapValue)
paginate bool
noPaginate bool
noReplaceObjects bool
bare bool
version bool
help bool
execPath string
gitDir string
workTree string
)
globalFlag.BoolVarP(&version, "version", "", false, "")
globalFlag.BoolVarP(&help, "help", "", false, "")
globalFlag.BoolVarP(&noop, "noop", "", false, "")
globalFlag.VarP(configParam, "", "c", "")
globalFlag.BoolVarP(&paginate, "paginate", "p", false, "")
globalFlag.BoolVarP(&noPaginate, "no-pager", "", false, "")
globalFlag.BoolVarP(&noReplaceObjects, "no-replace-objects", "", false, "")
globalFlag.BoolVarP(&bare, "bare", "", false, "")
globalFlag.BoolVarP(&version, "version", "", false, "")
globalFlag.BoolVarP(&help, "help", "", false, "")
globalFlag.StringVarP(&execPath, "exec-path", "", "", "")
globalFlag.StringVarP(&gitDir, "git-dir", "", "", "")
globalFlag.StringVarP(&workTree, "work-tree", "", "", "")
globalFlag.SetOutput(ioutil.Discard)
globalFlag.Init("hub", flag.ContinueOnError)
......@@ -182,6 +199,9 @@ func NewArgs(args []string) *Args {
aa = args
}
// manipulate global flags
globalFlags := make([]string, 0)
if version {
aa = append([]string{"version"}, aa...)
}
......@@ -190,6 +210,39 @@ func NewArgs(args []string) *Args {
aa = append([]string{"help"}, aa...)
}
for k, v := range configParam {
globalFlags = append(globalFlags, "-c")
globalFlags = append(globalFlags, fmt.Sprintf("%s=%s", k, v))
}
if paginate {
globalFlags = append(globalFlags, "--paginate")
}
if noPaginate {
globalFlags = append(globalFlags, "--no-pager")
}
if noReplaceObjects {
globalFlags = append(globalFlags, "--no-replace-objects")
}
if bare {
globalFlags = append(globalFlags, "--bare")
}
if execPath != "" {
globalFlags = append(globalFlags, "--exec-path", execPath)
}
if gitDir != "" {
globalFlags = append(globalFlags, "--git-dir", gitDir)
}
if workTree != "" {
globalFlags = append(globalFlags, "--work-tree", workTree)
}
var (
command string
params []string
......@@ -204,7 +257,7 @@ func NewArgs(args []string) *Args {
return &Args{
Executable: "git",
ConfigParam: configParam,
GlobalFlags: globalFlags,
Command: command,
Params: params,
Noop: noop,
......
package commands
import (
"strings"
"testing"
"github.com/github/hub/Godeps/_workspace/src/github.com/bmizerany/assert"
......@@ -36,10 +37,9 @@ func TestNewArgs(t *testing.T) {
assert.T(t, args.Noop)
assert.Equal(t, "version", args.Command)
args = NewArgs([]string{"-c", "foo=bar", "-c", "a=b"})
assert.Equal(t, 2, len(args.ConfigParam))
assert.Equal(t, "bar", args.ConfigParam["foo"])
assert.Equal(t, "b", args.ConfigParam["a"])
args = NewArgs([]string{"-c", "foo=bar", "--git-dir=path", "--bare", "-c", "a=b"})
assert.Equal(t, 7, len(args.GlobalFlags))
assert.Equal(t, "-c foo=bar -c a=b --bare --git-dir path", strings.Join(args.GlobalFlags, " "))
}
func TestArgs_Words(t *testing.T) {
......
......@@ -73,7 +73,7 @@ func (r *Runner) Execute() ExecError {
err := updater.PromptForUpdate()
utils.Check(err)
git.ConfigParam = args.ConfigParam // preserve git config param specified with `-c`
git.GlobalFlags = args.GlobalFlags // preserve git global flags
expandAlias(args)
cmd := r.Lookup(args.Command)
......
......@@ -10,7 +10,7 @@ import (
"github.com/github/hub/cmd"
)
var ConfigParam map[string]string = make(map[string]string)
var GlobalFlags []string
func Version() (string, error) {
output, err := gitOutput("version")
......@@ -196,9 +196,8 @@ func Alias(name string) (string, error) {
func Run(command string, args ...string) error {
cmd := cmd.New("git")
for k, v := range ConfigParam {
cmd.WithArg("-c")
cmd.WithArg(fmt.Sprintf("%s=%s", k, v))
for _, v := range GlobalFlags {
cmd.WithArg(v)
}
cmd.WithArg(command)
......@@ -213,9 +212,8 @@ func Run(command string, args ...string) error {
func gitOutput(input ...string) (outputs []string, err error) {
cmd := cmd.New("git")
for k, v := range ConfigParam {
cmd.WithArg("-c")
cmd.WithArg(fmt.Sprintf("%s=%s", k, v))
for _, v := range GlobalFlags {
cmd.WithArg(v)
}
for _, i := range input {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册