Skip to content

Commit b89f681

Browse files
committed
Prototype of multiple files handling
1 parent 1c2e446 commit b89f681

File tree

2 files changed

+43
-32
lines changed

2 files changed

+43
-32
lines changed

cmd/root.go

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,8 @@ func NewRootCmd() *cobra.Command {
2828
SilenceUsage: true,
2929
RunE: func(cmd *cobra.Command, args []string) error {
3030
var err error
31-
var reader io.Reader
31+
var readers []io.Reader
3232
var indent string
33-
var path string
3433

3534
inPlace, _ := cmd.Flags().GetBool("in-place")
3635

@@ -45,17 +44,23 @@ func NewRootCmd() *cobra.Command {
4544
return nil
4645
}
4746

48-
reader = os.Stdin
47+
readers = append(readers, os.Stdin)
4948
} else {
50-
path = args[len(args)-1]
51-
var err error
52-
if reader, err = os.Open(path); err != nil {
53-
return err
49+
for _, fileName := range args {
50+
f, err := os.Open(fileName)
51+
if err != nil {
52+
return err
53+
}
54+
defer func() {
55+
_ = f.Close()
56+
}()
57+
58+
readers = append(readers, f)
5459
}
5560
}
5661

57-
if path == "" && inPlace {
58-
return errors.New("in-place formatting requires a file path")
62+
if len(args) != 1 && inPlace {
63+
return errors.New("in-place formatting requires a file path (and only one file path)")
5964
}
6065

6166
xPathQuery, singleNode := getXpathQuery(cmd.Flags())
@@ -82,25 +87,27 @@ func NewRootCmd() *cobra.Command {
8287
_ = pw.Close()
8388
}()
8489

85-
if xPathQuery != "" {
86-
err = utils.XPathQuery(reader, pw, xPathQuery, singleNode, options)
87-
} else if cssQuery != "" {
88-
err = utils.CSSQuery(reader, pw, cssQuery, cssAttr, options)
89-
} else {
90-
var contentType utils.ContentType
91-
contentType, reader = detectFormat(cmd.Flags(), reader)
92-
if jsonOutputMode {
93-
err = processAsJSON(cmd.Flags(), reader, pw, contentType)
90+
for _, reader := range readers {
91+
if xPathQuery != "" {
92+
err = utils.XPathQuery(reader, pw, xPathQuery, singleNode, options)
93+
} else if cssQuery != "" {
94+
err = utils.CSSQuery(reader, pw, cssQuery, cssAttr, options)
9495
} else {
95-
switch contentType {
96-
case utils.ContentHtml:
97-
err = utils.FormatHtml(reader, pw, indent, colors)
98-
case utils.ContentXml:
99-
err = utils.FormatXml(reader, pw, indent, colors)
100-
case utils.ContentJson:
101-
err = utils.FormatJson(reader, pw, indent, colors)
102-
default:
103-
err = fmt.Errorf("unknown content type: %v", contentType)
96+
var contentType utils.ContentType
97+
contentType, reader = detectFormat(cmd.Flags(), reader)
98+
if jsonOutputMode {
99+
err = processAsJSON(cmd.Flags(), reader, pw, contentType)
100+
} else {
101+
switch contentType {
102+
case utils.ContentHtml:
103+
err = utils.FormatHtml(reader, pw, indent, colors)
104+
case utils.ContentXml:
105+
err = utils.FormatXml(reader, pw, indent, colors)
106+
case utils.ContentJson:
107+
err = utils.FormatJson(reader, pw, indent, colors)
108+
default:
109+
err = fmt.Errorf("unknown content type: %v", contentType)
110+
}
104111
}
105112
}
106113
}
@@ -112,6 +119,7 @@ func NewRootCmd() *cobra.Command {
112119
}()
113120

114121
if inPlace {
122+
var path = args[0]
115123
var content []byte
116124
if content, err = io.ReadAll(pr); err != nil {
117125
return err

test/pipe-test.sh

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
#!/bin/bash
22

3-
FILE=$1
3+
FILES=$@
44

5-
while read -r LINE; do
6-
echo $LINE
7-
sleep 1
8-
done < $FILE
5+
for FILE in $FILES; do
6+
echo "Processing file: $FILE"
7+
while read -r LINE; do
8+
echo $LINE
9+
sleep 1
10+
done < $FILE
11+
done

0 commit comments

Comments
 (0)