Skip to content

Commit 5c5cc78

Browse files
authored
Fix upload properties not overridden by protocol specific ones (#1422)
1 parent bc998ed commit 5c5cc78

File tree

3 files changed

+59
-4
lines changed

3 files changed

+59
-4
lines changed

Diff for: commands/upload/upload.go

+22-1
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ func runProgramAction(pm *packagemanager.PackageManager,
275275
uploadProperties.Set("runtime.os", properties.GetOSSuffix())
276276
uploadProperties.Merge(boardPlatform.Properties)
277277
uploadProperties.Merge(boardPlatform.RuntimeProperties())
278-
uploadProperties.Merge(boardProperties)
278+
uploadProperties.Merge(overrideProtocolProperties(action, port.Protocol, boardProperties))
279279
uploadProperties.Merge(uploadProperties.SubTree("tools." + uploadToolID))
280280
if programmer != nil {
281281
uploadProperties.Merge(programmer.Properties)
@@ -616,3 +616,24 @@ func detectSketchNameFromBuildPath(buildPath *paths.Path) (string, error) {
616616
}
617617
return candidateName, nil
618618
}
619+
620+
// overrideProtocolProperties returns a copy of props overriding action properties with
621+
// specified protocol properties.
622+
//
623+
// For example passing the below properties and "upload" as action and "serial" as protocol:
624+
// upload.speed=256
625+
// upload.serial.speed=57600
626+
// upload.network.speed=19200
627+
//
628+
// will return:
629+
// upload.speed=57600
630+
// upload.serial.speed=57600
631+
// upload.network.speed=19200
632+
func overrideProtocolProperties(action, protocol string, props *properties.Map) *properties.Map {
633+
res := props.Clone()
634+
subtree := props.SubTree(fmt.Sprintf("%s.%s", action, protocol))
635+
for k, v := range subtree.AsMap() {
636+
res.Set(fmt.Sprintf("%s.%s", action, k), v)
637+
}
638+
return res
639+
}

Diff for: commands/upload/upload_test.go

+34
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,37 @@ tools.arduino_ota.upload.field.some_field=This is a really long label that ideal
311311
require.Equal(t, userFields[0].Label, "This is a really long label that ideally must nev…")
312312
require.False(t, userFields[0].Secret)
313313
}
314+
315+
func TestOverrideProtocolProperties(t *testing.T) {
316+
props, err := properties.LoadFromBytes([]byte(`
317+
upload.speed=256
318+
upload.serial.speed=57600
319+
upload.network.speed=19200
320+
upload.unrelated_property=ok`))
321+
require.NoError(t, err)
322+
323+
res := overrideProtocolProperties("upload", "serial", props)
324+
require.Equal(t, res.Get("upload.speed"), "57600")
325+
require.Equal(t, res.Get("upload.serial.speed"), "57600")
326+
require.Equal(t, res.Get("upload.network.speed"), "19200")
327+
require.Equal(t, res.Get("upload.unrelated_property"), "ok")
328+
329+
res = overrideProtocolProperties("upload", "network", props)
330+
require.Equal(t, res.Get("upload.speed"), "19200")
331+
require.Equal(t, res.Get("upload.serial.speed"), "57600")
332+
require.Equal(t, res.Get("upload.network.speed"), "19200")
333+
require.Equal(t, res.Get("upload.unrelated_property"), "ok")
334+
335+
res = overrideProtocolProperties("upload", "some_other_protocol", props)
336+
require.Equal(t, res.Get("upload.speed"), "256")
337+
require.Equal(t, res.Get("upload.serial.speed"), "57600")
338+
require.Equal(t, res.Get("upload.network.speed"), "19200")
339+
require.Equal(t, res.Get("upload.unrelated_property"), "ok")
340+
341+
res = overrideProtocolProperties("bootloader", "serial", props)
342+
require.Equal(t, res.Get("upload.speed"), "256")
343+
require.Equal(t, res.Get("upload.serial.speed"), "57600")
344+
require.Equal(t, res.Get("upload.network.speed"), "19200")
345+
require.Equal(t, res.Get("upload.unrelated_property"), "ok")
346+
347+
}

Diff for: docs/platform-specification.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -857,11 +857,11 @@ tools.avrdude.upload.pattern="{cmd.path}" "-C{config.path}" {upload.verbose} -p{
857857
If necessary the same property can be defined multiple times for different protocols:
858858

859859
```
860-
leonardo.upload.serial.maximum_size=28672
861-
leonardo.upload.network.maximum_size=256
860+
leonardo.upload.serial.speed=57600
861+
leonardo.upload.network.speed=19200
862862
```
863863

864-
The two above properties will be available as **{upload.serial.maximum_size}** and **{upload.network.maximum_size}**.
864+
The two above properties will be available as **{upload.speed}**, the value will depend on the protocol used to upload.
865865

866866
#### Properties from pluggable discovery
867867

0 commit comments

Comments
 (0)