123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package taskfile
- import (
- "bufio"
- "context"
- "fmt"
- "os"
- "strings"
- "github.com/go-task/task/v3/internal/execext"
- "github.com/go-task/task/v3/internal/filepathext"
- )
- // A StdinNode is a node that reads a taskfile from the standard input stream.
- type StdinNode struct {
- *BaseNode
- }
- func NewStdinNode(dir string) (*StdinNode, error) {
- return &StdinNode{
- BaseNode: NewBaseNode(dir),
- }, nil
- }
- func (node *StdinNode) Location() string {
- return "__stdin__"
- }
- func (node *StdinNode) Remote() bool {
- return false
- }
- func (node *StdinNode) Read(ctx context.Context) ([]byte, error) {
- var stdin []byte
- scanner := bufio.NewScanner(os.Stdin)
- for scanner.Scan() {
- stdin = fmt.Appendln(stdin, scanner.Text())
- }
- if err := scanner.Err(); err != nil {
- return nil, err
- }
- return stdin, nil
- }
- func (node *StdinNode) ResolveEntrypoint(entrypoint string) (string, error) {
- // If the file is remote, we don't need to resolve the path
- if strings.Contains(entrypoint, "://") {
- return entrypoint, nil
- }
- path, err := execext.Expand(entrypoint)
- if err != nil {
- return "", err
- }
- if filepathext.IsAbs(path) {
- return path, nil
- }
- return filepathext.SmartJoin(node.Dir(), path), nil
- }
- func (node *StdinNode) ResolveDir(dir string) (string, error) {
- path, err := execext.Expand(dir)
- if err != nil {
- return "", err
- }
- if filepathext.IsAbs(path) {
- return path, nil
- }
- return filepathext.SmartJoin(node.Dir(), path), nil
- }
- func (node *StdinNode) FilenameAndLastDir() (string, string) {
- return "", "__stdin__"
- }
|