Skip to content

Commit 086e0e6

Browse files
committed
Refactored upload procedure to correctly handle bootloader.tool property
1 parent aca4107 commit 086e0e6

File tree

1 file changed

+48
-47
lines changed

1 file changed

+48
-47
lines changed

commands/upload/upload.go

Lines changed: 48 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -118,23 +118,8 @@ func runProgramAction(pm *packagemanager.PackageManager,
118118
WithField("buildPlatform", buildPlatform).
119119
Tracef("Upload data")
120120

121-
// Load upload tool definitions
122-
var uploadToolName string
123-
var uploadToolPlatform *cores.PlatformRelease
121+
// Extract programmer properties (when specified)
124122
var programmer *cores.Programmer
125-
126-
if burnBootloader {
127-
uploadToolName = boardProperties.Get("bootloader.tool")
128-
uploadToolPlatform = boardPlatform
129-
if uploadToolName == "" {
130-
return fmt.Errorf("cannot get programmer tool: undefined 'bootloader.tool' in boards.txt")
131-
}
132-
logrus.
133-
WithField("uploadToolName", uploadToolName).
134-
WithField("uploadToolPlatform", uploadToolPlatform).
135-
Trace("Upload tool from 'bootloader.tool' property")
136-
}
137-
138123
if programmerID != "" {
139124
programmer = boardPlatform.Programmers[programmerID]
140125
if programmer == nil {
@@ -144,36 +129,54 @@ func runProgramAction(pm *packagemanager.PackageManager,
144129
if programmer == nil {
145130
return fmt.Errorf("programmer '%s' not available", programmerID)
146131
}
147-
uploadToolName = programmer.Properties.Get("program.tool")
148-
uploadToolPlatform = programmer.PlatformRelease
149-
if uploadToolName == "" {
150-
return fmt.Errorf("cannot get programmer tool: undefined 'program.tool' property")
132+
}
133+
134+
// Determine upload tool
135+
var uploadToolID string
136+
{
137+
toolProperty := "upload.tool"
138+
if burnBootloader {
139+
toolProperty = "bootloader.tool"
140+
} else if programmer != nil {
141+
toolProperty = "program.tool"
142+
}
143+
144+
// create a temporary configuration only for the selection of upload tool
145+
props := properties.NewMap()
146+
props.Merge(boardPlatform.Properties)
147+
props.Merge(boardPlatform.RuntimeProperties())
148+
props.Merge(boardProperties)
149+
if programmer != nil {
150+
props.Merge(programmer.Properties)
151+
}
152+
if t, ok := props.GetOk(toolProperty); ok {
153+
uploadToolID = t
154+
} else {
155+
return fmt.Errorf("cannot get programmer tool: undefined '%s' property", toolProperty)
151156
}
152-
logrus.
153-
WithField("uploadToolName", uploadToolName).
154-
WithField("uploadToolPlatform", uploadToolPlatform).
155-
Trace("Upload tool from --programmer parameter")
157+
}
158+
159+
var uploadToolPlatform *cores.PlatformRelease
160+
if programmer != nil {
161+
uploadToolPlatform = programmer.PlatformRelease
156162
} else {
157-
uploadToolName = boardProperties.Get("upload.tool")
158163
uploadToolPlatform = boardPlatform
159-
if uploadToolName == "" {
160-
return fmt.Errorf("cannot get upload tool: undefined 'upload.tool' property")
161-
}
162-
if split := strings.Split(uploadToolName, ":"); len(split) > 2 {
163-
return fmt.Errorf("invalid 'upload.tool' property: %s", uploadToolName)
164-
} else if len(split) == 2 {
165-
uploadToolName = split[1]
166-
uploadToolPlatform = pm.GetInstalledPlatformRelease(
167-
pm.FindPlatform(&packagemanager.PlatformReference{
168-
Package: split[0],
169-
PlatformArchitecture: boardPlatform.Platform.Architecture,
170-
}),
171-
)
172-
}
173-
logrus.
174-
WithField("uploadToolName", uploadToolName).
175-
WithField("uploadToolPlatform", uploadToolPlatform).
176-
Trace("Upload tool")
164+
}
165+
logrus.
166+
WithField("uploadToolID", uploadToolID).
167+
WithField("uploadToolPlatform", uploadToolPlatform).
168+
Trace("Upload tool")
169+
170+
if split := strings.Split(uploadToolID, ":"); len(split) > 2 {
171+
return fmt.Errorf("invalid 'upload.tool' property: %s", uploadToolID)
172+
} else if len(split) == 2 {
173+
uploadToolID = split[1]
174+
uploadToolPlatform = pm.GetInstalledPlatformRelease(
175+
pm.FindPlatform(&packagemanager.PlatformReference{
176+
Package: split[0],
177+
PlatformArchitecture: boardPlatform.Platform.Architecture,
178+
}),
179+
)
177180
}
178181

179182
// Build configuration for upload
@@ -184,9 +187,7 @@ func runProgramAction(pm *packagemanager.PackageManager,
184187
uploadProperties.Merge(boardPlatform.Properties)
185188
uploadProperties.Merge(boardPlatform.RuntimeProperties())
186189
uploadProperties.Merge(boardProperties)
187-
188-
uploadToolProperties := uploadProperties.SubTree("tools." + uploadToolName)
189-
uploadProperties.Merge(uploadToolProperties)
190+
uploadProperties.Merge(uploadProperties.SubTree("tools." + uploadToolID))
190191
if programmer != nil {
191192
uploadProperties.Merge(programmer.Properties)
192193
}
@@ -324,7 +325,7 @@ func runProgramAction(pm *packagemanager.PackageManager,
324325
}
325326
}
326327

327-
// Build recipe for upload
328+
// Run recipes for upload
328329
if burnBootloader {
329330
if err := runTool("erase.pattern", uploadProperties, outStream, errStream, verbose); err != nil {
330331
return fmt.Errorf("chip erase error: %s", err)

0 commit comments

Comments
 (0)