flags.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package main
  2. import (
  3. "errors"
  4. "flag"
  5. "fmt"
  6. "os"
  7. "strconv"
  8. "strings"
  9. "dev.hexasoftware.com/hxs/cloudmount/internal/core"
  10. )
  11. func parseFlags(config *core.Config) (err error) {
  12. var mountoptsFlag string
  13. flag.StringVar(&config.CloudFSDriver, "t", config.CloudFSDriver, "which cloud service to use [gdrive]")
  14. flag.BoolVar(&config.Daemonize, "d", false, "Run app in background")
  15. flag.BoolVar(&config.VerboseLog, "v", false, "Verbose log")
  16. flag.StringVar(&config.HomeDir, "w", config.HomeDir, "Work dir, path that holds configurations")
  17. flag.DurationVar(&config.RefreshTime, "r", config.RefreshTime, "Timed cloud synchronization interval [if applied]")
  18. flag.StringVar(&mountoptsFlag, "o", "", "uid,gid ex: -o uid=1000,gid=0 ")
  19. flag.Usage = func() {
  20. fmt.Fprintf(os.Stderr, "Usage: %s [options] MOUNTPOINT\n\n", os.Args[0])
  21. fmt.Fprintf(os.Stderr, "Options:\n")
  22. flag.PrintDefaults()
  23. fmt.Fprintf(os.Stderr, "\n")
  24. }
  25. flag.Parse()
  26. if len(flag.Args()) < 1 {
  27. flag.Usage()
  28. //fmt.Println("Usage:\n gdrivemount [-d] [-v] MOUNTPOINT")
  29. return errors.New("Missing parameter")
  30. }
  31. /////////////////////////////////////
  32. // Parse mount opts
  33. /////////////////
  34. pmountopts := strings.Split(mountoptsFlag, ",")
  35. mountopts := map[string]string{}
  36. for _, v := range pmountopts {
  37. if keyindex := strings.Index(v, "="); keyindex != -1 {
  38. key := strings.TrimSpace(v[:keyindex])
  39. value := strings.TrimSpace(v[keyindex+1:])
  40. mountopts[key] = value
  41. }
  42. }
  43. /////////////////////////////////////
  44. // Use mount opts
  45. ///////////////
  46. uidStr, ok := mountopts["uid"]
  47. if ok {
  48. uid, err := strconv.Atoi(uidStr)
  49. if err != nil {
  50. panic(err)
  51. }
  52. config.UID = uint32(uid)
  53. }
  54. gidStr, ok := mountopts["gid"]
  55. if ok {
  56. gid, err := strconv.Atoi(gidStr)
  57. if err != nil {
  58. panic(err)
  59. }
  60. config.GID = uint32(gid)
  61. }
  62. return
  63. }