func list(ctx *gb.Context, args []string) error { gb.Debugf("list: %v", args) if formatStdin { var formatBuffer bytes.Buffer io.Copy(&formatBuffer, os.Stdin) format = formatBuffer.String() } args = cmd.ImportPaths(ctx, cmd.MustGetwd(), args) pkgs, err := cmd.ResolvePackages(ctx, args...) if err != nil { gb.Fatalf("unable to resolve: %v", err) } if jsonOutput { views := make([]*PackageView, 0, len(pkgs)) for _, pkg := range pkgs { views = append(views, NewPackageView(pkg)) } encoder := json.NewEncoder(os.Stdout) if err := encoder.Encode(views); err != nil { return fmt.Errorf("Error occurred during json encoding: %v", err) } } else { tmpl, err := template.New("list").Parse(format) if err != nil { return fmt.Errorf("unable to parse template %q: %v", format, err) } for _, pkg := range pkgs { if err := tmpl.Execute(os.Stdout, pkg); err != nil { return fmt.Errorf("unable to execute template: %v", err) } fmt.Fprintln(os.Stdout) } } return nil }
func main() { args := os.Args if len(args) < 2 || args[1] == "-h" { fs.Usage() os.Exit(1) } name := args[1] if name == "help" { help(args[2:]) return } command, ok := commands[name] if (command != nil && !command.Runnable()) || !ok { if _, err := lookupPlugin(name); err != nil { gb.Errorf("unknown command %q", name) fs.Usage() os.Exit(1) } command = commands["plugin"] } // add extra flags if necessary if command.AddFlags != nil { command.AddFlags(fs) } var err error if command.FlagParse != nil { err = command.FlagParse(fs, args) } else { err = fs.Parse(args[2:]) } if err != nil { gb.Fatalf("could not parse flags: %v", err) } args = fs.Args() // reset args to the leftovers from fs.Parse if command == commands["plugin"] { args = append([]string{name}, args...) } cwd, err := filepath.Abs(cwd) // if cwd was passed in via -R, make sure it is absolute if err != nil { gb.Fatalf("could not make project root absolute: %v", err) } ctx, err := cmd.NewContext( cwd, // project root gb.GcToolchain(), gb.Gcflags(gcflags), gb.Ldflags(ldflags), ) if err != nil { gb.Fatalf("unable to construct context: %v", err) } if command.ParseArgs != nil { args = command.ParseArgs(ctx, ctx.Projectdir(), args) } else { args = cmd.ImportPaths(ctx, ctx.Projectdir(), args) } gb.Debugf("args: %v", args) if err := command.Run(ctx, args); err != nil { gb.Fatalf("command %q failed: %v", name, err) } }