@@ -50,13 +50,33 @@ import (
50
50
//
51
51
// It requires an Index Resource to search for tools
52
52
type 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
+ }
65
+ }
66
+
67
+ // GetIndex will return the index
68
+ func (t * Tools ) GetIndex () * index.Resource {
69
+ return t .index
70
+ }
71
+
72
+ // GetFolder will return the folder
73
+ func (t * Tools ) GetFolder () string {
74
+ return t .folder
55
75
}
56
76
57
77
// 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 ()
78
+ func (t * Tools ) Available (ctx context.Context ) (res tools.ToolCollection , err error ) {
79
+ body , err := t . GetIndex () .Read ()
60
80
if err != nil {
61
81
return nil , err
62
82
}
@@ -78,16 +98,16 @@ func (c *Tools) Available(ctx context.Context) (res tools.ToolCollection, err er
78
98
}
79
99
80
100
// Installed crawles the Tools Folder and finds the installed tools.
81
- func (c * Tools ) Installed (ctx context.Context ) (tools.ToolCollection , error ) {
101
+ func (t * Tools ) Installed (ctx context.Context ) (tools.ToolCollection , error ) {
82
102
res := tools.ToolCollection {}
83
103
84
104
// Find packagers
85
- packagers , err := os .ReadDir (c . Folder )
105
+ packagers , err := os .ReadDir (t . GetFolder () )
86
106
if err != nil {
87
107
if ! strings .Contains (err .Error (), "no such file" ) {
88
108
return nil , err
89
109
}
90
- err = os .MkdirAll (c . Folder , 0755 )
110
+ err = os .MkdirAll (t . GetFolder () , 0755 )
91
111
if err != nil {
92
112
return nil , err
93
113
}
@@ -99,14 +119,14 @@ func (c *Tools) Installed(ctx context.Context) (tools.ToolCollection, error) {
99
119
}
100
120
101
121
// Find tools
102
- toolss , err := os .ReadDir (filepath .Join (c . Folder , packager .Name ()))
122
+ toolss , err := os .ReadDir (filepath .Join (t . GetFolder () , packager .Name ()))
103
123
if err != nil {
104
124
return nil , err
105
125
}
106
126
107
127
for _ , tool := range toolss {
108
128
// Find versions
109
- path := filepath .Join (c . Folder , packager .Name (), tool .Name ())
129
+ path := filepath .Join (t . GetFolder () , packager .Name (), tool .Name ())
110
130
versions , err := os .ReadDir (path )
111
131
if err != nil {
112
132
continue // we ignore errors because the folders could be dirty
@@ -127,7 +147,7 @@ func (c *Tools) Installed(ctx context.Context) (tools.ToolCollection, error) {
127
147
128
148
// Install crawles the Index folder, downloads the specified tool, extracts the archive in the Tools Folder.
129
149
// It checks for the Signature specified in the package index.
130
- func (c * Tools ) Install (ctx context.Context , payload * tools.ToolPayload ) (* tools.Operation , error ) {
150
+ func (t * Tools ) Install (ctx context.Context , payload * tools.ToolPayload ) (* tools.Operation , error ) {
131
151
path := filepath .Join (payload .Packager , payload .Name , payload .Version )
132
152
133
153
//if URL is defined and is signed we verify the signature and override the name, payload, version parameters
@@ -136,11 +156,11 @@ func (c *Tools) Install(ctx context.Context, payload *tools.ToolPayload) (*tools
136
156
if err != nil {
137
157
return nil , err
138
158
}
139
- return c .install (ctx , path , * payload .URL , * payload .Checksum )
159
+ return t .install (ctx , path , * payload .URL , * payload .Checksum )
140
160
}
141
161
142
162
// otherwise we install from the default index
143
- body , err := c . Index .Read ()
163
+ body , err := t . GetIndex () .Read ()
144
164
if err != nil {
145
165
return nil , err
146
166
}
@@ -159,7 +179,7 @@ func (c *Tools) Install(ctx context.Context, payload *tools.ToolPayload) (*tools
159
179
160
180
sys := tool .GetFlavourCompatibleWith (runtime .GOOS , runtime .GOARCH )
161
181
162
- return c .install (ctx , path , sys .URL , sys .Checksum )
182
+ return t .install (ctx , path , sys .URL , sys .Checksum )
163
183
}
164
184
}
165
185
}
@@ -169,7 +189,7 @@ func (c *Tools) Install(ctx context.Context, payload *tools.ToolPayload) (*tools
169
189
payload .Packager , payload .Name , payload .Version ))
170
190
}
171
191
172
- func (c * Tools ) install (ctx context.Context , path , url , checksum string ) (* tools.Operation , error ) {
192
+ func (t * Tools ) install (ctx context.Context , path , url , checksum string ) (* tools.Operation , error ) {
173
193
// Download
174
194
res , err := http .Get (url )
175
195
if err != nil {
@@ -182,12 +202,12 @@ func (c *Tools) install(ctx context.Context, path, url, checksum string) (*tools
182
202
reader := io .TeeReader (res .Body , & buffer )
183
203
184
204
// Cleanup
185
- err = os .RemoveAll (filepath .Join (c . Folder , path ))
205
+ err = os .RemoveAll (filepath .Join (t . GetFolder () , path ))
186
206
if err != nil {
187
207
return nil , err
188
208
}
189
209
190
- err = extract .Archive (ctx , reader , c . Folder , rename (path ))
210
+ err = extract .Archive (ctx , reader , t . GetFolder () , rename (path ))
191
211
if err != nil {
192
212
os .RemoveAll (path )
193
213
return nil , err
@@ -202,7 +222,7 @@ func (c *Tools) install(ctx context.Context, path, url, checksum string) (*tools
202
222
}
203
223
204
224
// Write installed.json for retrocompatibility with v1
205
- err = writeInstalled (c . Folder , path )
225
+ err = writeInstalled (t . GetFolder () , path )
206
226
if err != nil {
207
227
return nil , err
208
228
}
@@ -211,9 +231,9 @@ func (c *Tools) install(ctx context.Context, path, url, checksum string) (*tools
211
231
}
212
232
213
233
// Remove deletes the tool folder from Tools Folder
214
- func (c * Tools ) Remove (ctx context.Context , payload * tools.ToolPayload ) (* tools.Operation , error ) {
234
+ func (t * Tools ) Remove (ctx context.Context , payload * tools.ToolPayload ) (* tools.Operation , error ) {
215
235
path := filepath .Join (payload .Packager , payload .Name , payload .Version )
216
- pathToRemove , err := utilities .SafeJoin (c . Folder , path )
236
+ pathToRemove , err := utilities .SafeJoin (t . GetFolder () , path )
217
237
if err != nil {
218
238
return nil , err
219
239
}
0 commit comments