Skip to content

Commit f7fc5f5

Browse files
committed
Fix issue when using Init to rescan installed core on already initialized instance
1 parent 12ee0a8 commit f7fc5f5

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

arduino/cores/packagemanager/package_manager.go

+5
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ func NewPackageManager(indexDir, packagesDir, downloadDir, tempDir *paths.Path)
5858
}
5959
}
6060

61+
func (pm *PackageManager) Clear() {
62+
pm.Packages = cores.NewPackages()
63+
pm.CustomGlobalProperties = properties.NewMap()
64+
}
65+
6166
// FindPlatformReleaseProvidingBoardsWithVidPid FIXMEDOC
6267
func (pm *PackageManager) FindPlatformReleaseProvidingBoardsWithVidPid(vid, pid string) []*cores.PlatformRelease {
6368
res := []*cores.PlatformRelease{}

arduino/cores/packagemanager/package_manager_test.go

+17
Original file line numberDiff line numberDiff line change
@@ -320,3 +320,20 @@ func TestIdentifyBoard(t *testing.T) {
320320
require.Equal(t, "[test:avr:e]", fmt.Sprintf("%v", identify("0xAB00", "0xcd00")))
321321
require.Equal(t, "[test:avr:e]", fmt.Sprintf("%v", identify("0xab00", "0xCD00")))
322322
}
323+
324+
func TestPackageManagerClear(t *testing.T) {
325+
// Create a PackageManager and load the harware
326+
packageManager := packagemanager.NewPackageManager(customHardware, customHardware, customHardware, customHardware)
327+
packageManager.LoadHardwareFromDirectory(customHardware)
328+
329+
// Creates another PackageManager but don't load the hardware
330+
emptyPackageManager := packagemanager.NewPackageManager(customHardware, customHardware, customHardware, customHardware)
331+
332+
// Verifies they're not equal
333+
require.NotEqual(t, &packageManager, &emptyPackageManager)
334+
335+
// Clear the first PackageManager that contains loaded hardware
336+
packageManager.Clear()
337+
// Verifies both PackageManagers are now equal
338+
require.Equal(t, &packageManager, &emptyPackageManager)
339+
}

commands/instances.go

+7
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,13 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) *sta
175175
return status.Newf(codes.InvalidArgument, "Invalid instance ID")
176176
}
177177

178+
// We need to clear the PackageManager currently in use by this instance
179+
// in case this is not the first Init on this instances, that might happen
180+
// after reinitializing an instance after installing or uninstalling a core.
181+
// If this is not done the information of the uninstall core is kept in memory,
182+
// even if it should not.
183+
instance.PackageManager.Clear()
184+
178185
// Load Platforms
179186
urls := []string{globals.DefaultIndexURL}
180187
urls = append(urls, configuration.Settings.GetStringSlice("board_manager.additional_urls")...)

0 commit comments

Comments
 (0)