Some bugfix in profile parsing / Better support for platforms having … · arduino/arduino-cli@be841ff (original) (raw)

`@@ -151,18 +151,8 @@ func (index Index) MergeIntoPackages(outPackages cores.Packages) {

`

151

151

`// which in turn contains a single indexPlatformRelease converted from the one

`

152

152

`// passed as argument

`

153

153

`func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index {

`

154

``

`-

boards := []indexBoard{}

`

155

``

`-

for _, manifest := range pr.BoardsManifest {

`

156

``

`-

board := indexBoard{

`

157

``

`-

Name: manifest.Name,

`

158

``

`-

}

`

159

``

`-

for _, id := range manifest.ID {

`

160

``

`-

if id.USB != "" {

`

161

``

`-

board.ID = []indexBoardID{{USB: id.USB}}

`

162

``

`-

}

`

163

``

`-

}

`

164

``

`-

boards = append(boards, board)

`

165

``

`-

}

`

``

154

`+

// While enumerating the dependencies we also build a set of required packages.

`

``

155

`+

requiredPackages := map[string]bool{}

`

166

156

``

167

157

`tools := []indexToolDependency{}

`

168

158

`for _, t := range pr.ToolDependencies {

`

`@@ -171,6 +161,7 @@ func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index {

`

171

161

`Name: t.ToolName,

`

172

162

`Version: t.ToolVersion,

`

173

163

` })

`

``

164

`+

requiredPackages[t.ToolPackager] = true

`

174

165

` }

`

175

166

``

176

167

`discoveries := []indexDiscoveryDependency{}

`

`@@ -179,6 +170,7 @@ func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index {

`

179

170

`Packager: d.Packager,

`

180

171

`Name: d.Name,

`

181

172

` })

`

``

173

`+

requiredPackages[d.Packager] = true

`

182

174

` }

`

183

175

``

184

176

`monitors := []indexMonitorDependency{}

`

`@@ -187,58 +179,98 @@ func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index {

`

187

179

`Packager: m.Packager,

`

188

180

`Name: m.Name,

`

189

181

` })

`

``

182

`+

requiredPackages[m.Packager] = true

`

190

183

` }

`

191

184

``

192

``

`-

packageTools := []*indexToolRelease{}

`

193

``

`-

for name, tool := range pr.Platform.Package.Tools {

`

194

``

`-

for _, toolRelease := range tool.Releases {

`

195

``

`-

flavours := []indexToolReleaseFlavour{}

`

196

``

`-

for _, flavour := range toolRelease.Flavors {

`

197

``

`-

flavours = append(flavours, indexToolReleaseFlavour{

`

198

``

`-

OS: flavour.OS,

`

199

``

`-

URL: flavour.Resource.URL,

`

200

``

`-

ArchiveFileName: flavour.Resource.ArchiveFileName,

`

201

``

`-

Size: json.Number(fmt.Sprintf("%d", flavour.Resource.Size)),

`

202

``

`-

Checksum: flavour.Resource.Checksum,

`

``

185

`+

// Helper functions: those are needed to build an extract of the package_index.json

`

``

186

`+

// that is compatible with the one used by the CLI.

`

``

187

`+

// The installed.json is a simplified version of the cores.Packages

`

``

188

`+

// and therefore we need to extract the relevant information from the

`

``

189

`+

// cores.PlatformRelease and cores.Package structures.

`

``

190

`+

extractIndexPackage := func(pack *cores.Package) *indexPackage {

`

``

191

`+

packageTools := []*indexToolRelease{}

`

``

192

`+

for name, tool := range pack.Tools {

`

``

193

`+

for _, toolRelease := range tool.Releases {

`

``

194

`+

flavours := []indexToolReleaseFlavour{}

`

``

195

`+

for _, flavour := range toolRelease.Flavors {

`

``

196

`+

flavours = append(flavours, indexToolReleaseFlavour{

`

``

197

`+

OS: flavour.OS,

`

``

198

`+

URL: flavour.Resource.URL,

`

``

199

`+

ArchiveFileName: flavour.Resource.ArchiveFileName,

`

``

200

`+

Size: json.Number(fmt.Sprintf("%d", flavour.Resource.Size)),

`

``

201

`+

Checksum: flavour.Resource.Checksum,

`

``

202

`+

})

`

``

203

`+

}

`

``

204

`+

packageTools = append(packageTools, &indexToolRelease{

`

``

205

`+

Name: name,

`

``

206

`+

Version: toolRelease.Version,

`

``

207

`+

Systems: flavours,

`

203

208

` })

`

204

209

` }

`

205

``

`-

packageTools = append(packageTools, &indexToolRelease{

`

206

``

`-

Name: name,

`

207

``

`-

Version: toolRelease.Version,

`

208

``

`-

Systems: flavours,

`

209

``

`-

})

`

``

210

`+

}

`

``

211

`+

return &indexPackage{

`

``

212

`+

Name: pack.Name,

`

``

213

`+

Maintainer: pack.Maintainer,

`

