Merge pull request #936 from MichaelMure/feat/935/disambiguate-config-errors

feat(935): disambiguate config errors
This commit is contained in:
Steve Moyer 2022-12-23 07:16:36 -05:00 committed by GitHub
commit f94616ec76
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 28 additions and 17 deletions

View File

@ -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 {

View File

@ -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 {

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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
}

View File

@ -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
}