@@ -18,89 +18,10 @@ import (
1818 "github.com/klauspost/compress/zstd"
1919 "github.com/terrapkg/gura/db"
2020 "github.com/terrapkg/gura/util"
21+ . "github.com/terrapkg/gura/repomd"
2122 "go.uber.org/zap"
2223)
2324
24- // Represent the root structure of repomd.xml metadata for an RPM repository
25- // It contains information about available metadata files and their checksums.
26- type RPMRepomd struct {
27- XMLName xml.Name `xml:"repomd"`
28- Revision string `xml:"revision"`
29- Data []struct {
30- Type string `xml:"type,attr"`
31- Checksum RPMChecksum `xml:"checksum"`
32- OpenChecksum * RPMChecksum `xml:"open-checksum,omitempty"`
33- HeaderChecksum * RPMChecksum `xml:"header-checksum,omitempty"`
34- Timestamp int64 `xml:"timestamp"`
35- Size int64 `xml:"size"`
36- OpenSize * int64 `xml:"open-size,omitempty"`
37- HeaderSize * int64 `xml:"header-size,omitempty"`
38- DatabaseVersion * int `xml:"database_version,omitempty"`
39- Location struct {
40- Href string `xml:"href,attr"`
41- } `xml:"location"`
42- } `xml:"data"`
43- }
44-
45- // Checksum value and its type for repository metadata
46- type RPMChecksum struct {
47- Type string `xml:"type,attr"`
48- Value string `xml:"chardata"`
49- }
50-
51- // Single package entry in primary.xml metadata
52- //
53- // Includes basic package information, versioning, checksums, and additional metadata in the Format field.
54- type RPMPackageXML struct {
55- Name string `xml:"name"`
56- Arch string `xml:"arch"`
57- Version struct {
58- Epoch string `xml:"epoch,attr"`
59- Ver string `xml:"ver,attr"`
60- Rel string `xml:"rel,attr"`
61- } `xml:"version"`
62- Checksum RPMChecksum `xml:"checksum"`
63- Packager string `xml:"packager"`
64- Url string `xml:"url"`
65- // time
66- // size
67- // location
68- Format RPMFormat `xml:"format"`
69- }
70-
71- // Additional metadata for an RPM package
72- type RPMFormat struct {
73- License * string `xml:"license,omitempty"`
74- Vendor * string `xml:"vendor,omitempty"`
75- Group * string `xml:"group,omitempty"`
76- Buildhost * string `xml:"buildhost,omitempty"`
77- Sourcerpm * string `xml:"sourcerpm,omitempty"`
78- Provides []RPMEntry `xml:"provides>entry,omitempty"`
79- Requires []RPMEntry `xml:"requires>entry,omitempty"`
80- Obsoletes []RPMEntry `xml:"obsoletes>entry,omitempty"`
81- Conflicts []RPMEntry `xml:"conflicts>entry,omitempty"`
82- Enhances []RPMEntry `xml:"enhances>entry,omitempty"`
83- Suggests []RPMEntry `xml:"suggests>entry,omitempty"`
84- Recommends []RPMEntry `xml:"recommends>entry,omitempty"`
85- Supplements []RPMEntry `xml:"supplements>entry,omitempty"`
86- }
87-
88- // Single dependency or capability entry in RPM metadata
89- type RPMEntry struct {
90- Name string `xml:"name,attr"`
91- Flags string `xml:"flags,attr"`
92- Epoch string `xml:"epoch,attr"`
93- Ver string `xml:"ver,attr"`
94- Rel string `xml:"rel,attr"`
95- }
96-
97- // Root structure of primary.xml metadata
98- //
99- // Contains a list of all packages available in the repository.
100- type RPMPrimaryXML struct {
101- Packages []RPMPackageXML `xml:"package"`
102- }
103-
10425// Fetch and decode the repomd.xml file from the specified repository URL
10526//
10627// On failure, return nil
@@ -266,7 +187,7 @@ func rpmFetch(repo db.Repo) {
266187 }
267188 pkgs [n ].FullVer = fullver
268189 pkgs [n ].Ver = p .Version .Ver
269- pkgs [n ].Meta = rpm2MetaJSON (p )
190+ util . MaybeSuicide ( l , "Meta.UnmarshalJSON" , pkgs [n ].Meta . UnmarshalJSON ( rpm2MetaJSON (p )) )
270191 tx .Save (& pkgs [n ])
271192 updated ++
272193 } else {
@@ -315,12 +236,7 @@ func rpmCompare(a, b RPMPackageXML) int {
315236
316237// Serialize all fields of [RPMPackageXML] except Name, Arch, and Version into JSON for storage in [db.Pkg.Meta].
317238func rpm2MetaJSON (p RPMPackageXML ) []byte {
318- bs , err := json .Marshal (struct {
319- Checksum RPMChecksum
320- Packager string
321- Url string
322- Format RPMFormat
323- }{
239+ bs , err := json .Marshal (RPMMeta {
324240 Checksum : p .Checksum ,
325241 Packager : p .Packager ,
326242 Url : p .Url ,
0 commit comments