| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package main |
| |
| import ( |
| "context" |
| "flag" |
| "io" |
| "log" |
| "os" |
| "path/filepath" |
| "strings" |
| |
| "go.fuchsia.dev/tools/gndoc" |
| ) |
| |
| type stringsFlag []string |
| |
| func (s *stringsFlag) String() string { |
| return strings.Join(*s, ", ") |
| } |
| |
| func (s *stringsFlag) Set(value string) error { |
| *s = append(*s, value) |
| return nil |
| } |
| |
| var ( |
| keyArgs stringsFlag |
| inputFiles stringsFlag |
| outFile string |
| sourcesFile string |
| ) |
| |
| func init() { |
| flag.Var(&keyArgs, "key", "a label for output") |
| flag.Var(&inputFiles, "in", "path to an input file") |
| flag.StringVar(&outFile, "out", "", "path to output file (default stdout)") |
| flag.StringVar(&sourcesFile, "s", "", "path to json file generated by Jiri projects") |
| } |
| |
| func main() { |
| flag.Parse() |
| if flag.NArg() != 0 { |
| flag.PrintDefaults() |
| } |
| |
| if sourcesFile == "" { |
| log.Fatalf("Error: no Jiri project reference file specified.\nTo generate, use jiri project -json-output=<file>.\n") |
| } |
| |
| // Open the json file. |
| sources, err := os.Open(sourcesFile) |
| if err != nil { |
| log.Fatalf("Error: unable to open %s", sourcesFile) |
| } |
| defer sources.Close() |
| |
| ctx := context.Background() |
| sourceMap, err := gndoc.NewSourceMap(sources) |
| if err != nil { |
| log.Fatalf("Error: %s", err) |
| } |
| argMap := gndoc.NewArgMap(sourceMap) |
| |
| args, errs := gndoc.ParseGNArgs(ctx, inputFiles, keyArgs) |
| argMap.AddArgs(args) |
| if err := <-errs; err != nil { |
| log.Fatalf("Error: %s\n", err) |
| } |
| |
| var out io.Writer |
| if outFile != "" { |
| var err error |
| if dirErr := os.MkdirAll(filepath.Dir(outFile), os.ModePerm); dirErr != nil { |
| log.Fatalf("Error creating directories: %s", dirErr) |
| } |
| out, err = os.Create(outFile) |
| if err != nil { |
| log.Fatalf("Error opening file: %s", err) |
| } |
| } else { |
| out = os.Stdout |
| } |
| |
| argMap.EmitMarkdown(out) |
| } |