mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-08-24 02:24:25 -05:00
git makes `rev-parse --show-toplevel` fatal when there's no work tree, so asking for it together with everything else meant we never got an answer at all for a bare repo: GetRepoPaths returned an error, nobody ever saw IsBareRepo() == true, and lazygit either died with a stack trace or decided we weren't in a repository. That's what you got for opening it in a directory holding a bare repo and a .git file pointing at it, which is a normal way to keep a repo and its worktrees together. Ask again without --show-toplevel when the first query fails: the other queries work fine without a work tree, so if they now succeed we know we're in a bare repo, and the existing prompt offering to open a recent repo does its job. If they fail too we're not in a repo at all, and the first error already says so. --is-bare-repository is gone from the query: a work tree implies core.bare is false, so it could only ever come back false there, and what matters to us is whether there is a work tree to show, which is what we now go by. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
44 lines
1.0 KiB
Go
44 lines
1.0 KiB
Go
package app
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/jesseduffield/lazygit/pkg/i18n"
|
|
"github.com/samber/lo"
|
|
)
|
|
|
|
type errorMapping struct {
|
|
originalError string
|
|
newError string
|
|
}
|
|
|
|
// knownError takes an error and tells us whether it's an error that we know about where we can print a nicely formatted version of it rather than panicking with a stack trace
|
|
func knownError(tr *i18n.TranslationSet, err error) (string, bool) {
|
|
errorMessage := err.Error()
|
|
|
|
knownErrorMessages := []string{minGitVersionErrorMessage(tr), tr.BareRepoNotSupported}
|
|
|
|
if lo.Contains(knownErrorMessages, errorMessage) {
|
|
return errorMessage, true
|
|
}
|
|
|
|
mappings := []errorMapping{
|
|
{
|
|
originalError: "fatal: not a git repository",
|
|
newError: tr.NotARepository,
|
|
},
|
|
{
|
|
originalError: "getwd: no such file or directory",
|
|
newError: tr.WorkingDirectoryDoesNotExist,
|
|
},
|
|
}
|
|
|
|
if mapping, ok := lo.Find(mappings, func(mapping errorMapping) bool {
|
|
return strings.Contains(errorMessage, mapping.originalError)
|
|
}); ok {
|
|
return mapping.newError, true
|
|
}
|
|
|
|
return "", false
|
|
}
|