Skip to content

Commit b12168c

Browse files
authored
[skip-changelog] Fix pluggable conversion (#1512)
* Fixed network upload for avr packages * Added test for serial pluggable-monitor compatibility conversion * Added data for unit testing * Fixed other collateral tests * Perform regexp compile at package level * fix i18n
1 parent bb5d778 commit b12168c

File tree

6 files changed

+1357
-33
lines changed

6 files changed

+1357
-33
lines changed

arduino/cores/packagemanager/loader.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"fmt"
2020
"os"
2121
"path/filepath"
22+
"regexp"
2223
"strconv"
2324
"strings"
2425

@@ -419,6 +420,8 @@ func convertLegacyPlatformToPluggableDiscovery(platform *cores.PlatformRelease)
419420
}
420421
}
421422

423+
var netPropRegexp = regexp.MustCompile(`\{upload\.network\.([^}]+)\}`)
424+
422425
func convertLegacyNetworkPatternToPluggableDiscovery(props *properties.Map, newToolName string) *properties.Map {
423426
pattern, ok := props.GetOk("upload.network_pattern")
424427
if !ok {
@@ -432,6 +435,11 @@ func convertLegacyNetworkPatternToPluggableDiscovery(props *properties.Map, newT
432435
props.Set("upload.field.password.secret", "true")
433436
pattern = strings.ReplaceAll(pattern, "{network.password}", "{upload.field.password}")
434437
}
438+
// Search for "{upload.network.PROPERTY}"" and convert it to "{upload.port.property.PROPERTY}"
439+
for netPropRegexp.MatchString(pattern) {
440+
netProp := netPropRegexp.FindStringSubmatch(pattern)[1]
441+
pattern = strings.ReplaceAll(pattern, "{upload.network."+netProp+"}", "{upload.port.properties."+netProp+"}")
442+
}
435443
props.Set("upload.pattern", pattern)
436444

437445
prefix := "tools." + newToolName + "."

arduino/cores/packagemanager/package_manager_test.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ func TestResolveFQBN(t *testing.T) {
7171
require.NotNil(t, platformRelease.Platform)
7272
require.Equal(t, platformRelease.Platform.String(), "arduino:avr")
7373
require.NotNil(t, board)
74-
require.Equal(t, board.Name(), "Arduino/Genuino Uno")
74+
require.Equal(t, board.Name(), "Arduino Uno")
7575
require.NotNil(t, props)
7676
require.Equal(t, platformRelease, buildPlatformRelease)
7777

@@ -85,7 +85,7 @@ func TestResolveFQBN(t *testing.T) {
8585
require.NotNil(t, platformRelease.Platform)
8686
require.Equal(t, platformRelease.Platform.String(), "arduino:avr")
8787
require.NotNil(t, board)
88-
require.Equal(t, board.Name(), "Arduino/Genuino Mega or Mega 2560")
88+
require.Equal(t, board.Name(), "Arduino Mega or Mega 2560")
8989
require.NotNil(t, props)
9090
require.Equal(t, platformRelease, buildPlatformRelease)
9191

@@ -460,6 +460,7 @@ func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) {
460460
platformProps := platformRelease.Properties
461461
require.Equal(t, "builtin:serial-discovery", platformProps.Get("pluggable_discovery.required.0"))
462462
require.Equal(t, "builtin:mdns-discovery", platformProps.Get("pluggable_discovery.required.1"))
463+
require.Equal(t, "builtin:serial-monitor", platformProps.Get("pluggable_monitor.required.serial"))
463464
require.Equal(t, "{runtime.tools.esptool.path}", platformProps.Get("tools.esptool__pluggable_network.path"))
464465
require.Contains(t, platformProps.Get("tools.esptool__pluggable_network.cmd"), "esptool")
465466
require.Contains(t, platformProps.Get("tools.esptool__pluggable_network.network_cmd"), "{runtime.platform.path}/tools/espota")
@@ -481,6 +482,7 @@ func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) {
481482
platformProps := platformRelease.Properties
482483
require.Equal(t, "builtin:serial-discovery", platformProps.Get("pluggable_discovery.required.0"))
483484
require.Equal(t, "builtin:mdns-discovery", platformProps.Get("pluggable_discovery.required.1"))
485+
require.Equal(t, "builtin:serial-monitor", platformProps.Get("pluggable_monitor.required.serial"))
484486
require.Equal(t, "", platformProps.Get("tools.esptool__pluggable_network.path"))
485487
require.Equal(t, "{runtime.tools.python3.path}/python3", platformProps.Get("tools.esptool__pluggable_network.cmd"))
486488
require.Equal(t, "{runtime.tools.python3.path}/python3", platformProps.Get("tools.esptool__pluggable_network.network_cmd"))
@@ -491,4 +493,18 @@ func TestLegacyPackageConversionToPluggableDiscovery(t *testing.T) {
491493
require.Equal(t, "true", platformProps.Get("tools.esptool__pluggable_network.upload.field.password.secret"))
492494
require.Equal(t, "\"{network_cmd}\" -I \"{runtime.platform.path}/tools/espota.py\" -i \"{upload.port.address}\" -p \"{upload.port.properties.port}\" \"--auth={upload.field.password}\" -f \"{build.path}/{build.project_name}.bin\"", platformProps.Get("tools.esptool__pluggable_network.upload.pattern"))
493495
}
496+
{
497+
fqbn, err := cores.ParseFQBN("arduino:avr:uno")
498+
require.NoError(t, err)
499+
require.NotNil(t, fqbn)
500+
_, platformRelease, board, _, _, err := pm.ResolveFQBN(fqbn)
501+
require.NoError(t, err)
502+
require.Equal(t, "avrdude__pluggable_network", board.Properties.Get("upload.tool.network"))
503+
require.Equal(t, "uno", board.Properties.Get("upload_port.4.board"))
504+
platformProps := platformRelease.Properties
505+
require.Equal(t, "builtin:serial-discovery", platformProps.Get("pluggable_discovery.required.0"))
506+
require.Equal(t, "builtin:mdns-discovery", platformProps.Get("pluggable_discovery.required.1"))
507+
require.Equal(t, "builtin:serial-monitor", platformProps.Get("pluggable_monitor.required.serial"))
508+
require.Equal(t, `"{network_cmd}" -address {upload.port.address} -port {upload.port.properties.port} -sketch "{build.path}/{build.project_name}.hex" -upload {upload.port.properties.endpoint_upload} -sync {upload.port.properties.endpoint_sync} -reset {upload.port.properties.endpoint_reset} -sync_exp {upload.port.properties.sync_return}`, platformProps.Get("tools.avrdude__pluggable_network.upload.pattern"))
509+
}
494510
}

0 commit comments

Comments
 (0)