-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.go
89 lines (78 loc) · 3.16 KB
/
index.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package db
// Output structure used to generate library_index.json file
type indexOutput struct {
Libraries []indexLibrary `json:"libraries"`
}
// Output structure used to generate library_index.json file
type indexLibrary struct {
LibraryName string `json:"name"`
Version Version `json:"version"`
Author string `json:"author"`
Maintainer string `json:"maintainer"`
License string `json:"license,omitempty"`
Sentence string `json:"sentence"`
Paragraph string `json:"paragraph,omitempty"`
Website string `json:"website,omitempty"`
Category string `json:"category,omitempty"`
Architectures []string `json:"architectures"`
Types []string `json:"types,omitempty"`
Repository string `json:"repository,omitempty"`
ProvidesIncludes []string `json:"providesIncludes,omitempty"`
Dependencies []*indexDependency `json:"dependencies,omitempty"`
URL string `json:"url"`
ArchiveFileName string `json:"archiveFileName"`
Size int64 `json:"size"`
Checksum string `json:"checksum"`
SupportLevel string `json:"supportLevel,omitempty"`
}
type indexDependency struct {
Name string `json:"name"`
Version string `json:"version,omitempty"`
}
// OutputLibraryIndex generates an object that once JSON-marshaled produces a json
// file suitable for the library installer (i.e. produce a valid library_index.json file)
func (db *DB) OutputLibraryIndex() (interface{}, error) {
libraries := make([]indexLibrary, 0, len(db.Libraries))
for _, lib := range db.Libraries {
libraryReleases := db.FindReleasesOfLibrary(lib)
for _, libraryRelease := range libraryReleases {
// Skip malformed release
if libraryRelease.Size == 0 || libraryRelease.Checksum == "" {
continue
}
deps := []*indexDependency{}
for _, dep := range libraryRelease.Dependencies {
deps = append(deps, &indexDependency{
Name: dep.Name,
Version: dep.Version,
})
}
// Copy db.Library into db.indexLibrary
libraries = append(libraries, indexLibrary{
LibraryName: libraryRelease.LibraryName,
Version: libraryRelease.Version,
Author: libraryRelease.Author,
Maintainer: libraryRelease.Maintainer,
License: libraryRelease.License,
Sentence: libraryRelease.Sentence,
Paragraph: libraryRelease.Paragraph,
Website: libraryRelease.Website,
Category: lib.LatestCategory,
Architectures: libraryRelease.Architectures,
Types: libraryRelease.Types,
ArchiveFileName: libraryRelease.ArchiveFileName,
URL: libraryRelease.URL,
Size: libraryRelease.Size,
Checksum: libraryRelease.Checksum,
SupportLevel: lib.SupportLevel,
Repository: lib.Repository,
ProvidesIncludes: libraryRelease.Includes,
Dependencies: deps,
})
}
}
index := indexOutput{
Libraries: libraries,
}
return &index, nil
}