From 320ccdb22afc89e7bd77695eafb262281b323095 Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Tue, 28 Aug 2018 18:01:53 +1000 Subject: [PATCH] when panicking due to malformed gitconfig, show a more useful error --- pkg/app/app.go | 14 ++++++++------ pkg/commands/git.go | 21 ++++++++++++++++----- pkg/i18n/english.go | 3 +++ 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/pkg/app/app.go b/pkg/app/app.go index 0b163f55329..ffd8807f02d 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -30,11 +30,6 @@ type App struct { func newProductionLogger(config config.AppConfigurer) *logrus.Logger { log := logrus.New() log.Out = ioutil.Discard - if config.GetUserConfig().GetString("reporting") == "on" { - // this isn't really a secret token: it only has permission to push new rollbar items - hook := rollrus.NewHook("23432119147a4367abf7c0de2aa99a2d", "production") - log.Hooks.Add(hook) - } return log } @@ -50,11 +45,18 @@ func newDevelopmentLogger() *logrus.Logger { func newLogger(config config.AppConfigurer) *logrus.Entry { var log *logrus.Logger + environment := "production" if config.GetDebug() { + environment = "development" log = newDevelopmentLogger() } else { log = newProductionLogger(config) } + if config.GetUserConfig().GetString("reporting") == "on" { + // this isn't really a secret token: it only has permission to push new rollbar items + hook := rollrus.NewHook("23432119147a4367abf7c0de2aa99a2d", environment) + log.Hooks.Add(hook) + } return log.WithFields(logrus.Fields{ "debug": config.GetDebug(), "version": config.GetVersion(), @@ -75,7 +77,7 @@ func NewApp(config config.AppConfigurer) (*App, error) { app.Tr = i18n.NewLocalizer(app.Log) - app.GitCommand, err = commands.NewGitCommand(app.Log, app.OSCommand) + app.GitCommand, err = commands.NewGitCommand(app.Log, app.OSCommand, app.Tr) if err != nil { return app, err } diff --git a/pkg/commands/git.go b/pkg/commands/git.go index 235809753f9..1e36aa84ceb 100644 --- a/pkg/commands/git.go +++ b/pkg/commands/git.go @@ -8,6 +8,7 @@ import ( "strings" "github.com/jesseduffield/gocui" + "github.com/jesseduffield/lazygit/pkg/i18n" "github.com/jesseduffield/lazygit/pkg/utils" "github.com/sirupsen/logrus" gitconfig "github.com/tcnksm/go-gitconfig" @@ -20,13 +21,15 @@ type GitCommand struct { OSCommand *OSCommand Worktree *gogit.Worktree Repo *gogit.Repository + Tr *i18n.Localizer } // NewGitCommand it runs git commands -func NewGitCommand(log *logrus.Entry, osCommand *OSCommand) (*GitCommand, error) { +func NewGitCommand(log *logrus.Entry, osCommand *OSCommand, tr *i18n.Localizer) (*GitCommand, error) { gitCommand := &GitCommand{ Log: log, OSCommand: osCommand, + Tr: tr, } return gitCommand, nil } @@ -35,7 +38,10 @@ func NewGitCommand(log *logrus.Entry, osCommand *OSCommand) (*GitCommand, error) func (c *GitCommand) SetupGit() { c.verifyInGitRepo() c.navigateToRepoRootDirectory() - c.setupWorktree() + if err := c.setupWorktree(); err != nil { + c.Log.Error(err) + panic(err) + } } // GetStashEntries stash entryies @@ -159,18 +165,23 @@ func (c *GitCommand) navigateToRepoRootDirectory() { } } -func (c *GitCommand) setupWorktree() { +func (c *GitCommand) setupWorktree() error { r, err := gogit.PlainOpen(".") if err != nil { - panic(err) + if strings.Contains(err.Error(), `unquoted '\' must be followed by new line`) { + errorMessage := c.Tr.SLocalize("GitconfigParseErr") + return errors.New(errorMessage) + } + return err } c.Repo = r w, err := r.Worktree() if err != nil { - panic(err) + return err } c.Worktree = w + return nil } // ResetHard does the equivalent of `git reset --hard HEAD` diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 5b8624e211c..718e84c6f52 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -336,6 +336,9 @@ func addEnglish(i18nObject *i18n.Bundle) error { }, &i18n.Message{ ID: "AnonymousReportingPrompt", Other: "Would you like to enable anonymous reporting data to help improve lazygit? (enter/esc)", + }, &i18n.Message{ + ID: "GitconfigParseErr", + Other: `Gogit failed to parse your gitconfig file due to the presence of unquoted '\' characters. Removing these should fix the issue.`, }, ) }