-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathlibrary.go
71 lines (64 loc) · 1.96 KB
/
library.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package db
import (
"fmt"
"regexp"
"strings"
"arduino.cc/repository/libraries/metadata"
)
// FromLibraryToRelease extract a Release from LibraryMetadata. LibraryMetadata must be
// validated before running this function.
func FromLibraryToRelease(library *metadata.LibraryMetadata) *Release {
deps, _ := ExtractDependenciesList(library.Depends)
dbRelease := Release{
LibraryName: library.Name,
Version: VersionFromString(library.Version),
Author: library.Author,
Maintainer: library.Maintainer,
License: library.License,
Sentence: library.Sentence,
Paragraph: library.Paragraph,
Website: library.URL, // TODO: Rename "url" field to "website" in library.properties
Category: library.Category,
Architectures: extractStringList(library.Architectures),
Types: library.Types,
Includes: extractStringList(library.Includes),
Dependencies: deps,
}
return &dbRelease
}
func extractStringList(value string) []string {
split := strings.Split(value, ",")
res := []string{}
for _, s := range split {
s := strings.TrimSpace(s)
if s != "" {
res = append(res, s)
}
}
return res
}
var re = regexp.MustCompile("^([a-zA-Z0-9](?:[a-zA-Z0-9._\\- ]*[a-zA-Z0-9])?) *(?: \\(([^()]*)\\))?$")
// ExtractDependenciesList extracts dependencies from the "depends" field of library.properties
func ExtractDependenciesList(depends string) ([]*Dependency, error) {
// TODO: merge this method with metadata.IsValidDependency
deps := []*Dependency{}
depends = strings.TrimSpace(depends)
if depends == "" {
return deps, nil
}
for _, dep := range strings.Split(depends, ",") {
dep = strings.TrimSpace(dep)
if dep == "" {
return nil, fmt.Errorf("invalid dep: %s", dep)
}
matches := re.FindAllStringSubmatch(dep, -1)
if matches == nil {
return nil, fmt.Errorf("invalid dep: %s", dep)
}
deps = append(deps, &Dependency{
Name: matches[0][1],
Version: matches[0][2],
})
}
return deps, nil
}