main.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package main
  2. import (
  3. "flag"
  4. "os"
  5. "git.lattuga.net/blallo/papero/cli"
  6. "git.lattuga.net/blallo/papero/config"
  7. "github.com/withmandala/go-log"
  8. )
  9. var Session struct {
  10. Info cli.ProgramInfo
  11. Config *config.AccountData
  12. }
  13. var Log *log.Logger
  14. func init() {
  15. info := InfoCmd{}
  16. Session.Info.Commands = cli.CommandMap{
  17. "info": info,
  18. }
  19. Session.Info.Name = "papero"
  20. flag.Usage = func() { cli.Usage(os.Stdout, Session.Info) }
  21. Log = log.New(os.Stdout)
  22. }
  23. func main() {
  24. var configPath string
  25. flag.StringVar(&Session.Info.Opts.ConfigPath, "config", "", "path to the configuration")
  26. flag.BoolVar(&Session.Info.Opts.Debug, "debug", false, "execute in debug mode")
  27. flag.StringVar(&Session.Info.Opts.ConfigStanza, "account", "", "specify which account to use")
  28. flag.Parse()
  29. args := flag.Args()
  30. if len(args) == 0 {
  31. cli.Usage(os.Stderr, Session.Info)
  32. os.Exit(1)
  33. }
  34. if Session.Info.Opts.Debug {
  35. Log.WithDebug()
  36. Log.Debugf(
  37. "opts -> config: %s\tdebug: %v\taccount: %s\n",
  38. Session.Info.Opts.ConfigPath,
  39. Session.Info.Opts.Debug,
  40. Session.Info.Opts.ConfigStanza,
  41. )
  42. }
  43. if Session.Info.Opts.ConfigPath == "" {
  44. var err error
  45. configPath, err = config.Find()
  46. if err != nil {
  47. Log.Fatal(err)
  48. }
  49. } else {
  50. configPath = Session.Info.Opts.ConfigPath
  51. }
  52. fullConfig, err := config.Parse(configPath)
  53. if err != nil {
  54. os.Exit(2)
  55. }
  56. var ok bool
  57. var account string
  58. if Session.Info.Opts.ConfigStanza != "" {
  59. account = Session.Info.Opts.ConfigStanza
  60. Session.Config, ok = fullConfig.Accounts[account]
  61. } else {
  62. account = fullConfig.Default
  63. Session.Config, ok = fullConfig.Accounts[account]
  64. }
  65. if !ok {
  66. Log.Error("Account not found in config:", account)
  67. os.Exit(2)
  68. }
  69. err = Session.Info.Commands[args[0]].Func(args)
  70. if err != nil {
  71. Log.Error(err)
  72. os.Exit(-1)
  73. }
  74. }