@@ -50,13 +50,23 @@ import (
5050//
5151// It requires an Index Resource to search for tools
5252type Tools struct {
53- Index * index.Resource
54- Folder string
53+ index * index.Resource
54+ folder string
55+ }
56+
57+ // New will return a Tool object, allowing the caller to execute operations on it.
58+ // The New function will accept an index as parameter (used to download the indexes)
59+ // and a folder used to download the indexes
60+ func New (index * index.Resource , folder string ) * Tools {
61+ return & Tools {
62+ index : index ,
63+ folder : folder ,
64+ }
5565}
5666
5767// Available crawles the downloaded package index files and returns a list of tools that can be installed.
58- func (c * Tools ) Available (ctx context.Context ) (res tools.ToolCollection , err error ) {
59- body , err := c . Index .Read ()
68+ func (t * Tools ) Available (ctx context.Context ) (res tools.ToolCollection , err error ) {
69+ body , err := t . index .Read ()
6070 if err != nil {
6171 return nil , err
6272 }
@@ -78,16 +88,16 @@ func (c *Tools) Available(ctx context.Context) (res tools.ToolCollection, err er
7888}
7989
8090// Installed crawles the Tools Folder and finds the installed tools.
81- func (c * Tools ) Installed (ctx context.Context ) (tools.ToolCollection , error ) {
91+ func (t * Tools ) Installed (ctx context.Context ) (tools.ToolCollection , error ) {
8292 res := tools.ToolCollection {}
8393
8494 // Find packagers
85- packagers , err := os .ReadDir (c . Folder )
95+ packagers , err := os .ReadDir (t . folder )
8696 if err != nil {
8797 if ! strings .Contains (err .Error (), "no such file" ) {
8898 return nil , err
8999 }
90- err = os .MkdirAll (c . Folder , 0755 )
100+ err = os .MkdirAll (t . folder , 0755 )
91101 if err != nil {
92102 return nil , err
93103 }
@@ -99,14 +109,14 @@ func (c *Tools) Installed(ctx context.Context) (tools.ToolCollection, error) {
99109 }
100110
101111 // Find tools
102- toolss , err := os .ReadDir (filepath .Join (c . Folder , packager .Name ()))
112+ toolss , err := os .ReadDir (filepath .Join (t . folder , packager .Name ()))
103113 if err != nil {
104114 return nil , err
105115 }
106116
107117 for _ , tool := range toolss {
108118 // Find versions
109- path := filepath .Join (c . Folder , packager .Name (), tool .Name ())
119+ path := filepath .Join (t . folder , packager .Name (), tool .Name ())
110120 versions , err := os .ReadDir (path )
111121 if err != nil {
112122 continue // we ignore errors because the folders could be dirty
@@ -127,7 +137,7 @@ func (c *Tools) Installed(ctx context.Context) (tools.ToolCollection, error) {
127137
128138// Install crawles the Index folder, downloads the specified tool, extracts the archive in the Tools Folder.
129139// It checks for the Signature specified in the package index.
130- func (c * Tools ) Install (ctx context.Context , payload * tools.ToolPayload ) (* tools.Operation , error ) {
140+ func (t * Tools ) Install (ctx context.Context , payload * tools.ToolPayload ) (* tools.Operation , error ) {
131141 path := filepath .Join (payload .Packager , payload .Name , payload .Version )
132142
133143 //if URL is defined and is signed we verify the signature and override the name, payload, version parameters
@@ -136,11 +146,11 @@ func (c *Tools) Install(ctx context.Context, payload *tools.ToolPayload) (*tools
136146 if err != nil {
137147 return nil , err
138148 }
139- return c .install (ctx , path , * payload .URL , * payload .Checksum )
149+ return t .install (ctx , path , * payload .URL , * payload .Checksum )
140150 }
141151
142152 // otherwise we install from the default index
143- body , err := c . Index .Read ()
153+ body , err := t . index .Read ()
144154 if err != nil {
145155 return nil , err
146156 }
@@ -159,7 +169,7 @@ func (c *Tools) Install(ctx context.Context, payload *tools.ToolPayload) (*tools
159169
160170 sys := tool .GetFlavourCompatibleWith (runtime .GOOS , runtime .GOARCH )
161171
162- return c .install (ctx , path , sys .URL , sys .Checksum )
172+ return t .install (ctx , path , sys .URL , sys .Checksum )
163173 }
164174 }
165175 }
@@ -169,7 +179,7 @@ func (c *Tools) Install(ctx context.Context, payload *tools.ToolPayload) (*tools
169179 payload .Packager , payload .Name , payload .Version ))
170180}
171181
172- func (c * Tools ) install (ctx context.Context , path , url , checksum string ) (* tools.Operation , error ) {
182+ func (t * Tools ) install (ctx context.Context , path , url , checksum string ) (* tools.Operation , error ) {
173183 // Download
174184 res , err := http .Get (url )
175185 if err != nil {
@@ -181,7 +191,7 @@ func (c *Tools) install(ctx context.Context, path, url, checksum string) (*tools
181191 var buffer bytes.Buffer
182192 reader := io .TeeReader (res .Body , & buffer )
183193
184- safePath , err := utilities .SafeJoin (c . Folder , path )
194+ safePath , err := utilities .SafeJoin (t . folder , path )
185195 if err != nil {
186196 return nil , err
187197 }
@@ -192,7 +202,7 @@ func (c *Tools) install(ctx context.Context, path, url, checksum string) (*tools
192202 return nil , err
193203 }
194204
195- err = extract .Archive (ctx , reader , c . Folder , rename (path ))
205+ err = extract .Archive (ctx , reader , t . folder , rename (path ))
196206 if err != nil {
197207 os .RemoveAll (safePath )
198208 return nil , err
@@ -207,7 +217,7 @@ func (c *Tools) install(ctx context.Context, path, url, checksum string) (*tools
207217 }
208218
209219 // Write installed.json for retrocompatibility with v1
210- err = writeInstalled (c . Folder , path )
220+ err = writeInstalled (t . folder , path )
211221 if err != nil {
212222 return nil , err
213223 }
@@ -216,9 +226,9 @@ func (c *Tools) install(ctx context.Context, path, url, checksum string) (*tools
216226}
217227
218228// Remove deletes the tool folder from Tools Folder
219- func (c * Tools ) Remove (ctx context.Context , payload * tools.ToolPayload ) (* tools.Operation , error ) {
229+ func (t * Tools ) Remove (ctx context.Context , payload * tools.ToolPayload ) (* tools.Operation , error ) {
220230 path := filepath .Join (payload .Packager , payload .Name , payload .Version )
221- pathToRemove , err := utilities .SafeJoin (c . Folder , path )
231+ pathToRemove , err := utilities .SafeJoin (t . folder , path )
222232 if err != nil {
223233 return nil , err
224234 }
0 commit comments