mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-09-18 12:51:44 +02:00
12a1f914f4
* update github.com/alecthomas/chroma v0.8.0 -> v0.8.1 * github.com/blevesearch/bleve v1.0.10 -> v1.0.12 * editorconfig-core-go v2.1.1 -> v2.3.7 * github.com/gliderlabs/ssh v0.2.2 -> v0.3.1 * migrate editorconfig.ParseBytes to Parse * github.com/shurcooL/vfsgen to 0d455de96546 * github.com/go-git/go-git/v5 v5.1.0 -> v5.2.0 * github.com/google/uuid v1.1.1 -> v1.1.2 * github.com/huandu/xstrings v1.3.0 -> v1.3.2 * github.com/klauspost/compress v1.10.11 -> v1.11.1 * github.com/markbates/goth v1.61.2 -> v1.65.0 * github.com/mattn/go-sqlite3 v1.14.0 -> v1.14.4 * github.com/mholt/archiver v3.3.0 -> v3.3.2 * github.com/microcosm-cc/bluemonday 4f7140c49acb -> v1.0.4 * github.com/minio/minio-go v7.0.4 -> v7.0.5 * github.com/olivere/elastic v7.0.9 -> v7.0.20 * github.com/urfave/cli v1.20.0 -> v1.22.4 * github.com/prometheus/client_golang v1.1.0 -> v1.8.0 * github.com/xanzy/go-gitlab v0.37.0 -> v0.38.1 * mvdan.cc/xurls v2.1.0 -> v2.2.0 Co-authored-by: Lauris BH <lauris@nix.lv>
92 lines
1.7 KiB
Go
Vendored
92 lines
1.7 KiB
Go
Vendored
package editorconfig
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"golang.org/x/mod/semver"
|
|
)
|
|
|
|
// ErrInvalidVersion represents a standard error with the semantic version.
|
|
var ErrInvalidVersion = errors.New("invalid semantic version")
|
|
|
|
// Config holds the configuration
|
|
type Config struct {
|
|
Path string
|
|
Name string
|
|
Version string
|
|
Parser Parser
|
|
}
|
|
|
|
// Load loads definition of a given file.
|
|
func (config *Config) Load(filename string) (*Definition, error) {
|
|
// idiomatic go allows empty struct
|
|
if config.Parser == nil {
|
|
config.Parser = new(SimpleParser)
|
|
}
|
|
|
|
filename, err := filepath.Abs(filename)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
ecFile := config.Name
|
|
if ecFile == "" {
|
|
ecFile = ConfigNameDefault
|
|
}
|
|
|
|
definition := &Definition{}
|
|
definition.Raw = make(map[string]string)
|
|
|
|
if config.Version != "" {
|
|
version := config.Version
|
|
if !strings.HasPrefix(version, "v") {
|
|
version = "v" + version
|
|
}
|
|
|
|
if ok := semver.IsValid(version); !ok {
|
|
return nil, fmt.Errorf("version %s error: %w", config.Version, ErrInvalidVersion)
|
|
}
|
|
|
|
definition.version = version
|
|
}
|
|
|
|
dir := filename
|
|
for dir != filepath.Dir(dir) {
|
|
dir = filepath.Dir(dir)
|
|
|
|
ec, err := config.Parser.ParseIni(filepath.Join(dir, ecFile))
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
continue
|
|
}
|
|
|
|
return nil, err
|
|
}
|
|
|
|
// give it the current config.
|
|
ec.config = config
|
|
|
|
relativeFilename := filename
|
|
if len(dir) < len(relativeFilename) {
|
|
relativeFilename = relativeFilename[len(dir):]
|
|
}
|
|
|
|
def, err := ec.GetDefinitionForFilename(relativeFilename)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
definition.merge(def)
|
|
|
|
if ec.Root {
|
|
break
|
|
}
|
|
}
|
|
|
|
return definition, nil
|
|
}
|