github.com/jpbruinsslot/dot@v0.0.0-20231229172555-797f05ba0642/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "os" 7 ) 8 9 const ( 10 version = "0.3.1" 11 ) 12 13 var ( 14 syncCmd = flag.NewFlagSet("sync", flag.ExitOnError) 15 addCmd = flag.NewFlagSet("add", flag.ExitOnError) 16 rmCmd = flag.NewFlagSet("rm", flag.ExitOnError) 17 listCmd = flag.NewFlagSet("list", flag.ExitOnError) 18 19 // Flags for 'add' command 20 addName = addCmd.String("name", "", "Name for the data") 21 addPath = addCmd.String("path", "", "Path to the data") 22 addPush = addCmd.Bool("push", false, "Push changes to a git repository") 23 24 // Flags for 'rm' command 25 rmName = rmCmd.String("name", "", "Name of the data to remove") 26 rmPush = rmCmd.Bool("push", false, "Push changes to a git repository") 27 ) 28 29 func main() { 30 if len(os.Args) < 2 { 31 printUsage() 32 os.Exit(0) 33 } 34 35 switch os.Args[1] { 36 case "sync": 37 syncCmd.Parse(os.Args[2:]) 38 39 if len(syncCmd.Args()) > 0 { 40 printUsage() 41 os.Exit(1) 42 } 43 44 CommandSync() 45 case "add": 46 addCmd.Parse(os.Args[2:]) 47 48 if *addName == "" || *addPath == "" { 49 addCmd.PrintDefaults() 50 os.Exit(1) 51 } 52 53 CommandAdd(*addName, *addPath, *addPush, false) 54 case "rm": 55 rmCmd.Parse(os.Args[2:]) 56 57 if *rmName == "" { 58 rmCmd.PrintDefaults() 59 os.Exit(1) 60 } 61 62 CommandRemove(*rmName, *rmPush) 63 case "list": 64 listCmd.Parse(os.Args[2:]) 65 66 if len(listCmd.Args()) > 0 { 67 printUsage() 68 os.Exit(1) 69 } 70 71 CommandList() 72 default: 73 printUsage() 74 os.Exit(0) 75 } 76 } 77 78 func printUsage() { 79 usage := fmt.Sprintf(`Dot - simple dotfile manager 80 81 Usage: 82 83 dot [command] [arguments] 84 85 Version: %s 86 87 Commands: 88 89 sync syncs all files that are being tracked 90 add add a file or folder for tracking 91 rm remove a file from tracking 92 list list all files that are being tracked 93 94 Use "dot [command] -help" for more information about a command. 95 `, version) 96 97 print(usage) 98 }