1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-03-21 21:47:32 +02:00

Merge pull request #2340 from Ryooooooga/improve-backward-compatibility

This commit is contained in:
Jesse Duffield 2023-01-01 12:38:10 +11:00 committed by GitHub
commit c5ea80fa67
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 11 deletions

View File

@ -128,7 +128,7 @@ func NewGitCommandAux(
reflogCommitLoader := git_commands.NewReflogCommitLoader(cmn, cmd) reflogCommitLoader := git_commands.NewReflogCommitLoader(cmn, cmd)
remoteLoader := git_commands.NewRemoteLoader(cmn, cmd, repo.Remotes) remoteLoader := git_commands.NewRemoteLoader(cmn, cmd, repo.Remotes)
stashLoader := git_commands.NewStashLoader(cmn, cmd) stashLoader := git_commands.NewStashLoader(cmn, cmd)
tagLoader := git_commands.NewTagLoader(cmn, cmd) tagLoader := git_commands.NewTagLoader(cmn, version, cmd)
return &GitCommand{ return &GitCommand{
Branch: branchCommands, Branch: branchCommands,

View File

@ -1,6 +1,8 @@
package git_commands package git_commands
import ( import (
"fmt"
"github.com/jesseduffield/generics/slices" "github.com/jesseduffield/generics/slices"
"github.com/jesseduffield/lazygit/pkg/commands/models" "github.com/jesseduffield/lazygit/pkg/commands/models"
"github.com/jesseduffield/lazygit/pkg/commands/oscommands" "github.com/jesseduffield/lazygit/pkg/commands/oscommands"
@ -10,23 +12,31 @@ import (
type TagLoader struct { type TagLoader struct {
*common.Common *common.Common
cmd oscommands.ICmdObjBuilder version *GitVersion
cmd oscommands.ICmdObjBuilder
} }
func NewTagLoader( func NewTagLoader(
common *common.Common, common *common.Common,
version *GitVersion,
cmd oscommands.ICmdObjBuilder, cmd oscommands.ICmdObjBuilder,
) *TagLoader { ) *TagLoader {
return &TagLoader{ return &TagLoader{
Common: common, Common: common,
cmd: cmd, version: version,
cmd: cmd,
} }
} }
func (self *TagLoader) GetTags() ([]*models.Tag, error) { func (self *TagLoader) GetTags() ([]*models.Tag, error) {
// get remote branches, sorted by creation date (descending) // get remote branches, sorted by creation date (descending)
// see: https://git-scm.com/docs/git-tag#Documentation/git-tag.txt---sortltkeygt // see: https://git-scm.com/docs/git-tag#Documentation/git-tag.txt---sortltkeygt
tagsOutput, err := self.cmd.New(`git tag --list --sort=-creatordate`).DontLog().RunWithOutput() sortKey := "-creatordate"
if self.version.IsOlderThan(2, 7, 0) {
sortKey = "-v:refname"
}
tagsOutput, err := self.cmd.New(fmt.Sprintf(`git tag --list --sort=%s`, sortKey)).DontLog().RunWithOutput()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -20,6 +20,7 @@ testtag
func TestGetTags(t *testing.T) { func TestGetTags(t *testing.T) {
type scenario struct { type scenario struct {
testName string testName string
gitVersion *GitVersion
runner *oscommands.FakeCmdObjRunner runner *oscommands.FakeCmdObjRunner
expectedTags []*models.Tag expectedTags []*models.Tag
expectedError error expectedError error
@ -27,14 +28,24 @@ func TestGetTags(t *testing.T) {
scenarios := []scenario{ scenarios := []scenario{
{ {
testName: "should return no tags if there are none", testName: "should return no tags if there are none",
gitVersion: &GitVersion{2, 7, 0, ""},
runner: oscommands.NewFakeRunner(t). runner: oscommands.NewFakeRunner(t).
Expect(`git tag --list --sort=-creatordate`, "", nil), Expect(`git tag --list --sort=-creatordate`, "", nil),
expectedTags: []*models.Tag{}, expectedTags: []*models.Tag{},
expectedError: nil, expectedError: nil,
}, },
{ {
testName: "should return tags if present", testName: "should return no tags if there are none (< 2.7.0)",
gitVersion: &GitVersion{2, 6, 7, ""},
runner: oscommands.NewFakeRunner(t).
Expect(`git tag --list --sort=-v:refname`, "", nil),
expectedTags: []*models.Tag{},
expectedError: nil,
},
{
testName: "should return tags if present",
gitVersion: &GitVersion{2, 7, 0, ""},
runner: oscommands.NewFakeRunner(t). runner: oscommands.NewFakeRunner(t).
Expect(`git tag --list --sort=-creatordate`, tagsOutput, nil), Expect(`git tag --list --sort=-creatordate`, tagsOutput, nil),
expectedTags: []*models.Tag{ expectedTags: []*models.Tag{
@ -47,15 +58,31 @@ func TestGetTags(t *testing.T) {
}, },
expectedError: nil, expectedError: nil,
}, },
{
testName: "should return tags if present (< 2.7.0)",
gitVersion: &GitVersion{2, 6, 7, ""},
runner: oscommands.NewFakeRunner(t).
Expect(`git tag --list --sort=-v:refname`, tagsOutput, nil),
expectedTags: []*models.Tag{
{Name: "v0.34"},
{Name: "v0.33"},
{Name: "v0.32.2"},
{Name: "v0.32.1"},
{Name: "v0.32"},
{Name: "testtag"},
},
expectedError: nil,
},
} }
for _, scenario := range scenarios { for _, scenario := range scenarios {
scenario := scenario scenario := scenario
t.Run(scenario.testName, func(t *testing.T) { t.Run(scenario.testName, func(t *testing.T) {
loader := &TagLoader{ loader := NewTagLoader(
Common: utils.NewDummyCommon(), utils.NewDummyCommon(),
cmd: oscommands.NewDummyCmdObjBuilder(scenario.runner), scenario.gitVersion,
} oscommands.NewDummyCmdObjBuilder(scenario.runner),
)
tags, err := loader.GetTags() tags, err := loader.GetTags()