diff --git a/commands/webui.go b/commands/webui.go index 6cbaff78b8db0945c8f290f16a4b5fc5fb66fec4..ea9fde0cf584642345eeefaa779702c7c7dd2711 100644 --- a/commands/webui.go +++ b/commands/webui.go @@ -2,6 +2,7 @@ package commands import ( "context" + "errors" "fmt" "io" "log" @@ -178,7 +179,7 @@ func runWebUI(env *execenv.Env, opts webUIOptions) error { env.Out.Println("Press Ctrl+c to quit") configOpen, err := env.Repo.AnyConfig().ReadBool(webUIOpenConfigKey) - if err == repository.ErrNoConfigEntry { + if errors.Is(err, repository.ErrNoConfigEntry) { // default to true configOpen = true } else if err != nil { diff --git a/entities/identity/identity_user.go b/entities/identity/identity_user.go index e671e6621d3bdcfc9a15438acd1d5b4d7315929e..7eb374d413f4408835f54b4ae1da34ba636c2e60 100644 --- a/entities/identity/identity_user.go +++ b/entities/identity/identity_user.go @@ -36,10 +36,10 @@ func GetUserIdentity(repo repository.Repo) (*Identity, error) { func GetUserIdentityId(repo repository.Repo) (entity.Id, error) { val, err := repo.LocalConfig().ReadString(identityConfigKey) - if err == repository.ErrNoConfigEntry { + if errors.Is(err, repository.ErrNoConfigEntry) { return entity.UnsetId, ErrNoIdentitySet } - if err == repository.ErrMultipleConfigEntry { + if errors.Is(err, repository.ErrMultipleConfigEntry) { return entity.UnsetId, ErrMultipleIdentitiesSet } if err != nil { @@ -58,7 +58,7 @@ func GetUserIdentityId(repo repository.Repo) (entity.Id, error) { // IsUserIdentitySet say if the user has set his identity func IsUserIdentitySet(repo repository.Repo) (bool, error) { _, err := repo.LocalConfig().ReadString(identityConfigKey) - if err == repository.ErrNoConfigEntry { + if errors.Is(err, repository.ErrNoConfigEntry) { return false, nil } if err != nil { diff --git a/repository/config.go b/repository/config.go index c6880b7d0bae5824c8d71a3393e521b5a9dde49a..7e1ee6e85ec6e45dfa224e7df7e751f5cfc8af23 100644 --- a/repository/config.go +++ b/repository/config.go @@ -2,6 +2,7 @@ package repository import ( "errors" + "fmt" "strconv" "time" ) @@ -11,6 +12,14 @@ var ( ErrMultipleConfigEntry = errors.New("multiple config entry for the given key") ) +func newErrNoConfigEntry(key string) error { + return fmt.Errorf("%w: missing key %s", ErrNoConfigEntry, key) +} + +func newErrMultipleConfigEntry(key string) error { + return fmt.Errorf("%w: duplicated key %s", ErrMultipleConfigEntry, key) +} + // Config represent the common function interacting with the repository config storage type Config interface { ConfigRead @@ -96,7 +105,7 @@ func (m *mergedConfig) ReadBool(key string) (bool, error) { if err == nil { return v, nil } - if err != ErrNoConfigEntry && err != ErrMultipleConfigEntry { + if !errors.Is(err, ErrNoConfigEntry) && !errors.Is(err, ErrMultipleConfigEntry) { return false, err } return m.global.ReadBool(key) @@ -107,7 +116,7 @@ func (m *mergedConfig) ReadString(key string) (string, error) { if err == nil { return val, nil } - if err != ErrNoConfigEntry && err != ErrMultipleConfigEntry { + if !errors.Is(err, ErrNoConfigEntry) && !errors.Is(err, ErrMultipleConfigEntry) { return "", err } return m.global.ReadString(key) @@ -118,7 +127,7 @@ func (m *mergedConfig) ReadTimestamp(key string) (time.Time, error) { if err == nil { return val, nil } - if err != ErrNoConfigEntry && err != ErrMultipleConfigEntry { + if !errors.Is(err, ErrNoConfigEntry) && !errors.Is(err, ErrMultipleConfigEntry) { return time.Time{}, err } return m.global.ReadTimestamp(key) diff --git a/repository/config_mem.go b/repository/config_mem.go index 019bc11167f1d2d939ac569ff4be0a6edfe234b5..55b12fd7c3ba9fc413eeb4095ca92d3ee8f9e30f 100644 --- a/repository/config_mem.go +++ b/repository/config_mem.go @@ -49,7 +49,7 @@ func (mc *MemConfig) ReadString(key string) (string, error) { key = normalizeKey(key) val, ok := mc.config[key] if !ok { - return "", ErrNoConfigEntry + return "", newErrNoConfigEntry(key) } return val, nil diff --git a/repository/config_testing.go b/repository/config_testing.go index f8a2762b6eecde560264b4f0d9382db4007dac1d..8c22934a7d8f8f45164f9bc3ec9a34406acf0096 100644 --- a/repository/config_testing.go +++ b/repository/config_testing.go @@ -53,7 +53,7 @@ func testConfig(t *testing.T, config Config) { }, configs) _, err = config.ReadBool("section.true") - require.Equal(t, ErrNoConfigEntry, err) + require.ErrorIs(t, err, ErrNoConfigEntry) err = config.RemoveAll("section.nonexistingkey") require.Error(t, err) @@ -62,7 +62,7 @@ func testConfig(t *testing.T, config Config) { require.NoError(t, err) _, err = config.ReadString("section.key") - require.Equal(t, ErrNoConfigEntry, err) + require.ErrorIs(t, err, ErrNoConfigEntry) err = config.RemoveAll("nonexistingsection") require.Error(t, err) diff --git a/repository/gogit.go b/repository/gogit.go index b14efbe5b46374e17bada7aae7d660b43337c137..01c47d41b1d7c02b5a51d6ff6aba62abaaaf5762 100644 --- a/repository/gogit.go +++ b/repository/gogit.go @@ -2,6 +2,7 @@ package repository import ( "bytes" + "errors" "fmt" "io/ioutil" "os" @@ -270,7 +271,7 @@ func (repo *GoGitRepo) GetCoreEditor() (string, error) { if err == nil && val != "" { return val, nil } - if err != nil && err != ErrNoConfigEntry { + if err != nil && !errors.Is(err, ErrNoConfigEntry) { return "", err } diff --git a/repository/gogit_config.go b/repository/gogit_config.go index 891e3ffb8525213bd99979ec9ee500204b159f4e..afa652b1983795dafd4b2f1fd984773b19f385fb 100644 --- a/repository/gogit_config.go +++ b/repository/gogit_config.go @@ -119,7 +119,7 @@ func (cr *goGitConfigReader) ReadString(key string) (string, error) { sectionName := split[0] if !cfg.Raw.HasSection(sectionName) { - return "", ErrNoConfigEntry + return "", newErrNoConfigEntry(key) } section := cfg.Raw.Section(sectionName) @@ -127,24 +127,24 @@ func (cr *goGitConfigReader) ReadString(key string) (string, error) { case len(split) == 2: optionName := split[1] if !section.HasOption(optionName) { - return "", ErrNoConfigEntry + return "", newErrNoConfigEntry(key) } if len(section.OptionAll(optionName)) > 1 { - return "", ErrMultipleConfigEntry + return "", newErrMultipleConfigEntry(key) } return section.Option(optionName), nil default: subsectionName := strings.Join(split[1:len(split)-1], ".") optionName := split[len(split)-1] if !section.HasSubsection(subsectionName) { - return "", ErrNoConfigEntry + return "", newErrNoConfigEntry(key) } subsection := section.Subsection(subsectionName) if !subsection.HasOption(optionName) { - return "", ErrNoConfigEntry + return "", newErrNoConfigEntry(key) } if len(subsection.OptionAll(optionName)) > 1 { - return "", ErrMultipleConfigEntry + return "", newErrMultipleConfigEntry(key) } return subsection.Option(optionName), nil }