@@ -31,17 +31,6 @@ import (
3131
3232var PrereqSeenMap = map [string ]string {}
3333
34- // Define the Go structs
35- type Prereq struct {
36- Version int `yaml:"version"`
37- Tasks map [string ]PrereqTask `yaml:"tasks"`
38- }
39-
40- type PrereqTask struct {
41- Description * string `yaml:"description,omitempty"` // Make description optional
42- Vars map [string ]string `yaml:"vars,omitempty"`
43- }
44-
4534// execute prereq task
4635func execPrereqTask (bindir string , name string ) error {
4736 me , err := os .Executable ()
@@ -67,25 +56,65 @@ func execPrereqTask(bindir string, name string) error {
6756}
6857
6958// load prerequisites in current dir
70- func loadPrereq (dir string ) (Prereq , error ) {
71- var prereq Prereq = Prereq {}
59+ func loadPrereq (dir string ) (tasks []string , versions []string , err error ) {
60+ err = nil
61+ tasks = []string {}
62+ versions = []string {}
7263
7364 if ! exists (dir , PREREQ ) {
74- return prereq , fmt . Errorf ( "not found %s" , dir )
65+ return
7566 }
7667 trace ("found prereq.yml in " , dir )
7768
78- dat , err := os .ReadFile (joinpath (dir , PREREQ ))
69+ data , err := os .ReadFile (joinpath (dir , PREREQ ))
7970 if err != nil {
80- return prereq , err
71+ return
8172 }
8273
83- err = yaml .Unmarshal (dat , & prereq )
84- if err != nil {
85- return prereq , err
74+ /*
75+ You have tasks = []strings and versions = []strings
76+ and dat a string with a YAML in format:
77+ ```yaml
78+ something:
79+ tasks:
80+ task:
81+ vars:
82+ VERSION: "123"
83+ anothertask:
84+ ```
85+ I want to parse the file, find the entries under `tasks` vith a var with VERSION
86+ and append, in order, to tasks the name of the task
87+ and to version the version found
88+ I have to skip the entries without a version and everyhing not in tasks
89+ I wnato just the plain code no procedures
90+ */
91+ var root yaml.Node
92+ if err = yaml .Unmarshal ([]byte (data ), & root ); err != nil {
93+ return
8694 }
8795
88- return prereq , err
96+ for i := 0 ; i < len (root .Content [0 ].Content ); i += 2 {
97+ if root .Content [0 ].Content [i ].Value == "tasks" {
98+ tasksNode := root .Content [0 ].Content [i + 1 ]
99+ for j := 0 ; j < len (tasksNode .Content ); j += 2 {
100+ taskName := tasksNode .Content [j ].Value
101+ taskVars := tasksNode .Content [j + 1 ]
102+ for k := 0 ; k < len (taskVars .Content ); k += 2 {
103+ if taskVars .Content [k ].Value == "vars" {
104+ varsNode := taskVars .Content [k + 1 ]
105+ for l := 0 ; l < len (varsNode .Content ); l += 2 {
106+ if varsNode .Content [l ].Value == "VERSION" {
107+ version := varsNode .Content [l + 1 ].Value
108+ tasks = append (tasks , taskName )
109+ versions = append (versions , version )
110+ }
111+ }
112+ }
113+ }
114+ }
115+ }
116+ }
117+ return
89118}
90119
91120func binDir () (string , error ) {
@@ -158,16 +187,11 @@ func touchAndClean(dir string, name string, version string) error {
158187}
159188
160189// download a prerequisite
161- func downloadPrereq (name string , task PrereqTask ) error {
190+ func downloadPrereq (name string , version string ) error {
162191
163192 // names and version
164193 // xname = executeable name
165194 // vname = versioned executable name
166- version , ok := task .Vars ["VERSION" ]
167- if ! ok {
168- trace ("return because no version for " , name )
169- return nil
170- }
171195 xname := addExeExt (name )
172196 vname := xname + "-" + version
173197
@@ -233,10 +257,15 @@ func ensurePrereq(root string) error {
233257 return err
234258 }
235259 trace ("ensurePrereq in" , root )
236- prereq , err := loadPrereq (root )
237- for task := range prereq .Tasks {
238- trace ("prereq" , task )
239- err = downloadPrereq (task , prereq .Tasks [task ])
260+ tasks , versions , err := loadPrereq (root )
261+ if err != nil {
262+ return err
263+ }
264+ trace (tasks , versions , err )
265+ for i , task := range tasks {
266+ version := versions [i ]
267+ trace ("prereq" , task , version )
268+ err = downloadPrereq (task , version )
240269 if err != nil {
241270 fmt .Printf ("error in prereq %s: %v\n " , task , err )
242271 }
0 commit comments