diff --git a/pkg/commands/git.go b/pkg/commands/git.go index 4c2215820..c2c53948a 100644 --- a/pkg/commands/git.go +++ b/pkg/commands/git.go @@ -38,6 +38,7 @@ type GitCommand struct { WorkingTree *git_commands.WorkingTreeCommands Bisect *git_commands.BisectCommands Worktree *git_commands.WorktreeCommands + Version *git_commands.GitVersion Loaders Loaders } @@ -159,6 +160,7 @@ func NewGitCommandAux( Bisect: bisectCommands, WorkingTree: workingTreeCommands, Worktree: worktreeCommands, + Version: version, Loaders: Loaders{ BranchLoader: branchLoader, CommitFileLoader: commitFileLoader, diff --git a/pkg/commands/git_commands/version.go b/pkg/commands/git_commands/version.go index a089d7e06..7499404c0 100644 --- a/pkg/commands/git_commands/version.go +++ b/pkg/commands/git_commands/version.go @@ -69,3 +69,7 @@ func (v *GitVersion) IsOlderThan(major, minor, patch int) bool { func (v *GitVersion) IsOlderThanVersion(version *GitVersion) bool { return v.IsOlderThan(version.Major, version.Minor, version.Patch) } + +func (v *GitVersion) SupportsWorktrees() bool { + return !v.IsOlderThan(2, 5, 0) +} diff --git a/pkg/gui/controllers.go b/pkg/gui/controllers.go index 9d76349c7..9536fbd8f 100644 --- a/pkg/gui/controllers.go +++ b/pkg/gui/controllers.go @@ -242,16 +242,18 @@ func (gui *Gui) resetHelpersAndControllers() { controllers.AttachControllers(context, controllers.NewBasicCommitsController(common, context)) } - for _, context := range []controllers.CanViewWorktreeOptions{ - gui.State.Contexts.LocalCommits, - gui.State.Contexts.ReflogCommits, - gui.State.Contexts.SubCommits, - gui.State.Contexts.Stash, - gui.State.Contexts.Branches, - gui.State.Contexts.RemoteBranches, - gui.State.Contexts.Tags, - } { - controllers.AttachControllers(context, controllers.NewWorktreeOptionsController(common, context)) + if gui.c.Git().Version.SupportsWorktrees() { + for _, context := range []controllers.CanViewWorktreeOptions{ + gui.State.Contexts.LocalCommits, + gui.State.Contexts.ReflogCommits, + gui.State.Contexts.SubCommits, + gui.State.Contexts.Stash, + gui.State.Contexts.Branches, + gui.State.Contexts.RemoteBranches, + gui.State.Contexts.Tags, + } { + controllers.AttachControllers(context, controllers.NewWorktreeOptionsController(common, context)) + } } controllers.AttachControllers(gui.State.Contexts.ReflogCommits, diff --git a/pkg/gui/controllers/helpers/refresh_helper.go b/pkg/gui/controllers/helpers/refresh_helper.go index 310958ffd..3edd801f9 100644 --- a/pkg/gui/controllers/helpers/refresh_helper.go +++ b/pkg/gui/controllers/helpers/refresh_helper.go @@ -598,6 +598,11 @@ func (self *RefreshHelper) refreshRemotes() error { } func (self *RefreshHelper) refreshWorktrees() error { + if !self.c.Git().Version.SupportsWorktrees() { + self.c.Model().Worktrees = []*models.Worktree{} + return nil + } + worktrees, err := self.c.Git().Loaders.Worktrees.GetWorktrees() if err != nil { return self.c.Error(err) diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index e0bff880a..1b58c7a9a 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -566,25 +566,32 @@ func (gui *Gui) initGocui(headless bool, test integrationTypes.IntegrationTest) } func (gui *Gui) viewTabMap() map[string][]context.TabView { - return map[string][]context.TabView{ - "branches": { - { - Tab: gui.c.Tr.LocalBranchesTitle, - ViewName: "localBranches", - }, - { - Tab: gui.c.Tr.RemotesTitle, - ViewName: "remotes", - }, - { - Tab: gui.c.Tr.TagsTitle, - ViewName: "tags", - }, - { + branchesTabs := []context.TabView{ + { + Tab: gui.c.Tr.LocalBranchesTitle, + ViewName: "localBranches", + }, + { + Tab: gui.c.Tr.RemotesTitle, + ViewName: "remotes", + }, + { + Tab: gui.c.Tr.TagsTitle, + ViewName: "tags", + }, + } + + if gui.c.Git().Version.SupportsWorktrees() { + branchesTabs = append(branchesTabs, + context.TabView{ Tab: gui.c.Tr.WorktreesTitle, ViewName: "worktrees", }, - }, + ) + } + + return map[string][]context.TabView{ + "branches": branchesTabs, "commits": { { Tab: gui.c.Tr.CommitsTitle,