``

214

`+

WebsiteURL: pack.WebsiteURL,

`

``

215

`+

URL: pack.URL,

`

``

216

`+

Email: pack.Email,

`

``

217

`+

Platforms: nil,

`

``

218

`+

Tools: packageTools,

`

``

219

`+

Help: indexHelp{Online: pack.Help.Online},

`

``

220

`+

}

`

``

221

`+

}

`

``

222

`+

extractIndexPlatformRelease := func(pr *cores.PlatformRelease) *indexPlatformRelease {

`

``

223

`+

boards := []indexBoard{}

`

``

224

`+

for _, manifest := range pr.BoardsManifest {

`

``

225

`+

board := indexBoard{

`

``

226

`+

Name: manifest.Name,

`

``

227

`+

}

`

``

228

`+

for _, id := range manifest.ID {

`

``

229

`+

if id.USB != "" {

`

``

230

`+

board.ID = []indexBoardID{{USB: id.USB}}

`

``

231

`+

}

`

``

232

`+

}

`

``

233

`+

boards = append(boards, board)

`

``

234

`+

}

`

``

235

+

``

236

`+

return &indexPlatformRelease{

`

``

237

`+

Name: pr.Name,

`

``

238

`+

Architecture: pr.Platform.Architecture,

`

``

239

`+

Version: pr.Version,

`

``

240

`+

Deprecated: pr.Deprecated,

`

``

241

`+

Category: pr.Category,

`

``

242

`+

URL: pr.Resource.URL,

`

``

243

`+

ArchiveFileName: pr.Resource.ArchiveFileName,

`

``

244

`+

Checksum: pr.Resource.Checksum,

`

``

245

`+

Size: json.Number(fmt.Sprintf("%d", pr.Resource.Size)),

`

``

246

`+

Help: indexHelp{Online: pr.Help.Online},

`

``

247

`+

Boards: boards,

`

``

248

`+

ToolDependencies: nil,

`

``

249

`+

DiscoveryDependencies: nil,

`

``

250

`+

MonitorDependencies: nil,

`

``

251

`+

}

`

``

252

`+

}

`

``

253

+

``

254

`+

mainPlatform := extractIndexPlatformRelease(pr)

`

``

255

`+

mainPlatform.ToolDependencies = tools

`

``

256

`+

mainPlatform.DiscoveryDependencies = discoveries

`

``

257

`+

mainPlatform.MonitorDependencies = monitors

`

``

258

`+

delete(requiredPackages, pr.Platform.Package.Name)

`

``

259

+

``

260

`+

mainPackage := extractIndexPackage(pr.Platform.Package)

`

``

261

`+

mainPackage.Platforms = []*indexPlatformRelease{mainPlatform}

`

``

262

+

``

263

`+

packages := []*indexPackage{mainPackage}

`

``

264

`+

for requiredPackageName := range requiredPackages {

`

``

265

`+

requiredPackage, ok := pr.Platform.Package.Packages.GetPackage(requiredPackageName)

`

``

266

`+

if ok {

`

``

267

`+

packages = append(packages, extractIndexPackage(requiredPackage))

`

210

268

` }

`

211

269

` }

`

212

270

``

213

271

`return Index{

`

214

272

`IsTrusted: pr.IsTrusted,

`

215

``

`-

Packages: []*indexPackage{

`

216

``

`-

{

`

217

``

`-

Name: pr.Platform.Package.Name,

`

218

``

`-

Maintainer: pr.Platform.Package.Maintainer,

`

219

``

`-

WebsiteURL: pr.Platform.Package.WebsiteURL,

`

220

``

`-

URL: pr.Platform.Package.URL,

`

221

``

`-

Email: pr.Platform.Package.Email,

`

222

``

`-

Platforms: []*indexPlatformRelease{{

`

223

``

`-

Name: pr.Name,

`

224

``

`-

Architecture: pr.Platform.Architecture,

`

225

``

`-

Version: pr.Version,

`

226

``

`-

Deprecated: pr.Deprecated,

`

227

``

`-

Category: pr.Category,

`

228

``

`-

URL: pr.Resource.URL,

`

229

``

`-

ArchiveFileName: pr.Resource.ArchiveFileName,

`

230

``

`-

Checksum: pr.Resource.Checksum,

`

231

``

`-

Size: json.Number(fmt.Sprintf("%d", pr.Resource.Size)),

`

232

``

`-

Boards: boards,

`

233

``

`-

Help: indexHelp{Online: pr.Help.Online},

`

234

``

`-

ToolDependencies: tools,

`

235

``

`-

DiscoveryDependencies: discoveries,

`

236

``

`-

MonitorDependencies: monitors,

`

237

``

`-

}},

`

238

``

`-

Tools: packageTools,

`

239

``

`-

Help: indexHelp{Online: pr.Platform.Package.Help.Online},

`

240

``

`-

},

`

241

``

`-

},

`

``

273

`+

Packages: packages,

`

242

274

` }

`

243

275

`}

`

244

276

``