1
0
mirror of https://github.com/go-task/task.git synced 2025-06-08 23:56:21 +02:00

fix(remote): wait for prompt in the reader (#1833)

This commit is contained in:
Valentin Maerten 2024-09-24 13:21:09 -04:00 committed by GitHub
parent 38d0fc2c55
commit 30c59bf387
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -4,6 +4,7 @@ import (
"context" "context"
"fmt" "fmt"
"os" "os"
"sync"
"time" "time"
"github.com/dominikbraun/graph" "github.com/dominikbraun/graph"
@ -30,14 +31,15 @@ Continue?`
// A Reader will recursively read Taskfiles from a given source using a directed // A Reader will recursively read Taskfiles from a given source using a directed
// acyclic graph (DAG). // acyclic graph (DAG).
type Reader struct { type Reader struct {
graph *ast.TaskfileGraph graph *ast.TaskfileGraph
node Node node Node
insecure bool insecure bool
download bool download bool
offline bool offline bool
timeout time.Duration timeout time.Duration
tempDir string tempDir string
logger *logger.Logger logger *logger.Logger
promptMutex sync.Mutex
} }
func NewReader( func NewReader(
@ -50,14 +52,15 @@ func NewReader(
logger *logger.Logger, logger *logger.Logger,
) *Reader { ) *Reader {
return &Reader{ return &Reader{
graph: ast.NewTaskfileGraph(), graph: ast.NewTaskfileGraph(),
node: node, node: node,
insecure: insecure, insecure: insecure,
download: download, download: download,
offline: offline, offline: offline,
timeout: timeout, timeout: timeout,
tempDir: tempDir, tempDir: tempDir,
logger: logger, logger: logger,
promptMutex: sync.Mutex{},
} }
} }
@ -244,12 +247,16 @@ func (r *Reader) readNode(node Node) (*ast.Taskfile, error) {
// If there is a cached hash, but it doesn't match the expected hash, prompt the user to continue // If there is a cached hash, but it doesn't match the expected hash, prompt the user to continue
prompt = fmt.Sprintf(taskfileChangedPrompt, node.Location()) prompt = fmt.Sprintf(taskfileChangedPrompt, node.Location())
} }
if prompt != "" { if prompt != "" {
if err := r.logger.Prompt(logger.Yellow, prompt, "n", "y", "yes"); err != nil { if err := func() error {
r.promptMutex.Lock()
defer r.promptMutex.Unlock()
return r.logger.Prompt(logger.Yellow, prompt, "n", "y", "yes")
}(); err != nil {
return nil, &errors.TaskfileNotTrustedError{URI: node.Location()} return nil, &errors.TaskfileNotTrustedError{URI: node.Location()}
} }
} }
// If the hash has changed (or is new) // If the hash has changed (or is new)
if checksum != cachedChecksum { if checksum != cachedChecksum {
// Store the checksum // Store the checksum