From 9715450918b23660b5f40078e2c802b04c63e26f Mon Sep 17 00:00:00 2001 From: Alessio Perugini Date: Tue, 12 Sep 2023 19:49:42 +0200 Subject: [PATCH] remove Progress from Context --- arduino/builder/builder.go | 10 ++++++++ arduino/builder/core.go | 14 +++-------- arduino/builder/libraries.go | 37 +++++++--------------------- arduino/builder/progress/progress.go | 18 ++++++++++++++ arduino/builder/sketch.go | 7 ++---- arduino/builder/sketch_test.go | 6 ++--- arduino/builder/utils/utils.go | 18 ++++---------- commands/compile/compile.go | 3 ++- legacy/builder/builder.go | 28 +++++++++------------ legacy/builder/test/builder_test.go | 4 +-- legacy/builder/types/context.go | 16 ------------ 11 files changed, 65 insertions(+), 96 deletions(-) diff --git a/arduino/builder/builder.go b/arduino/builder/builder.go index 5b1a0e46563..931c8b829c9 100644 --- a/arduino/builder/builder.go +++ b/arduino/builder/builder.go @@ -20,6 +20,7 @@ import ( "fmt" "github.com/arduino/arduino-cli/arduino/builder/logger" + "github.com/arduino/arduino-cli/arduino/builder/progress" "github.com/arduino/arduino-cli/arduino/cores" "github.com/arduino/arduino-cli/arduino/sketch" "github.com/arduino/go-paths-helper" @@ -59,6 +60,9 @@ type Builder struct { // Set to true to skip build and produce only Compilation Database onlyUpdateCompilationDatabase bool + // Progress of all various steps + Progress *progress.Struct + *BuildOptionsManager } @@ -78,6 +82,7 @@ func NewBuilder( sourceOverrides map[string]string, onlyUpdateCompilationDatabase bool, logger *logger.BuilderLogger, + progressStats *progress.Struct, ) (*Builder, error) { buildProperties := properties.NewMap() if boardBuildProperties != nil { @@ -126,6 +131,10 @@ func NewBuilder( return nil, ErrSketchCannotBeLocatedInBuildPath } + if progressStats == nil { + progressStats = progress.New(nil) + } + return &Builder{ sketch: sk, buildProperties: buildProperties, @@ -140,6 +149,7 @@ func NewBuilder( clean: clean, sourceOverrides: sourceOverrides, onlyUpdateCompilationDatabase: onlyUpdateCompilationDatabase, + Progress: progressStats, BuildOptionsManager: NewBuildOptionsManager( hardwareDirs, builtInToolsDirs, otherLibrariesDirs, builtInLibrariesDirs, buildPath, diff --git a/arduino/builder/core.go b/arduino/builder/core.go index d115bbdc919..8e266154594 100644 --- a/arduino/builder/core.go +++ b/arduino/builder/core.go @@ -24,12 +24,10 @@ import ( "github.com/arduino/arduino-cli/arduino/builder/compilation" "github.com/arduino/arduino-cli/arduino/builder/cpp" - "github.com/arduino/arduino-cli/arduino/builder/progress" "github.com/arduino/arduino-cli/arduino/builder/utils" "github.com/arduino/arduino-cli/arduino/cores" "github.com/arduino/arduino-cli/buildcache" f "github.com/arduino/arduino-cli/internal/algorithms" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/pkg/errors" ) @@ -38,7 +36,6 @@ import ( func (b *Builder) BuildCore( actualPlatform *cores.PlatformRelease, compilationDatabase *compilation.Database, - progress *progress.Struct, progressCB rpc.TaskProgressCB, ) (paths.PathList, *paths.Path, error) { if err := b.coreBuildPath.MkdirAll(); err != nil { return nil, nil, errors.WithStack(err) @@ -56,11 +53,7 @@ func (b *Builder) BuildCore( } } - archiveFile, objectFiles, err := b.compileCore( - actualPlatform, - compilationDatabase, - progress, progressCB, - ) + archiveFile, objectFiles, err := b.compileCore(actualPlatform, compilationDatabase) if err != nil { return nil, nil, errors.WithStack(err) } @@ -71,7 +64,6 @@ func (b *Builder) BuildCore( func (b *Builder) compileCore( actualPlatform *cores.PlatformRelease, compilationDatabase *compilation.Database, - progress *progress.Struct, progressCB rpc.TaskProgressCB, ) (*paths.Path, paths.PathList, error) { coreFolder := b.buildProperties.GetPath("build.core.path") variantFolder := b.buildProperties.GetPath("build.variant.path") @@ -92,7 +84,7 @@ func (b *Builder) compileCore( compilationDatabase, b.jobs, b.logger, - progress, progressCB, + b.Progress, ) if err != nil { return nil, nil, errors.WithStack(err) @@ -143,7 +135,7 @@ func (b *Builder) compileCore( compilationDatabase, b.jobs, b.logger, - progress, progressCB, + b.Progress, ) if err != nil { return nil, nil, errors.WithStack(err) diff --git a/arduino/builder/libraries.go b/arduino/builder/libraries.go index ecd310d3402..b0a559a3bcd 100644 --- a/arduino/builder/libraries.go +++ b/arduino/builder/libraries.go @@ -21,12 +21,10 @@ import ( "github.com/arduino/arduino-cli/arduino/builder/compilation" "github.com/arduino/arduino-cli/arduino/builder/cpp" - "github.com/arduino/arduino-cli/arduino/builder/progress" "github.com/arduino/arduino-cli/arduino/builder/utils" "github.com/arduino/arduino-cli/arduino/cores" "github.com/arduino/arduino-cli/arduino/libraries" f "github.com/arduino/arduino-cli/internal/algorithms" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" "github.com/pkg/errors" @@ -44,7 +42,6 @@ func (b *Builder) BuildLibraries( includesFolders paths.PathList, importedLibraries libraries.List, compilationDatabase *compilation.Database, - progress *progress.Struct, progressCB rpc.TaskProgressCB, ) (paths.PathList, error) { includes := f.Map(includesFolders.AsStrings(), cpp.WrapWithHyphenI) libs := importedLibraries @@ -53,11 +50,7 @@ func (b *Builder) BuildLibraries( return nil, errors.WithStack(err) } - librariesObjectFiles, err := b.compileLibraries( - libs, includes, - compilationDatabase, - progress, progressCB, - ) + librariesObjectFiles, err := b.compileLibraries(libs, includes, compilationDatabase) if err != nil { return nil, errors.WithStack(err) } @@ -124,34 +117,23 @@ func (b *Builder) findExpectedPrecompiledLibFolder( return nil } -func (b *Builder) compileLibraries( - libraries libraries.List, includes []string, - compilationDatabase *compilation.Database, - progress *progress.Struct, progressCB rpc.TaskProgressCB, -) (paths.PathList, error) { - progress.AddSubSteps(len(libraries)) - defer progress.RemoveSubSteps() +func (b *Builder) compileLibraries(libraries libraries.List, includes []string, compilationDatabase *compilation.Database) (paths.PathList, error) { + b.Progress.AddSubSteps(len(libraries)) + defer b.Progress.RemoveSubSteps() objectFiles := paths.NewPathList() for _, library := range libraries { libraryObjectFiles, err := b.compileLibrary( library, includes, compilationDatabase, - progress, progressCB, ) if err != nil { return nil, errors.WithStack(err) } objectFiles.AddAll(libraryObjectFiles) - progress.CompleteStep() - // PushProgress - if progressCB != nil { - progressCB(&rpc.TaskProgress{ - Percent: progress.Progress, - Completed: progress.Progress >= 100.0, - }) - } + b.Progress.CompleteStep() + b.Progress.PushProgress() } return objectFiles, nil @@ -160,7 +142,6 @@ func (b *Builder) compileLibraries( func (b *Builder) compileLibrary( library *libraries.Library, includes []string, compilationDatabase *compilation.Database, - progress *progress.Struct, progressCB rpc.TaskProgressCB, ) (paths.PathList, error) { if b.logger.Verbose() { b.logger.Info(tr(`Compiling library "%[1]s"`, library.Name)) @@ -227,7 +208,7 @@ func (b *Builder) compileLibrary( compilationDatabase, b.jobs, b.logger, - progress, progressCB, + b.Progress, ) if err != nil { return nil, errors.WithStack(err) @@ -258,7 +239,7 @@ func (b *Builder) compileLibrary( compilationDatabase, b.jobs, b.logger, - progress, progressCB, + b.Progress, ) if err != nil { return nil, errors.WithStack(err) @@ -273,7 +254,7 @@ func (b *Builder) compileLibrary( compilationDatabase, b.jobs, b.logger, - progress, progressCB, + b.Progress, ) if err != nil { return nil, errors.WithStack(err) diff --git a/arduino/builder/progress/progress.go b/arduino/builder/progress/progress.go index 2bdfaeb7539..a3fa9b09d9b 100644 --- a/arduino/builder/progress/progress.go +++ b/arduino/builder/progress/progress.go @@ -15,11 +15,19 @@ package progress +import rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" + // Struct fixdoc type Struct struct { Progress float32 StepAmount float32 Parent *Struct + callback rpc.TaskProgressCB +} + +// New fixdoc +func New(callback rpc.TaskProgressCB) *Struct { + return &Struct{callback: callback} } // AddSubSteps fixdoc @@ -46,3 +54,13 @@ func (p *Struct) RemoveSubSteps() { func (p *Struct) CompleteStep() { p.Progress += p.StepAmount } + +// PushProgress fixdoc +func (p *Struct) PushProgress() { + if p.callback != nil { + p.callback(&rpc.TaskProgress{ + Percent: p.Progress, + Completed: p.Progress >= 100.0, + }) + } +} diff --git a/arduino/builder/sketch.go b/arduino/builder/sketch.go index 5774da5e15a..ed279d6fbdb 100644 --- a/arduino/builder/sketch.go +++ b/arduino/builder/sketch.go @@ -25,12 +25,10 @@ import ( "github.com/arduino/arduino-cli/arduino/builder/compilation" "github.com/arduino/arduino-cli/arduino/builder/cpp" - "github.com/arduino/arduino-cli/arduino/builder/progress" "github.com/arduino/arduino-cli/arduino/builder/utils" "github.com/arduino/arduino-cli/arduino/sketch" "github.com/arduino/arduino-cli/i18n" f "github.com/arduino/arduino-cli/internal/algorithms" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/marcinbor85/gohex" @@ -185,7 +183,6 @@ func writeIfDifferent(source []byte, destPath *paths.Path) error { func (b *Builder) BuildSketch( includesFolders paths.PathList, compilationDatabase *compilation.Database, - progress *progress.Struct, progressCB rpc.TaskProgressCB, ) (paths.PathList, error) { includes := f.Map(includesFolders.AsStrings(), cpp.WrapWithHyphenI) @@ -199,7 +196,7 @@ func (b *Builder) BuildSketch( compilationDatabase, b.jobs, b.builderLogger, - progress, progressCB, + b.Progress, ) if err != nil { return nil, errors.WithStack(err) @@ -214,7 +211,7 @@ func (b *Builder) BuildSketch( compilationDatabase, b.jobs, b.builderLogger, - progress, progressCB, + b.Progress, ) if err != nil { return nil, errors.WithStack(err) diff --git a/arduino/builder/sketch_test.go b/arduino/builder/sketch_test.go index 9bf577a1686..86bf6e6fa16 100644 --- a/arduino/builder/sketch_test.go +++ b/arduino/builder/sketch_test.go @@ -54,7 +54,7 @@ func TestMergeSketchSources(t *testing.T) { b, err := NewBuilder( sk, nil, paths.New("testdata"), false, nil, 0, nil, - nil, nil, nil, nil, fqbn, false, nil, false, nil) + nil, nil, nil, nil, fqbn, false, nil, false, nil, nil) require.NoError(t, err) offset, source, err := b.sketchMergeSources(nil) @@ -73,7 +73,7 @@ func TestMergeSketchSourcesArduinoIncluded(t *testing.T) { // ensure not to include Arduino.h when it's already there b, err := NewBuilder(sk, nil, paths.New("testdata"), false, nil, 0, nil, - nil, nil, nil, nil, fqbn, false, nil, false, nil) + nil, nil, nil, nil, fqbn, false, nil, false, nil, nil) require.NoError(t, err) _, source, err := b.sketchMergeSources(nil) @@ -95,7 +95,7 @@ func TestCopyAdditionalFiles(t *testing.T) { require.NoError(t, err) b1, err := NewBuilder(sk1, nil, paths.New("testdata"), false, nil, 0, nil, - nil, nil, nil, nil, fqbn, false, nil, false, nil) + nil, nil, nil, nil, fqbn, false, nil, false, nil, nil) require.NoError(t, err) // copy the sketch over, create a fake main file we don't care about it diff --git a/arduino/builder/utils/utils.go b/arduino/builder/utils/utils.go index ea3f80c5326..f0ae458512a 100644 --- a/arduino/builder/utils/utils.go +++ b/arduino/builder/utils/utils.go @@ -33,7 +33,6 @@ import ( "github.com/arduino/arduino-cli/executils" "github.com/arduino/arduino-cli/i18n" f "github.com/arduino/arduino-cli/internal/algorithms" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" "github.com/arduino/go-paths-helper" "github.com/arduino/go-properties-orderedmap" "github.com/pkg/errors" @@ -358,7 +357,7 @@ func CompileFiles( compilationDatabase *compilation.Database, jobs int, builderLogger *logger.BuilderLogger, - progress *progress.Struct, progressCB rpc.TaskProgressCB, + progress *progress.Struct, ) (paths.PathList, error) { return compileFiles( onlyUpdateCompilationDatabase, @@ -368,7 +367,7 @@ func CompileFiles( false, buildPath, buildProperties, includes, builderLogger, - progress, progressCB, + progress, ) } @@ -381,7 +380,7 @@ func CompileFilesRecursive( compilationDatabase *compilation.Database, jobs int, builderLogger *logger.BuilderLogger, - progress *progress.Struct, progressCB rpc.TaskProgressCB, + progress *progress.Struct, ) (paths.PathList, error) { return compileFiles( onlyUpdateCompilationDatabase, @@ -391,7 +390,7 @@ func CompileFilesRecursive( true, buildPath, buildProperties, includes, builderLogger, - progress, progressCB, + progress, ) } @@ -406,7 +405,6 @@ func compileFiles( includes []string, builderLogger *logger.BuilderLogger, progress *progress.Struct, - progressCB rpc.TaskProgressCB, ) (paths.PathList, error) { validExtensions := []string{} for ext := range globals.SourceFilesValidExtensions { @@ -483,13 +481,7 @@ func compileFiles( queue <- source progress.CompleteStep() - // PushProgress - if progressCB != nil { - progressCB(&rpc.TaskProgress{ - Percent: progress.Progress, - Completed: progress.Progress >= 100.0, - }) - } + progress.PushProgress() } close(queue) wg.Wait() diff --git a/commands/compile/compile.go b/commands/compile/compile.go index b17b130040d..a599590a6b2 100644 --- a/commands/compile/compile.go +++ b/commands/compile/compile.go @@ -28,6 +28,7 @@ import ( "github.com/arduino/arduino-cli/arduino/builder/compilation" "github.com/arduino/arduino-cli/arduino/builder/detector" "github.com/arduino/arduino-cli/arduino/builder/logger" + "github.com/arduino/arduino-cli/arduino/builder/progress" "github.com/arduino/arduino-cli/arduino/cores" "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" "github.com/arduino/arduino-cli/arduino/sketch" @@ -178,7 +179,6 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream builderCtx.PackageManager = pme builderCtx.TargetPlatform = targetPlatform builderCtx.ActualPlatform = buildPlatform - builderCtx.ProgressCB = progressCB // FIXME: This will be redundant when arduino-builder will be part of the cli builderCtx.HardwareDirs = configuration.HardwareDirectories(configuration.Settings) @@ -208,6 +208,7 @@ func Compile(ctx context.Context, req *rpc.CompileRequest, outStream, errStream req.GetSourceOverride(), req.GetCreateCompilationDatabaseOnly(), builderLogger, + progress.New(progressCB), ) if err != nil { if strings.Contains(err.Error(), "invalid build properties") { diff --git a/legacy/builder/builder.go b/legacy/builder/builder.go index 9149f2bc309..6a5c9a9f3ca 100644 --- a/legacy/builder/builder.go +++ b/legacy/builder/builder.go @@ -67,7 +67,6 @@ func (s *Builder) Run(ctx *types.Context) error { sketchObjectFiles, err := ctx.Builder.BuildSketch( ctx.SketchLibrariesDetector.IncludeFolders(), ctx.CompilationDatabase, - &ctx.Progress, ctx.ProgressCB, ) if err != nil { return err @@ -96,7 +95,6 @@ func (s *Builder) Run(ctx *types.Context) error { ctx.SketchLibrariesDetector.IncludeFolders(), ctx.SketchLibrariesDetector.ImportedLibraries(), ctx.CompilationDatabase, - &ctx.Progress, ctx.ProgressCB, ) if err != nil { return err @@ -115,11 +113,7 @@ func (s *Builder) Run(ctx *types.Context) error { }), types.BareCommand(func(ctx *types.Context) error { - objectFiles, archiveFile, err := ctx.Builder.BuildCore( - ctx.ActualPlatform, - ctx.CompilationDatabase, - &ctx.Progress, ctx.ProgressCB, - ) + objectFiles, archiveFile, err := ctx.Builder.BuildCore(ctx.ActualPlatform, ctx.CompilationDatabase) ctx.CoreObjectsFiles = objectFiles ctx.CoreArchiveFilePath = archiveFile @@ -168,8 +162,8 @@ func (s *Builder) Run(ctx *types.Context) error { }), } - ctx.Progress.AddSubSteps(len(commands) + 5) - defer ctx.Progress.RemoveSubSteps() + ctx.Builder.Progress.AddSubSteps(len(commands) + 5) + defer ctx.Builder.Progress.RemoveSubSteps() for _, command := range commands { PrintRingNameIfDebug(ctx, command) @@ -178,8 +172,8 @@ func (s *Builder) Run(ctx *types.Context) error { mainErr = errors.WithStack(err) break } - ctx.Progress.CompleteStep() - ctx.PushProgress() + ctx.Builder.Progress.CompleteStep() + ctx.Builder.Progress.PushProgress() } if ctx.CompilationDatabase != nil { @@ -220,8 +214,8 @@ func (s *Builder) Run(ctx *types.Context) error { otherErr = errors.WithStack(err) break } - ctx.Progress.CompleteStep() - ctx.PushProgress() + ctx.Builder.Progress.CompleteStep() + ctx.Builder.Progress.PushProgress() } if mainErr != nil { @@ -278,8 +272,8 @@ func (s *Preprocess) Run(ctx *types.Context) error { } func runCommands(ctx *types.Context, commands []types.Command) error { - ctx.Progress.AddSubSteps(len(commands)) - defer ctx.Progress.RemoveSubSteps() + ctx.Builder.Progress.AddSubSteps(len(commands)) + defer ctx.Builder.Progress.RemoveSubSteps() for _, command := range commands { PrintRingNameIfDebug(ctx, command) @@ -287,8 +281,8 @@ func runCommands(ctx *types.Context, commands []types.Command) error { if err != nil { return errors.WithStack(err) } - ctx.Progress.CompleteStep() - ctx.PushProgress() + ctx.Builder.Progress.CompleteStep() + ctx.Builder.Progress.PushProgress() } return nil } diff --git a/legacy/builder/test/builder_test.go b/legacy/builder/test/builder_test.go index 11082e44a09..7262e990efa 100644 --- a/legacy/builder/test/builder_test.go +++ b/legacy/builder/test/builder_test.go @@ -106,7 +106,7 @@ func prepareBuilderTestContext(t *testing.T, ctx *types.Context, sketchPath *pat ctx.Builder, err = bldr.NewBuilder( sk, nil, buildPath, false, nil, 0, nil, ctx.HardwareDirs, ctx.BuiltInToolsDirs, ctx.OtherLibrariesDirs, - ctx.BuiltInLibrariesDirs, parseFQBN(t, "a:b:c"), false, nil, false, builderLogger, + ctx.BuiltInLibrariesDirs, parseFQBN(t, "a:b:c"), false, nil, false, builderLogger, nil, ) require.NoError(t, err) if fqbnString != "" { @@ -119,7 +119,7 @@ func prepareBuilderTestContext(t *testing.T, ctx *types.Context, sketchPath *pat ctx.Builder, err = bldr.NewBuilder( sk, boardBuildProperties, buildPath, false, nil, 0, nil, ctx.HardwareDirs, ctx.BuiltInToolsDirs, ctx.OtherLibrariesDirs, - ctx.BuiltInLibrariesDirs, fqbn, false, nil, false, builderLogger) + ctx.BuiltInLibrariesDirs, fqbn, false, nil, false, builderLogger, nil) require.NoError(t, err) ctx.PackageManager = pme diff --git a/legacy/builder/types/context.go b/legacy/builder/types/context.go index 8769b643666..cc8f45c8b33 100644 --- a/legacy/builder/types/context.go +++ b/legacy/builder/types/context.go @@ -20,10 +20,8 @@ import ( "github.com/arduino/arduino-cli/arduino/builder/compilation" "github.com/arduino/arduino-cli/arduino/builder/detector" "github.com/arduino/arduino-cli/arduino/builder/logger" - "github.com/arduino/arduino-cli/arduino/builder/progress" "github.com/arduino/arduino-cli/arduino/cores" "github.com/arduino/arduino-cli/arduino/cores/packagemanager" - rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" paths "github.com/arduino/go-paths-helper" ) @@ -51,23 +49,9 @@ type Context struct { // C++ Parsing LineOffset int - // Dry run, only create progress map - Progress progress.Struct - // Send progress events to this callback - ProgressCB rpc.TaskProgressCB - // Sizer results ExecutableSectionsSize builder.ExecutablesFileSections // Compilation Database to build/update CompilationDatabase *compilation.Database } - -func (ctx *Context) PushProgress() { - if ctx.ProgressCB != nil { - ctx.ProgressCB(&rpc.TaskProgress{ - Percent: ctx.Progress.Progress, - Completed: ctx.Progress.Progress >= 100.0, - }) - } -}