| package main |
| |
| import ( |
| "flag" |
| "log" |
| "os" |
| "path/filepath" |
| ) |
| |
| var fs = flag.NewFlagSet(os.Args[0], flag.ExitOnError) |
| |
| func init() { |
| fs.Usage = usage |
| } |
| |
| type Command struct { |
| Name string |
| UsageLine string |
| Short string |
| Long string |
| Run func(args []string) error |
| AddFlags func(fs *flag.FlagSet) |
| } |
| |
| var commands = []*Command{ |
| cmdFetch, |
| cmdRebuild, |
| cmdUpdate, |
| cmdList, |
| cmdDelete, |
| } |
| |
| func main() { |
| args := os.Args[1:] |
| |
| switch { |
| case len(args) < 1, args[0] == "-h", args[0] == "-help": |
| printUsage(os.Stdout) |
| os.Exit(0) |
| case args[0] == "help": |
| help(args[1:]) |
| return |
| } |
| |
| for _, command := range commands { |
| if command.Name == args[0] { |
| |
| // add extra flags if necessary |
| if command.AddFlags != nil { |
| command.AddFlags(fs) |
| } |
| |
| if err := fs.Parse(args[1:]); err != nil { |
| log.Fatalf("could not parse flags: %v", err) |
| } |
| args = fs.Args() // reset args to the leftovers from fs.Parse |
| |
| if err := command.Run(args); err != nil { |
| log.Fatalf("command %q failed: %v", command.Name, err) |
| } |
| return |
| } |
| } |
| log.Fatalf("unknown command %q ", args[0]) |
| } |
| |
| const manifestfile = "manifest" |
| |
| func vendorDir() string { |
| wd, err := os.Getwd() |
| if err != nil { |
| log.Fatal(err) |
| } |
| return filepath.Join(wd, "vendor") |
| } |
| |
| func manifestFile() string { |
| return filepath.Join(vendorDir(), manifestfile) |
| } |