@@ -29,6 +29,7 @@ func hasStage(stages []instructions.Stage, name string) (int, bool) {
2929func 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