Skip to content

Commit a8f3330

Browse files
committed
feat: add -o option
1 parent bcee074 commit a8f3330

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

main.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ func hasStage(stages []instructions.Stage, name string) (int, bool) {
2929
func main() {
3030
target := flag.String("target", "", "target stage name (required)")
3131
p := flag.String("f", "Dockerfile", "Dockerfile path")
32+
out := flag.String("o", "-", "generated Dockerfile path")
3233
flag.Parse()
3334

3435
if *target == "" {
@@ -42,20 +43,32 @@ func main() {
4243
} else {
4344
f, err := os.Open(*p)
4445
if err != nil {
45-
log.Fatal(err)
46+
log.Fatal("failed to open Dockerfile:", err)
4647
}
4748
defer f.Close()
4849
r = f
4950
}
5051

52+
var w io.Writer
53+
if *out == "-" {
54+
w = os.Stdout
55+
} else {
56+
f, err := os.Create(*out)
57+
if err != nil {
58+
log.Fatal("failed to create Dockerfile:", err)
59+
}
60+
defer f.Close()
61+
w = f
62+
}
63+
5164
result, err := parser.Parse(r)
5265
if err != nil {
53-
log.Fatal(err)
66+
log.Fatal("failed to parse Dockerfile:", err)
5467
}
5568

5669
stages, _, err := instructions.Parse(result.AST)
5770
if err != nil {
58-
log.Fatal(err)
71+
log.Fatal("failed to parse instructions:", err)
5972
}
6073

6174
required := make(map[string]struct{})
@@ -97,10 +110,10 @@ func main() {
97110
continue
98111
}
99112

100-
fmt.Println(stage.SourceCode)
113+
fmt.Fprintln(w, stage.SourceCode)
101114
for _, cmd := range stage.Commands {
102-
fmt.Println(cmd)
115+
fmt.Fprintln(w, cmd)
103116
}
104-
fmt.Println()
117+
fmt.Fprintln(w)
105118
}
106119
}

0 commit comments

Comments
 (0)