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

@@ -9,7 +9,7 @@ import (
)
//AddFiles adds files to the repo, inputType specifies file, folder, wildcard or all
func AddFiles(input string, inputType string, ignore clientconfig.Ignore) error {
func AddFiles(input string, inputType string, ignore clientconfig.FileTypes) error {
err := validateFileType(input, inputType) // Making sure that if the file flag was used a folder was not supplied and vice versa
if err != nil {
return err
@@ -25,7 +25,7 @@ func AddFiles(input string, inputType string, ignore clientconfig.Ignore) error
if err != nil {
return fmt.Errorf("unable to add file %s", err)
}
err = checkIgnores(input, "file", ignore)
err = checkFileTypes(input, "file", ignore)
if err != nil {
return fmt.Errorf("unable to add file as it (or ext) is on the ignores list %s", input)
}
@@ -49,9 +49,9 @@ func AddFiles(input string, inputType string, ignore clientconfig.Ignore) error
return fmt.Errorf("failure accessing path %s", err)
}
if info.IsDir() {
err = checkIgnores(currentFile, "folder", ignore)
err = checkFileTypes(currentFile, "folder", ignore)
} else {
err = checkIgnores(currentFile, "file", ignore)
err = checkFileTypes(currentFile, "file", ignore)
}
if err != nil {
fmt.Printf("Not adding file %s as it is on the ingores list \n", currentFile)
@@ -72,7 +72,7 @@ func AddFiles(input string, inputType string, ignore clientconfig.Ignore) error
} else {
wildcard = input
}
err := checkIgnores(wildcard, "wildcard", ignore)
err := checkFileTypes(wildcard, "wildcard", ignore)
if err != nil {
return err
}
@@ -82,9 +82,9 @@ func AddFiles(input string, inputType string, ignore clientconfig.Ignore) error
return fmt.Errorf("failure accessing path %s", err)
}
if info.IsDir() {
err = checkIgnores(currentFile, "folder", ignore)
err = checkFileTypes(currentFile, "folder", ignore)
} else {
err = checkIgnores(currentFile, "file", ignore)
err = checkFileTypes(currentFile, "file", ignore)
}
if err != nil {
fmt.Printf("Not adding file %s as it is on the ingores list \n", currentFile)
@@ -108,9 +108,9 @@ func AddFiles(input string, inputType string, ignore clientconfig.Ignore) error
return fmt.Errorf("failure accessing path %s", err)
}
if info.IsDir() {
err = checkIgnores(currentFile, "folder", ignore)
err = checkFileTypes(currentFile, "folder", ignore)
} else {
err = checkIgnores(currentFile, "file", ignore)
err = checkFileTypes(currentFile, "file", ignore)
}
if err != nil {
fmt.Printf("Not adding file %s as it is on the ingores list \n", currentFile)
@@ -145,48 +145,3 @@ func checkRemotesSlice(name, host string, port int, remotes []clientconfig.Remot
}
return nil
}
// AddRemote adds a remote to the config file
func AddRemote(name string, host string, port int, defaultRemote bool, remotes []clientconfig.Remote) (newRemotes []clientconfig.Remote, err error) {
if len(remotes) == 0 { //first remote no need to check for duplicates and will set this remote as default
newRemote := clientconfig.Remote{
Name: name,
Host: host,
Port: port,
Default: true,
}
remotes = append(remotes, newRemote)
fmt.Printf("Remote added: Name: %s Host: %s, Port: %d, Default: %t", name, host, port, defaultRemote)
return remotes, nil
}
err = checkRemotesSlice(name, host, port, remotes)
if err != nil {
return remotes, err
}
if defaultRemote { // If the new repo was flagged as default, find old default and remove it
for i, remote := range remotes {
if remote.Default {
remotes[i].Default = false
}
}
newRemote := clientconfig.Remote{
Name: name,
Host: host,
Port: port,
Default: true,
}
remotes = append(remotes, newRemote)
fmt.Printf("Remote added: Name: %s Host: %s, Port: %d, Default: %t", name, host, port, defaultRemote)
return remotes, nil
}
// If passes all checks and is not default, create it and add it
newRemote := clientconfig.Remote{
Name: name,
Host: host,
Port: port,
Default: false,
}
remotes = append(remotes, newRemote)
fmt.Printf("Remote added: Name: %s Host: %s, Port: %d, Default: %t", name, host, port, defaultRemote)
return remotes, nil
}

View File

@@ -34,7 +34,7 @@ func validateFileType(path string, inputType string) error {
return nil
}
func checkIgnores(input string, inputType string, ignores clientconfig.Ignore) error {
func checkFileTypes(input string, inputType string, ignores clientconfig.FileTypes) error {
switch inputType {
case "file":
fileExt := filepath.Ext(input) // TODO more sanity checking on ext

View File

@@ -15,7 +15,7 @@ func IgnoreFiles(input string, inputType string, conf *clientconfig.Gvcconfig) e
ignore := conf.Ignores
switch inputType { // TODO: add default case for generic error handling
case "file":
err := checkIgnores(input, "file", ignore)
err := checkFileTypes(input, "file", ignore)
if err != nil {
return fmt.Errorf("%s already ignored: %s", input, err)
}
@@ -23,7 +23,7 @@ func IgnoreFiles(input string, inputType string, conf *clientconfig.Gvcconfig) e
conf.Ignores.Files = append(conf.Ignores.Files, input)
return nil
case "folder":
err := checkIgnores(input, "folder", ignore)
err := checkFileTypes(input, "folder", ignore)
if err != nil {
return fmt.Errorf("%s is already ignored: %s", input, err)
}
@@ -37,7 +37,7 @@ func IgnoreFiles(input string, inputType string, conf *clientconfig.Gvcconfig) e
} else {
wildcard = input
}
err := checkIgnores(wildcard, "wildcard", ignore)
err := checkFileTypes(wildcard, "wildcard", ignore)
if err != nil {
return fmt.Errorf("%s is already ignored: %s", input, err)
}
@@ -57,7 +57,7 @@ func RemoveIgnoreFiles(input string, inputType string, conf *clientconfig.Gvccon
ignore := conf.Ignores
switch inputType { // TODO: add default case for generic error handling
case "file":
err := checkIgnores(input, "file", ignore)
err := checkFileTypes(input, "file", ignore)
if err != nil {
fmt.Println("Removing file from ignores: ", input)
for i, fileIgnore := range ignore.Files {
@@ -72,7 +72,7 @@ func RemoveIgnoreFiles(input string, inputType string, conf *clientconfig.Gvccon
fmt.Println("File not found in ingores, unable to remove: ", input)
return nil
case "folder":
err := checkIgnores(input, "folder", ignore)
err := checkFileTypes(input, "folder", ignore)
if err != nil {
for i, folderIgnore := range ignore.Folders {
if input == folderIgnore {
@@ -92,7 +92,7 @@ func RemoveIgnoreFiles(input string, inputType string, conf *clientconfig.Gvccon
} else {
wildcard = input
}
err := checkIgnores(wildcard, "wildcard", ignore)
err := checkFileTypes(wildcard, "wildcard", ignore)
if err != nil {
for i, wildcardIgnore := range ignore.Exts {
if input == wildcardIgnore {

110
client/clientcmd/lock.go Normal file
View File

@@ -0,0 +1,110 @@
package clientcmd
import (
"fmt"
clientconfig "github.com/deranjer/gvc/client/clientconfig"
)
//LockFiles locks file(s)/folder based on name/wildcard, etc
func LockFiles(input string, inputType string, conf *clientconfig.Gvcconfig) error {
err := validateFileType(input, inputType) // Making sure that if the file flag was used a folder was not supplied and vice versa
if err != nil {
return err
}
locked := conf.Locked
switch inputType { // TODO: add default case for generic error handling
case "file":
err := checkFileTypes(input, "file", locked)
if err != nil {
return fmt.Errorf("%s already locked: %s", input, err)
}
fmt.Println("Adding file to locked: ", input)
conf.Locked.Files = append(conf.Locked.Files, input)
return nil
case "folder":
err := checkFileTypes(input, "folder", locked)
if err != nil {
return fmt.Errorf("%s is already locked: %s", input, err)
}
fmt.Println("Adding folder to locked: ", input)
conf.Locked.Folders = append(conf.Locked.Folders, input)
return nil
case "wildcard":
var wildcard string
if input[:1] == "*" { // Removing the wildcard char since we don't store that or test with that char
wildcard = input[1:]
} else {
wildcard = input
}
err := checkFileTypes(wildcard, "wildcard", locked)
if err != nil {
return fmt.Errorf("%s is already locked: %s", input, err)
}
fmt.Println("Adding wildcard to locked: ", wildcard)
conf.Locked.Exts = append(conf.Locked.Exts, wildcard)
return nil
}
return fmt.Errorf("This... should not have happened, some kind of internal error on LockFiles function call, switch failure")
}
// RemoveLockFiles removes files/folders/wildcards from the locked list
func RemoveLockFiles(input string, inputType string, conf *clientconfig.Gvcconfig) error {
err := validateFileType(input, inputType) // Making sure that if the file flag was used a folder was not supplied and vice versa
if err != nil {
return err
}
locked := conf.Locked
switch inputType { // TODO: add default case for generic error handling
case "file":
err := checkFileTypes(input, "file", locked)
if err != nil {
fmt.Println("Removing file from locked: ", input)
for i, fileLock := range locked.Files {
if input == fileLock {
conf.Locked.Files[i] = conf.Locked.Files[len(conf.Locked.Files)-1] // Deleting the element
conf.Locked.Files = conf.Locked.Files[:len(conf.Locked.Files)-1] // redoing the slice
fmt.Println("Removing file from locked: ", input)
return nil
}
}
}
fmt.Println("File not found in ingores, unable to remove: ", input)
return nil
case "folder":
err := checkFileTypes(input, "folder", locked)
if err != nil {
for i, folderLock := range locked.Folders {
if input == folderLock {
conf.Locked.Folders[i] = conf.Locked.Folders[len(conf.Locked.Folders)-1]
conf.Locked.Folders = conf.Locked.Files[:len(conf.Locked.Folders)-1]
fmt.Println("Removing folder from locked: ", input)
return nil
}
}
}
fmt.Println("Folder not found in ingores, unable to remove: ", input)
return nil
case "wildcard":
var wildcard string
if input[:1] == "*" { // Removing the wildcard char since we don't store that or test with that char
wildcard = input[1:]
} else {
wildcard = input
}
err := checkFileTypes(wildcard, "wildcard", locked)
if err != nil {
for i, wildcardLock := range locked.Exts {
if input == wildcardLock {
conf.Locked.Exts[i] = conf.Locked.Exts[len(conf.Locked.Exts)-1]
conf.Locked.Exts = conf.Locked.Exts[:len(conf.Locked.Exts)-1]
fmt.Println("Removing wildcard from locked: ", wildcard)
return nil
}
}
}
fmt.Println("Wildcard not found in ingores, unable to remove: ", wildcard)
return nil
}
return fmt.Errorf("This... should not have happened, some kind of internal error on RemoveLockFiles function call, switch failure")
}

View File

@@ -0,0 +1,52 @@
package clientcmd
import (
"fmt"
clientconfig "github.com/deranjer/gvc/client/clientconfig"
)
// AddRemote adds a remote to the config file
func AddRemote(name string, host string, port int, defaultRemote bool, remotes []clientconfig.Remote) (newRemotes []clientconfig.Remote, err error) {
if len(remotes) == 0 { //first remote no need to check for duplicates and will set this remote as default
newRemote := clientconfig.Remote{
Name: name,
Host: host,
Port: port,
Default: true,
}
remotes = append(remotes, newRemote)
fmt.Printf("Remote added: Name: %s Host: %s, Port: %d, Default: %t", name, host, port, defaultRemote)
return remotes, nil
}
err = checkRemotesSlice(name, host, port, remotes)
if err != nil {
return remotes, err
}
if defaultRemote { // If the new repo was flagged as default, find old default and remove it
for i, remote := range remotes {
if remote.Default {
remotes[i].Default = false
}
}
newRemote := clientconfig.Remote{
Name: name,
Host: host,
Port: port,
Default: true,
}
remotes = append(remotes, newRemote)
fmt.Printf("Remote added: Name: %s Host: %s, Port: %d, Default: %t", name, host, port, defaultRemote)
return remotes, nil
}
// If passes all checks and is not default, create it and add it
newRemote := clientconfig.Remote{
Name: name,
Host: host,
Port: port,
Default: false,
}
remotes = append(remotes, newRemote)
fmt.Printf("Remote added: Name: %s Host: %s, Port: %d, Default: %t", name, host, port, defaultRemote)
return remotes, nil
}