From 307d051ec2ec03a2fcd347ce94f205aa2dca75fc Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Fri, 18 Sep 2020 21:00:03 +1000 Subject: smarter checking of git version --- pkg/app/app.go | 29 ++++++++++++++++++++++------- pkg/app/app_test.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 pkg/app/app_test.go (limited to 'pkg') diff --git a/pkg/app/app.go b/pkg/app/app.go index 617e2dd0e..e9ba81f59 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -8,6 +8,7 @@ import ( "io/ioutil" "os" "path/filepath" + "regexp" "strconv" "strings" @@ -138,19 +139,33 @@ func (app *App) validateGitVersion() error { if err != nil { return minVersionError } - // output should be something like: 'git version 2.23.0' - // first number in the string should be greater than 0 - split := strings.Split(output, " ") - gitVersion := split[len(split)-1] + + if isGitVersionValid(output) { + return nil + } + + return minVersionError +} + +func isGitVersionValid(versionStr string) bool { + // output should be something like: 'git version 2.23.0 (blah)' + re := regexp.MustCompile(`[^\d]+([\d\.]+)`) + matches := re.FindStringSubmatch(versionStr) + + if len(matches) == 0 { + return false + } + + gitVersion := matches[1] majorVersion, err := strconv.Atoi(gitVersion[0:1]) if err != nil { - return minVersionError + return false } if majorVersion < 2 { - return minVersionError + return false } - return nil + return true } func (app *App) setupRepo() (bool, error) { diff --git a/pkg/app/app_test.go b/pkg/app/app_test.go new file mode 100644 index 000000000..1ec46f0f7 --- /dev/null +++ b/pkg/app/app_test.go @@ -0,0 +1,44 @@ +package app + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestIsGitVersionValid(t *testing.T) { + type scenario struct { + versionStr string + expectedResult bool + } + + scenarios := []scenario{ + { + "", + false, + }, + { + "git version 1.9.0", + false, + }, + { + "git version 1.9.0 (Apple Git-128)", + false, + }, + { + "git version 2.4.0", + true, + }, + { + "git version 2.24.3 (Apple Git-128)", + true, + }, + } + + for _, s := range scenarios { + t.Run(s.versionStr, func(t *testing.T) { + result := isGitVersionValid(s.versionStr) + assert.Equal(t, result, s.expectedResult) + }) + } +} -- cgit v1.2.3