adding lock command, generalizing the checkfiletypes function

This commit is contained in:
2020-06-04 17:38:26 -04:00
parent 0276a1d776
commit db2221c515
8 changed files with 348 additions and 118 deletions

View File

@@ -61,6 +61,9 @@ func main() {
// Adding the refresh command
refreshCommand(cli, &conf)
// Adding the "remote" commands
remoteCommands(cli, &conf)
err = cli.Run()
if err != nil {
fmt.Printf("Error occurred: %v\n", err)
@@ -85,8 +88,9 @@ func validateRepo() bool {
return true
}
// refreshCommand contacts the server and pulls down locked files/commits/etc to the client (like git fetch)
func refreshCommand(cli *clir.Cli, conf *clientconfig.Gvcconfig) {
refreshCmd := cli.NewSubCommand("refresh", "pulls down all locks unknown to client pushes")
refreshCmd := cli.NewSubCommand("refresh", "pulls down all locks/branches/commits unknown to client")
refreshCmd.LongDescription("Works similar to git fetch where it shows the number of commits pushed to server/branches that the client doesn't know as well as file/folder locks")
refreshCmd.Action(func() error {
isRepo := validateRepo()
@@ -94,7 +98,10 @@ func refreshCommand(cli *clir.Cli, conf *clientconfig.Gvcconfig) {
fmt.Println("no valid repo found.. please run 'init' to setup a repo first")
os.Exit(0)
}
err := clientcmd.RefreshContent(conf)
if err != nil {
return fmt.Errorf("unable to refresh content: %s", err)
}
return nil
})
}
@@ -193,44 +200,6 @@ func addCommands(cli *clir.Cli, conf *clientconfig.Gvcconfig) {
}
return nil
})
//The add remote command
remoteCmd := addCmd.NewSubCommand("remote", "add/delete/show remotes")
var name string
var host string
var port int
var defaultRemote bool
remoteAddCmd := remoteCmd.NewSubCommand("add", "add a remote, requires -name -host and -port")
remoteAddCmd.LongDescription("Adds a remote to the .gvcconfig.toml. Requires the -name, -host and -port flags. Example: gvc remote add -name exampleRemote -host examplehost.com -port 8080")
nameFlag := remoteAddCmd.StringFlag("name", "the name you want for your remote server", &name)
nameFlag.FlagShortCut("name", "n")
remoteAddCmd.FlagRequired("name")
hostFlag := remoteAddCmd.StringFlag("host", "the hostname or IP Address of the remote", &host)
hostFlag.FlagShortCut("host", "h")
remoteAddCmd.FlagRequired("host")
portFlag := remoteAddCmd.IntFlag("port", "the port the remote server is listening on", &port)
portFlag.FlagShortCut("port", "p")
remoteAddCmd.FlagRequired("port")
defaultFlag := remoteAddCmd.BoolFlag("default", "is used, the repo is set as default. (if first remote automatically set as default)", &defaultRemote)
defaultFlag.FlagShortCut("default", "d")
remoteAddCmd.Action(func() error {
isRepo := validateRepo()
if !isRepo {
fmt.Println("no valid repo found.. please run 'init' to setup a repo first")
os.Exit(0)
}
if name == "" || host == "" || port == 0 || port == 1 || port > 65535 {
fmt.Println("incorrect input found, exiting, ensure you entered a valid port")
os.Exit(0)
}
newRemotes, err := clientcmd.AddRemote(name, host, port, defaultRemote, conf.Remotes)
conf.Remotes = newRemotes //Overwriting the old Remote list with new list
if err != nil {
return fmt.Errorf("error adding remote: %s", err)
}
return nil
})
}
func ignoreCommands(cli *clir.Cli, conf *clientconfig.Gvcconfig) {
@@ -415,3 +384,150 @@ func infoCommands(cli *clir.Cli, conf *clientconfig.Gvcconfig) {
// return nil
// })
}
func remoteCommands(cli *clir.Cli, conf *config.Gvcconfig) {
//The add remote command
remoteCmd := cli.NewSubCommand("remote", "add/delete/show remotes")
var name string
var host string
var port int
var defaultRemote bool
remoteAddCmd := remoteCmd.NewSubCommand("add", "add a remote, requires -name -host and -port")
remoteAddCmd.LongDescription("Adds a remote to the .gvcconfig.toml. Requires the -name, -host and -port flags. Example: gvc remote add -name exampleRemote -host examplehost.com -port 8080")
nameFlag := remoteAddCmd.StringFlag("name", "the name you want for your remote server", &name)
nameFlag.FlagShortCut("name", "n")
remoteAddCmd.FlagRequired("name")
hostFlag := remoteAddCmd.StringFlag("host", "the hostname or IP Address of the remote", &host)
hostFlag.FlagShortCut("host", "h")
remoteAddCmd.FlagRequired("host")
portFlag := remoteAddCmd.IntFlag("port", "the port the remote server is listening on", &port)
portFlag.FlagShortCut("port", "p")
remoteAddCmd.FlagRequired("port")
defaultFlag := remoteAddCmd.BoolFlag("default", "is used, the repo is set as default. (if first remote automatically set as default)", &defaultRemote)
defaultFlag.FlagShortCut("default", "d")
remoteAddCmd.Action(func() error {
isRepo := validateRepo()
if !isRepo {
fmt.Println("no valid repo found.. please run 'init' to setup a repo first")
os.Exit(0)
}
if name == "" || host == "" || port == 0 || port == 1 || port > 65535 {
fmt.Println("incorrect input found, exiting, ensure you entered a valid port")
os.Exit(0)
}
newRemotes, err := clientcmd.AddRemote(name, host, port, defaultRemote, conf.Remotes)
conf.Remotes = newRemotes //Overwriting the old Remote list with new list
if err != nil {
return fmt.Errorf("error adding remote: %s", err)
}
return nil
})
}
func lockCommands(cli clir.Cli, conf *clientconfig.Gvcconfig) {
//All the lock commands and subcommands
//The lock subcommand
lockCmd := cli.NewSubCommand("lock", "locks file(s)/folder(s) (recursively for folder) to repo")
lockCmd.LongDescription("You can lock all: all, a -file (-f): file.txt, or a -folder (-fd): folder, or a -wildcard (-wc): *.txt")
//File/Folder/Wildcard Ignoring
var file string
var folder string
var wildcard string
fileFlag := lockCmd.StringFlag("file", "adds a file to lock to the config", &file)
fileFlag.FlagShortCut("file", "f")
folderFlag := lockCmd.StringFlag("folder", "tracks all contents of a folder to lock", &folder)
folderFlag.FlagShortCut("folder", "fd")
wildCardFlag := lockCmd.StringFlag("wildcard", "treats the input as a wildcard and locks all files that match the wildcard", &wildcard)
wildCardFlag.FlagShortCut("wildcard", "wc")
lockCmd.Action(func() error {
isRepo := validateRepo()
if !isRepo {
fmt.Println("no valid repo found.. please run 'init' to setup a repo first")
os.Exit(0)
}
if len(lockCmd.OtherArgs()) > 0 {
lockCmd.PrintHelp()
return fmt.Errorf("incorrect input detected, please fix and retry")
}
if file != "" { // if the file flag was used it won't be empty
//fmt.Println("Ignoring file: ", file)
err := clientcmd.LockFiles(file, "file", conf)
if err != nil {
return err
}
return nil
}
if folder != "" { // if the folder flag was used it won't be empty
fmt.Println("Ignoring contents of folder: ", folder)
err := clientcmd.LockFiles(folder, "folder", conf)
if err != nil {
return err
}
return nil
}
if wildcard != "" { // if the wildcard flag was used it won't be empty
fmt.Println("Ignoring files with wildcard filter: ", wildcard)
err := clientcmd.LockFiles(wildcard, "wildcard", conf)
if err != nil {
return err
}
return nil
}
return nil
})
// Adding the remove lock command (remove from the lock list)
removeLockCmd(lockCmd, conf)
}
// removeLockCmd removes files/folders/wildcard from the ignore list
func removeLockCmd(ignoreCmd *clir.Command, conf *clientconfig.Gvcconfig) {
RemoveLockCmd := ignoreCmd.NewSubCommand("remove", "remove from ignores file(s)/folder(s) (recursively for folder) to repo")
RemoveLockCmd.LongDescription("You can remove from ignore all: all, a -file (-f): file.txt, or a -folder (-fd): folder, or a -wildcard (-wc): *.txt")
//File/Folder/Wildcard Ignoring
var file string
var folder string
var wildcard string
fileFlag := RemoveLockCmd.StringFlag("file", "removes ignored file from config", &file)
fileFlag.FlagShortCut("file", "f")
folderFlag := RemoveLockCmd.StringFlag("folder", "removes ignored folder", &folder)
folderFlag.FlagShortCut("folder", "fd")
wildCardFlag := RemoveLockCmd.StringFlag("wildcard", "removes wildcard from ignores", &wildcard)
wildCardFlag.FlagShortCut("wildcard", "wc")
RemoveLockCmd.Action(func() error {
isRepo := validateRepo()
if !isRepo {
fmt.Println("no valid repo found.. please run 'init' to setup a repo first")
os.Exit(0)
}
if len(RemoveLockCmd.OtherArgs()) > 0 {
RemoveLockCmd.PrintHelp()
return fmt.Errorf("incorrect input detected, please fix and retry")
}
if file != "" { // if the file flag was used it won't be empty
//fmt.Println("Ignoring file: ", file)
err := clientcmd.RemoveLockFiles(file, "file", conf)
if err != nil {
return err
}
return nil
}
if folder != "" { // if the folder flag was used it won't be empty
fmt.Println("Ignoring contents of folder: ", folder)
err := clientcmd.RemoveLockFiles(folder, "folder", conf)
if err != nil {
return err
}
return nil
}
if wildcard != "" { // if the wildcard flag was used it won't be empty
fmt.Println("Ignoring files with wildcard filter: ", wildcard)
err := clientcmd.RemoveLockFiles(wildcard, "wildcard", conf)
if err != nil {
return err
}
return nil
}
return nil
})
}