summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2023-06-01 10:14:45 +0200
committerGitHub <noreply@github.com>2023-06-01 10:14:45 +0200
commit523be47865c6693cb95d744e4ab0aadba35517b6 (patch)
tree08371c01bea1cb2a795683ddd18feb196dc8d6af
parentc70c8e84f85a5ce98c02b305a6dc4ea6a9eb6be8 (diff)
parent31a2ea1f19184a10239d8c02314d46321a0e0ae3 (diff)
Merge pull request #2692 from stefanhaller/fetch-all
Add --all to "git fetch" command, unless disabled by config.
-rw-r--r--docs/Config.md1
-rw-r--r--pkg/commands/git_commands/sync.go14
-rw-r--r--pkg/commands/git_commands/sync_test.go61
-rw-r--r--pkg/config/user_config.go2
4 files changed, 72 insertions, 6 deletions
diff --git a/docs/Config.md b/docs/Config.md
index 7424dd222..052d65957 100644
--- a/docs/Config.md
+++ b/docs/Config.md
@@ -94,6 +94,7 @@ git:
mainBranches: [master, main]
autoFetch: true
autoRefresh: true
+ fetchAll: true # Pass --all flag when running git fetch. Set to false to fetch only origin (or the current branch's upstream remote if there is one)
branchLogCmd: 'git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --'
allBranchesLogCmd: 'git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium'
overrideGpg: false # prevents lazygit from spawning a separate process when using GPG
diff --git a/pkg/commands/git_commands/sync.go b/pkg/commands/git_commands/sync.go
index 6b336d175..dc0a0c68c 100644
--- a/pkg/commands/git_commands/sync.go
+++ b/pkg/commands/git_commands/sync.go
@@ -50,15 +50,12 @@ func (self *SyncCommands) Push(opts PushOpts) error {
type FetchOptions struct {
Background bool
- RemoteName string
- BranchName string
}
// Fetch fetch git repo
-func (self *SyncCommands) Fetch(opts FetchOptions) error {
+func (self *SyncCommands) FetchCmdObj(opts FetchOptions) oscommands.ICmdObj {
cmdArgs := NewGitCmd("fetch").
- ArgIf(opts.RemoteName != "", opts.RemoteName).
- ArgIf(opts.BranchName != "", opts.BranchName).
+ ArgIf(self.UserConfig.Git.FetchAll, "--all").
ToArgv()
cmdObj := self.cmd.New(cmdArgs)
@@ -67,7 +64,12 @@ func (self *SyncCommands) Fetch(opts FetchOptions) error {
} else {
cmdObj.PromptOnCredentialRequest()
}
- return cmdObj.WithMutex(self.syncMutex).Run()
+ return cmdObj.WithMutex(self.syncMutex)
+}
+
+func (self *SyncCommands) Fetch(opts FetchOptions) error {
+ cmdObj := self.FetchCmdObj(opts)
+ return cmdObj.Run()
}
type PullOptions struct {
diff --git a/pkg/commands/git_commands/sync_test.go b/pkg/commands/git_commands/sync_test.go
index 23058eb92..f5eb0d403 100644
--- a/pkg/commands/git_commands/sync_test.go
+++ b/pkg/commands/git_commands/sync_test.go
@@ -92,3 +92,64 @@ func TestSyncPush(t *testing.T) {
})
}
}
+
+func TestSyncFetch(t *testing.T) {
+ type scenario struct {
+ testName string
+ opts FetchOptions
+ fetchAllConfig bool
+ test func(oscommands.ICmdObj)
+ }
+
+ scenarios := []scenario{
+ {
+ testName: "Fetch in foreground (all=false)",
+ opts: FetchOptions{Background: false},
+ fetchAllConfig: false,
+ test: func(cmdObj oscommands.ICmdObj) {
+ assert.True(t, cmdObj.ShouldLog())
+ assert.Equal(t, cmdObj.GetCredentialStrategy(), oscommands.PROMPT)
+ assert.Equal(t, cmdObj.Args(), []string{"git", "fetch"})
+ },
+ },
+ {
+ testName: "Fetch in foreground (all=true)",
+ opts: FetchOptions{Background: false},
+ fetchAllConfig: true,
+ test: func(cmdObj oscommands.ICmdObj) {
+ assert.True(t, cmdObj.ShouldLog())
+ assert.Equal(t, cmdObj.GetCredentialStrategy(), oscommands.PROMPT)
+ assert.Equal(t, cmdObj.Args(), []string{"git", "fetch", "--all"})
+ },
+ },
+ {
+ testName: "Fetch in background (all=false)",
+ opts: FetchOptions{Background: true},
+ fetchAllConfig: false,
+ test: func(cmdObj oscommands.ICmdObj) {
+ assert.False(t, cmdObj.ShouldLog())
+ assert.Equal(t, cmdObj.GetCredentialStrategy(), oscommands.FAIL)
+ assert.Equal(t, cmdObj.Args(), []string{"git", "fetch"})
+ },
+ },
+ {
+ testName: "Fetch in background (all=true)",
+ opts: FetchOptions{Background: true},
+ fetchAllConfig: true,
+ test: func(cmdObj oscommands.ICmdObj) {
+ assert.False(t, cmdObj.ShouldLog())
+ assert.Equal(t, cmdObj.GetCredentialStrategy(), oscommands.FAIL)
+ assert.Equal(t, cmdObj.Args(), []string{"git", "fetch", "--all"})
+ },
+ },
+ }
+
+ for _, s := range scenarios {
+ s := s
+ t.Run(s.testName, func(t *testing.T) {
+ instance := buildSyncCommands(commonDeps{})
+ instance.UserConfig.Git.FetchAll = s.fetchAllConfig
+ s.test(instance.FetchCmdObj(s.opts))
+ })
+ }
+}
diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go
index 9f46948b5..295c8178d 100644
--- a/pkg/config/user_config.go
+++ b/pkg/config/user_config.go
@@ -81,6 +81,7 @@ type GitConfig struct {
SkipHookPrefix string `yaml:"skipHookPrefix"`
AutoFetch bool `yaml:"autoFetch"`
AutoRefresh bool `yaml:"autoRefresh"`
+ FetchAll bool `yaml:"fetchAll"`
BranchLogCmd string `yaml:"branchLogCmd"`
AllBranchesLogCmd string `yaml:"allBranchesLogCmd"`
OverrideGpg bool `yaml:"overrideGpg"`
@@ -453,6 +454,7 @@ func GetDefaultConfig() *UserConfig {
MainBranches: []string{"master", "main"},
AutoFetch: true,
AutoRefresh: true,
+ FetchAll: true,
BranchLogCmd: "git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --",
AllBranchesLogCmd: "git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium",
DisableForcePushing: false,