mirror of
https://github.com/MichaelMure/git-bug.git
synced 2024-12-16 11:00:42 +03:00
Merge pull request #936 from MichaelMure/feat/935/disambiguate-config-errors
feat(935): disambiguate config errors
This commit is contained in:
commit
f94616ec76
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user