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  }