Skip to content

Commit

Permalink
Adds spinner logic to runcommands
Browse files Browse the repository at this point in the history
  • Loading branch information
Blaize Kaye committed Jan 17, 2025
1 parent fe0a748 commit c03a8c8
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 1 deletion.
5 changes: 5 additions & 0 deletions cmd/sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,11 @@ func syncCommandRun(cmd *cobra.Command, args []string) {
}

if !noCliInteraction {

// We'll set the spinner utility to show
utils.SetShowSpinner(true)

// Ask for confirmation
confirmationResult, err := confirmPrompt(fmt.Sprintf("Project: %s - you are about to sync %s from %s to %s, is this correct",
ProjectName,
SyncerType,
Expand Down
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,12 @@ require (
)

require (
github.com/briandowns/spinner v1.23.1 // indirect
github.com/chzyer/readline v1.5.1 // indirect
github.com/distribution/distribution/v3 v3.0.0-20210316161203-a01c71e2477e // indirect
github.com/docker/go-connections v0.4.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/fatih/color v1.14.1 // indirect
github.com/fsnotify/fsnotify v1.8.0 // indirect
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
github.com/google/uuid v1.6.0 // indirect
Expand Down
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/briandowns/spinner v1.23.1 h1:t5fDPmScwUjozhDj4FA46p5acZWIPXYE30qW2Ptu650=
github.com/briandowns/spinner v1.23.1/go.mod h1:LaZeM4wm2Ywy6vO571mvhQNRcWfRUnXOs0RcKV0wYKM=
github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50=
Expand Down Expand Up @@ -46,6 +48,8 @@ github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHz
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w=
github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg=
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
Expand Down
12 changes: 11 additions & 1 deletion utils/shell.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,14 @@ func Shellout(command string) (error, string, string) {
cmd := exec.Command(ShellToUse, "-c", command)
cmd.Stdout = &stdout
cmd.Stderr = &stderr
err := cmd.Run()
err := cmd.Start()
if err != nil {
return err, "", ""
}
//err := cmd.Run()
ShowSpinner()
defer HideSpinner()
err = cmd.Wait()
return err, stdout.String(), stderr.String()
}

Expand Down Expand Up @@ -162,7 +169,10 @@ func RemoteShellout(command string, remoteUser string, remoteHost string, remote
return err, outputBuffer.String()
}
// Wait for the command to complete
ShowSpinner()
defer HideSpinner()
err = session.Wait()

if err != nil {
return err, outputBuffer.String()
}
Expand Down
51 changes: 51 additions & 0 deletions utils/spinner.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package utils

import (
spinner2 "github.com/briandowns/spinner"
"sync"
"time"
)

// This package controls whether there's a spinner displayed or not. To be used in longer running processes.
// Mainly, it's a wrapper around briandowns/spinner.

var showSpinner bool
var spinnerMx sync.Mutex

var spinner *spinner2.Spinner

func SetShowSpinner(spin bool) {
spinnerMx.Lock()
defer spinnerMx.Unlock()
showSpinner = spin
}

func ShowSpinner() {
spinnerMx.Lock()
defer spinnerMx.Unlock()
if showSpinner {
if spinner != nil {
if spinner.Active() {
return
}
} else {
spinner = spinner2.New(spinner2.CharSets[9], 100*time.Millisecond)
}
spinner.Start()
}
}

func HideSpinner() {
spinnerMx.Lock()
defer spinnerMx.Unlock()
if showSpinner && spinner != nil {
if spinner.Active() {
spinner.Stop()
}
spinner = nil
}
}

func init() {
spinnerMx = sync.Mutex{}
}

0 comments on commit c03a8c8

Please sign in to comment.