From 9c779c4c9d814c9f81920edce9f27642913ad2ed Mon Sep 17 00:00:00 2001 From: Valentin Kiselev Date: Fri, 14 Oct 2022 14:36:44 +0300 Subject: [PATCH] feature: Show current running command and script name(s) Signed-off-by: Valentin Kiselev --- internal/lefthook/runner/runner.go | 3 ++ internal/log/log.go | 50 +++++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/internal/lefthook/runner/runner.go b/internal/lefthook/runner/runner.go index 6b9e890f..d8fbac02 100644 --- a/internal/lefthook/runner/runner.go +++ b/internal/lefthook/runner/runner.go @@ -397,6 +397,9 @@ func replaceQuoted(source, substitution string, files []string) string { } func (r *Runner) run(opts RunOptions) { + log.SetName(opts.name) + defer log.UnsetName(opts.name) + out, err := r.exec.Execute(opts.root, opts.args, opts.interactive) var execName string diff --git a/internal/log/log.go b/internal/log/log.go index 5fe52c4b..1557de86 100644 --- a/internal/log/log.go +++ b/internal/log/log.go @@ -26,6 +26,7 @@ const ( spinnerCharSet = 14 spinnerRefreshRate = 100 * time.Millisecond + spinnerText = " waiting" ) type Logger struct { @@ -34,6 +35,7 @@ type Logger struct { out io.Writer mu sync.Mutex spinner *spinner.Spinner + names []string } func New() *Logger { @@ -44,7 +46,7 @@ func New() *Logger { spinner: spinner.New( spinner.CharSets[spinnerCharSet], spinnerRefreshRate, - spinner.WithSuffix(" waiting"), + spinner.WithSuffix(spinnerText), ), } } @@ -196,6 +198,52 @@ func (l *Logger) Log(level Level, args ...interface{}) { } } +func SetName(name string) { + std.SetName(name) +} + +func UnsetName(name string) { + std.UnsetName(name) +} + +func (l *Logger) SetName(name string) { + l.mu.Lock() + defer l.mu.Unlock() + + if l.spinner.Active() { + l.spinner.Stop() + defer l.spinner.Start() + } + + l.names = append(l.names, name) + l.spinner.Suffix = fmt.Sprintf("%s: %s", spinnerText, strings.Join(l.names, ", ")) +} + +func (l *Logger) UnsetName(name string) { + l.mu.Lock() + defer l.mu.Unlock() + + if l.spinner.Active() { + l.spinner.Stop() + defer l.spinner.Start() + } + + newNames := make([]string, 0, len(l.names)-1) + for _, n := range l.names { + if n != name { + newNames = append(newNames, n) + } + } + + l.names = newNames + + if len(l.names) != 0 { + l.spinner.Suffix = fmt.Sprintf("%s: %s", spinnerText, strings.Join(l.names, ", ")) + } else { + l.spinner.Suffix = spinnerText + } +} + func (l *Logger) Logf(level Level, format string, args ...interface{}) { if l.IsLevelEnabled(level) { l.Printf(format, args...)