summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2020-08-27 22:19:03 +1000
committergithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>2020-08-27 12:21:37 +0000
commit5611d9a3ef442bfa162ee604b94af3639db73a09 (patch)
tree8812fe4bd064accae69d6b1635812461f1778e5b
parent40bec49de8428be4e771f2ded1e8ffecbd0c4fd5 (diff)
gracefully fail due to git version less than 2.0
-rw-r--r--pkg/app/app.go36
-rw-r--r--pkg/i18n/english.go3
2 files changed, 39 insertions, 0 deletions
diff --git a/pkg/app/app.go b/pkg/app/app.go
index f2289ecd9..617e2dd0e 100644
--- a/pkg/app/app.go
+++ b/pkg/app/app.go
@@ -2,11 +2,13 @@ package app
import (
"bufio"
+ "errors"
"fmt"
"io"
"io/ioutil"
"os"
"path/filepath"
+ "strconv"
"strings"
"github.com/jesseduffield/lazygit/pkg/commands"
@@ -129,7 +131,33 @@ func NewApp(config config.AppConfigurer, filterPath string) (*App, error) {
return app, nil
}
+func (app *App) validateGitVersion() error {
+ output, err := app.OSCommand.RunCommandWithOutput("git --version")
+ // if we get an error anywhere here we'll show the same status
+ minVersionError := errors.New(app.Tr.SLocalize("minGitVersionError"))
+ 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]
+ majorVersion, err := strconv.Atoi(gitVersion[0:1])
+ if err != nil {
+ return minVersionError
+ }
+ if majorVersion < 2 {
+ return minVersionError
+ }
+
+ return nil
+}
+
func (app *App) setupRepo() (bool, error) {
+ if err := app.validateGitVersion(); err != nil {
+ return false, err
+ }
+
// if we are not in a git repo, we ask if we want to `git init`
if err := app.OSCommand.RunCommand("git status"); err != nil {
cwd, err := os.Getwd()
@@ -216,6 +244,14 @@ func (app *App) Close() error {
func (app *App) KnownError(err error) (string, bool) {
errorMessage := err.Error()
+ knownErrorMessages := []string{app.Tr.SLocalize("minGitVersionError")}
+
+ for _, message := range knownErrorMessages {
+ if errorMessage == message {
+ return message, true
+ }
+ }
+
mappings := []errorMapping{
{
originalError: "fatal: not a git repository",
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index 7f52790f8..d3e170d2d 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -1176,6 +1176,9 @@ func addEnglish(i18nObject *i18n.Bundle) error {
}, &i18n.Message{
ID: "viewCommits",
Other: "view commits",
+ }, &i18n.Message{
+ ID: "minGitVersionError",
+ Other: "Git version must be at least 2.0 (i.e. from 2014 onwards). Please upgrade your git version. Alternatively raise an issue at https://github.com/jesseduffield/lazygit/issues for lazygit to be more backwards compatible.",
},
)
}