This commit is contained in:
Mislav Marohnić 2020-05-26 00:08:52 +02:00
Родитель 6c63f562ba 3df552668f
Коммит 93537d4575
5 изменённых файлов: 29 добавлений и 7 удалений

Просмотреть файл

@ -21,7 +21,17 @@ type Cmd struct {
}
func (cmd Cmd) String() string {
return fmt.Sprintf("%s %s", cmd.Name, strings.Join(cmd.Args, " "))
args := make([]string, len(cmd.Args))
for i, a := range cmd.Args {
if strings.ContainsRune(a, '"') {
args[i] = fmt.Sprintf(`'%s'`, a)
} else if a == "" || strings.ContainsRune(a, '\'') || strings.ContainsRune(a, ' ') {
args[i] = fmt.Sprintf(`"%s"`, a)
} else {
args[i] = a
}
}
return fmt.Sprintf("%s %s", cmd.Name, strings.Join(args, " "))
}
// WithArg returns the current argument
@ -138,7 +148,7 @@ func NewWithArray(cmd []string) *Cmd {
func verboseLog(cmd *Cmd) {
if os.Getenv("HUB_VERBOSE") != "" {
msg := fmt.Sprintf("$ %s %s", cmd.Name, strings.Join(cmd.Args, " "))
msg := fmt.Sprintf("$ %s", cmd.String())
if ui.IsTerminal(os.Stderr) {
msg = fmt.Sprintf("\033[35m%s\033[0m", msg)
}

Просмотреть файл

@ -18,3 +18,11 @@ func TestWithArg(t *testing.T) {
assert.Equal(t, "git", execCmd.Name)
assert.Equal(t, 4, len(execCmd.Args))
}
func Test_String(t *testing.T) {
c := Cmd{
Name: "echo",
Args: []string{"hi", "hello world", "don't", `"fake news"`},
}
assert.Equal(t, `echo hi "hello world" "don't" '"fake news"'`, c.String())
}

Просмотреть файл

@ -92,9 +92,7 @@ func (a *Args) ToCmd() *cmd.Cmd {
}
for _, arg := range a.Params {
if arg != "" {
c.WithArg(arg)
}
c.WithArg(arg)
}
return c

Просмотреть файл

@ -120,6 +120,12 @@ func TestArgs_GlobalFlags_Replaced(t *testing.T) {
assert.Equal(t, []string{"-a", "http://example.com"}, cmd.Args)
}
func TestArgs_ToCmd(t *testing.T) {
args := NewArgs([]string{"a", "", "b", ""})
cmd := args.ToCmd()
assert.Equal(t, []string{"a", "", "b", ""}, cmd.Args)
}
func TestArgs_GlobalFlags_BeforeAfterChain(t *testing.T) {
args := NewArgs([]string{"-c", "key=value", "-C", "dir", "status"})
args.Before("git", "remote", "add")

Просмотреть файл

@ -57,13 +57,13 @@ func TestInitInAnotherDir(t *testing.T) {
commands := args.Commands()
assert.Equal(t, 2, len(commands))
assert.Equal(t, "git init --template mytpl --shared=umask my project", commands[0].String())
assert.Equal(t, "git init --template mytpl --shared=umask \"my project\"", commands[0].String())
currentDir, err := os.Getwd()
assert.Equal(t, nil, err)
expected := fmt.Sprintf(
"git --git-dir %s remote add origin git@github.com:jingweno/%s.git",
"git --git-dir \"%s\" remote add origin git@github.com:jingweno/%s.git",
filepath.Join(currentDir, "my project", ".git"),
"my-project",
)