diff --git a/pkg/commands/branches.go b/pkg/commands/branches.go index 9d4bf4512..3f6820c09 100644 --- a/pkg/commands/branches.go +++ b/pkg/commands/branches.go @@ -11,7 +11,7 @@ import ( // NewBranch create new branch func (c *GitCommand) NewBranch(name string, base string) error { - return c.RunCommand("git checkout -b %s %s", name, base) + return c.RunCommand("git checkout -b %s %s", c.OSCommand.Quote(name), c.OSCommand.Quote(base)) } // CurrentBranchName get the current branch name and displayname. @@ -47,7 +47,7 @@ func (c *GitCommand) DeleteBranch(branch string, force bool) error { command = "git branch -D" } - return c.OSCommand.RunCommand("%s %s", command, branch) + return c.OSCommand.RunCommand("%s %s", command, c.OSCommand.Quote(branch)) } // Checkout checks out a branch (or commit), with --force if you set the force arg to true @@ -61,7 +61,7 @@ func (c *GitCommand) Checkout(branch string, options CheckoutOptions) error { if options.Force { forceArg = " --force" } - return c.OSCommand.RunCommandWithOptions(fmt.Sprintf("git checkout%s %s", forceArg, branch), oscommands.RunCommandOptions{EnvVars: options.EnvVars}) + return c.OSCommand.RunCommandWithOptions(fmt.Sprintf("git checkout%s %s", forceArg, c.OSCommand.Quote(branch)), oscommands.RunCommandOptions{EnvVars: options.EnvVars}) } // GetBranchGraph gets the color-formatted graph of the log for the given branch @@ -73,24 +73,24 @@ func (c *GitCommand) GetBranchGraph(branchName string) (string, error) { } func (c *GitCommand) GetUpstreamForBranch(branchName string) (string, error) { - output, err := c.RunCommandWithOutput("git rev-parse --abbrev-ref --symbolic-full-name %s@{u}", branchName) + output, err := c.RunCommandWithOutput("git rev-parse --abbrev-ref --symbolic-full-name %s@{u}", c.OSCommand.Quote(branchName)) return strings.TrimSpace(output), err } func (c *GitCommand) GetBranchGraphCmdStr(branchName string) string { branchLogCmdTemplate := c.Config.GetUserConfig().Git.BranchLogCmd templateValues := map[string]string{ - "branchName": branchName, + "branchName": c.OSCommand.Quote(branchName), } return utils.ResolvePlaceholderString(branchLogCmdTemplate, templateValues) } func (c *GitCommand) SetUpstreamBranch(upstream string) error { - return c.RunCommand("git branch -u %s", upstream) + return c.RunCommand("git branch -u %s", c.OSCommand.Quote(upstream)) } func (c *GitCommand) SetBranchUpstream(remoteName string, remoteBranchName string, branchName string) error { - return c.RunCommand("git branch --set-upstream-to=%s/%s %s", remoteName, remoteBranchName, branchName) + return c.RunCommand("git branch --set-upstream-to=%s/%s %s", c.OSCommand.Quote(remoteName), c.OSCommand.Quote(remoteBranchName), c.OSCommand.Quote(branchName)) } func (c *GitCommand) GetCurrentBranchUpstreamDifferenceCount() (string, string) { @@ -124,7 +124,7 @@ type MergeOpts struct { func (c *GitCommand) Merge(branchName string, opts MergeOpts) error { mergeArgs := c.Config.GetUserConfig().Git.Merging.Args - command := fmt.Sprintf("git merge --no-edit %s %s", mergeArgs, branchName) + command := fmt.Sprintf("git merge --no-edit %s %s", mergeArgs, c.OSCommand.Quote(branchName)) if opts.FastForwardOnly { command = fmt.Sprintf("%s --ff-only", command) } @@ -144,18 +144,18 @@ func (c *GitCommand) IsHeadDetached() bool { // ResetHardHead runs `git reset --hard` func (c *GitCommand) ResetHard(ref string) error { - return c.RunCommand("git reset --hard " + ref) + return c.RunCommand("git reset --hard " + c.OSCommand.Quote(ref)) } // ResetSoft runs `git reset --soft HEAD` func (c *GitCommand) ResetSoft(ref string) error { - return c.RunCommand("git reset --soft " + ref) + return c.RunCommand("git reset --soft " + c.OSCommand.Quote(ref)) } func (c *GitCommand) ResetMixed(ref string) error { - return c.RunCommand("git reset --mixed " + ref) + return c.RunCommand("git reset --mixed " + c.OSCommand.Quote(ref)) } func (c *GitCommand) RenameBranch(oldName string, newName string) error { - return c.RunCommand("git branch --move %s %s", oldName, newName) + return c.RunCommand("git branch --move %s %s", c.OSCommand.Quote(oldName), c.OSCommand.Quote(newName)) } diff --git a/pkg/commands/loading_commits.go b/pkg/commands/loading_commits.go index 28e9c5199..e7d27e094 100644 --- a/pkg/commands/loading_commits.go +++ b/pkg/commands/loading_commits.go @@ -322,7 +322,7 @@ func (c *CommitListBuilder) getMergeBase(refName string) (string, error) { } // swallowing error because it's not a big deal; probably because there are no commits yet - output, _ := c.OSCommand.RunCommandWithOutput("git merge-base %s %s", refName, baseBranch) + output, _ := c.OSCommand.RunCommandWithOutput("git merge-base %s %s", c.OSCommand.Quote(refName), c.OSCommand.Quote(baseBranch)) return ignoringWarnings(output), nil } @@ -339,7 +339,7 @@ func ignoringWarnings(commandOutput string) string { // getFirstPushedCommit returns the first commit SHA which has been pushed to the ref's upstream. // all commits above this are deemed unpushed and marked as such. func (c *CommitListBuilder) getFirstPushedCommit(refName string) (string, error) { - output, err := c.OSCommand.RunCommandWithOutput("git merge-base %s %s@{u}", refName, refName) + output, err := c.OSCommand.RunCommandWithOutput("git merge-base %s %s@{u}", c.OSCommand.Quote(refName), c.OSCommand.Quote(refName)) if err != nil { return "", err } @@ -362,7 +362,7 @@ func (c *CommitListBuilder) getLogCmd(opts GetCommitsOptions) *exec.Cmd { return c.OSCommand.ExecutableFromString( fmt.Sprintf( "git log %s --oneline --pretty=format:\"%%H%s%%at%s%%aN%s%%d%s%%p%s%%s\" %s --abbrev=%d --date=unix %s", - opts.RefName, + c.OSCommand.Quote(opts.RefName), SEPARATION_CHAR, SEPARATION_CHAR, SEPARATION_CHAR, diff --git a/pkg/commands/remotes.go b/pkg/commands/remotes.go index b60f3d2a6..2003a7dbd 100644 --- a/pkg/commands/remotes.go +++ b/pkg/commands/remotes.go @@ -29,7 +29,7 @@ func (c *GitCommand) DeleteRemoteBranch(remoteName string, branchName string, pr func (c *GitCommand) CheckRemoteBranchExists(branchName string) bool { _, err := c.OSCommand.RunCommandWithOutput( "git show-ref --verify -- refs/remotes/origin/%s", - branchName, + c.OSCommand.Quote(branchName), ) return err == nil diff --git a/pkg/commands/sync.go b/pkg/commands/sync.go index e032d0a65..7de5b8efd 100644 --- a/pkg/commands/sync.go +++ b/pkg/commands/sync.go @@ -19,7 +19,7 @@ func (c *GitCommand) Push(branchName string, force bool, upstream string, args s setUpstreamArg := "" if upstream != "" { - setUpstreamArg = "--set-upstream " + upstream + setUpstreamArg = "--set-upstream " + c.OSCommand.Quote(upstream) } cmd := fmt.Sprintf("git push %s %s %s %s", followTagsFlag, forceFlag, setUpstreamArg, args) diff --git a/pkg/commands/tags.go b/pkg/commands/tags.go index fc76d3651..e41a2191b 100644 --- a/pkg/commands/tags.go +++ b/pkg/commands/tags.go @@ -3,14 +3,14 @@ package commands import "fmt" func (c *GitCommand) CreateLightweightTag(tagName string, commitSha string) error { - return c.RunCommand("git tag -- %s %s", tagName, commitSha) + return c.RunCommand("git tag -- %s %s", c.OSCommand.Quote(tagName), commitSha) } func (c *GitCommand) DeleteTag(tagName string) error { - return c.RunCommand("git tag -d %s", tagName) + return c.RunCommand("git tag -d %s", c.OSCommand.Quote(tagName)) } func (c *GitCommand) PushTag(remoteName string, tagName string, promptUserForCredential func(string) string) error { - command := fmt.Sprintf("git push %s %s", remoteName, tagName) + command := fmt.Sprintf("git push %s %s", c.OSCommand.Quote(remoteName), c.OSCommand.Quote(tagName)) return c.OSCommand.DetectUnamePass(command, promptUserForCredential) }