@@ -11,6 +11,7 @@ import (
1111 "os"
1212 "os/exec"
1313 "path/filepath"
14+ "runtime"
1415 "strings"
1516
1617 "github.com/Masterminds/semver"
@@ -59,6 +60,23 @@ const (
5960var totalPluginsToInstall = 0
6061var pluginsInstalledCount = 0
6162var execCommand = exec .Command
63+ var spinner component.OutputWriterSpinner
64+
65+ func init () {
66+ // Initialize global spinner
67+ spinner = component .NewOutputWriterSpinner (component .WithOutputStream (os .Stderr ))
68+ runtime .SetFinalizer (spinner , func (s component.OutputWriterSpinner ) {
69+ if s != nil {
70+ s .StopSpinner ()
71+ }
72+ })
73+ }
74+
75+ func StopSpinner () {
76+ if spinner != nil {
77+ spinner .StopSpinner ()
78+ }
79+ }
6280
6381type DeletePluginOptions struct {
6482 Target configtypes.Target
@@ -609,7 +627,6 @@ func InstallPluginsFromGroup(pluginName, groupIDAndVersion string, options ...Pl
609627 // from the database
610628 groupIDAndVersion = fmt .Sprintf ("%s-%s/%s:%s" , pg .Vendor , pg .Publisher , pg .Name , pg .RecommendedVersion )
611629 log .Infof ("Installing plugins from plugin group '%s'" , groupIDAndVersion )
612-
613630 return InstallPluginsFromGivenPluginGroup (pluginName , groupIDAndVersion , pg )
614631}
615632
@@ -662,6 +679,7 @@ func InstallPluginsFromGivenPluginGroup(pluginName, groupIDAndVersion string, pg
662679 }
663680 SetTotalPluginsToInstall (0 )
664681 SetPluginsInstalledCount (0 )
682+ defer StopSpinner ()
665683
666684 return groupIDAndVersion , nil
667685}
@@ -767,16 +785,12 @@ func installOrUpgradePlugin(p *discovery.Discovered, version string, installTest
767785 numPluginsInstalled := fmt .Sprintf ("%d plugins installed out of %d" , pluginsInstalledCount , totalPluginsToInstall )
768786 numPluginsInstalledWithLog := fmt .Sprintf ("%s%s" , log .GetLogTypeIndicator (log .LogTypeERROR ), numPluginsInstalled )
769787 errMsg = fmt .Sprintf ("%s\n %s" , errMsg , numPluginsInstalledWithLog )
770- var spinner component.OutputWriterSpinner
771788
772789 // Initialize the spinner if the spinner is allowed
773- if component .IsTTYEnabled () {
774- // Initialize the spinner
775- spinner = component .NewOutputWriterSpinner (component .WithOutputStream (os .Stderr ),
776- component .WithSpinnerText (installingMsg ),
777- component .WithSpinnerStarted ())
790+ if component .IsTTYEnabled () && spinner != nil {
791+ spinner .SetText (installingMsg )
778792 spinner .SetFinalText (errMsg , log .LogTypeERROR )
779- defer spinner .StopSpinner ()
793+ spinner .StartSpinner ()
780794 } else {
781795 log .Info (installingMsg )
782796 }
0 commit comments