mirror of
				https://github.com/jesseduffield/lazygit.git
				synced 2025-10-30 23:57:43 +02:00 
			
		
		
		
	By constructing an arg vector manually, we no longer need to quote arguments Mandate that args must be passed when building a command Now you need to provide an args array when building a command. There are a handful of places where we need to deal with a string, such as with user-defined custom commands, and for those we now require that at the callsite they use str.ToArgv to do that. I don't want to provide a method out of the box for it because I want to discourage its use. For some reason we were invoking a command through a shell when amending a commit, and I don't believe we needed to do that as there was nothing user- supplied about the command. So I've switched to using a regular command out- side the shell there
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package git_commands
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| func TestSyncPush(t *testing.T) {
 | |
| 	type scenario struct {
 | |
| 		testName string
 | |
| 		opts     PushOpts
 | |
| 		test     func(oscommands.ICmdObj, error)
 | |
| 	}
 | |
| 
 | |
| 	scenarios := []scenario{
 | |
| 		{
 | |
| 			testName: "Push with force disabled",
 | |
| 			opts:     PushOpts{Force: false},
 | |
| 			test: func(cmdObj oscommands.ICmdObj, err error) {
 | |
| 				assert.Equal(t, cmdObj.Args(), []string{"git", "push"})
 | |
| 				assert.NoError(t, err)
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			testName: "Push with force enabled",
 | |
| 			opts:     PushOpts{Force: true},
 | |
| 			test: func(cmdObj oscommands.ICmdObj, err error) {
 | |
| 				assert.Equal(t, cmdObj.Args(), []string{"git", "push", "--force-with-lease"})
 | |
| 				assert.NoError(t, err)
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			testName: "Push with force disabled, upstream supplied",
 | |
| 			opts: PushOpts{
 | |
| 				Force:          false,
 | |
| 				UpstreamRemote: "origin",
 | |
| 				UpstreamBranch: "master",
 | |
| 			},
 | |
| 			test: func(cmdObj oscommands.ICmdObj, err error) {
 | |
| 				assert.Equal(t, cmdObj.Args(), []string{"git", "push", "origin", "master"})
 | |
| 				assert.NoError(t, err)
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			testName: "Push with force disabled, setting upstream",
 | |
| 			opts: PushOpts{
 | |
| 				Force:          false,
 | |
| 				UpstreamRemote: "origin",
 | |
| 				UpstreamBranch: "master",
 | |
| 				SetUpstream:    true,
 | |
| 			},
 | |
| 			test: func(cmdObj oscommands.ICmdObj, err error) {
 | |
| 				assert.Equal(t, cmdObj.Args(), []string{"git", "push", "--set-upstream", "origin", "master"})
 | |
| 				assert.NoError(t, err)
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			testName: "Push with force enabled, setting upstream",
 | |
| 			opts: PushOpts{
 | |
| 				Force:          true,
 | |
| 				UpstreamRemote: "origin",
 | |
| 				UpstreamBranch: "master",
 | |
| 				SetUpstream:    true,
 | |
| 			},
 | |
| 			test: func(cmdObj oscommands.ICmdObj, err error) {
 | |
| 				assert.Equal(t, cmdObj.Args(), []string{"git", "push", "--force-with-lease", "--set-upstream", "origin", "master"})
 | |
| 				assert.NoError(t, err)
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			testName: "Push with remote branch but no origin",
 | |
| 			opts: PushOpts{
 | |
| 				Force:          true,
 | |
| 				UpstreamRemote: "",
 | |
| 				UpstreamBranch: "master",
 | |
| 				SetUpstream:    true,
 | |
| 			},
 | |
| 			test: func(cmdObj oscommands.ICmdObj, err error) {
 | |
| 				assert.Error(t, err)
 | |
| 				assert.EqualValues(t, "Must specify a remote if specifying a branch", err.Error())
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for _, s := range scenarios {
 | |
| 		s := s
 | |
| 		t.Run(s.testName, func(t *testing.T) {
 | |
| 			instance := buildSyncCommands(commonDeps{})
 | |
| 			s.test(instance.PushCmdObj(s.opts))
 | |
| 		})
 | |
| 	}
 | |
| }
 |